diff options
| author | 2019-03-31 16:38:46 +0200 | |
|---|---|---|
| committer | 2019-03-31 16:38:46 +0200 | |
| commit | d413f67dd28738f4a6d8cf036e00714737f757b8 (patch) | |
| tree | 1509f631dc8814bcf85d907a292ddd6437a2efcd | |
| parent | 8dcdde6251ae4dfc690b1a014488df125c5e5cdc (diff) | |
| parent | 2a935516d850d63a215f9650b96ede102311f7ca (diff) | |
Merge pull request #2298 from FreshRSS/dev1.14.0
FreshRSS 1.14.0
216 files changed, 11697 insertions, 1803 deletions
diff --git a/.gitignore b/.gitignore index 8230b746c..62b1bcbdf 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,5 @@ constants.local.php *.save *.autosav *.autosave +*.sass-cache +sass.sh diff --git a/.travis.yml b/.travis.yml index 24e0bf36b..44bc59e3f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,6 @@ php: - '7.0' - '7.1' - '7.2' - - hhvm install: # newest version without https://github.com/squizlabs/PHP_CodeSniffer/pull/1404 diff --git a/CHANGELOG.md b/CHANGELOG.md index a9490f25e..f43d470a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,46 @@ # FreshRSS changelog +## 2019-03-31 FreshRSS 1.14.0 + +* Features + * *Filter actions* feature, to auto-mark-as-read based on a search query per feed [#2275](https://github.com/FreshRSS/FreshRSS/pull/2275) + * Improve account change when using the *unsafe automatic login* [#2288](https://github.com/FreshRSS/FreshRSS/issues/2288) +* UI + * New themes *Ansum* and *Mapco* [#2245](https://github.com/FreshRSS/FreshRSS/pull/2245) + * Rewrite jQuery and keyboard shortcut code as native JavaScript ES6 (except for graphs on the statistics pages) [#2234](https://github.com/FreshRSS/FreshRSS/pull/2234) + * Batch scroll-as-read for better client-side and server-side performance [#2199](https://github.com/FreshRSS/FreshRSS/pull/2199) + * Keyboard-shortcut navigation at end of feed or category continues to the next one [#2255](https://github.com/FreshRSS/FreshRSS/pull/2255) + * Changed jump behaviour after marking articles as read [#2206](https://github.com/FreshRSS/FreshRSS/issues/2206) + * More reactive auto-loading of articles [#2268](https://github.com/FreshRSS/FreshRSS/pull/2268) +* Deployment + * New default Docker image based on Ubuntu (~3 times faster, but ~2.5 times larger) [#2205](https://github.com/FreshRSS/FreshRSS/pull/2205) + * Using Ubuntu 18.10 with PHP 7.2.15 and Apache 2.4.34 + * Alpine version updated to Alpine 3.9 with PHP 7.2.14 and Apache 2.4.38 [#2238](https://github.com/FreshRSS/FreshRSS/pull/2238) +* Bug fixing + * Fix feed option for marking modified articles as unread [#2200](https://github.com/FreshRSS/FreshRSS/issues/2200) + * Fix API HTTP Authorization case-sensitivity issue introduced in FreshRSS 1.13.1 [#2233](https://github.com/FreshRSS/FreshRSS/issues/2233) + * Fix breaking warning in Fever API [#2239](https://github.com/FreshRSS/FreshRSS/issues/2239) + * Fix encoding problem in Fever API [#2241](https://github.com/FreshRSS/FreshRSS/issues/2241) + * Fix author semi-colon prefix in Fever API [#2281](https://github.com/FreshRSS/FreshRSS/issues/2281) + * Fix the reading of the environment variable `COPY_SYSLOG_TO_STDERR` [#2260](https://github.com/FreshRSS/FreshRSS/pull/2260) + * Session fix when form login + HTTP auth are used [#2286](https://github.com/FreshRSS/FreshRSS/pull/2286) + * Fix `cli/user-info.php` for accounts using a version of the database older than 1.12.0 [#2291](https://github.com/FreshRSS/FreshRSS/issues/2291) +* CLI + * Better validation of parameters [#2046](https://github.com/FreshRSS/FreshRSS/issues/2046) + * New option `--header` to `cli/user-info.php` [#2296](https://github.com/FreshRSS/FreshRSS/pull/2296) +* API + * Supported by [Readably](https://play.google.com/store/apps/details?id=com.isaiasmatewos.readably) (client for Android using Fever API) +* I18n + * Improved Korean [#2242](https://github.com/FreshRSS/FreshRSS/pull/2242) + * Improve Occitan [#2253](https://github.com/FreshRSS/FreshRSS/pull/2253) +* Security + * Reworked the CSRF token interaction with the session in some edge cases [#2290](https://github.com/FreshRSS/FreshRSS/pull/2290) + * Remove deprecated CSP `child-src` instruction (was already replaced by `frame-src`) [#2250](https://github.com/FreshRSS/FreshRSS/pull/2250) + * Ensure entry IDs are unique and cannot be set by feeds [#2273](https://github.com/FreshRSS/FreshRSS/issues/2273) +* Misc. + * Remove HHMV from Travis continuous integration [#2249](https://github.com/FreshRSS/FreshRSS/pull/2249) + + ## 2019-01-26 FreshRSS 1.13.1 * Features diff --git a/CREDITS.md b/CREDITS.md index 83bb97a25..cc3cc57a4 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -13,6 +13,7 @@ People are sorted by name so please keep this order. * [Amaury Carrade](https://github.com/AmauryCarrade): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=AmauryCarrade), [Web](https://amaury.carrade.eu/) * [Anton Smirnov](https://github.com/sandfoxme): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:sandfoxme), [Web](http://sandfox.me/) * [ASMfreaK](https://github.com/ASMfreaK): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=ASMfreaK) +* [Benjamin Bouvier](https://github.com/bnjbvr): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:bnjbvr), [Web](https://benj.me/) * [chemical1979](https://github.com/chemical1979): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=chemical1979) * [Craig Andrews](https://github.com/candrews): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:candrews), [Web](http://candrews.integralblue.com/) * [Crupuk](https://github.com/Crupuk): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Crupuk) @@ -64,6 +65,7 @@ People are sorted by name so please keep this order. * [Thomas Citharel](https://github.com/tcitworld): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:tomgue), [Web](https://www.tcit.fr/) * [thomas-gt](https://github.com/thomas-gt): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:thomas-gt) * [tomgue](https://github.com/tomgue): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=tomgue) +* [Thomas Guesnon](https://github.com/patjennings): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:patjennings), [Web](http://www.thomasguesnon.fr/) * [Twilek-de](https://github.com/Twilek-de): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:Twilek-de) * [Uncovery](https://github.com/uncovery): [contributions](https://github.com/FreshRSS/FreshRSS/pulls?q=is:pr+author:uncovery) * [Wanabo](https://github.com/Wanabo): [contributions](https://github.com/FreshRSS/FreshRSS/commits?author=Wanabo) diff --git a/Docker/Dockerfile b/Docker/Dockerfile index a4be9fd84..56623b001 100644 --- a/Docker/Dockerfile +++ b/Docker/Dockerfile @@ -1,28 +1,31 @@ -FROM alpine:3.8 +FROM ubuntu:18.10 ENV TZ UTC +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone -RUN apk add --no-cache \ - apache2 php7-apache2 \ - php7 php7-curl php7-gmp php7-intl php7-mbstring php7-xml php7-zip \ - php7-ctype php7-dom php7-fileinfo php7-iconv php7-json php7-session php7-simplexml php7-xmlreader php7-zlib \ - php7-pdo_sqlite php7-pdo_mysql php7-pdo_pgsql +RUN apt update && \ + apt install --no-install-recommends -y \ + ca-certificates cron \ + apache2 libapache2-mod-php \ + php-curl php-intl php-mbstring php-xml php-zip \ + php-sqlite3 php-mysql php-pgsql && \ + rm -rf /var/lib/apt/lists/ -RUN mkdir -p /var/www/FreshRSS /run/apache2/ +RUN mkdir -p /var/www/FreshRSS /run/apache2/ /run/php/ WORKDIR /var/www/FreshRSS COPY . /var/www/FreshRSS -COPY ./Docker/*.Apache.conf /etc/apache2/conf.d/ - -RUN rm -f /etc/apache2/conf.d/languages.conf /etc/apache2/conf.d/info.conf \ - /etc/apache2/conf.d/status.conf /etc/apache2/conf.d/userdir.conf && \ - sed -r -i "/^\s*LoadModule .*mod_(alias|autoindex|negotiation|status).so$/s/^/#/" \ - /etc/apache2/httpd.conf && \ - sed -r -i "/^\s*#\s*LoadModule .*mod_(deflate|expires|headers|mime|setenvif).so$/s/^\s*#//" \ - /etc/apache2/httpd.conf && \ - sed -r -i "/^\s*(CustomLog|ErrorLog|Listen) /s/^/#/" \ - /etc/apache2/httpd.conf && \ - echo "17,37 * * * * su apache -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" >> \ +COPY ./Docker/*.Apache.conf /etc/apache2/sites-available/ + +RUN a2dismod -f alias autoindex negotiation status && \ + a2enmod deflate expires headers mime setenvif && \ + a2disconf '*' && \ + a2dissite '*' && \ + a2ensite 'FreshRSS*' + +RUN sed -r -i "/^\s*(CustomLog|ErrorLog|Listen) /s/^/#/" /etc/apache2/apache2.conf && \ + sed -r -i "/^\s*Listen /s/^/#/" /etc/apache2/ports.conf && \ + echo "17,37 su apache -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" >> \ /var/spool/cron/crontabs/root ENV COPY_SYSLOG_TO_STDERR On @@ -30,5 +33,6 @@ ENV CRON_MIN '' ENTRYPOINT ["./Docker/entrypoint.sh"] EXPOSE 80 -CMD ([ -z "$CRON_MIN" ] || crond -d 6) && \ - exec httpd -D FOREGROUND +CMD ([ -z "$CRON_MIN" ] || cron) && \ + . /etc/apache2/envvars && \ + exec apache2 -D FOREGROUND diff --git a/Docker/Dockerfile-Alpine b/Docker/Dockerfile-Alpine new file mode 100644 index 000000000..cd0f521a0 --- /dev/null +++ b/Docker/Dockerfile-Alpine @@ -0,0 +1,34 @@ +FROM alpine:3.9 + +ENV TZ UTC + +RUN apk add --no-cache \ + apache2 php7-apache2 \ + php7 php7-curl php7-gmp php7-intl php7-mbstring php7-xml php7-zip \ + php7-ctype php7-dom php7-fileinfo php7-iconv php7-json php7-session php7-simplexml php7-xmlreader php7-zlib \ + php7-pdo_sqlite php7-pdo_mysql php7-pdo_pgsql + +RUN mkdir -p /var/www/FreshRSS /run/apache2/ +WORKDIR /var/www/FreshRSS + +COPY . /var/www/FreshRSS +COPY ./Docker/*.Apache.conf /etc/apache2/conf.d/ + +RUN rm -f /etc/apache2/conf.d/languages.conf /etc/apache2/conf.d/info.conf \ + /etc/apache2/conf.d/status.conf /etc/apache2/conf.d/userdir.conf && \ + sed -r -i "/^\s*LoadModule .*mod_(alias|autoindex|negotiation|status).so$/s/^/#/" \ + /etc/apache2/httpd.conf && \ + sed -r -i "/^\s*#\s*LoadModule .*mod_(deflate|expires|headers|mime|setenvif).so$/s/^\s*#//" \ + /etc/apache2/httpd.conf && \ + sed -r -i "/^\s*(CustomLog|ErrorLog|Listen) /s/^/#/" \ + /etc/apache2/httpd.conf && \ + echo "17,37 * * * * su apache -s /bin/sh -c 'php /var/www/FreshRSS/app/actualize_script.php' 2>> /proc/1/fd/2 > /tmp/FreshRSS.log" >> \ + /var/spool/cron/crontabs/root + +ENV COPY_SYSLOG_TO_STDERR On +ENV CRON_MIN '' +ENTRYPOINT ["./Docker/entrypoint.sh"] + +EXPOSE 80 +CMD ([ -z "$CRON_MIN" ] || crond -d 6) && \ + exec httpd -D FOREGROUND diff --git a/Docker/FreshRSS.Apache.conf b/Docker/FreshRSS.Apache.conf index 80f6389d8..6621ff16f 100644 --- a/Docker/FreshRSS.Apache.conf +++ b/Docker/FreshRSS.Apache.conf @@ -4,6 +4,7 @@ DocumentRoot /var/www/FreshRSS/p/ CustomLog /dev/stdout combined ErrorLog /dev/stderr AllowEncodedSlashes On +ServerTokens OS <Directory /> AllowOverride None diff --git a/Docker/README.md b/Docker/README.md index ac745c49d..3cfb05c69 100644 --- a/Docker/README.md +++ b/Docker/README.md @@ -10,21 +10,6 @@ sh get-docker.sh ``` -## Optional: Build Docker image of FreshRSS -Optional, as a *less recent* online image can be automatically fetched during the next step (run), -but online images are not available for as many platforms (e.g. Raspberry Pi / ARM) as if you build yourself. - -```sh -# First time only -git clone https://github.com/FreshRSS/FreshRSS.git - -cd ./FreshRSS/ -git pull -sudo docker pull alpine:3.8 -sudo docker build --tag freshrss/freshrss -f Docker/Dockerfile . -``` - - ## Create an isolated network ```sh sudo docker network create freshrss-network @@ -36,10 +21,12 @@ Here is the recommended configuration using automatic [Let’s Encrypt](https:// ```sh sudo docker volume create traefik-letsencrypt +sudo docker volume create traefik-tmp # Just change your e-mail address in the command below: sudo docker run -d --restart unless-stopped --log-opt max-size=10m \ -v traefik-letsencrypt:/etc/traefik/acme \ + -v traefik-tmp:/tmp \ -v /var/run/docker.sock:/var/run/docker.sock:ro \ --net freshrss-network \ -p 80:80 \ @@ -59,6 +46,8 @@ See [more information about Docker and Let’s Encrypt in Træfik](https://docs. Example using the built-in refresh cron job (see further below for alternatives). You must first chose a domain (DNS) or sub-domain, e.g. `freshrss.example.net`. +> **N.B.:** For platforms other than x64 (Intel, AMD), such as ARM (e.g. Raspberry Pi), see the section *Build Docker image* further below. + ```sh sudo docker volume create freshrss-data @@ -121,15 +110,6 @@ Browse to your server https://freshrss.example.net/ to complete the installation or use the command line described below. -## Command line - -```sh -sudo docker exec --user apache -it freshrss php ./cli/list-users.php -``` - -See the [CLI documentation](../cli/) for all the other commands. - - ## How to update ```sh @@ -145,6 +125,42 @@ sudo docker rm freshrss_old ``` +## [Docker tags](https://hub.docker.com/r/freshrss/freshrss/tags) +The tags correspond to FreshRSS branches and versions: +* `:latest` (default) is the `master` branch, more stable +* `:dev` is the `dev` branch, rolling release +* `:x.y.z` are specific FreshRSS releases + +### Linux: Ubuntu vs. Alpine +Our default image is based on [Ubuntu](https://www.ubuntu.com/server). We offer an alternative based on [Alpine](https://alpinelinux.org/) (with the `-alpine` tag suffix). +In [our tests](https://github.com/FreshRSS/FreshRSS/pull/2205), Ubuntu is ~3 times faster, +while Alpine is ~2.5 times [smaller on disk](https://hub.docker.com/r/freshrss/freshrss/tags) (and much faster to build). + + +## Optional: Build Docker image of FreshRSS +Building your own Docker image is optional because online images can be fetched automatically. +Note that prebuilt images are less recent and only available for x64 (Intel, AMD) platforms. + +```sh +# First time only +git clone https://github.com/FreshRSS/FreshRSS.git + +cd ./FreshRSS/ +git pull +sudo docker pull ubuntu:18.10 +sudo docker build --tag freshrss/freshrss -f Docker/Dockerfile . +``` + + +## Command line + +```sh +sudo docker exec --user apache -it freshrss php ./cli/list-users.php +``` + +See the [CLI documentation](../cli/) for all the other commands. + + ## Debugging ```sh @@ -289,6 +305,10 @@ server { proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; proxy_read_timeout 90; + + # Forward the Authorization header for the Google Reader API. + proxy_set_header Authorization $http_authorization; + proxy_pass_header Authorization; } } ``` diff --git a/README.fr.md b/README.fr.md index e40ab8296..157979f93 100644 --- a/README.fr.md +++ b/README.fr.md @@ -196,6 +196,8 @@ Voir notre [documentation sur l’API Fever](https://freshrss.github.io/FreshRSS Tout client supportant une API de type Fever ; Sélection : +* Android + * [Readably](https://play.google.com/store/apps/details?id=com.isaiasmatewos.readably) (Propriétaire) * iOS * [Fiery Feeds](https://itunes.apple.com/app/fiery-feeds-rss-reader/id1158763303) (Propriétaire) * [Unread](https://itunes.apple.com/app/unread-rss-reader/id1252376153) (Propriétaire) @@ -210,7 +212,6 @@ Tout client supportant une API de type Fever ; Sélection : * [php-http-304](https://alexandre.alapetite.fr/doc-alex/php-http-304/) * [jQuery](https://jquery.com/) * [lib_opml](https://github.com/marienfressinaud/lib_opml) -* [keyboard_shortcuts](http://www.openjs.com/scripts/events/keyboard_shortcuts/) * [flotr2](http://www.humblesoftware.com/flotr2) ## Uniquement pour certaines options ou configurations @@ -196,6 +196,8 @@ See our [Fever API documentation](https://freshrss.github.io/FreshRSS/en/users/0 Supported clients are: +* Android + * [Readably](https://play.google.com/store/apps/details?id=com.isaiasmatewos.readably) (Closed source) * iOS * [Fiery Feeds](https://itunes.apple.com/app/fiery-feeds-rss-reader/id1158763303) (Closed source) * [Unread](https://itunes.apple.com/app/unread-rss-reader/id1252376153) (Closed source) @@ -210,7 +212,6 @@ Supported clients are: * [php-http-304](https://alexandre.alapetite.fr/doc-alex/php-http-304/) * [jQuery](https://jquery.com/) * [lib_opml](https://github.com/marienfressinaud/lib_opml) -* [keyboard_shortcuts](http://www.openjs.com/scripts/events/keyboard_shortcuts/) * [flotr2](http://www.humblesoftware.com/flotr2) ## Only for some options or configurations diff --git a/app/Controllers/authController.php b/app/Controllers/authController.php index 3b2d78b19..ca44b1a96 100644 --- a/app/Controllers/authController.php +++ b/app/Controllers/authController.php @@ -69,7 +69,7 @@ class FreshRSS_auth_Controller extends Minz_ActionController { * the user is already connected. */ public function loginAction() { - if (FreshRSS_Auth::hasAccess()) { + if (FreshRSS_Auth::hasAccess() && Minz_Request::param('u', '') == '') { Minz_Request::forward(array('c' => 'index', 'a' => 'index'), true); } @@ -109,8 +109,7 @@ class FreshRSS_auth_Controller extends Minz_ActionController { public function formLoginAction() { invalidateHttpCache(); - $file_mtime = @filemtime(PUBLIC_PATH . '/scripts/bcrypt.min.js'); - Minz_View::appendScript(Minz_Url::display('/scripts/bcrypt.min.js?' . $file_mtime)); + Minz_View::appendScript(Minz_Url::display('/scripts/bcrypt.min.js?' . @filemtime(PUBLIC_PATH . '/scripts/bcrypt.min.js'))); $conf = Minz_Configuration::get('system'); $limits = $conf->limits; @@ -134,6 +133,7 @@ class FreshRSS_auth_Controller extends Minz_ActionController { // Set session parameter to give access to the user. Minz_Session::_param('currentUser', $username); Minz_Session::_param('passwordHash', $conf->passwordHash); + Minz_Session::_param('csrf'); FreshRSS_Auth::giveAccess(); // Set cookie parameter if nedded. @@ -162,6 +162,8 @@ class FreshRSS_auth_Controller extends Minz_ActionController { return; } + FreshRSS_FormAuth::deleteCookie(); + $conf = get_user_configuration($username); if ($conf == null) { return; @@ -177,6 +179,7 @@ class FreshRSS_auth_Controller extends Minz_ActionController { if ($ok) { Minz_Session::_param('currentUser', $username); Minz_Session::_param('passwordHash', $s); + Minz_Session::_param('csrf'); FreshRSS_Auth::giveAccess(); Minz_Request::good(_t('feedback.auth.login.success'), diff --git a/app/Controllers/entryController.php b/app/Controllers/entryController.php index fc0af0639..9c5ee2616 100755 --- a/app/Controllers/entryController.php +++ b/app/Controllers/entryController.php @@ -97,14 +97,15 @@ class FreshRSS_entry_Controller extends Minz_ActionController { } } } else { - $entryDAO->markRead($id, $is_read); - + $ids = is_array($id) ? $id : array($id); + $entryDAO->markRead($ids, $is_read); $tagDAO = FreshRSS_Factory::createTagDao(); - foreach ($tagDAO->getTagsForEntry($id) as $tag) { - if (!empty($tag['checked'])) { - $this->view->tags[] = $tag['id']; - } + $tagsForEntries = $tagDAO->getTagsForEntries($ids); + $tags = array(); + foreach ($tagsForEntries as $line) { + $tags['t_' . $line['id_tag']][] = $line['id_entry']; } + $this->view->tags = $tags; } if (!$this->ajax) { diff --git a/app/Controllers/feedController.php b/app/Controllers/feedController.php index 74c9eacfa..0aed9b0a1 100755 --- a/app/Controllers/feedController.php +++ b/app/Controllers/feedController.php @@ -289,7 +289,8 @@ class FreshRSS_feed_Controller extends Minz_ActionController { } $ttl = $feed->ttl(); if ((!$simplePiePush) && (!$feed_id) && - ($feed->lastUpdate() + 10 >= time() - ($ttl == FreshRSS_Feed::TTL_DEFAULT ? FreshRSS_Context::$user_conf->ttl_default : $ttl))) { + ($feed->lastUpdate() + 10 >= time() - ( + $ttl == FreshRSS_Feed::TTL_DEFAULT ? FreshRSS_Context::$user_conf->ttl_default : $ttl))) { //Too early to refresh from source, but check whether the feed was updated by another user $mtime = $feed->cacheModifiedTime(); if ($feed->lastUpdate() + 10 >= $mtime) { @@ -347,8 +348,8 @@ class FreshRSS_feed_Controller extends Minz_ActionController { $entry_date = $entry->date(true); if (isset($existingHashForGuids[$entry->guid()])) { $existingHash = $existingHashForGuids[$entry->guid()]; - if (strcasecmp($existingHash, $entry->hash()) === 0 || trim($existingHash, '0') == '') { - //This entry already exists and is unchanged. TODO: Remove the test with the zero'ed hash in FreshRSS v1.3 + if (strcasecmp($existingHash, $entry->hash()) === 0) { + //This entry already exists and is unchanged. $oldGuids[] = $entry->guid(); } else { //This entry already exists but has been updated //Minz_Log::debug('Entry with GUID `' . $entry->guid() . '` updated in feed ' . $feed->url(false) . @@ -357,7 +358,7 @@ class FreshRSS_feed_Controller extends Minz_ActionController { $feed->attributes('mark_updated_article_unread') ) : FreshRSS_Context::$user_conf->mark_updated_article_unread; $needFeedCacheRefresh = $mark_updated_article_unread; - $entry->_isRead(FreshRSS_Context::$user_conf->mark_updated_article_unread ? false : null); //Change is_read according to policy. + $entry->_isRead($mark_updated_article_unread ? false : null); //Change is_read according to policy. $entry = Minz_ExtensionManager::callHook('entry_before_insert', $entry); if ($entry === null) { @@ -374,20 +375,13 @@ class FreshRSS_feed_Controller extends Minz_ActionController { // This entry should not be added considering configuration and date. $oldGuids[] = $entry->guid(); } else { - $read_upon_reception = $feed->attributes('read_upon_reception') !== null ? ( - $feed->attributes('read_upon_reception') - ) : FreshRSS_Context::$user_conf->mark_when['reception']; - if ($isNewFeed) { - $id = min(time(), $entry_date) . uSecString(); - $entry->_isRead($read_upon_reception); - } elseif ($entry_date < $date_min) { - $id = min(time(), $entry_date) . uSecString(); + $id = uTimeString(); + $entry->_id($id); + if ($entry_date < $date_min) { $entry->_isRead(true); //Old article that was not in database. Probably an error, so mark as read - } else { - $id = uTimeString(); - $entry->_isRead($read_upon_reception); } - $entry->_id($id); + + $entry->applyFilterActions(); $entry = Minz_ExtensionManager::callHook('entry_before_insert', $entry); if ($entry === null) { @@ -396,7 +390,8 @@ class FreshRSS_feed_Controller extends Minz_ActionController { } if ($pubSubHubbubEnabled && !$simplePiePush) { //We use push, but have discovered an article by pull! - $text = 'An article was discovered by pull although we use PubSubHubbub!: Feed ' . $url . ' GUID ' . $entry->guid(); + $text = 'An article was discovered by pull although we use PubSubHubbub!: Feed ' . $url . + ' GUID ' . $entry->guid(); Minz_Log::warning($text, PSHB_LOG); Minz_Log::warning($text); $pubSubHubbubEnabled = false; @@ -420,9 +415,7 @@ class FreshRSS_feed_Controller extends Minz_ActionController { $entryDAO->beginTransaction(); } - $nb = $entryDAO->cleanOldEntries($feed->id(), - $date_min, - max($feed_history, count($entries) + 10)); + $nb = $entryDAO->cleanOldEntries($feed->id(), $date_min, max($feed_history, count($entries) + 10)); if ($nb > 0) { $needFeedCacheRefresh = true; Minz_Log::debug($nb . ' old entries cleaned in feed [' . $feed->url(false) . ']'); @@ -602,11 +595,9 @@ class FreshRSS_feed_Controller extends Minz_ActionController { if (self::moveFeed($feed_id, $cat_id)) { // TODO: return something useful // Log a notice to prevent "Empty IF statement" warning in PHP_CodeSniffer - Minz_Log::notice('Moved feed `' . $feed_id . '` ' . - 'in the category `' . $cat_id . '`');; + Minz_Log::notice('Moved feed `' . $feed_id . '` in the category `' . $cat_id . '`'); } else { - Minz_Log::warning('Cannot move feed `' . $feed_id . '` ' . - 'in the category `' . $cat_id . '`'); + Minz_Log::warning('Cannot move feed `' . $feed_id . '` in the category `' . $cat_id . '`'); Minz_Error::error(404); } } diff --git a/app/Controllers/importExportController.php b/app/Controllers/importExportController.php index 80b9868ec..1d7176929 100644 --- a/app/Controllers/importExportController.php +++ b/app/Controllers/importExportController.php @@ -585,7 +585,7 @@ class FreshRSS_importExport_Controller extends Minz_ActionController { $feed_id, $item['id'], $item['title'], $author, $content, $url, $published, $is_read, $is_starred ); - $entry->_id(min(time(), $entry->date(true)) . uSecString()); + $entry->_id(uTimeString()); $entry->_tags($tags); if (isset($newGuids[$entry->guid()])) { diff --git a/app/Controllers/indexController.php b/app/Controllers/indexController.php index fa914ef87..824d65815 100755 --- a/app/Controllers/indexController.php +++ b/app/Controllers/indexController.php @@ -104,6 +104,7 @@ class FreshRSS_index_Controller extends Minz_ActionController { return; } + Minz_View::appendScript(Minz_Url::display('/scripts/extra.js?' . @filemtime(PUBLIC_PATH . '/scripts/extra.js'))); Minz_View::appendScript(Minz_Url::display('/scripts/global_view.js?' . @filemtime(PUBLIC_PATH . '/scripts/global_view.js'))); try { diff --git a/app/Controllers/statsController.php b/app/Controllers/statsController.php index acfacb890..1d0d9c124 100644 --- a/app/Controllers/statsController.php +++ b/app/Controllers/statsController.php @@ -52,6 +52,7 @@ class FreshRSS_stats_Controller extends Minz_ActionController { */ public function indexAction() { $statsDAO = FreshRSS_Factory::createStatsDAO(); + Minz_View::prependScript(Minz_Url::display('/scripts/jquery.min.js?' . @filemtime(PUBLIC_PATH . '/scripts/jquery.min.js'))); Minz_View::appendScript(Minz_Url::display('/scripts/flotr2.min.js?' . @filemtime(PUBLIC_PATH . '/scripts/flotr2.min.js'))); $this->view->repartition = $statsDAO->calculateEntryRepartition(); $entryCount = $statsDAO->calculateEntryCount(); diff --git a/app/Controllers/subscriptionController.php b/app/Controllers/subscriptionController.php index 46503fc19..9cf41ed0b 100644 --- a/app/Controllers/subscriptionController.php +++ b/app/Controllers/subscriptionController.php @@ -29,8 +29,7 @@ class FreshRSS_subscription_Controller extends Minz_ActionController { * It displays categories and associated feeds. */ public function indexAction() { - Minz_View::appendScript(Minz_Url::display('/scripts/category.js?' . - @filemtime(PUBLIC_PATH . '/scripts/category.js'))); + Minz_View::appendScript(Minz_Url::display('/scripts/category.js?' . @filemtime(PUBLIC_PATH . '/scripts/category.js'))); Minz_View::prependTitle(_t('sub.title') . ' · '); $this->view->onlyFeedsWithError = Minz_Request::paramTernary('error'); @@ -111,6 +110,8 @@ class FreshRSS_subscription_Controller extends Minz_ActionController { $feed->_attributes('timeout', null); } + $feed->_filtersAction('read', preg_split('/[\n\r]+/', Minz_Request::param('filteractions_read', ''))); + $values = array( 'name' => Minz_Request::param('name', ''), 'description' => sanitizeHTML(Minz_Request::param('description', '', true)), @@ -122,7 +123,7 @@ class FreshRSS_subscription_Controller extends Minz_ActionController { 'httpAuth' => $httpAuth, 'keep_history' => intval(Minz_Request::param('keep_history', FreshRSS_Feed::KEEP_HISTORY_DEFAULT)), 'ttl' => $ttl * ($mute ? -1 : 1), - 'attributes' => $feed->attributes() + 'attributes' => $feed->attributes(), ); invalidateHttpCache(); diff --git a/app/Controllers/userController.php b/app/Controllers/userController.php index 2338c8b2a..be3787561 100644 --- a/app/Controllers/userController.php +++ b/app/Controllers/userController.php @@ -128,9 +128,7 @@ class FreshRSS_user_Controller extends Minz_ActionController { public function profileAction() { Minz_View::prependTitle(_t('conf.profile.title') . ' · '); - Minz_View::appendScript(Minz_Url::display( - '/scripts/bcrypt.min.js?' . @filemtime(PUBLIC_PATH . '/scripts/bcrypt.min.js') - )); + Minz_View::appendScript(Minz_Url::display('/scripts/bcrypt.min.js?' . @filemtime(PUBLIC_PATH . '/scripts/bcrypt.min.js'))); if (Minz_Request::isPost()) { $passwordPlain = Minz_Request::param('newPasswordPlain', '', true); @@ -249,6 +247,7 @@ class FreshRSS_user_Controller extends Minz_ActionController { $user_conf = get_user_configuration($new_user_name); Minz_Session::_param('currentUser', $new_user_name); Minz_Session::_param('passwordHash', $user_conf->passwordHash); + Minz_Session::_param('csrf'); FreshRSS_Auth::giveAccess(); } diff --git a/app/FreshRSS.php b/app/FreshRSS.php index dec446a8e..ecf13e4cf 100644 --- a/app/FreshRSS.php +++ b/app/FreshRSS.php @@ -57,18 +57,26 @@ class FreshRSS extends Minz_FrontController { private static function initAuth() { FreshRSS_Auth::init(); - if (Minz_Request::isPost() && !(is_referer_from_same_domain() && FreshRSS_Auth::isCsrfOk())) { - // Basic protection against XSRF attacks - FreshRSS_Auth::removeAccess(); - $http_referer = empty($_SERVER['HTTP_REFERER']) ? '' : $_SERVER['HTTP_REFERER']; - Minz_Translate::init('en'); //TODO: Better choice of fallback language - Minz_Error::error( - 403, - array('error' => array( - _t('feedback.access.denied'), - ' [HTTP_REFERER=' . htmlspecialchars($http_referer, ENT_NOQUOTES, 'UTF-8') . ']' - )) - ); + if (Minz_Request::isPost()) { + if (!is_referer_from_same_domain()) { + // Basic protection against XSRF attacks + FreshRSS_Auth::removeAccess(); + $http_referer = empty($_SERVER['HTTP_REFERER']) ? '' : $_SERVER['HTTP_REFERER']; + Minz_Translate::init('en'); //TODO: Better choice of fallback language + Minz_Error::error(403, array('error' => array( + _t('feedback.access.denied'), + ' [HTTP_REFERER=' . htmlspecialchars($http_referer, ENT_NOQUOTES, 'UTF-8') . ']' + ))); + } + if ((!FreshRSS_Auth::isCsrfOk()) && + (Minz_Request::controllerName() !== 'auth' || Minz_Request::actionName() !== 'login')) { + // Token-based protection against XSRF attacks, except for the login form itself + Minz_Translate::init('en'); //TODO: Better choice of fallback language + Minz_Error::error(403, array('error' => array( + _t('feedback.access.denied'), + ' [CSRF]' + ))); + } } } @@ -94,9 +102,10 @@ class FreshRSS extends Minz_FrontController { } } //Use prepend to insert before extensions. Added in reverse order. + if (Minz_Request::controllerName() !== 'index') { + Minz_View::prependScript(Minz_Url::display('/scripts/extra.js?' . @filemtime(PUBLIC_PATH . '/scripts/extra.js'))); + } Minz_View::prependScript(Minz_Url::display('/scripts/main.js?' . @filemtime(PUBLIC_PATH . '/scripts/main.js'))); - Minz_View::prependScript(Minz_Url::display('/scripts/shortcut.js?' . @filemtime(PUBLIC_PATH . '/scripts/shortcut.js'))); - Minz_View::prependScript(Minz_Url::display('/scripts/jquery.min.js?' . @filemtime(PUBLIC_PATH . '/scripts/jquery.min.js'))); } private static function loadNotifications() { @@ -116,7 +125,7 @@ class FreshRSS extends Minz_FrontController { } }, FreshRSS_Context::$user_conf->sharing)); $connectSrc = count($urlToAuthorize) ? sprintf("; connect-src 'self' %s", implode(' ', $urlToAuthorize)) : ''; - header(sprintf("Content-Security-Policy: default-src 'self'; child-src *; frame-src *; img-src * data:; media-src *%s", $connectSrc)); + header(sprintf("Content-Security-Policy: default-src 'self'; frame-src *; img-src * data:; media-src *%s", $connectSrc)); break; case 'stats': header("Content-Security-Policy: default-src 'self'; style-src 'self' 'unsafe-inline'"); diff --git a/app/Models/Auth.php b/app/Models/Auth.php index 513a9cb2f..6d079a01f 100644 --- a/app/Models/Auth.php +++ b/app/Models/Auth.php @@ -13,7 +13,7 @@ class FreshRSS_Auth { * This method initializes authentication system. */ public static function init() { - if (Minz_Session::param('REMOTE_USER', '') !== httpAuthUser()) { + if (isset($_SESSION['REMOTE_USER']) && $_SESSION['REMOTE_USER'] !== httpAuthUser()) { //HTTP REMOTE_USER has changed self::removeAccess(); } @@ -24,6 +24,7 @@ class FreshRSS_Auth { $conf = Minz_Configuration::get('system'); $current_user = $conf->default_user; Minz_Session::_param('currentUser', $current_user); + Minz_Session::_param('csrf'); } if (self::$login_ok) { @@ -56,6 +57,7 @@ class FreshRSS_Auth { $current_user = trim($credentials[0]); Minz_Session::_param('currentUser', $current_user); Minz_Session::_param('passwordHash', trim($credentials[1])); + Minz_Session::_param('csrf'); } return $current_user != ''; case 'http_auth': @@ -63,6 +65,7 @@ class FreshRSS_Auth { $login_ok = $current_user != '' && FreshRSS_UserDAO::exists($current_user); if ($login_ok) { Minz_Session::_param('currentUser', $current_user); + Minz_Session::_param('csrf'); } return $login_ok; case 'none': @@ -196,13 +199,10 @@ class FreshRSS_Auth { } public static function isCsrfOk($token = null) { $csrf = Minz_Session::param('csrf'); - if ($csrf == '') { - return true; //Not logged in yet - } if ($token === null) { $token = Minz_Request::fetchPOST('_csrf'); } - return $token === $csrf; + return $token != '' && $token === $csrf; } } diff --git a/app/Models/Context.php b/app/Models/Context.php index 60ec6ff77..95dc47c8c 100644 --- a/app/Models/Context.php +++ b/app/Models/Context.php @@ -252,37 +252,29 @@ class FreshRSS_Context { $found_current_get = false; switch ($get[0]) { case 'f': - // We search the next feed with at least one unread article in - // same category as the currend feed. + // We search the next unread feed with the following priorities: next in same category, or previous in same category, or next, or previous. foreach (self::$categories as $cat) { - if ($cat->id() != self::$current_get['category']) { - // We look into the category of the current feed! - continue; - } - + $sameCat = false; foreach ($cat->feeds() as $feed) { - if ($feed->id() == self::$current_get['feed']) { - // Here is our current feed! Fine, the next one will - // be a potential candidate. + if ($found_current_get) { + if ($feed->nbNotRead() > 0) { + $another_unread_id = $feed->id(); + break 2; + } + } elseif ($feed->id() == self::$current_get['feed']) { $found_current_get = true; - continue; - } - - if ($feed->nbNotRead() > 0) { + } elseif ($feed->nbNotRead() > 0) { $another_unread_id = $feed->id(); - if ($found_current_get) { - // We have found our current feed and now we - // have an feed with unread articles. Leave the - // loop! - break; - } + $sameCat = true; } } - break; + if ($found_current_get && $sameCat) { + break; + } } - // If no feed have been found, next_get is the current category. - self::$next_get = empty($another_unread_id) ? 'c_' . self::$current_get['category'] : 'f_' . $another_unread_id; + // If there is no more unread feed, show main stream + self::$next_get = $another_unread_id == '' ? 'a' : 'f_' . $another_unread_id; break; case 'c': // We search the next category with at least one unread article. @@ -304,8 +296,8 @@ class FreshRSS_Context { } } - // No unread category? The main stream will be our destination! - self::$next_get = empty($another_unread_id) ? 'a' : 'c_' . $another_unread_id; + // If there is no more unread category, show main stream + self::$next_get = $another_unread_id == '' ? 'a' : 'c_' . $another_unread_id; break; } } diff --git a/app/Models/Entry.php b/app/Models/Entry.php index f2f3d08fe..3bb977283 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -185,6 +185,119 @@ class FreshRSS_Entry extends Minz_Model { $this->tags = $value; } + public function matches($booleanSearch) { + if (!$booleanSearch || count($booleanSearch->searches()) <= 0) { + return true; + } + foreach ($booleanSearch->searches() as $filter) { + $ok = true; + if ($ok && $filter->getMinPubdate()) { + $ok &= $this->date >= $filter->getMinPubdate(); + } + if ($ok && $filter->getMaxPubdate()) { + $ok &= $this->date <= $filter->getMaxPubdate(); + } + if ($ok && $filter->getMinDate()) { + $ok &= strnatcmp($this->id, $filter->getMinDate() . '000000') >= 0; + } + if ($ok && $filter->getMaxDate()) { + $ok &= strnatcmp($this->id, $filter->getMaxDate() . '000000') <= 0; + } + if ($ok && $filter->getInurl()) { + foreach ($filter->getInurl() as $url) { + $ok &= stripos($this->link, $url) !== false; + } + } + if ($ok && $filter->getNotInurl()) { + foreach ($filter->getNotInurl() as $url) { + $ok &= stripos($this->link, $url) === false; + } + } + if ($ok && $filter->getAuthor()) { + foreach ($filter->getAuthor() as $author) { + $ok &= stripos($this->authors, $author) !== false; + } + } + if ($ok && $filter->getNotAuthor()) { + foreach ($filter->getNotAuthor() as $author) { + $ok &= stripos($this->authors, $author) === false; + } + } + if ($ok && $filter->getIntitle()) { + foreach ($filter->getIntitle() as $title) { + $ok &= stripos($this->title, $title) !== false; + } + } + if ($ok && $filter->getNotIntitle()) { + foreach ($filter->getNotIntitle() as $title) { + $ok &= stripos($this->title, $title) === false; + } + } + if ($ok && $filter->getTags()) { + foreach ($filter->getTags() as $tag2) { + $found = false; + foreach ($this->tags as $tag1) { + if (strcasecmp($tag1, $tag2) === 0) { + $found = true; + } + } + $ok &= $found; + } + } + if ($ok && $filter->getNotTags()) { + foreach ($filter->getNotTags() as $tag2) { + $found = false; + foreach ($this->tags as $tag1) { + if (strcasecmp($tag1, $tag2) === 0) { + $found = true; + } + } + $ok &= !$found; + } + } + if ($ok && $filter->getSearch()) { + foreach ($filter->getSearch() as $needle) { + $ok &= (stripos($this->title, $needle) !== false || stripos($this->content, $needle) !== false); + } + } + if ($ok && $filter->getNotSearch()) { + foreach ($filter->getNotSearch() as $needle) { + $ok &= (stripos($this->title, $needle) === false && stripos($this->content, $needle) === false); + } + } + if ($ok) { + return true; + } + } + return false; + } + + public function applyFilterActions() { + if ($this->feed != null) { + if ($this->feed->attributes('read_upon_reception') || + ($this->feed->attributes('read_upon_reception') === null && FreshRSS_Context::$user_conf->mark_when['reception'])) { + $this->_isRead(true); + } + foreach ($this->feed->filterActions() as $filterAction) { + if ($this->matches($filterAction->booleanSearch())) { + foreach ($filterAction->actions() as $action => $params) { + switch ($action) { + case 'read': + $this->_isRead(true); + break; + case 'star': + $this->_is_favorite(true); + break; + case 'label': + //TODO: Implement more actions + break; + } + } + } + } + } + } + public function isDay($day, $today) { $date = $this->dateAdded(true); switch ($day) { diff --git a/app/Models/EntryDAO.php b/app/Models/EntryDAO.php index 08927196e..93d1183c9 100644 --- a/app/Models/EntryDAO.php +++ b/app/Models/EntryDAO.php @@ -383,7 +383,7 @@ class FreshRSS_EntryDAO extends Minz_ModelPdo implements FreshRSS_Searchable { */ public function markRead($ids, $is_read = true) { FreshRSS_UserDAO::touch(); - if (is_array($ids)) { //Many IDs at once (used by API) + if (is_array($ids)) { //Many IDs at once if (count($ids) < 6) { //Speed heuristics $affected = 0; foreach ($ids as $id) { @@ -1065,7 +1065,7 @@ SQL; $dao['date'], $dao['is_read'], $dao['is_favorite'], - $dao['tags'] + isset($dao['tags']) ? $dao['tags'] : '' ); if (isset($dao['id'])) { $entry->_id($dao['id']); diff --git a/app/Models/EntryDAOPGSQL.php b/app/Models/EntryDAOPGSQL.php index aef258b6f..e571e457f 100644 --- a/app/Models/EntryDAOPGSQL.php +++ b/app/Models/EntryDAOPGSQL.php @@ -37,7 +37,9 @@ BEGIN INSERT INTO `' . $this->prefix . 'entry` (id, guid, title, author, content, link, date, `lastSeen`, hash, is_read, is_favorite, id_feed, tags) (SELECT rank + row_number() OVER(ORDER BY date) AS id, guid, title, author, content, link, date, `lastSeen`, hash, is_read, is_favorite, id_feed, tags FROM `' . $this->prefix . 'entrytmp` AS etmp - WHERE NOT EXISTS (SELECT 1 FROM `' . $this->prefix . 'entry` AS ereal WHERE etmp.id_feed = ereal.id_feed AND etmp.guid = ereal.guid) + WHERE NOT EXISTS ( + SELECT 1 FROM `' . $this->prefix . 'entry` AS ereal + WHERE (etmp.id = ereal.id) OR (etmp.id_feed = ereal.id_feed AND etmp.guid = ereal.guid)) ORDER BY date); DELETE FROM `' . $this->prefix . 'entrytmp` WHERE id <= maxrank; END $$;'; diff --git a/app/Models/Feed.php b/app/Models/Feed.php index b21a8bbbe..89989236c 100644 --- a/app/Models/Feed.php +++ b/app/Models/Feed.php @@ -32,6 +32,7 @@ class FreshRSS_Feed extends Minz_Model { private $lockPath = ''; private $hubUrl = ''; private $selfUrl = ''; + private $filterActions = null; public function __construct($url, $validate = true) { if ($validate) { @@ -498,6 +499,109 @@ class FreshRSS_Feed extends Minz_Model { @unlink($this->lockPath); } + public function filterActions() { + if ($this->filterActions == null) { + $this->filterActions = array(); + $filters = $this->attributes('filters'); + if (is_array($filters)) { + foreach ($filters as $filter) { + $filterAction = FreshRSS_FilterAction::fromJSON($filter); + if ($filterAction != null) { + $this->filterActions[] = $filterAction; + } + } + } + } + return $this->filterActions; + } + + private function _filterActions($filterActions) { + $this->filterActions = $filterActions; + if (is_array($this->filterActions) && !empty($this->filterActions)) { + $this->_attributes('filters', array_map(function ($af) { + return $af == null ? null : $af->toJSON(); + }, $this->filterActions)); + } else { + $this->_attributes('filters', null); + } + } + + public function filtersAction($action) { + $action = trim($action); + if ($action == '') { + return array(); + } + $filters = array(); + $filterActions = $this->filterActions(); + for ($i = count($filterActions) - 1; $i >= 0; $i--) { + $filterAction = $filterActions[$i]; + if ($filterAction != null && $filterAction->booleanSearch() != null && + $filterAction->actions() != null && in_array($action, $filterAction->actions(), true)) { + $filters[] = $filterAction->booleanSearch(); + } + } + return $filters; + } + + public function _filtersAction($action, $filters) { + $action = trim($action); + if ($action == '' || !is_array($filters)) { + return false; + } + $filters = array_unique(array_map('trim', $filters)); + $filterActions = $this->filterActions(); + + //Check existing filters + for ($i = count($filterActions) - 1; $i >= 0; $i--) { + $filterAction = $filterActions[$i]; + if ($filterAction == null || !is_array($filterAction->actions()) || + $filterAction->booleanSearch() == null || trim($filterAction->booleanSearch()->getRawInput()) == '') { + array_splice($filterAction, $i, 1); + continue; + } + $actions = $filterAction->actions(); + //Remove existing rules with same action + for ($j = count($actions) - 1; $j >= 0; $j--) { + if ($actions[$j] === $action) { + array_splice($actions, $j, 1); + } + } + //Update existing filter with new action + for ($k = count($filters) - 1; $k >= 0; $k --) { + $filter = $filters[$k]; + if ($filter === $filterAction->booleanSearch()->getRawInput()) { + $actions[] = $action; + array_splice($filters, $k, 1); + } + } + //Save result + if (empty($actions)) { + array_splice($filterActions, $i, 1); + } else { + $filterAction->_actions($actions); + } + } + + //Add new filters + for ($k = count($filters) - 1; $k >= 0; $k --) { + $filter = $filters[$k]; + if ($filter != '') { + $filterAction = FreshRSS_FilterAction::fromJSON(array( + 'search' => $filter, + 'actions' => array($action), + )); + if ($filterAction != null) { + $filterActions[] = $filterAction; + } + } + } + + if (empty($filterActions)) { + $filterActions = null; + } + $this->_filterActions($filterActions); + } + //<WebSub> public function pubSubHubbubEnabled() { diff --git a/app/Models/FilterAction.php b/app/Models/FilterAction.php new file mode 100644 index 000000000..23a45d14e --- /dev/null +++ b/app/Models/FilterAction.php @@ -0,0 +1,45 @@ +<?php + +class FreshRSS_FilterAction { + + private $booleanSearch = null; + private $actions = null; + + private function __construct($booleanSearch, $actions) { + $this->booleanSearch = $booleanSearch; + $this->_actions($actions); + } + + public function booleanSearch() { + return $this->booleanSearch; + } + + public function actions() { + return $this->actions; + } + + public function _actions($actions) { + if (is_array($actions)) { + $this->actions = array_unique($actions); + } else { + $this->actions = null; + } + } + + public function toJSON() { + if (is_array($this->actions) && $this->booleanSearch != null) { + return array( + 'search' => $this->booleanSearch->getRawInput(), + 'actions' => $this->actions, + ); + } + return ''; + } + + public static function fromJSON($json) { + if (!empty($json['search']) && !empty($json['actions']) && is_array($json['actions'])) { + return new FreshRSS_FilterAction(new FreshRSS_BooleanSearch($json['search']), $json['actions']); + } + return null; + } +} diff --git a/app/Models/TagDAO.php b/app/Models/TagDAO.php index dba854aa4..297d24c96 100644 --- a/app/Models/TagDAO.php +++ b/app/Models/TagDAO.php @@ -187,9 +187,17 @@ class FreshRSS_TagDAO extends Minz_ModelPdo implements FreshRSS_Searchable { public function count() { $sql = 'SELECT COUNT(*) AS count FROM `' . $this->prefix . 'tag`'; $stm = $this->bd->prepare($sql); - $stm->execute(); - $res = $stm->fetchAll(PDO::FETCH_ASSOC); - return $res[0]['count']; + if ($stm && $stm->execute()) { + $res = $stm->fetchAll(PDO::FETCH_ASSOC); + return $res[0]['count']; + } else { + $info = $stm == null ? array(0 => '', 1 => '', 2 => 'syntax error') : $stm->errorInfo(); + if ($this->autoUpdateDb($info)) { + return $this->count(); + } + Minz_Log::error('SQL error TagDAO::count: ' . $info[2]); + return false; + } } public function countEntries($id) { @@ -256,9 +264,8 @@ class FreshRSS_TagDAO extends Minz_ModelPdo implements FreshRSS_Searchable { } } - //For API - public function getEntryIdsTagNames($entries) { - $sql = 'SELECT et.id_entry, t.name ' + public function getTagsForEntries($entries) { + $sql = 'SELECT et.id_entry, et.id_tag, t.name ' . 'FROM `' . $this->prefix . 'tag` t ' . 'INNER JOIN `' . $this->prefix . 'entrytag` et ON et.id_tag = t.id'; @@ -282,26 +289,31 @@ class FreshRSS_TagDAO extends Minz_ModelPdo implements FreshRSS_Searchable { $stm = $this->bd->prepare($sql); if ($stm && $stm->execute($values)) { - $result = array(); - foreach ($stm->fetchAll(PDO::FETCH_ASSOC) as $line) { - $entryId = 'e_' . $line['id_entry']; - $tagName = $line['name']; - if (empty($result[$entryId])) { - $result[$entryId] = array(); - } - $result[$entryId][] = $tagName; - } - return $result; + return $stm->fetchAll(PDO::FETCH_ASSOC); } else { $info = $stm == null ? array(0 => '', 1 => '', 2 => 'syntax error') : $stm->errorInfo(); if ($this->autoUpdateDb($info)) { - return $this->getTagNamesEntryIds($id_entry); + return $this->getTagsForEntries($entries); } - Minz_Log::error('SQL error getTagNamesEntryIds: ' . $info[2]); + Minz_Log::error('SQL error getTagsForEntries: ' . $info[2]); return false; } } + //For API + public function getEntryIdsTagNames($entries) { + $result = array(); + foreach ($this->getTagsForEntries($entries) as $line) { + $entryId = 'e_' . $line['id_entry']; + $tagName = $line['name']; + if (empty($result[$entryId])) { + $result[$entryId] = array(); + } + $result[$entryId][] = $tagName; + } + return $result; + } + public static function daoToTag($listDAO) { $list = array(); if (!is_array($listDAO)) { diff --git a/app/i18n/cz/sub.php b/app/i18n/cz/sub.php index 5b5634fed..2e81c928d 100644 --- a/app/i18n/cz/sub.php +++ b/app/i18n/cz/sub.php @@ -33,6 +33,10 @@ return array( 'description' => 'Popis', 'empty' => 'Kanál je prázdný. Ověřte prosím zda je ještě autorem udržován.', 'error' => 'Vyskytl se problém s kanálem. Ověřte že je vždy dostupný, prosím, a poté jej aktualizujte.', + 'filteractions' => array( + '_' => 'Filter actions', //TODO - Translation + 'help' => 'Write one search filter per line.', //TODO - Translation + ), 'informations' => 'Informace', 'keep_history' => 'Zachovat tento minimální počet článků', 'moved_category_deleted' => 'Po smazání kategorie budou v ní obsažené kanály automaticky přesunuty do <em>%s</em>.', diff --git a/app/i18n/de/sub.php b/app/i18n/de/sub.php index 27e893177..bd050671e 100644 --- a/app/i18n/de/sub.php +++ b/app/i18n/de/sub.php @@ -33,6 +33,10 @@ return array( 'description' => 'Beschreibung', 'empty' => 'Dieser Feed ist leer. Bitte stellen Sie sicher, dass er noch gepflegt wird.', 'error' => 'Dieser Feed ist auf ein Problem gestoßen. Bitte stellen Sie sicher, dass er immer lesbar ist und aktualisieren Sie ihn dann.', + 'filteractions' => array( + '_' => 'Filter actions', //TODO - Translation + 'help' => 'Write one search filter per line.', //TODO - Translation + ), 'informations' => 'Information', 'keep_history' => 'Minimale Anzahl an Artikeln, die behalten wird', 'moved_category_deleted' => 'Wenn Sie eine Kategorie entfernen, werden deren Feeds automatisch in die Kategorie <em>%s</em> eingefügt.', diff --git a/app/i18n/en/conf.php b/app/i18n/en/conf.php index c6471426f..fde78f5b5 100644 --- a/app/i18n/en/conf.php +++ b/app/i18n/en/conf.php @@ -92,7 +92,7 @@ return array( 'auto_remove_article' => 'Hide articles after reading', 'confirm_enabled' => 'Display a confirmation dialog on “mark all as read” actions', 'display_articles_unfolded' => 'Show articles unfolded by default', - 'display_categories_unfolded' => 'Show categories folded by default', + 'display_categories_unfolded' => 'Show categories unfolded by default', 'hide_read_feeds' => 'Hide categories & feeds with no unread articles (does not work with “Show all articles” configuration)', 'img_with_lazyload' => 'Use "lazy load" mode to load pictures', 'jump_next' => 'jump to next unread sibling (feed or category)', @@ -158,15 +158,12 @@ return array( 'javascript' => 'JavaScript must be enabled in order to use shortcuts', 'last_article' => 'Open the last article', 'load_more' => 'Load more articles', - 'mark_favorite' => 'Mark as favourite', - 'mark_read' => 'Mark as read', + 'mark_favorite' => 'Toggle favourite', + 'mark_read' => 'Toggle read', 'navigation' => 'Navigation', 'navigation_help' => 'With the "Shift" modifier, navigation shortcuts apply on feeds.<br/>With the "Alt" modifier, navigation shortcuts apply on categories.', 'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.', 'next_article' => 'Open the next article', - 'other_action' => 'Other actions', - 'previous_article' => 'Open the previous article', - 'next_article' => 'Open the next article', 'normal_view' => 'Switch to normal view', 'other_action' => 'Other actions', 'previous_article' => 'Open the previous article', diff --git a/app/i18n/en/sub.php b/app/i18n/en/sub.php index 4efd81ba4..f11eb9b99 100644 --- a/app/i18n/en/sub.php +++ b/app/i18n/en/sub.php @@ -33,6 +33,10 @@ return array( 'description' => 'Description', 'empty' => 'This feed is empty. Please verify that it is still maintained.', 'error' => 'This feed has encountered a problem. Please verify that it is always reachable then update it.', + 'filteractions' => array( + '_' => 'Filter actions', + 'help' => 'Write one search filter per line.', + ), 'informations' => 'Information', 'keep_history' => 'Minimum number of articles to keep', 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under <em>%s</em>.', diff --git a/app/i18n/es/sub.php b/app/i18n/es/sub.php index 854984891..c0526106f 100755 --- a/app/i18n/es/sub.php +++ b/app/i18n/es/sub.php @@ -33,6 +33,10 @@ return array( 'description' => 'Descripción', 'empty' => 'La fuente está vacía. Por favor, verifica que siga activa.', 'error' => 'Hay un problema con esta fuente. Por favor, veritica que esté disponible y prueba de nuevo.', + 'filteractions' => array( + '_' => 'Filter actions', //TODO - Translation + 'help' => 'Write one search filter per line.', //TODO - Translation + ), 'informations' => 'Información', 'keep_history' => 'Número mínimo de artículos a conservar', 'moved_category_deleted' => 'Al borrar una categoría todas sus fuentes pasan automáticamente a la categoría <em>%s</em>.', diff --git a/app/i18n/fr/conf.php b/app/i18n/fr/conf.php index 5c8e91c89..d0d146c89 100644 --- a/app/i18n/fr/conf.php +++ b/app/i18n/fr/conf.php @@ -158,11 +158,11 @@ return array( 'javascript' => 'Le JavaScript doit être activé pour pouvoir profiter des raccourcis.', 'last_article' => 'Passer au dernier article', 'load_more' => 'Charger plus d’articles', - 'mark_favorite' => 'Mettre en favori', - 'mark_read' => 'Marquer comme lu', + 'mark_favorite' => 'Basculer l’indicateur de favori', + 'mark_read' => 'Basculer l’indicateur de lecture', 'navigation' => 'Navigation', 'navigation_help' => 'Avec le modificateur "Shift", les raccourcis de navigation s’appliquent aux flux.<br/>Avec le modificateur "Alt", les raccourcis de navigation s’appliquent aux catégories.', - 'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.', //TODO - Translation + 'navigation_no_mod_help' => 'Les raccourcis suivant ne supportent pas les modificateurs.', 'next_article' => 'Passer à l’article suivant', 'normal_view' => 'Basculer vers la vue normale', 'other_action' => 'Autres actions', @@ -171,8 +171,8 @@ return array( 'rss_view' => 'Ouvrir le flux RSS dans un nouvel onglet', 'see_on_website' => 'Voir sur le site d’origine', 'shift_for_all_read' => '+ <code>shift</code> pour marquer tous les articles comme lus', - 'skip_next_article' => 'Focus next without opening', //TODO - Translation - 'skip_previous_article' => 'Focus previous without opening', //TODO - Translation + 'skip_next_article' => 'Passer au suivant sans ouvrir', + 'skip_previous_article' => 'Passer au précédent sans ouvrir', 'title' => 'Raccourcis', 'user_filter' => 'Accéder aux filtres utilisateur', 'user_filter_help' => 'S’il n’y a qu’un filtre utilisateur, celui-ci est utilisé automatiquement. Sinon ils sont accessibles par leur numéro.', diff --git a/app/i18n/fr/sub.php b/app/i18n/fr/sub.php index d9964ac6e..b71019faa 100644 --- a/app/i18n/fr/sub.php +++ b/app/i18n/fr/sub.php @@ -33,6 +33,10 @@ return array( 'description' => 'Description', 'empty' => 'Ce flux est vide. Veuillez vérifier qu’il est toujours maintenu.', 'error' => 'Ce flux a rencontré un problème. Veuillez vérifier qu’il est toujours accessible puis actualisez-le.', + 'filteractions' => array( + '_' => 'Filtres d’action', + 'help' => 'Écrivez une recherche par ligne.', + ), 'informations' => 'Informations', 'keep_history' => 'Nombre minimum d’articles à conserver', 'moved_category_deleted' => 'Lors de la suppression d’une catégorie, ses flux seront automatiquement classés dans <em>%s</em>.', diff --git a/app/i18n/he/sub.php b/app/i18n/he/sub.php index 6d824e349..bb2025bc3 100644 --- a/app/i18n/he/sub.php +++ b/app/i18n/he/sub.php @@ -33,6 +33,10 @@ return array( 'description' => 'תיאור', 'empty' => 'הזנה זו ריקה. אנא ודאו שהיא עדיין מתוחזקת.', 'error' => 'הזנה זו נתקלה בשגיאה, אנא ודאו שהיא תקינה ואז נסו שנית.', + 'filteractions' => array( + '_' => 'Filter actions', //TODO - Translation + 'help' => 'Write one search filter per line.', //TODO - Translation + ), 'informations' => 'מידע', 'keep_history' => 'מסםר מינימלי של מאמרים לשמור', 'moved_category_deleted' => 'כאשר הקטגוריה נמחקת ההזנות שבתוכה אוטומטית מקוטלגות תחת <em>%s</em>.', diff --git a/app/i18n/it/sub.php b/app/i18n/it/sub.php index ff7fa6f1d..bf279e059 100644 --- a/app/i18n/it/sub.php +++ b/app/i18n/it/sub.php @@ -33,6 +33,10 @@ return array( 'description' => 'Descrizione', 'empty' => 'Questo feed non contiene articoli. Per favore verifica il sito direttamente.', 'error' => 'Questo feed ha generato un errore. Per favore verifica se ancora disponibile.', + 'filteractions' => array( + '_' => 'Filter actions', //TODO - Translation + 'help' => 'Write one search filter per line.', //TODO - Translation + ), 'informations' => 'Informazioni', 'keep_history' => 'Numero minimo di articoli da mantenere', 'moved_category_deleted' => 'Cancellando una categoria i feed al suo interno verranno classificati automaticamente come <em>%s</em>.', diff --git a/app/i18n/kr/admin.php b/app/i18n/kr/admin.php index 532fe30a5..6312bd3fe 100644 --- a/app/i18n/kr/admin.php +++ b/app/i18n/kr/admin.php @@ -67,8 +67,8 @@ return array( 'ok' => 'JSON 확장 기능이 설치되어 있습니다.', ), 'mbstring' => array( - 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO - Translation - 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO - Translation + 'nok' => '유니코드 지원을 위한 mbstring 라이브러리를 찾을 수 없습니다.', + 'ok' => '유니코드 지원을 위한 mbstring 라이브러리가 설치되어 있습니다.', ), 'minz' => array( 'nok' => 'Minz 프레임워크를 찾을 수 없습니다.', @@ -163,8 +163,8 @@ return array( 'max-categories' => '사용자별 카테고리 개수 제한', 'max-feeds' => '사용자별 피드 개수 제한', 'cookie-duration' => array( - 'help' => 'in seconds', // @todo translate - 'number' => 'Duration to keep logged in', // @todo translate + 'help' => '초', + 'number' => '로그인 유지 시간', ), 'registration' => array( 'help' => '0: 제한 없음', diff --git a/app/i18n/kr/conf.php b/app/i18n/kr/conf.php index 5c3d95d17..11a8494c5 100644 --- a/app/i18n/kr/conf.php +++ b/app/i18n/kr/conf.php @@ -162,7 +162,7 @@ return array( 'mark_read' => '읽음으로 표시', 'navigation' => '탐색', 'navigation_help' => '"Shift" 키를 누른 상태에선 탐색 단축키가 피드에 적용됩니다.<br/>"Alt" 키를 누른 상태에선 탐색 단축키가 카테고리에 적용됩니다.', - 'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.', //TODO - Translation + 'navigation_no_mod_help' => '아래 탐색 단축키에는 "Shift"와 "Alt" 키가 적용되지 않습니다.', 'next_article' => '다음 글 보기', 'normal_view' => '일반 모드로 전환', 'other_action' => '다른 동작', @@ -171,8 +171,8 @@ return array( 'rss_view' => '새 탭에서 RSS 피드 열기', 'see_on_website' => '글이 게재된 웹사이트에서 보기', 'shift_for_all_read' => '+ <code>shift</code>를 누른 상태에선 모두 읽음으로 표시', - 'skip_next_article' => 'Focus next without opening', //TODO - Translation - 'skip_previous_article' => 'Focus previous without opening', //TODO - Translation + 'skip_next_article' => '다음 글로 커서 이동', + 'skip_previous_article' => '이전 글로 커서 이동', 'title' => '단축키', 'user_filter' => '사용자 필터 사용하기', 'user_filter_help' => '사용자 필터가 하나만 설정되어 있다면 해당 필터를 사용하고, 그렇지 않다면 필터를 번호로 선택할 수 있습니다.', diff --git a/app/i18n/kr/feedback.php b/app/i18n/kr/feedback.php index 550904894..0e31536f8 100644 --- a/app/i18n/kr/feedback.php +++ b/app/i18n/kr/feedback.php @@ -57,8 +57,8 @@ return array( 'sub' => array( 'actualize' => '피드를 가져오는 중입니다', 'articles' => array( - 'marked_read' => 'The selected articles have been marked as read.', //TODO - Translation - 'marked_unread' => 'The articles have been marked as unread.', //TODO - Translation + 'marked_read' => '선택된 글들을 읽음으로 표시하였습니다.', + 'marked_unread' => '선택된 글들을 읽지 않음으로 표시하였습니다.', ), 'category' => array( 'created' => '%s 카테고리가 생성되었습니다.', diff --git a/app/i18n/kr/gen.php b/app/i18n/kr/gen.php index 86a50e9c4..f7855c499 100644 --- a/app/i18n/kr/gen.php +++ b/app/i18n/kr/gen.php @@ -152,13 +152,13 @@ return array( 'user_profile' => '프로필', ), 'pagination' => array( - 'first' => 'First', - 'last' => 'Last', + 'first' => '처음으로', + 'last' => '마지막으로', 'load_more' => '글 더 불러오기', 'mark_all_read' => '모두 읽음으로 표시', - 'next' => 'Next', + 'next' => '다음', 'nothing_to_load' => '더 이상 글이 없습니다', - 'previous' => 'Previous', + 'previous' => '이전', ), 'share' => array( 'blogotext' => 'Blogotext', @@ -183,13 +183,13 @@ return array( 'short' => array( 'attention' => '경고!', 'blank_to_disable' => '빈 칸으로 두면 비활성화', - 'by_author' => 'By:', + 'by_author' => '글쓴이:', 'by_default' => '기본값', 'damn' => '이런!', 'default_category' => '분류 없음', 'no' => '아니요', 'not_applicable' => '사용할 수 없음', - 'ok' => 'Ok!', + 'ok' => '좋습니다!', 'or' => '또는', 'yes' => '네', ), diff --git a/app/i18n/kr/index.php b/app/i18n/kr/index.php index 3c63fd664..bebc8bdec 100644 --- a/app/i18n/kr/index.php +++ b/app/i18n/kr/index.php @@ -40,7 +40,7 @@ return array( 'mark_all_read' => '모두 읽음으로 표시', 'mark_cat_read' => '카테고리를 읽음으로 표시', 'mark_feed_read' => '피드를 읽음으로 표시', - 'mark_selection_unread' => 'Mark selection as unread', //TODO - Translation + 'mark_selection_unread' => '선택된 글을 읽지 않음으로 표시', 'newer_first' => '최근 글 먼저', 'non-starred' => '즐겨찾기를 제외하고 표시', 'normal_view' => '일반 모드', @@ -53,11 +53,11 @@ return array( 'starred' => '즐겨찾기만 표시', 'stats' => '통계', 'subscription' => '구독 관리', - 'tags' => 'My labels', //TODO - Translation + 'tags' => '내 라벨', 'unread' => '읽지 않은 글만 표시', ), 'share' => '공유', 'tag' => array( - 'related' => '관련 태그', //TODO - Translation + 'related' => '관련 태그', ), ); diff --git a/app/i18n/kr/install.php b/app/i18n/kr/install.php index 6b60f6ffd..65e8726e1 100644 --- a/app/i18n/kr/install.php +++ b/app/i18n/kr/install.php @@ -69,8 +69,8 @@ return array( 'ok' => 'JSON 확장 기능이 설치되어 있습니다.', ), 'mbstring' => array( - 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO - Translation - 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO - Translation + 'nok' => '유니코드 지원을 위한 mbstring 라이브러리를 찾을 수 없습니다.', + 'ok' => '유니코드 지원을 위한 mbstring 라이브러리가 설치되어 있습니다.', ), 'minz' => array( 'nok' => 'Minz 프레임워크를 찾을 수 없습니다.', diff --git a/app/i18n/kr/sub.php b/app/i18n/kr/sub.php index 9f8967053..151775c1c 100644 --- a/app/i18n/kr/sub.php +++ b/app/i18n/kr/sub.php @@ -27,12 +27,16 @@ return array( 'password' => 'HTTP 암호', 'username' => 'HTTP 사용자 이름', ), - 'clear_cache' => 'Always clear cache', //TODO - Translation + 'clear_cache' => '항상 캐시 지우기', 'css_help' => '글의 일부가 포함된 RSS 피드를 가져옵니다 (주의, 시간이 좀 더 걸립니다!)', 'css_path' => '웹사이트 상의 글 본문에 해당하는 CSS 경로', 'description' => '설명', 'empty' => '이 피드는 비어있습니다. 피드가 계속 운영되고 있는지 확인하세요.', 'error' => '이 피드에 문제가 발생했습니다. 이 피드에 접근 권한이 있는지 확인하세요.', + 'filteractions' => array( + '_' => 'Filter actions', //TODO - Translation + 'help' => 'Write one search filter per line.', //TODO - Translation + ), 'informations' => '정보', 'keep_history' => '최소 유지 글 개수', 'moved_category_deleted' => '카테고리를 삭제하면, 해당 카테고리 아래에 있던 피드들은 자동적으로 <em>%s</em> 아래로 분류됩니다.', @@ -47,11 +51,11 @@ return array( ), 'websub' => 'WebSub을 사용한 즉시 알림', 'show' => array( - 'all' => 'Show all feeds', //TODO - Translation - 'error' => 'Show only feeds with error', //TODO - Translation + 'all' => '모든 피드 보기', + 'error' => '오류가 발생한 피드만 보기', ), 'showing' => array( - 'error' => 'Showing only feeds with error', //TODO - Translation + 'error' => '오류가 발생한 피드만 보여주고 있습니다', ), 'ssl_verify' => 'SSL 유효성 검사', 'stats' => '통계', @@ -72,7 +76,7 @@ return array( 'export' => '내보내기', 'export_opml' => '피드 목록 내보내기 (OPML)', 'export_starred' => '즐겨찾기 내보내기', - 'export_labelled' => 'Export your labelled articles', //TODO + 'export_labelled' => '라벨이 표시된 글들 내보내기', 'feed_list' => '%s 개의 글 목록', 'file_to_import' => '불러올 파일<br />(OPML, JSON 또는 ZIP)', 'file_to_import_no_zip' => '불러올 파일<br />(OPML 또는 JSON)', diff --git a/app/i18n/nl/sub.php b/app/i18n/nl/sub.php index 1d6c9f806..8ba9c020d 100644 --- a/app/i18n/nl/sub.php +++ b/app/i18n/nl/sub.php @@ -33,6 +33,10 @@ return array( 'description' => 'Omschrijving', 'empty' => 'Deze feed is leeg. Controleer of deze nog actueel is.', 'error' => 'Deze feed heeft problemen. Verifieer a.u.b het doeladres en actualiseer het.', + 'filteractions' => array( + '_' => 'Filter actions', //TODO - Translation + 'help' => 'Write one search filter per line.', //TODO - Translation + ), 'informations' => 'Informatie', 'keep_history' => 'Minimum aantal artikelen om te houden', 'moved_category_deleted' => 'Als u een categorie verwijderd, worden de feeds automatisch geclassificeerd onder <em>%s</em>.', diff --git a/app/i18n/oc/admin.php b/app/i18n/oc/admin.php index 4a47374d7..2f8ede873 100644 --- a/app/i18n/oc/admin.php +++ b/app/i18n/oc/admin.php @@ -130,7 +130,7 @@ return array( 'category' => 'Categoria', 'entry_count' => 'Nombre d’articles', 'entry_per_category' => 'Articles per categoria', - 'entry_per_day' => 'Nombre d’articles per jorn (30 darrièrs jorns)', + 'entry_per_day' => 'Nombre d’articles per jorn (darrièrs 30 jorns)', 'entry_per_day_of_week' => 'Per jorn de la setmana (mejana : %.2f messatges)', 'entry_per_hour' => 'Per ora (mejana : %.2f messatges)', 'entry_per_month' => 'Per mes (mejana : %.2f messatges)', diff --git a/app/i18n/oc/gen.php b/app/i18n/oc/gen.php index 168ea4732..7f9793283 100644 --- a/app/i18n/oc/gen.php +++ b/app/i18n/oc/gen.php @@ -68,8 +68,8 @@ return array( 'Jun' => '\\j\\u\\n\\h', 'jun' => 'junh', 'june' => 'junh', - 'last_3_month' => 'Dempuèi los tres darrièrs meses', - 'last_6_month' => 'Dempuèi los sièis darrièrs meses', + 'last_3_month' => 'Dempuèi los darrièrs tres meses', + 'last_6_month' => 'Dempuèi los darrièrs sièis meses', 'last_month' => 'Dempuèi lo mes passat', 'last_week' => 'Dempuèi la setmana passada', 'last_year' => 'Dempuèi l’annada passada', diff --git a/app/i18n/oc/index.php b/app/i18n/oc/index.php index 5211fd24a..5cc71c9a9 100644 --- a/app/i18n/oc/index.php +++ b/app/i18n/oc/index.php @@ -6,7 +6,7 @@ return array( 'agpl3' => '<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL 3</a>', 'bugs_reports' => 'Senhalament de problèmas', 'credits' => 'Crèdits', - 'credits_content' => 'Unes elements de l’estil venon del <a href="http://twitter.github.io/bootstrap/">projècte Bootstrap</a> encara que FreshRSS utilize pas aqueste framework. Las<a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">icònas</a> venon del <a href="https://www.gnome.org/">projècte GNOME</a>. La polissa <em>Open Sans</em> utilizada foguèt creada per en <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS es basat sus <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, un framework PHP.', + 'credits_content' => 'Unes elements de l’estil venon del <a href="http://twitter.github.io/bootstrap/">projècte Bootstrap</a> encara que FreshRSS utilize pas aqueste framework. Las <a href="https://git.gnome.org/browse/gnome-icon-theme-symbolic">icònas</a> venon del <a href="https://www.gnome.org/">projècte GNOME</a>. La polissa <em>Open Sans</em> utilizada foguèt creada per en <a href="https://fonts.google.com/specimen/Open+Sans">Steve Matteson</a>. FreshRSS es basat sus <a href="https://github.com/marienfressinaud/MINZ">Minz</a>, un framework PHP.', 'freshrss_description' => 'FreshRSS es un agregador de fluxes RSS per l’auto-albergar tal coma <a href="http://tontof.net/kriss/feed/">Kriss Feed</a> o <a href="http://projet.idleman.fr/leed/">Leed</a>. Sa tòca es d’èsser leugièr e de bon utilizar de prima abòrd mas tanben d’èsser potent e parametrable.', 'github' => '<a href="https://github.com/FreshRSS/FreshRSS/issues">on Github</a>', 'license' => 'Licéncia', diff --git a/app/i18n/oc/sub.php b/app/i18n/oc/sub.php index fc5a0cc1f..5a7bb2b57 100644 --- a/app/i18n/oc/sub.php +++ b/app/i18n/oc/sub.php @@ -32,6 +32,10 @@ return array( 'description' => 'Descripcion', 'empty' => 'Aqueste flux es void. Assegurats-vos qu’es totjorn mantengut.', 'error' => 'Aqueste flux a rescontrat un problèma. Volgatz verificar que siá totjorn accessible puèi actualizatz-lo.', + 'filteractions' => array( + '_' => 'Filtre d’accion', + 'help' => 'Escrivètz una recèrca per linha.', + ), 'informations' => 'Informacions', 'keep_history' => 'Nombre minimum d’articles de servar', 'moved_category_deleted' => 'Quand escafatz una categoria, sos fluxes son automaticament classats dins <em>%s</em>.', diff --git a/app/i18n/pt-br/sub.php b/app/i18n/pt-br/sub.php index 58b2fc1f9..fc26e89e7 100644 --- a/app/i18n/pt-br/sub.php +++ b/app/i18n/pt-br/sub.php @@ -33,6 +33,10 @@ return array( 'description' => 'Descrição', 'empty' => 'Este feed está vazio. Por favor verifique ele ainda é mantido.', 'error' => 'Este feed encontra-se com problema. Por favor verifique se ele ainda está disponível e atualize-o.', + 'filteractions' => array( + '_' => 'Filter actions', //TODO - Translation + 'help' => 'Write one search filter per line.', //TODO - Translation + ), 'informations' => 'Informações', 'keep_history' => 'Número mínimo de artigos para manter', 'moved_category_deleted' => 'Quando você deleta uma categoria, seus feeds são automaticamente classificados como <em>%s</em>.', diff --git a/app/i18n/ru/conf.php b/app/i18n/ru/conf.php index 59ac480bc..841477964 100644 --- a/app/i18n/ru/conf.php +++ b/app/i18n/ru/conf.php @@ -92,7 +92,7 @@ return array( 'auto_remove_article' => 'Hide articles after reading', //TODO - Translation 'confirm_enabled' => 'Display a confirmation dialog on “mark all as read” actions', //TODO - Translation 'display_articles_unfolded' => 'Show articles unfolded by default', //TODO - Translation - 'display_categories_unfolded' => 'Show categories folded by default', //TODO - Translation + 'display_categories_unfolded' => 'Show categories unfolded by default', //TODO - Translation 'hide_read_feeds' => 'Hide categories & feeds with no unread article (does not work with “Show all articles” configuration)', //TODO - Translation 'img_with_lazyload' => 'Use "lazy load" mode to load pictures', //TODO - Translation 'jump_next' => 'jump to next unread sibling (feed or category)', //TODO - Translation diff --git a/app/i18n/ru/sub.php b/app/i18n/ru/sub.php index 62f8a8e3a..e125d549e 100644 --- a/app/i18n/ru/sub.php +++ b/app/i18n/ru/sub.php @@ -33,6 +33,10 @@ return array( 'description' => 'Description', //TODO - Translation 'empty' => 'This feed is empty. Please verify that it is still maintained.', //TODO - Translation 'error' => 'This feed has encountered a problem. Please verify that it is always reachable then actualize it.', //TODO - Translation + 'filteractions' => array( + '_' => 'Filter actions', //TODO - Translation + 'help' => 'Write one search filter per line.', //TODO - Translation + ), 'informations' => 'Information', //TODO - Translation 'keep_history' => 'Minimum number of articles to keep', //TODO - Translation 'moved_category_deleted' => 'When you delete a category, its feeds are automatically classified under <em>%s</em>.', //TODO - Translation diff --git a/app/i18n/tr/conf.php b/app/i18n/tr/conf.php index 507558487..6c57d39da 100644 --- a/app/i18n/tr/conf.php +++ b/app/i18n/tr/conf.php @@ -92,7 +92,7 @@ return array( 'auto_remove_article' => 'Okuduktan sonra makaleleri gizle', 'confirm_enabled' => '"Hepsini okundu say" eylemi için onay iste', 'display_articles_unfolded' => 'Show articles unfolded by default', - 'display_categories_unfolded' => 'Show categories folded by default', + 'display_categories_unfolded' => 'Show categories unfolded by default', 'hide_read_feeds' => 'Okunmamış makalesi olmayan kategori veya akışı gizle ("Tüm makaleleri göster" komutunda çalışmaz)', 'img_with_lazyload' => 'Resimleri yüklemek için "tembel modu" kullan', 'jump_next' => 'Bir sonraki benzer okunmamışa geç (akış veya kategori)', diff --git a/app/i18n/tr/sub.php b/app/i18n/tr/sub.php index 7f29633be..9f4945c0a 100644 --- a/app/i18n/tr/sub.php +++ b/app/i18n/tr/sub.php @@ -33,6 +33,10 @@ return array( 'description' => 'Tanım', 'empty' => 'Bu akış boş. Lütfen akışın aktif olduğuna emin olun.', 'error' => 'Bu akışda bir hatayla karşılaşıldı. Lütfen akışın sürekli ulaşılabilir olduğuna emin olun.', + 'filteractions' => array( + '_' => 'Filter actions', //TODO - Translation + 'help' => 'Write one search filter per line.', //TODO - Translation + ), 'informations' => 'Bilgi', 'keep_history' => 'En az tutulacak makale sayısı', 'moved_category_deleted' => 'Bir kategoriyi silerseniz, içerisindeki akışlar <em>%s</em> içerisine yerleşir.', diff --git a/app/i18n/zh-cn/admin.php b/app/i18n/zh-cn/admin.php index e34070526..74f57b6e8 100644 --- a/app/i18n/zh-cn/admin.php +++ b/app/i18n/zh-cn/admin.php @@ -64,11 +64,11 @@ return array( 'files' => '文件相关', 'json' => array( 'nok' => '找不到 JSON 扩展 (php-json ) 。', - 'ok' => '已找到 JSON 扩展', + 'ok' => '已找到 JSON 扩展。', ), 'mbstring' => array( - 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO - Translation - 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO - Translation + 'nok' => '找不到推荐的 Unicode 解析库 (mbstring)。', + 'ok' => '已找到推荐的 Unicode 解析库 (mbstring)。', ), 'minz' => array( 'nok' => '找不到 Minz 框架。', @@ -163,8 +163,8 @@ return array( 'max-categories' => '每用户分类限制', 'max-feeds' => '每用户 RSS 源限制', 'cookie-duration' => array( - 'help' => 'in seconds', // @todo translate - 'number' => 'Duration to keep logged in', // @todo translate + 'help' => '单位(秒)', + 'number' => '保持登录的时长', ), 'registration' => array( 'help' => '0 表示无账户数限制', @@ -183,15 +183,15 @@ return array( 'user' => array( 'articles_and_size' => '%s 篇文章 (%s)', 'create' => '创建新用户', - 'delete_users' => 'Delete user', //TODO - Translation + 'delete_users' => '删除用户', 'language' => '语言', - 'number' => '已有 %d 个帐户', - 'numbers' => '已有 %d 个帐户', + 'number' => '已有 %d 个用户', + 'numbers' => '已有 %d 个用户', 'password_form' => '密码<br /><small>(用于 Web-form 登录方式)</small>', 'password_format' => '至少 7 个字符', - 'selected' => 'Selected user', //TODO - Translation + 'selected' => '已选中用户', 'title' => '用户管理', - 'update_users' => 'Update user', //TODO - Translation + 'update_users' => '更新用户', 'user_list' => '用户列表', 'username' => '用户名', 'users' => '用户', diff --git a/app/i18n/zh-cn/conf.php b/app/i18n/zh-cn/conf.php index 1216aaaca..535dfd358 100644 --- a/app/i18n/zh-cn/conf.php +++ b/app/i18n/zh-cn/conf.php @@ -28,7 +28,7 @@ return array( 'seconds' => '秒 (0 表示不超时)', 'timeout' => 'HTML5 通知超时时间', ), - 'show_nav_buttons' => 'Show the navigation buttons', //TODO - Translation + 'show_nav_buttons' => '显示导航按钮', 'theme' => '主题', 'title' => '显示', 'width' => array( @@ -53,7 +53,7 @@ return array( 'query' => array( '_' => '自定义查询', 'deprecated' => '此查询不再有效。相关的分类或 RSS 源已被删除。', - 'display' => 'Display user query results', //TODO - Translation + 'display' => '显示查询结果', 'filter' => '生效的过滤器:', 'get_all' => '显示所有文章', 'get_category' => '显示分类 "%s"', @@ -64,7 +64,7 @@ return array( 'number' => '查询 n°%d', 'order_asc' => '由旧到新显示文章', 'order_desc' => '由新到旧显示文章', - 'remove' => 'Remove user query', //TODO - Translation + 'remove' => '删除查询', 'search' => '搜索 "%s"', 'state_0' => '显示所有文章', 'state_1' => '显示已读文章', @@ -128,7 +128,7 @@ return array( ), 'sharing' => array( '_' => '分享', - 'add' => 'Add a sharing method', //TODO - Translation + 'add' => '添加分享方式', 'blogotext' => 'Blogotext', 'diaspora' => 'Diaspora*', 'email' => 'Email', @@ -136,7 +136,7 @@ return array( 'g+' => 'Google+', 'more_information' => '更多信息', 'print' => '打印', - 'remove' => 'Remove sharing method', //TODO - Translation + 'remove' => '删除分享方式', 'shaarli' => 'Shaarli', 'share_name' => '名称', 'share_url' => '地址', @@ -148,31 +148,31 @@ return array( '_' => '快捷键', 'article_action' => '文章操作', 'auto_share' => '分享', - 'auto_share_help' => '如果有多种分享模式,则会按照它们的编号依次访问。', + 'auto_share_help' => '如果有多种分享方式,则会按照它们的编号依次访问。', 'close_dropdown' => '关闭菜单', 'collapse_article' => '收起文章', - 'first_article' => '跳转到第一篇文章', + 'first_article' => '打开第一篇文章', 'focus_search' => '聚焦到搜索框', 'global_view' => '切换到全屏视图', 'help' => '显示帮助文档', 'javascript' => '若要使用快捷键,必须启用 JavaScript', - 'last_article' => '跳转到最后一篇文章', + 'last_article' => '打开最后一篇文章', 'load_more' => '载入更多文章', 'mark_favorite' => '加入收藏', 'mark_read' => '设为已读', 'navigation' => '浏览', 'navigation_help' => '搭配 "Shift" 键,浏览快捷键将生效于 RSS 源。<br/>搭配 "Alt" 键,浏览快捷键将生效于分类。', - 'navigation_no_mod_help' => 'The following navigation shortcuts do not support modifiers.', //TODO - Translation - 'next_article' => '跳转到下一篇文章', + 'navigation_no_mod_help' => '以下快捷键不支持组合键 (Shift 或 Alt)', + 'next_article' => '打开下一篇文章', 'normal_view' => '切换到普通视图', 'other_action' => '其他操作', - 'previous_article' => '跳转到上一篇文章', + 'previous_article' => '打开上一篇文章', 'reading_view' => '切换到阅读视图', 'rss_view' => '在新标签中打开 RSS 视图', 'see_on_website' => '在原网站上查看', 'shift_for_all_read' => '+ <code>shift</code> 可以将全部文章设为已读', - 'skip_next_article' => 'Focus next without opening', //TODO - Translation - 'skip_previous_article' => 'Focus previous without opening', //TODO - Translation + 'skip_next_article' => '跳转到下一篇文章而不打开', + 'skip_previous_article' => '跳转到上一篇文章而不打开', 'title' => '快捷键', 'user_filter' => '显示自定义查询', 'user_filter_help' => '如果有多个自定义过滤器,则会按照它们的编号依次访问。', diff --git a/app/i18n/zh-cn/feedback.php b/app/i18n/zh-cn/feedback.php index e1778a9f2..e8ee969b0 100644 --- a/app/i18n/zh-cn/feedback.php +++ b/app/i18n/zh-cn/feedback.php @@ -57,8 +57,8 @@ return array( 'sub' => array( 'actualize' => '获取', 'articles' => array( - 'marked_read' => 'The selected articles have been marked as read.', //TODO - Translation - 'marked_unread' => 'The articles have been marked as unread.', //TODO - Translation + 'marked_read' => '选中文章已标记为已读', + 'marked_unread' => '文章已标记为未读', ), 'category' => array( 'created' => '分类 %s 已创建。', @@ -80,7 +80,7 @@ return array( 'already_subscribed' => '你已订阅 <em>%s</em>', 'deleted' => 'RSS 源已删除', 'error' => 'RSS 源更新失败', - 'internal_problem' => 'RSS 源添加失败。<a href="%s">检查 FreshRSS 日志</a> 查看详情。', //TODO - Translation + 'internal_problem' => 'RSS 源添加失败。<a href="%s">检查 FreshRSS 日志</a> 查看详情。你可以在URL后附加 <code>#force_feed</code> 从而尝试强制添加。', 'invalid_url' => 'URL <em>%s</em> 无效', 'n_actualized' => '%d 个 RSS 源已更新', 'n_entries_deleted' => '%d 篇文章已删除', @@ -109,8 +109,8 @@ return array( 'error' => '用户 %s 删除失败', ), 'updated' => array( - '_' => 'User %s has been updated', //TODO - Translation - 'error' => 'User %s has not been updated', //TODO - Translation + '_' => '用户 %s 已更新', + 'error' => '用户 %s 更新失败', ), ), ); diff --git a/app/i18n/zh-cn/gen.php b/app/i18n/zh-cn/gen.php index 1dcd95233..11d4efdb3 100644 --- a/app/i18n/zh-cn/gen.php +++ b/app/i18n/zh-cn/gen.php @@ -19,7 +19,7 @@ return array( 'see_website' => '查看网站', 'submit' => '提交', 'truncate' => '删除所有文章', - 'update' => 'Update', //TODO - Translation + 'update' => '更新', //TODO - Translation ), 'auth' => array( 'email' => 'Email 地址', diff --git a/app/i18n/zh-cn/index.php b/app/i18n/zh-cn/index.php index 3f6b44701..018813c3e 100644 --- a/app/i18n/zh-cn/index.php +++ b/app/i18n/zh-cn/index.php @@ -40,7 +40,7 @@ return array( 'mark_all_read' => '全部设为已读', 'mark_cat_read' => '此分类设为已读', 'mark_feed_read' => '此源设为已读', - 'mark_selection_unread' => 'Mark selection as unread', //TODO - Translation + 'mark_selection_unread' => '选中设为已读', 'newer_first' => '由新到旧', 'non-starred' => '显示未收藏', 'normal_view' => '普通视图', @@ -53,11 +53,11 @@ return array( 'starred' => '显示收藏', 'stats' => '统计', 'subscription' => '订阅管理', - 'tags' => 'My labels', //TODO - Translation + 'tags' => '我的标签', 'unread' => '显示未读', ), 'share' => '分享', 'tag' => array( - 'related' => '相关标签', //TODO - Translation + 'related' => '文章标签', ), ); diff --git a/app/i18n/zh-cn/install.php b/app/i18n/zh-cn/install.php index 29647932a..da231917b 100644 --- a/app/i18n/zh-cn/install.php +++ b/app/i18n/zh-cn/install.php @@ -69,8 +69,8 @@ return array( 'ok' => '已找到推荐的 JSON 解析库。', ), 'mbstring' => array( - 'nok' => 'Cannot find the recommended library mbstring for Unicode.', //TODO - Translation - 'ok' => 'You have the recommended library mbstring for Unicode.', //TODO - Translation + 'nok' => '找不到推荐的 Unicode 解析库 (mbstring)。', + 'ok' => '已找到推荐的 Unicode 解析库 (mbstring)。', ), 'minz' => array( 'nok' => '找不到 Minz 框架。', diff --git a/app/i18n/zh-cn/sub.php b/app/i18n/zh-cn/sub.php index 3a9623468..90f9fd942 100644 --- a/app/i18n/zh-cn/sub.php +++ b/app/i18n/zh-cn/sub.php @@ -27,12 +27,16 @@ return array( 'password' => 'HTTP 密码', 'username' => 'HTTP 用户名', ), - 'clear_cache' => 'Always clear cache', //TODO - Translation + 'clear_cache' => '总是清除缓存', 'css_help' => '用于获取全文(注意,这将耗费更多时间!)', 'css_path' => '原文的 CSS 选择器', 'description' => '描述', 'empty' => '此源为空。请确认它是否正常更新。', 'error' => '此源遇到一些问题。请在确认是否能正常访问后重试。', + 'filteractions' => array( + '_' => 'Filter actions', //TODO - Translation + 'help' => 'Write one search filter per line.', //TODO - Translation + ), 'informations' => '信息', 'keep_history' => '至少保存的文章数', 'moved_category_deleted' => '删除分类时,其中的 RSS 源会自动归类到 <em>%s</em>', @@ -47,16 +51,16 @@ return array( ), 'websub' => 'WebSub 即时通知', 'show' => array( - 'all' => 'Show all feeds', //TODO - Translation - 'error' => 'Show only feeds with error', //TODO - Translation + 'all' => '显示所有 RSS 源', + 'error' => '仅显示有错误的 RSS 源', ), 'showing' => array( - 'error' => 'Showing only feeds with error', //TODO - Translation + 'error' => '正在显示有错误的 RSS 源', ), - 'ssl_verify' => 'Verify SSL security', //TODO - Translation + 'ssl_verify' => '验证 SSL 安全', 'stats' => '统计', 'think_to_add' => '你可以添加一些 RSS 源。', - 'timeout' => 'Timeout in seconds', //TODO - Translation + 'timeout' => '超时时间(秒)', 'title' => '标题', 'title_add' => '添加 RSS 源', 'ttl' => '最小自动更新时间', @@ -72,7 +76,7 @@ return array( 'export' => '导出', 'export_opml' => '导出 RSS 源列表 (OPML)', 'export_starred' => '导出你的收藏', - 'export_labelled' => 'Export your labelled articles', //TODO + 'export_labelled' => '导出有标签的文章', 'feed_list' => '%s 文章列表', 'file_to_import' => '需要导入的文件<br />(OPML, JSON 或 ZIP)', 'file_to_import_no_zip' => '需要导入的文件<br />(OPML 或 JSON)', diff --git a/app/layout/aside_feed.phtml b/app/layout/aside_feed.phtml index 5efaa54d1..637acf4a4 100644 --- a/app/layout/aside_feed.phtml +++ b/app/layout/aside_feed.phtml @@ -37,13 +37,14 @@ <?php $t_active = FreshRSS_Context::isCurrentGet('T'); + $t_show = $t_active || FreshRSS_Context::$user_conf->display_categories; ?> <li class="tree-folder category tags<?php echo $t_active ? ' active' : ''; ?>"> <div class="tree-folder-title"> <a class="dropdown-toggle" href="#"><?php echo _i($t_active ? 'up' : 'down'); ?></a> <a class="title" data-unread="<?php echo format_number($this->nbUnreadTags); ?>" href="<?php echo _url('index', $actual_view, 'get', 'T'); ?>"><?php echo _t('index.menu.tags'); ?></a> </div> - <ul class="tree-folder-items<?php echo $t_active ? ' active' : ''; ?>"> + <ul class="tree-folder-items<?php echo $t_show ? ' active' : ''; ?>"> <?php foreach ($this->tags as $tag): ?> @@ -64,8 +65,7 @@ $feeds = $cat->feeds(); if (!empty($feeds)) { $c_active = FreshRSS_Context::isCurrentGet('c_' . $cat->id()); - $c_show = $c_active && (!FreshRSS_Context::$user_conf->display_categories || - FreshRSS_Context::$current_get['feed']); + $c_show = $c_active || FreshRSS_Context::$user_conf->display_categories; ?> <li class="tree-folder category<?php echo $c_active ? ' active' : ''; ?>" data-unread="<?php echo $cat->nbNotRead(); ?>"> <div class="tree-folder-title"> diff --git a/app/views/entry/read.phtml b/app/views/entry/read.phtml index fb9e129f2..44193da9c 100755 --- a/app/views/entry/read.phtml +++ b/app/views/entry/read.phtml @@ -1,17 +1,7 @@ <?php header('Content-Type: application/json; charset=UTF-8'); -$url = array( - 'c' => Minz_Request::controllerName(), - 'a' => Minz_Request::actionName(), - 'params' => Minz_Request::fetchGET(), -); - -$url['params']['is_read'] = Minz_Request::param('is_read', true) ? '0' : '1'; - FreshRSS::loadStylesAndScripts(); echo json_encode(array( - 'url' => str_ireplace('&', '&', Minz_Url::display($url)), - 'icon' => _i($url['params']['is_read'] === '1' ? 'unread' : 'read'), 'tags' => $this->tags, )); diff --git a/app/views/helpers/feed/update.phtml b/app/views/helpers/feed/update.phtml index bc90ba456..be8034c0d 100644 --- a/app/views/helpers/feed/update.phtml +++ b/app/views/helpers/feed/update.phtml @@ -234,6 +234,19 @@ </div> <?php } ?> + <legend><?php echo _t('sub.feed.filteractions'); ?></legend> + <div class="form-group"> + <label class="group-name" for="filteractions_read"><?php echo _t('conf.reading.read.when'); ?></label> + <div class="group-controls"> + <textarea name="filteractions_read" id="filteractions_read"><?php + foreach ($this->feed->filtersAction('read') as $filterRead) { + echo htmlspecialchars($filterRead->getRawInput(), ENT_NOQUOTES, 'UTF-8'), "\n\n"; + } + ?></textarea> + <?php echo _i('help'); ?> <?php echo _t('sub.feed.filteractions.help'); ?> + </div> + </div> + <div class="form-group form-actions"> <div class="group-controls"> <button type="submit" class="btn btn-important"><?php echo _t('gen.action.submit'); ?></button> diff --git a/app/views/helpers/index/normal/entry_bottom.phtml b/app/views/helpers/index/normal/entry_bottom.phtml index 1f35318e3..c0edbdf7d 100644 --- a/app/views/helpers/index/normal/entry_bottom.phtml +++ b/app/views/helpers/index/normal/entry_bottom.phtml @@ -93,7 +93,7 @@ <a target="_blank" rel="noreferrer" href="<?php echo $share->url(); ?>"><?php echo $share->name(); ?></a> <?php } else {?> <a href="POST"><?php echo $share->name(); ?></a> - <form method="POST" data-url="<?php echo $share->url(); ?>"> + <form method="POST" action="<?php echo $share->url(); ?>" disabled="disabled"> <input type="hidden" value="<?php echo $link; ?>" name="<?php echo $share->field(); ?>"/> </form> <?php } ?> diff --git a/app/views/helpers/javascript_vars.phtml b/app/views/helpers/javascript_vars.phtml index a434a04a3..b62263ecf 100644 --- a/app/views/helpers/javascript_vars.phtml +++ b/app/views/helpers/javascript_vars.phtml @@ -42,7 +42,7 @@ echo htmlspecialchars(json_encode(array( 'reading_view' => @$s['reading_view'], 'rss_view' => @$s['rss_view'], ), - 'url' => array( + 'urls' => array( 'index' => _url('index', 'index'), 'login' => Minz_Url::display(array('c' => 'auth', 'a' => 'login'), 'php'), 'logout' => Minz_Url::display(array('c' => 'auth', 'a' => 'logout'), 'php'), @@ -56,6 +56,7 @@ echo htmlspecialchars(json_encode(array( 'category_empty' => _t('gen.js.category_empty'), ), 'icons' => array( - 'close' => _i('close'), + 'read' => rawurlencode(_i('read')), + 'unread' => rawurlencode(_i('unread')), ), ), JSON_UNESCAPED_UNICODE), ENT_NOQUOTES, 'UTF-8'); diff --git a/app/views/index/reader.phtml b/app/views/index/reader.phtml index 1485a1997..fbe37d2e3 100644 --- a/app/views/index/reader.phtml +++ b/app/views/index/reader.phtml @@ -42,7 +42,7 @@ if (!empty($this->entries)) { <a class="bookmark" href="<?php echo Minz_Url::display($favoriteUrl); ?>"> <?php echo _i($item->isFavorite() ? 'starred' : 'non-starred'); ?> </a> - <a href="<?php echo _url('index', 'reader', 'get', 'f_' . $feed->id()); ?>"> + <a class="website" href="<?php echo _url('index', 'reader', 'get', 'f_' . $feed->id()); ?>"> <img class="favicon" src="<?php echo $feed->favicon(); ?>" alt="✇" /> <span><?php echo $feed->name(); ?></span> </a> <h1 class="title"><a target="_blank" rel="noreferrer" class="go_website" href="<?php echo $item->link(); ?>"><?php echo $item->title(); ?></a></h1> diff --git a/app/views/user/manage.phtml b/app/views/user/manage.phtml index 9d457f7a5..d0e5928ef 100644 --- a/app/views/user/manage.phtml +++ b/app/views/user/manage.phtml @@ -53,7 +53,7 @@ <div class="form-group"> <label class="group-name" for="current_user"><?php echo _t('admin.user.selected'); ?></label> <div class="group-controls"> - <select id="current_user" class="select-change" name="username"> + <select id="current_user" name="username"> <option selected="selected"> </option> <?php foreach (listUsers() as $username) { ?> <option value="<?php echo $username; ?>"><?php echo $username; ?></option> diff --git a/cli/_cli.php b/cli/_cli.php index e8fb6ae42..dec244bc3 100644 --- a/cli/_cli.php +++ b/cli/_cli.php @@ -3,6 +3,9 @@ if (php_sapi_name() !== 'cli') { die('FreshRSS error: This PHP script may only be invoked from command line!'); } +const REGEX_INPUT_OPTIONS = '/^--/'; +const REGEX_PARAM_OPTIONS = '/:*$/'; + require(__DIR__ . '/../constants.php'); require(LIB_PATH . '/lib_rss.php'); //Includes class autoloader require(LIB_PATH . '/lib_install.php'); @@ -64,3 +67,25 @@ function performRequirementCheck($databaseType) { fail($message); } } + +function getLongOptions($options, $regex) { + $longOptions = array_filter($options, function($a) use ($regex) { + return preg_match($regex, $a); + }); + return array_map(function($a) use ($regex) { + return preg_replace($regex, '', $a); + }, $longOptions); +} + +function validateOptions($input, $params) { + $sanitizeInput = getLongOptions($input, REGEX_INPUT_OPTIONS); + $sanitizeParams = getLongOptions($params, REGEX_PARAM_OPTIONS); + $unknownOptions = array_diff($sanitizeInput, $sanitizeParams); + + if (0 === count($unknownOptions)) { + return true; + } + + fwrite(STDERR, sprintf("FreshRSS error: unknown options: %s\n", implode (', ', $unknownOptions))); + return false; +} diff --git a/cli/_update-or-create-user.php b/cli/_update-or-create-user.php index a5960b58a..eda597f19 100644 --- a/cli/_update-or-create-user.php +++ b/cli/_update-or-create-user.php @@ -22,7 +22,7 @@ if (!$isUpdate) { $options = getopt('', $params); -if (empty($options['user'])) { +if (!validateOptions($argv, $params) || empty($options['user'])) { fail('Usage: ' . basename($_SERVER['SCRIPT_FILENAME']) . " --user username ( --password 'password' --api_password 'api_password'" . " --language en --email user@example.net --token 'longRandomString'" . diff --git a/cli/actualize-user.php b/cli/actualize-user.php index dd07fc142..08e17de98 100755 --- a/cli/actualize-user.php +++ b/cli/actualize-user.php @@ -2,11 +2,13 @@ <?php require(__DIR__ . '/_cli.php'); -$options = getopt('', array( - 'user:', - )); +$params = array( + 'user:', +); -if (empty($options['user'])) { +$options = getopt('', $params); + +if (!validateOptions($argv, $params) || empty($options['user'])) { fail('Usage: ' . basename(__FILE__) . " --user username"); } diff --git a/cli/db-optimize.php b/cli/db-optimize.php index 39dc97638..bd0623a48 100755 --- a/cli/db-optimize.php +++ b/cli/db-optimize.php @@ -2,11 +2,13 @@ <?php require(__DIR__ . '/_cli.php'); -$options = getopt('', array( - 'user:', - )); +$params = array( + 'user:', +); -if (empty($options['user'])) { +$options = getopt('', $params); + +if (!validateOptions($argv, $params) || empty($options['user'])) { fail('Usage: ' . basename(__FILE__) . " --user username"); } diff --git a/cli/delete-user.php b/cli/delete-user.php index 30cc31754..ab02dfdbf 100755 --- a/cli/delete-user.php +++ b/cli/delete-user.php @@ -2,11 +2,13 @@ <?php require(__DIR__ . '/_cli.php'); -$options = getopt('', array( - 'user:', - )); +$params = array( + 'user:', +); -if (empty($options['user'])) { +$options = getopt('', $params); + +if (!validateOptions($argv, $params) || empty($options['user'])) { fail('Usage: ' . basename(__FILE__) . " --user username"); } $username = $options['user']; diff --git a/cli/do-install.php b/cli/do-install.php index 7435ab9f1..fd5aa4a3c 100755 --- a/cli/do-install.php +++ b/cli/do-install.php @@ -31,10 +31,10 @@ $dBparams = array( $options = getopt('', array_merge($params, $dBparams)); -if (empty($options['default_user'])) { +if (!validateOptions($argv, array_merge($params, $dBparams)) || empty($options['default_user'])) { fail('Usage: ' . basename(__FILE__) . " --default_user admin ( --auth_type form" . - " --environment production --base_url https://rss.example.net" . - " --language en --title FreshRSS --allow_anonymous --api_enabled" . + " --environment production --base_url https://rss.example.net --allow_robots" . + " --language en --title FreshRSS --allow_anonymous --allow_anonymous_refresh --api_enabled" . " --db-type mysql --db-host localhost:3306 --db-user freshrss --db-password dbPassword123" . " --db-base freshrss --db-prefix freshrss_ --disable_update )"); } diff --git a/cli/export-opml-for-user.php b/cli/export-opml-for-user.php index 076cffe74..8e7ed08f7 100755 --- a/cli/export-opml-for-user.php +++ b/cli/export-opml-for-user.php @@ -2,11 +2,13 @@ <?php require(__DIR__ . '/_cli.php'); -$options = getopt('', array( - 'user:', - )); +$params = array( + 'user:', +); -if (empty($options['user'])) { +$options = getopt('', $params); + +if (!validateOptions($argv, $params) || empty($options['user'])) { fail('Usage: ' . basename(__FILE__) . " --user username > /path/to/file.opml.xml"); } diff --git a/cli/export-zip-for-user.php b/cli/export-zip-for-user.php index 86113d9fa..b89a55104 100755 --- a/cli/export-zip-for-user.php +++ b/cli/export-zip-for-user.php @@ -2,12 +2,14 @@ <?php require(__DIR__ . '/_cli.php'); -$options = getopt('', array( - 'user:', - 'max-feed-entries:', - )); +$params = array( + 'user:', + 'max-feed-entries:', +); -if (empty($options['user'])) { +$options = getopt('', $params); + +if (!validateOptions($argv, $params) || empty($options['user'])) { fail('Usage: ' . basename(__FILE__) . " --user username ( --max-feed-entries 100 ) > /path/to/file.zip"); } diff --git a/cli/i18n/ignore/kr.php b/cli/i18n/ignore/kr.php index 24cfbc86a..bbccb2d7d 100644 --- a/cli/i18n/ignore/kr.php +++ b/cli/i18n/ignore/kr.php @@ -8,6 +8,18 @@ return array( 'conf.sharing.shaarli', 'conf.sharing.twitter', 'conf.sharing.wallabag', + 'gen.date.Apr', + 'gen.date.Aug', + 'gen.date.Dec', + 'gen.date.Feb', + 'gen.date.Jan', + 'gen.date.Jul', + 'gen.date.Jun', + 'gen.date.Mar', + 'gen.date.May', + 'gen.date.Nov', + 'gen.date.Oct', + 'gen.date.Sep', 'gen.lang.cz', 'gen.lang.de', 'gen.lang.en', @@ -17,6 +29,7 @@ return array( 'gen.lang.it', 'gen.lang.kr', 'gen.lang.nl', + 'gen.lang.oc', 'gen.lang.pt-br', 'gen.lang.ru', 'gen.lang.tr', @@ -29,8 +42,11 @@ return array( 'gen.share.g+', 'gen.share.gnusocial', 'gen.share.jdh', + 'gen.share.linkedin', 'gen.share.mastodon', 'gen.share.movim', + 'gen.share.pinboard', + 'gen.share.pocket', 'gen.share.shaarli', 'gen.share.twitter', 'gen.share.wallabag', diff --git a/cli/i18n/ignore/zh-cn.php b/cli/i18n/ignore/zh-cn.php index c00ac79d3..d55071d10 100644 --- a/cli/i18n/ignore/zh-cn.php +++ b/cli/i18n/ignore/zh-cn.php @@ -18,6 +18,7 @@ return array( 'gen.lang.it', 'gen.lang.kr', 'gen.lang.nl', + 'gen.lang.oc', 'gen.lang.pt-br', 'gen.lang.ru', 'gen.lang.tr', @@ -29,8 +30,11 @@ return array( 'gen.share.g+', 'gen.share.gnusocial', 'gen.share.jdh', + 'gen.share.linkedin', 'gen.share.mastodon', 'gen.share.movim', + 'gen.share.pinboard', + 'gen.share.pocket', 'gen.share.shaarli', 'gen.share.twitter', 'gen.share.wallabag', diff --git a/cli/import-for-user.php b/cli/import-for-user.php index 95ff18c8c..7c66fbef2 100755 --- a/cli/import-for-user.php +++ b/cli/import-for-user.php @@ -2,12 +2,14 @@ <?php require(__DIR__ . '/_cli.php'); -$options = getopt('', array( - 'user:', - 'filename:', - )); +$params = array( + 'user:', + 'filename:', +); -if (empty($options['user']) || empty($options['filename'])) { +$options = getopt('', $params); + +if (!validateOptions($argv, $params) || empty($options['user']) || empty($options['filename'])) { fail('Usage: ' . basename(__FILE__) . " --user username --filename /path/to/file.ext"); } diff --git a/cli/list-users.php b/cli/list-users.php index 758bbdb46..b3ce9936f 100755 --- a/cli/list-users.php +++ b/cli/list-users.php @@ -13,3 +13,5 @@ if (FreshRSS_Context::$system_conf->default_user !== '' foreach ($users as $user) { echo $user, "\n"; } + +done(); diff --git a/cli/reconfigure.php b/cli/reconfigure.php index cfe713fa8..84073b70e 100755 --- a/cli/reconfigure.php +++ b/cli/reconfigure.php @@ -27,6 +27,14 @@ $dBparams = array( $options = getopt('', array_merge($params, $dBparams)); +if (!validateOptions($argv, array_merge($params, $dBparams))) { + fail('Usage: ' . basename(__FILE__) . " --default_user admin ( --auth_type form" . + " --environment production --base_url https://rss.example.net --allow_robots" . + " --language en --title FreshRSS --allow_anonymous --allow_anonymous_refresh --api_enabled" . + " --db-type mysql --db-host localhost:3306 --db-user freshrss --db-password dbPassword123" . + " --db-base freshrss --db-prefix freshrss_ --disable_update )"); +} + fwrite(STDERR, 'Reconfiguring FreshRSS…' . "\n"); $config = Minz_Configuration::get('system'); diff --git a/cli/user-info.php b/cli/user-info.php index 043bebf7c..aa4db7c2f 100755 --- a/cli/user-info.php +++ b/cli/user-info.php @@ -2,19 +2,46 @@ <?php require(__DIR__ . '/_cli.php'); -$options = getopt('h', array( - 'user:', - )); +const DATA_FORMAT = "%-7s | %-20s | %-25s | %-15s | %-10s | %-10s | %-10s | %-10s | %-10s | %-10s\n"; + +$params = array( + 'user:', + 'header', +); +$options = getopt('h', $params); + +if (!validateOptions($argv, $params)) { + fail('Usage: ' . basename(__FILE__) . ' (-h --header --user username --user username …)'); +} if (empty($options['user'])) { - fail('Usage: ' . basename(__FILE__) . " -h --user username"); + $users = listUsers(); +} elseif (is_array($options['user'])) { + $users = $options['user']; +} else { + $users = array($options['user']); } -$users = $options['user'] === '*' ? listUsers() : array($options['user']); +sort($users); + +if (array_key_exists('header', $options)) { + printf( + DATA_FORMAT, + 'default', + 'user', + 'last update', + 'space used', + 'categories', + 'feeds', + 'reads', + 'unreads', + 'favourites', + 'tags' + ); +} foreach ($users as $username) { $username = cliInitUser($username); - echo $username === FreshRSS_Context::$system_conf->default_user ? '*' : ' ', "\t"; $catDAO = FreshRSS_Factory::createCategoryDao(); $feedDAO = FreshRSS_Factory::createFeedDao($username); @@ -25,29 +52,23 @@ foreach ($users as $username) { $nbEntries = $entryDAO->countUnreadRead(); $nbFavorites = $entryDAO->countUnreadReadFavorites(); + $data = array( + 'default' => $username === FreshRSS_Context::$system_conf->default_user ? '*' : '', + 'user' => $username, + 'lastUpdate' => FreshRSS_UserDAO::mtime($username), + 'spaceUsed' => $databaseDAO->size(), + 'categories' => $catDAO->count(), + 'feeds' => count($feedDAO->listFeedsIds()), + 'reads' => $nbEntries['read'], + 'unreads' => $nbEntries['unread'], + 'favourites' => $nbFavorites['all'], + 'tags' => $tagDAO->count(), + ); if (isset($options['h'])) { //Human format - echo - $username, "\t", - date('c', FreshRSS_UserDAO::mtime($username)), "\t", - format_bytes($databaseDAO->size()), "\t", - $catDAO->count(), " categories\t", - count($feedDAO->listFeedsIds()), " feeds\t", - $nbEntries['read'], " reads\t", - $nbEntries['unread'], " unreads\t", - $nbFavorites['all'], " favourites\t", - $tagDAO->count(), " tags\t", - "\n"; - } else { - echo - $username, "\t", - FreshRSS_UserDAO::mtime($username), "\t", - $databaseDAO->size(), "\t", - $catDAO->count(), "\t", - count($feedDAO->listFeedsIds()), "\t", - $nbEntries['read'], "\t", - $nbEntries['unread'], "\t", - $nbFavorites['all'], "\t", - $tagDAO->count(), "\t", - "\n"; + $data['lastUpdate'] = date('c', $data['lastUpdate']); + $data['spaceUsed'] = format_bytes($data['spaceUsed']); } + vprintf(DATA_FORMAT, $data); } + +done(); diff --git a/constants.php b/constants.php index 8a49d7c01..1432ced48 100644 --- a/constants.php +++ b/constants.php @@ -2,7 +2,7 @@ //NB: Do not edit; use ./constants.local.php instead. //<Not customisable> -define('FRESHRSS_VERSION', '1.13.1'); +define('FRESHRSS_VERSION', '1.14.0'); define('FRESHRSS_WEBSITE', 'https://freshrss.org'); define('FRESHRSS_WIKI', 'https://freshrss.github.io/FreshRSS/'); @@ -33,7 +33,7 @@ safe_define('FRESHRSS_USERAGENT', 'FreshRSS/' . FRESHRSS_VERSION . ' (' . PHP_OS safe_define('PHP_COMPRESSION', false); // For cases when syslog is not available -safe_define('COPY_SYSLOG_TO_STDERR', isset($_SERVER['COPY_SYSLOG_TO_STDERR']) ? filter_var($_SERVER['COPY_SYSLOG_TO_STDERR'], FILTER_VALIDATE_BOOLEAN) : false); +safe_define('COPY_SYSLOG_TO_STDERR', filter_var(getenv('COPY_SYSLOG_TO_STDERR'), FILTER_VALIDATE_BOOLEAN)); // Maximum log file size in Bytes, before it will be divided by two safe_define('MAX_LOG_SIZE', 1048576); diff --git a/docs/en/users/06_Fever_API.md b/docs/en/users/06_Fever_API.md index 971cf957d..909164516 100644 --- a/docs/en/users/06_Fever_API.md +++ b/docs/en/users/06_Fever_API.md @@ -20,6 +20,9 @@ Then point your mobile application to the URL of `fever.php` (e.g. `https://fres Tested with: +- Android + - [Readably](https://play.google.com/store/apps/details?id=com.isaiasmatewos.readably) + - iOS - [Fiery Feeds](https://itunes.apple.com/app/fiery-feeds-rss-reader/id1158763303) - [Unread](https://itunes.apple.com/app/unread-rss-reader/id1252376153) @@ -28,9 +31,6 @@ Tested with: - MacOS - [Readkit](https://itunes.apple.com/app/readkit/id588726889) -- Android - -Until now, we don't know about compatible Android clients. Please leave your feedback, if you tested the Fever API with Android apps. - - Please note, that *Press* is NOT compatible: it was a popular RSS client with Fever support, but its development stopped a while ago. It uses the Fever API in a wrong way, which we don't support. ## Features diff --git a/docs/fr/users/06_Fever_API.md b/docs/fr/users/06_Fever_API.md index 50650ebcd..fb15e596b 100644 --- a/docs/fr/users/06_Fever_API.md +++ b/docs/fr/users/06_Fever_API.md @@ -7,6 +7,9 @@ et des généralités sur l’accès par API. Testé avec: +- Android + [Readably](https://play.google.com/store/apps/details?id=com.isaiasmatewos.readably) + - iOS - [Fiery Feeds](https://itunes.apple.com/app/fiery-feeds-rss-reader/id1158763303) - [Unread](https://itunes.apple.com/app/unread-rss-reader/id1252376153) diff --git a/lib/Minz/Request.php b/lib/Minz/Request.php index 8b2b610d6..912c354ac 100644 --- a/lib/Minz/Request.php +++ b/lib/Minz/Request.php @@ -95,6 +95,7 @@ class Minz_Request { */ public static function init() { self::magicQuotesOff(); + self::initJSON(); } /** @@ -238,6 +239,30 @@ class Minz_Request { } /** + * Allows receiving POST data as application/json + */ + private static function initJSON() { + $contentType = isset($_SERVER['CONTENT_TYPE']) ? $_SERVER['CONTENT_TYPE'] : ''; + if ($contentType == '') { //PHP < 5.3.16 + $contentType = isset($_SERVER['HTTP_CONTENT_TYPE']) ? $_SERVER['HTTP_CONTENT_TYPE'] : ''; + } + $contentType = strtolower(trim($contentType)); + if ($contentType === 'application/json') { + $ORIGINAL_INPUT = file_get_contents('php://input', false, null, 0, 1048576); + if ($ORIGINAL_INPUT != '') { + $json = json_decode($ORIGINAL_INPUT, true); + if ($json != null) { + foreach ($json as $k => $v) { + if (!isset($_POST[$k])) { + $_POST[$k] = $v; + } + } + } + } + } + } + + /** * Permet de récupérer une variable de type $_POST * @param $param nom de la variable * @param $default valeur par défaut à attribuer à la variable diff --git a/lib/lib_rss.php b/lib/lib_rss.php index 89e9ddfea..3e0033a61 100644 --- a/lib/lib_rss.php +++ b/lib/lib_rss.php @@ -170,7 +170,7 @@ function format_bytes($bytes, $precision = 2, $system = 'IEC') { $pow = $bytes === 0 ? 0 : floor(log($bytes) / log($base)); $pow = min($pow, count($units) - 1); $bytes /= pow($base, $pow); - return format_number($bytes, $precision) . ' ' . $units[$pow]; + return format_number($bytes, $precision) . ' ' . $units[$pow]; } function timestamptodate ($t, $hour = true) { @@ -303,12 +303,7 @@ function lazyimg($content) { function uTimeString() { $t = @gettimeofday(); - return $t['sec'] . str_pad($t['usec'], 6, '0'); -} - -function uSecString() { - $t = @gettimeofday(); - return str_pad($t['usec'], 6, '0'); + return $t['sec'] . str_pad($t['usec'], 6, '0', STR_PAD_LEFT); } function invalidateHttpCache($username = '') { diff --git a/p/api/.htaccess b/p/api/.htaccess index 937983ec9..2bd6b1d14 100644 --- a/p/api/.htaccess +++ b/p/api/.htaccess @@ -1,5 +1,5 @@ <IfModule mod_setenvif.c> - SetEnvIf "^Authorization$" "(.*)" HTTP_AUTHORIZATION=$1 + SetEnvIfNoCase "^Authorization$" "(.*)" HTTP_AUTHORIZATION=$1 </IfModule> <IfModule !mod_setenvif.c> <IfModule mod_rewrite.c> diff --git a/p/api/fever.php b/p/api/fever.php index dd54a372b..b81646928 100644 --- a/p/api/fever.php +++ b/p/api/fever.php @@ -324,9 +324,9 @@ class FeverAPI $feeds[] = array( 'id' => $feed->id(), 'favicon_id' => $feed->id(), - 'title' => $feed->name(), - 'url' => $feed->url(), - 'site_url' => $feed->website(), + 'title' => escapeToUnicodeAlternative($feed->name(), true), + 'url' => htmlspecialchars_decode($feed->url(), ENT_QUOTES), + 'site_url' => htmlspecialchars_decode($feed->website(), ENT_QUOTES), 'is_spark' => 0, // unsupported 'last_updated_on_time' => $feed->lastUpdate(), ); @@ -349,7 +349,7 @@ class FeverAPI foreach ($categories as $category) { $groups[] = array( 'id' => $category->id(), - 'title' => $category->name(), + 'title' => escapeToUnicodeAlternative($category->name(), true), ); } @@ -535,10 +535,10 @@ class FeverAPI $items[] = array( 'id' => $entry->id(), 'feed_id' => $entry->feed(false), - 'title' => $entry->title(), - 'author' => $entry->authors(true), + 'title' => escapeToUnicodeAlternative($entry->title(), false), + 'author' => escapeToUnicodeAlternative(trim($entry->authors(true), '; '), false), 'html' => $entry->content(), - 'url' => $entry->link(), + 'url' => htmlspecialchars_decode($entry->link(), ENT_QUOTES), 'is_saved' => $entry->isFavorite() ? 1 : 0, 'is_read' => $entry->isRead() ? 1 : 0, 'created_on_time' => $entry->date(true), diff --git a/p/scripts/category.js b/p/scripts/category.js index caa4fa22f..86d8542f1 100644 --- a/p/scripts/category.js +++ b/p/scripts/category.js @@ -1,6 +1,6 @@ "use strict"; -/* globals i18n */ -/* jshint globalstrict: true */ +/* globals context */ +/* jshint esversion:6, strict:global */ var loading = false, dnd_successful = false; @@ -9,7 +9,7 @@ function dragend_process(t) { t.setAttribute('draggable', 'false'); if (loading) { - window.setTimeout(function() { + setTimeout(function() { dragend_process(t); }, 50); return; @@ -20,11 +20,11 @@ function dragend_process(t) { t.style.opacity = ''; t.setAttribute('draggable', 'true'); } else { - var parent = $(t.parentNode); - $(t).remove(); + const p = t.parentElement; + t.remove(); - if (parent.children().length <= 0) { - parent.append('<li class="item disabled" dropzone="move">' + i18n.category_empty + '</li>'); + if (p.childElementCount <= 0) { + p.insertAdjacentHTML('beforeend', '<li class="item disabled" dropzone="move">' + context.i18n.category_empty + '</li>'); } } } @@ -33,89 +33,109 @@ var dragFeedId = '', dragHtml = ''; function init_draggable() { - if (!(window.$ && window.i18n)) { + if (!window.context) { if (window.console) { - console.log('FreshRSS waiting for JS…'); + console.log('FreshRSS category waiting for JS…'); } - window.setTimeout(init_draggable, 50); + setTimeout(init_draggable, 50); return; } - var draggable = '[draggable="true"]', - dropzone = '[dropzone="move"]'; - - $('.drop-section').on('dragstart', draggable, function(e) { - var drag = $(e.target).closest('[draggable]')[0]; - e.originalEvent.dataTransfer.effectAllowed = 'move'; - dragHtml = drag.outerHTML; - dragFeedId = drag.getAttribute('data-feed-id'); - e.originalEvent.dataTransfer.setData('text', dragFeedId); - drag.style.opacity = 0.3; - - dnd_successful = false; - }); - $('.drop-section').on('dragend', draggable, function(e) { - dragend_process(e.target); - }); - - $('.drop-section').on('dragenter', dropzone, function(e) { - $(this).addClass('drag-hover'); - - e.preventDefault(); - }); - $('.drop-section').on('dragleave', dropzone, function(e) { - var pos_this = $(this).position(), - scroll_top = $(document).scrollTop(), - top = pos_this.top, - left = pos_this.left, - right = left + $(this).width(), - bottom = top + $(this).height(), - mouse_x = e.originalEvent.screenX, - mouse_y = e.originalEvent.clientY + scroll_top; - - if (left <= mouse_x && mouse_x <= right && - top <= mouse_y && mouse_y <= bottom) { - // HACK because dragleave is triggered when hovering children! - return; - } - $(this).removeClass('drag-hover'); - }); - $('.drop-section').on('dragover', dropzone, function(e) { - e.originalEvent.dataTransfer.dropEffect = "move"; - - e.preventDefault(); - return false; - }); - $('.drop-section').on('drop', dropzone, function(e) { - loading = true; - - $.ajax({ - type: 'POST', - url: './?c=feed&a=move', - data: { - f_id: dragFeedId, - c_id: e.target.parentNode.getAttribute('data-cat-id'), - _csrf: context.csrf, + const draggable = '[draggable="true"]', + dropzone = '[dropzone="move"]', + dropSection = document.querySelector('.drop-section'); + + dropSection.ondragstart = function(ev) { + const li = ev.target.closest ? ev.target.closest(draggable) : null; + if (li) { + const drag = ev.target.closest('[draggable]'); + ev.dataTransfer.effectAllowed = 'move'; + dragHtml = drag.outerHTML; + dragFeedId = drag.getAttribute('data-feed-id'); + ev.dataTransfer.setData('text', dragFeedId); + drag.style.opacity = 0.3; + dnd_successful = false; } - }).done(function() { - $(e.target).after(dragHtml); - if ($(e.target).hasClass('disabled')) { - $(e.target).remove(); + }; + + dropSection.ondragend = function(ev) { + const li = ev.target.closest ? ev.target.closest(draggable) : null; + if (li) { + dragend_process(li); } - dnd_successful = true; - }).always(function() { - loading = false; - dragFeedId = ''; - dragHtml = ''; - }); + }; - $(this).removeClass('drag-hover'); + dropSection.ondragenter = function(ev) { + const li = ev.target.closest ? ev.target.closest(dropzone) : null; + if (li) { + li.classList.add('drag-hover'); + return false; + } + }; + + dropSection.onddragleave = function(ev) { + const li = ev.target.closest ? ev.target.closest(dropzone) : null; + if (li) { + const scroll_top = document.documentElement.scrollTop, + top = li.offsetTop, + left = li.offsetLeft, + right = left + li.clientWidth, + bottom = top + li.clientHeight, + mouse_x = ev.screenX, + mouse_y = ev.clientY + scroll_top; + + if (left <= mouse_x && mouse_x <= right && + top <= mouse_y && mouse_y <= bottom) { + // HACK because dragleave is triggered when hovering children! + return; + } + li.classList.remove('drag-hover'); + } + }; - e.preventDefault(); - }); + dropSection.ondragover = function(ev) { + const li = ev.target.closest ? ev.target.closest(dropzone) : null; + if (li) { + ev.dataTransfer.dropEffect = "move"; + return false; + } + }; + + dropSection.ondrop = function(ev) { + const li = ev.target.closest ? ev.target.closest(dropzone) : null; + if (li) { + loading = true; + + const req = new XMLHttpRequest(); + req.open('POST', './?c=feed&a=move', true); + req.responseType = 'json'; + req.onload = function (e) { + if (this.status == 200) { + li.insertAdjacentHTML('afterend', dragHtml); + if (li.classList.contains('disabled')) { + li.remove(); + } + dnd_successful = true; + } + }; + req.onloadend = function (e) { + loading = false; + dragFeedId = ''; + dragHtml = ''; + }; + req.setRequestHeader('Content-Type', 'application/json'); + req.send(JSON.stringify({ + f_id: dragFeedId, + c_id: li.parentElement.getAttribute('data-cat-id'), + _csrf: context.csrf, + })); + + li.classList.remove('drag-hover'); + return false; + } + }; } - if (document.readyState && document.readyState !== 'loading') { init_draggable(); } else if (document.addEventListener) { diff --git a/p/scripts/extra.js b/p/scripts/extra.js new file mode 100644 index 000000000..c0d0c89e1 --- /dev/null +++ b/p/scripts/extra.js @@ -0,0 +1,241 @@ +"use strict"; +/* globals context, openNotification, xmlHttpRequestJson */ +/* jshint esversion:6, strict:global */ + +//<crypto form (Web login)> +function poormanSalt() { //If crypto.getRandomValues is not available + const base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ.0123456789/abcdefghijklmnopqrstuvwxyz'; + let text = '$2a$04$'; + for (let i = 22; i > 0; i--) { + text += base.charAt(Math.floor(Math.random() * 64)); + } + return text; +} + +function init_crypto_form() { + /* globals dcodeIO */ + const crypto_form = document.getElementById('crypto-form'); + if (!crypto_form) { + return; + } + + if (!(window.dcodeIO)) { + if (window.console) { + console.log('FreshRSS waiting for bcrypt.js…'); + } + setTimeout(init_crypto_form, 100); + return; + } + + crypto_form.onsubmit = function (e) { + const submit_button = this.querySelector('button[type="submit"]'); + submit_button.disabled = true; + let success = false; + + const req = new XMLHttpRequest(); + req.open('GET', './?c=javascript&a=nonce&user=' + document.getElementById('username').value, false); + req.onerror = function () { + openNotification('Communication error!', 'bad'); + }; + req.send(); + if (req.status == 200) { + const json = xmlHttpRequestJson(req); + if (!json.salt1 || !json.nonce) { + openNotification('Invalid user!', 'bad'); + } else { + try { + const strong = window.Uint32Array && window.crypto && (typeof window.crypto.getRandomValues === 'function'), + s = dcodeIO.bcrypt.hashSync(document.getElementById('passwordPlain').value, json.salt1), + c = dcodeIO.bcrypt.hashSync(json.nonce + s, strong ? dcodeIO.bcrypt.genSaltSync(4) : poormanSalt()); + document.getElementById('challenge').value = c; + if (!s || !c) { + openNotification('Crypto error!', 'bad'); + } else { + success = true; + } + } catch (ex) { + openNotification('Crypto exception! ' + ex, 'bad'); + } + } + } else { + req.onerror(); + } + + submit_button.disabled = false; + return success; + }; +} +//</crypto form (Web login)> + +function init_share_observers() { + let shares = document.querySelectorAll('.group-share').length; + const shareAdd = document.querySelector('.share.add'); + if (shareAdd) { + shareAdd.onclick = function (ev) { + const s = this.parentElement.querySelector('select'), + opt = s.options[s.selectedIndex]; + let row = this.closest('form').getAttribute('data-' + opt.getAttribute('data-form')); + row = row.replace(/##label##/g, opt.text); + row = row.replace(/##type##/g, opt.value); + row = row.replace(/##help##/g, opt.getAttribute('data-help')); + row = row.replace(/##key##/g, shares); + row = row.replace(/##method##/g, opt.getAttribute('data-method')); + row = row.replace(/##field##/g, opt.getAttribute('data-field')); + this.closest('.form-group').insertAdjacentHTML('beforebegin', row); + shares++; + return false; + }; + } +} + + +function init_remove_observers() { + document.querySelectorAll('.post').forEach(function (div) { + div.onclick = function (ev) { + const a = ev.target.closest('a.remove'); + if (a) { + const remove_what = a.getAttribute('data-remove'); + if (remove_what !== undefined) { + const d = document.getElementById(remove_what); + if (d) { + d.remove(); + } + } + return false; + } + }; + }); +} + +function init_feed_observers() { + const s = document.getElementById('category'); + if (s && s.matches('select')) { + s.onchange = function (ev) { + const detail = document.getElementById('new_category_name').parentElement; + if (this.value === 'nc') { + detail.setAttribute('aria-hidden', 'false'); + detail.querySelector('input').focus(); + } else { + detail.setAttribute('aria-hidden', 'true'); + } + }; + } +} + +function init_password_observers() { + document.querySelectorAll('.toggle-password').forEach(function (a) { + a.onmousedown = function (ev) { + const passwordField = document.getElementById(this.getAttribute('data-toggle')); + passwordField.setAttribute('type', 'text'); + this.classList.add('active'); + return false; + }; + a.onmouseup = function (ev) { + const passwordField = document.getElementById(this.getAttribute('data-toggle')); + passwordField.setAttribute('type', 'password'); + this.classList.remove('active'); + return false; + }; + }); +} + +function init_select_observers() { + document.querySelectorAll('.select-change').forEach(function (s) { + s.onchange = function (ev) { + const opt = s.options[s.selectedIndex], + url = opt.getAttribute('data-url'); + if (url) { + s.form.querySelectorAll('[type=submit]').forEach(function (b) { + b.disabled = true; + }); + location.href = url; + } + }; + }); +} + +function init_slider_observers() { + const slider = document.getElementById('slider'), + closer = document.getElementById('close-slider'); + if (!slider) { + return; + } + + document.querySelector('.post').onclick = function (ev) { + const a = ev.target.closest('.open-slider'); + if (a) { + if (!context.ajax_loading) { + context.ajax_loading = true; + + const req = new XMLHttpRequest(); + req.open('GET', a.href + '&ajax=1', true); + req.responseType = 'document'; + req.onload = function (e) { + slider.innerHTML = this.response.body.innerHTML; + slider.classList.add('active'); + closer.classList.add('active'); + context.ajax_loading = false; + }; + req.send(); + return false; + } + } + }; + + closer.onclick = function (ev) { + closer.classList.remove('active'); + slider.classList.remove('active'); + return false; + }; +} + +function init_configuration_alert() { + window.onsubmit = function (e) { + window.hasSubmit = true; + }; + window.onbeforeunload = function (e) { + if (window.hasSubmit) { + return; + } + const ds = document.querySelectorAll('[data-leave-validation]'); + for (let i = ds.length - 1; i >= 0; i--) { + const input = ds[i]; + if (input.type === 'checkbox' || input.type === 'radio') { + if (input.checked != input.getAttribute('data-leave-validation')) { + return false; + } + } else if (input.value != input.getAttribute('data-leave-validation')) { + return false; + } + } + }; +} + +function init_extra() { + if (!window.context) { + if (window.console) { + console.log('FreshRSS extra waiting for JS…'); + } + window.setTimeout(init_extra, 50); //Wait for all js to be loaded + return; + } + init_crypto_form(); + init_share_observers(); + init_remove_observers(); + init_feed_observers(); + init_password_observers(); + init_select_observers(); + init_slider_observers(); + init_configuration_alert(); +} + +if (document.readyState && document.readyState !== 'loading') { + init_extra(); +} else { + document.addEventListener('DOMContentLoaded', function () { + if (window.console) { + console.log('FreshRSS extra waiting for DOMContentLoaded…'); + } + init_extra(); + }, false); +} diff --git a/p/scripts/global_view.js b/p/scripts/global_view.js index c5aaa48b1..b1581614a 100644 --- a/p/scripts/global_view.js +++ b/p/scripts/global_view.js @@ -1,6 +1,6 @@ "use strict"; -/* globals init_load_more, init_posts, init_stream */ -/* jshint globalstrict: true */ +/* globals context, init_load_more, init_posts, init_stream */ +/* jshint esversion:6, strict:global */ var panel_loading = false; @@ -11,68 +11,88 @@ function load_panel(link) { panel_loading = true; - $.get(link, function (data) { - $("#panel").append($(".nav_menu, #stream .day, #stream .flux, #stream .pagination, #stream.prompt", data)); - - $("#panel .nav_menu").children().not("#nav_menu_read_all").remove(); - - init_load_more($("#panel")); - init_posts(); - - $("#overlay").fadeIn(); - $("#panel").slideToggle(); - - // force le démarrage du scroll en haut. - // Sans ça, si l'on scroll en lisant une catégorie par exemple, - // en en ouvrant une autre ensuite, on se retrouve au même point de scroll - $("#panel").scrollTop(0); - $(window).scrollTop(0); - - $('#panel').on('click', '#nav_menu_read_all button, #bigMarkAsRead', function () { - console.log($(this).attr("formaction")); - $.ajax({ - type: "POST", - url: $(this).attr("formaction"), - data: { - _csrf: context.csrf, - }, - async: false - }); - window.location.reload(false); - return false; - }); - - panel_loading = false; - }); + const req = new XMLHttpRequest(); + req.open('GET', link, true); + req.responseType = 'document'; + req.onload = function (e) { + if (this.status != 200) { + return; + } + const html = this.response, + foreign = html.querySelectorAll('.nav_menu, #stream .day, #stream .flux, #stream .pagination, #stream.prompt'), + panel = document.getElementById('panel'); + foreign.forEach(function (el) { + panel.appendChild(document.adoptNode(el)); + }); + panel.querySelectorAll('.nav_menu > :not([id="nav_menu_read_all"])').forEach(function (el) { + el.remove(); + }); + + init_load_more(panel); + init_posts(); + + document.getElementById('overlay').classList.add('visible'); + panel.classList.add('visible'); + + // force le démarrage du scroll en haut. + // Sans ça, si l'on scroll en lisant une catégorie par exemple, + // en en ouvrant une autre ensuite, on se retrouve au même point de scroll + panel.scrollTop = 0; + document.documentElement.scrollTop = 0; + + //We already have a click listener in main.js + panel.addEventListener('click', function (ev) { + const b = ev.target.closest('#nav_menu_read_all button, #bigMarkAsRead'); + if (b) { + console.log(b.formAction); + + const req2 = new XMLHttpRequest(); + req2.open('POST', b.formAction, false); + req2.setRequestHeader('Content-Type', 'application/json'); + req2.send(JSON.stringify({ + _csrf: context.csrf, + })); + if (req2.status == 200) { + location.reload(false); + return false; + } + } + }); + + panel_loading = false; + }; + req.send(); } function init_close_panel() { - $("#overlay .close").click(function () { - $("#panel").html(''); - $("#panel").slideToggle(); - $("#overlay").fadeOut(); - - return false; - }); + const panel = document.getElementById('panel'); + document.querySelector('#overlay .close').onclick = function (ev) { + panel.innerHTML = ''; + panel.classList.remove('visible'); + document.getElementById('overlay').classList.remove('visible'); + return false; + }; } function init_global_view() { - // TODO: should be based on generic classes. - $(".box a").click(function () { - var link = $(this).attr("href"); - - load_panel(link); - - return false; - }); + // TODO: should be based on generic classes + document.querySelectorAll('.box a').forEach(function (a) { + a.onclick = function (ev) { + load_panel(a.href); + return false; + }; + }); - $(".nav_menu #nav_menu_read_all, .nav_menu .toggle_aside").remove(); + document.querySelectorAll('.nav_menu #nav_menu_read_all, .nav_menu .toggle_aside').forEach(function (el) { + el.remove(); + }); - init_stream($("#panel")); + const panel = document.getElementById('panel'); + init_stream(panel); } function init_all_global_view() { - if (!(window.$ && window.init_stream)) { + if (!window.context) { if (window.console) { console.log('FreshRSS Global view waiting for JS…'); } @@ -85,7 +105,7 @@ function init_all_global_view() { if (document.readyState && document.readyState !== 'loading') { init_all_global_view(); -} else if (document.addEventListener) { +} else { document.addEventListener('DOMContentLoaded', function () { init_all_global_view(); }, false); diff --git a/p/scripts/main.js b/p/scripts/main.js index 6cab2e55a..f59976b39 100644 --- a/p/scripts/main.js +++ b/p/scripts/main.js @@ -1,30 +1,61 @@ "use strict"; -/* globals $, jQuery, context, i18n, shortcut, shortcuts, url */ -/* jshint strict:global */ - -var $stream = null, - isCollapsed = true, - shares = 0, - ajax_loading = false; - -function redirect(url, new_tab) { - if (url) { - if (new_tab) { - window.open(url); - } else { - location.href = url; - } +/* jshint esversion:6, strict:global */ + +//<Polyfills> +if (!NodeList.prototype.forEach) NodeList.prototype.forEach = Array.prototype.forEach; +if (!Element.prototype.matches) Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.webkitMatchesSelector; +if (!Element.prototype.closest) Element.prototype.closest = function (s) { + let el = this; + do { + if (el.matches(s)) return el; + el = el.parentElement; + } while (el); + return null; + }; +if (!Element.prototype.remove) Element.prototype.remove = function () { if (this.parentNode) this.parentNode.removeChild(this); }; +//</Polyfills> + +//<Utils> +function xmlHttpRequestJson(req) { + let json = req.response; + if (req.responseType !== 'json') { //IE11 + try { json = JSON.parse(req.responseText); } + catch (ex) { json = null; } } + return json; } +//</Utils> + +//<Global context> +var context; -function needsScroll($elem) { - var $win = $(window), - winTop = $win.scrollTop(), - winHeight = $win.height(), - winBottom = winTop + winHeight, - elemTop = $elem.offset().top, - elemBottom = elemTop + $elem.outerHeight(); - return (elemTop < winTop || elemBottom > winBottom) ? elemTop - (winHeight / 2) : 0; +(function parseJsonVars() { + const jsonVars = document.getElementById('jsonVars'), + json = JSON.parse(jsonVars.innerHTML); + jsonVars.outerHTML = ''; + context = json.context; + context.ajax_loading = false; + context.i18n = json.i18n; + context.shortcuts = json.shortcuts; + context.urls = json.urls; + context.icons = json.icons; + context.icons.read = decodeURIComponent(context.icons.read); + context.icons.unread = decodeURIComponent(context.icons.unread); +}()); +//</Global context> + +function badAjax() { + openNotification(context.i18n.notif_request_failed, 'bad'); + location.reload(); + return true; +} + +function needsScroll(elem) { + const winBottom = document.documentElement.scrollTop + document.documentElement.clientHeight, + elemTop = elem.offsetParent.offsetTop + elem.offsetTop, + elemBottom = elemTop + elem.offsetHeight; + return (elemTop < document.documentElement.scrollTop || elemBottom > winBottom) ? + elemTop - (document.documentElement.clientHeight / 2) : 0; } function str2int(str) { @@ -40,10 +71,10 @@ function numberFormat(nStr) { } // http://www.mredkj.com/javascript/numberFormat.html nStr += ''; - var x = nStr.split('.'), - x1 = x[0], + const x = nStr.split('.'), x2 = x.length > 1 ? '.' + x[1] : '', rgx = /(\d+)(\d{3})/; + let x1 = x[0]; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ' ' + '$2'); } @@ -51,29 +82,29 @@ function numberFormat(nStr) { } function incLabel(p, inc, spaceAfter) { - var i = str2int(p) + inc; + const i = str2int(p) + inc; return i > 0 ? ((spaceAfter ? '' : ' ') + '(' + numberFormat(i) + ')' + (spaceAfter ? ' ' : '')) : ''; } function incUnreadsFeed(article, feed_id, nb) { //Update unread: feed - var elem = $('#' + feed_id).get(0), + let elem = document.getElementById(feed_id), feed_unreads = elem ? str2int(elem.getAttribute('data-unread')) : 0, feed_priority = elem ? str2int(elem.getAttribute('data-priority')) : 0; if (elem) { elem.setAttribute('data-unread', feed_unreads + nb); - elem = $(elem).children('.item-title').get(0); + elem = elem.querySelector('.item-title'); if (elem) { elem.setAttribute('data-unread', numberFormat(feed_unreads + nb)); } } //Update unread: category - elem = $('#' + feed_id).parents('.category').get(0); + elem = document.getElementById(feed_id).closest('.category'); feed_unreads = elem ? str2int(elem.getAttribute('data-unread')) : 0; if (elem) { elem.setAttribute('data-unread', feed_unreads + nb); - elem = $(elem).find('.title').get(0); + elem = elem.querySelector('.title'); if (elem) { elem.setAttribute('data-unread', numberFormat(feed_unreads + nb)); } @@ -81,7 +112,7 @@ function incUnreadsFeed(article, feed_id, nb) { //Update unread: all if (feed_priority > 0) { - elem = $('#aside_feed .all .title').get(0); + elem = document.querySelector('#aside_feed .all .title'); if (elem) { feed_unreads = elem ? str2int(elem.getAttribute('data-unread')) : 0; elem.setAttribute('data-unread', numberFormat(feed_unreads + nb)); @@ -89,22 +120,22 @@ function incUnreadsFeed(article, feed_id, nb) { } //Update unread: favourites - if (article && article.closest('div').hasClass('favorite')) { - elem = $('#aside_feed .favorites .title').get(0); + if (article && article.closest('div').classList.contains('favorite')) { + elem = document.querySelector('#aside_feed .favorites .title'); if (elem) { feed_unreads = elem ? str2int(elem.getAttribute('data-unread')) : 0; elem.setAttribute('data-unread', numberFormat(feed_unreads + nb)); } } - var isCurrentView = false; + let isCurrentView = false; // Update unread: title document.title = document.title.replace(/^((?:\([ 0-9]+\) )?)/, function (m, p1) { - var $feed = $('#' + feed_id); - if (article || ($feed.closest('.active').length > 0 && $feed.siblings('.active').length === 0)) { + const feed = document.getElementById(feed_id); + if (article || feed.closest('.active')) { isCurrentView = true; return incLabel(p1, nb, true); - } else if ($('.all.active').length > 0) { + } else if (document.querySelector('.all.active')) { isCurrentView = feed_priority > 0; return incLabel(p1, feed_priority > 0 ? nb : 0, true); } else { @@ -115,126 +146,191 @@ function incUnreadsFeed(article, feed_id, nb) { } function incUnreadsTag(tag_id, nb) { - var $t = $('#t_' + tag_id); - var unreads = str2int($t.attr('data-unread')); - $t.attr('data-unread', unreads + nb) - .children('.item-title').attr('data-unread', numberFormat(unreads + nb)); - - $t = $('.category.tags').find('.title'); - unreads = str2int($t.attr('data-unread')); - $t.attr('data-unread', numberFormat(unreads + nb)); -} - -var pending_entries = {}; -function mark_read(active, only_not_read) { - if ((active.length === 0) || (!active.attr('id')) || - context.anonymous || - (only_not_read && !active.hasClass("not_read"))) { - return false; + let t = document.getElementById(tag_id); + if (t) { + let unreads = str2int(t.getAttribute('data-unread')); + t.setAttribute('data-unread', unreads + nb); + t.querySelector('.item-title').setAttribute('data-unread', numberFormat(unreads + nb)); } - - if (pending_entries[active.attr('id')]) { - return false; + t = document.querySelector('.category.tags .title'); + if (t) { + let unreads = str2int(t.getAttribute('data-unread')); + t.setAttribute('data-unread', numberFormat(unreads + nb)); } - pending_entries[active.attr('id')] = true; +} - var url = '.?c=entry&a=read&id=' + active.attr('id').replace(/^flux_/, '') + - (active.hasClass('not_read') ? '' : '&is_read=0'); +var pending_entries = {}, + mark_read_queue = []; - $.ajax({ - type: 'POST', - url: url, - data: { +function send_mark_read_queue(queue, asRead, callback) { + const req = new XMLHttpRequest(); + req.open('POST', '.?c=entry&a=read' + (asRead ? '' : '&is_read=0'), true); + req.responseType = 'json'; + req.onerror = function (e) { + openNotification(context.i18n.notif_request_failed, 'bad'); + for (let i = queue.length - 1; i >= 0; i--) { + delete pending_entries['flux_' + queue[i]]; + } + if (this.status == 403) { + badAjax(); + } + }; + req.onload = function (e) { + if (this.status != 200) { + return req.onerror(e); + } + const json = xmlHttpRequestJson(this); + for (let i = queue.length - 1; i >= 0; i--) { + const div = document.getElementById('flux_' + queue[i]), + myIcons = context.icons; + let inc = 0; + if (div.classList.contains('not_read')) { + div.classList.remove('not_read'); + div.querySelectorAll('a.read').forEach(function (a) { + a.href = a.href.replace('&is_read=0', '') + '&is_read=1'; + }); + div.querySelectorAll('a.read > .icon').forEach(function (img) { img.outerHTML = myIcons.read; }); + inc--; + } else { + div.classList.add('not_read'); + div.classList.add('keep_unread'); //Split for IE11 + div.querySelectorAll('a.read').forEach(function (a) { + a.href = a.href.replace('&is_read=1', ''); + }); + div.querySelectorAll('a.read > .icon').forEach(function (img) { img.outerHTML = myIcons.unread; }); + inc++; + } + let feed_link = div.querySelector('.website > a, a.website'); + if (feed_link) { + const feed_url = feed_link.href, + feed_id = feed_url.substr(feed_url.lastIndexOf('f_')); + incUnreadsFeed(div, feed_id, inc); + } + delete pending_entries['flux_' + queue[i]]; + } + faviconNbUnread(); + if (json.tags) { + const tagIds = Object.keys(json.tags); + for (let i = tagIds.length - 1; i >= 0; i--) { + let tagId = tagIds[i]; + incUnreadsTag(tagId, (asRead ? -1 : 1) * json.tags[tagId].length); + } + } + onScroll(); + if (callback) { + callback(); + } + }; + req.setRequestHeader('Content-Type', 'application/json'); + req.send(JSON.stringify({ ajax: true, _csrf: context.csrf, - }, - }).done(function (data) { - var $r = active.find("a.read").attr("href", data.url), - inc = 0; - if (active.hasClass("not_read")) { - active.removeClass("not_read"); - inc--; - } else { - active.addClass("not_read"); - active.addClass("keep_unread"); - inc++; - } - $r.find('.icon').replaceWith(data.icon); + id: queue, + })); +} - var feed_url = active.find(".website>a").attr("href"); - if (feed_url) { - var feed_id = feed_url.substr(feed_url.lastIndexOf('f_')); - incUnreadsFeed(active, feed_id, inc); - } - faviconNbUnread(); +var send_mark_read_queue_timeout = 0; - if (data.tags) { - for (var i = data.tags.length - 1; i >= 0; i--) { - incUnreadsTag(data.tags[i], inc); - } - } +function send_mark_queue_tick(callback) { + send_mark_read_queue_timeout = 0; + const queue = mark_read_queue.slice(0); + mark_read_queue = []; + send_mark_read_queue(queue, true, callback); +} - delete pending_entries[active.attr('id')]; - }).fail(function (data) { - openNotification(i18n.notif_request_failed, 'bad'); - delete pending_entries[active.attr('id')]; - }); +function delayedClick(a) { + if (a) { + send_mark_queue_tick(function () { a.click(); }); + } } -function mark_favorite(active) { - if (active.length === 0) { +function mark_read(div, only_not_read) { + if (!div || !div.id || context.anonymous || + (only_not_read && !div.classList.contains('not_read'))) { + return false; + } + if (pending_entries[div.id]) { return false; } + pending_entries[div.id] = true; + + const asRead = div.classList.contains('not_read'), + entryId = div.id.replace(/^flux_/, ''); + if (asRead) { + mark_read_queue.push(entryId); + if (send_mark_read_queue_timeout == 0) { + send_mark_read_queue_timeout = setTimeout(function () { send_mark_queue_tick(null); }, 1000); + } + } else { + const queue = [ entryId ]; + send_mark_read_queue(queue, asRead); + } +} - var url = active.find("a.bookmark").attr("href"); - if (url === undefined) { +function mark_favorite(div) { + if (!div) { return false; } - if (pending_entries[active.attr('id')]) { + let a = div.querySelector('a.bookmark'), + url = a ? a.href : ''; + if (!url) { return false; } - pending_entries[active.attr('id')] = true; - $.ajax({ - type: 'POST', - url: url, - data: { - ajax: true, - _csrf: context.csrf, - }, - }).done(function (data) { - var $b = active.find("a.bookmark").attr("href", data.url), - inc = 0; - if (active.hasClass("favorite")) { - active.removeClass("favorite"); - inc--; - } else { - active.addClass("favorite").find('.bookmark'); - inc++; - } - $b.find('.icon').replaceWith(data.icon); + if (pending_entries[div.id]) { + return false; + } + pending_entries[div.id] = true; + + const req = new XMLHttpRequest(); + req.open('POST', url, true); + req.responseType = 'json'; + req.onerror = function (e) { + openNotification(context.i18n.notif_request_failed, 'bad'); + delete pending_entries[div.id]; + if (this.status == 403) { + badAjax(); + } + }; + req.onload = function (e) { + if (this.status != 200) { + return req.onerror(e); + } + const json = xmlHttpRequestJson(this); + let inc = 0; + if (div.classList.contains('favorite')) { + div.classList.remove('favorite'); + inc--; + } else { + div.classList.add('favorite'); + inc++; + } + div.querySelectorAll('a.bookmark').forEach(function (a) { a.href = json.url; }); + div.querySelectorAll('a.bookmark > .icon').forEach(function (img) { img.outerHTML = json.icon; }); - var favourites = $('#aside_feed .favorites .title').contents().last().get(0); - if (favourites && favourites.textContent) { - favourites.textContent = favourites.textContent.replace(/((?: \([ 0-9]+\))?\s*)$/, function (m, p1) { - return incLabel(p1, inc, false); - }); - } + const favourites = document.querySelector('#aside_feed .favorites .title'); + if (favourites) { + favourites.textContent = favourites.textContent.replace(/((?: \([ 0-9]+\))?\s*)$/, function (m, p1) { + return incLabel(p1, inc, false); + }); + } - if (active.closest('div').hasClass('not_read')) { - var elem = $('#aside_feed .favorites .title').get(0), - feed_unreads = elem ? str2int(elem.getAttribute('data-unread')) : 0; - if (elem) { - elem.setAttribute('data-unread', numberFormat(feed_unreads + inc)); + if (div.classList.contains('not_read')) { + const elem = document.querySelector('#aside_feed .favorites .title'), + feed_unreads = elem ? str2int(elem.getAttribute('data-unread')) : 0; + if (elem) { + elem.setAttribute('data-unread', numberFormat(feed_unreads + inc)); + } } - } - delete pending_entries[active.attr('id')]; - }).fail(function (data) { - openNotification(i18n.notif_request_failed, 'bad'); - delete pending_entries[active.attr('id')]; - }); + delete pending_entries[div.id]; + }; + req.setRequestHeader('Content-Type', 'application/json'); + req.send(JSON.stringify({ + ajax: true, + _csrf: context.csrf, + })); } var freshrssOpenArticleEvent = document.createEvent('Event'); @@ -242,208 +338,198 @@ freshrssOpenArticleEvent.initEvent('freshrss:openArticle', true, true); function toggleContent(new_active, old_active, skipping) { // If skipping, move current without activating or marking as read - if (new_active.length === 0) { + if (!new_active) { return; } if (context.does_lazyload && !skipping) { - new_active.find('img[data-original], iframe[data-original]').each(function () { - this.setAttribute('src', this.getAttribute('data-original')); - this.removeAttribute('data-original'); + new_active.querySelectorAll('img[data-original], iframe[data-original]').forEach(function (el) { + el.src = el.getAttribute('data-original'); + el.removeAttribute('data-original'); }); } - if (old_active[0] !== new_active[0]) { - if (isCollapsed && !skipping) { // BUG?: isCollapsed can only ever be true - new_active.addClass("active"); + if (old_active !== new_active) { + if (!skipping) { + new_active.classList.add('active'); } - old_active.removeClass("active current"); - new_active.addClass("current"); - if (context.auto_remove_article && !old_active.hasClass('not_read') && !skipping) { - auto_remove(old_active); + new_active.classList.add('current'); + if (old_active) { + old_active.classList.remove('active'); + old_active.classList.remove('current'); //Split for IE11 } - } else { // collapse_entry calls toggleContent(flux_current, flux_current, false) - new_active.toggleClass('active'); + } else { + new_active.classList.toggle('active'); } - var relative_move = context.current_view === 'global', - box_to_move = $(relative_move ? "#panel" : "html,body"); + const relative_move = context.current_view === 'global', + box_to_move = relative_move ? document.getElementById('panel') : document.documentElement; if (context.sticky_post) { - var prev_article = new_active.prevAll('.flux'), - new_pos = new_active.offset().top, - old_scroll = box_to_move.scrollTop(); + let prev_article = new_active.previousElementSibling, + new_pos = new_active.offsetTop + document.documentElement.scrollTop, + old_scroll = box_to_move.scrollTop; - if (prev_article.length > 0 && new_pos - prev_article.offset().top <= 150) { - new_pos = prev_article.offset().top; + if (prev_article && new_active.offsetTop - prev_article.offsetTop <= 150) { + new_pos = prev_article.offsetTop; if (relative_move) { - new_pos -= box_to_move.offset().top; + new_pos -= box_to_move.offsetTop; } } if (skipping) { // when skipping, this feels more natural if it's not so near the top - new_pos -= $(window).height() / 4; + new_pos -= document.body.clientHeight / 4; } - if (context.hide_posts) { - if (relative_move) { - new_pos += old_scroll; - } - - new_active.children(".flux_content").first().each(function () { - box_to_move.scrollTop(new_pos).scrollTop(); - }); - } else { - if (relative_move) { - new_pos += old_scroll; - } - - box_to_move.scrollTop(new_pos).scrollTop(); + if (relative_move) { + new_pos += old_scroll; } + box_to_move.scrollTop = new_pos; } - if (new_active.hasClass('active') && !skipping) { + if (new_active.classList.contains('active') && !skipping) { if (context.auto_mark_article) { mark_read(new_active, true); } - new_active[0].dispatchEvent(freshrssOpenArticleEvent); + new_active.dispatchEvent(freshrssOpenArticleEvent); } + onScroll(); } -function auto_remove(element) { - var p = element.prev(); - var n = element.next(); - if (p.hasClass('day') && n.hasClass('day')) { - p.remove(); - } - element.remove(); - $('#stream > .flux:not(.not_read):not(.active)').remove(); -} - -function prev_entry() { - var old_active = $(".flux.current"), - new_active = old_active.length === 0 ? $(".flux:last") : old_active.prevAll(".flux:first"); - toggleContent(new_active, old_active, false); -} - -function next_entry() { - var old_active = $(".flux.current"), - new_active = old_active.length === 0 ? $(".flux:first") : old_active.nextAll(".flux:first"); - toggleContent(new_active, old_active, false); - - if (new_active.nextAll().length < 3) { - load_more_posts(); +function prev_entry(skipping) { + const old_active = document.querySelector('.flux.current'); + let new_active = old_active; + if (new_active) { + do new_active = new_active.previousElementSibling; + while (new_active && !new_active.classList.contains('flux')); + if (!new_active) { + prev_feed(); + } + } else { + new_active = document.querySelector('.flux'); } + toggleContent(new_active, old_active, skipping); } -function skip_prev_entry() { - var old_active = $(".flux.current"), - new_active = old_active.length === 0 ? $(".flux:last") : old_active.prevAll(".flux:first"); - toggleContent(new_active, old_active, true); -} - -function skip_next_entry() { - var old_active = $(".flux.current"), - new_active = old_active.length === 0 ? $(".flux:first") : old_active.nextAll(".flux:first"); - toggleContent(new_active, old_active, true); - - if (new_active.nextAll().length < 3) { - load_more_posts(); +function next_entry(skipping) { + const old_active = document.querySelector('.flux.current'); + let new_active = old_active; + if (new_active) { + do new_active = new_active.nextElementSibling; + while (new_active && !new_active.classList.contains('flux')); + if (!new_active) { + next_feed(); + } + } else { + new_active = document.querySelector('.flux'); } + toggleContent(new_active, old_active, skipping); } function prev_feed() { - var active_feed = $("#aside_feed .tree-folder-items .item.active"); - if (active_feed.length > 0) { - active_feed.prevAll(':visible:first').find('a').each(function(){this.click();}); - } else { + let found = false; + const feeds = document.querySelectorAll('#aside_feed .feed'); + for (let i = feeds.length - 1; i >= 0; i--) { + const feed = feeds[i]; + if (found && getComputedStyle(feed).display !== 'none') { + delayedClick(feed.querySelector('a.item-title')); + break; + } else if (feed.classList.contains('active')) { + found = true; + } + } + if (!found) { last_feed(); } } function next_feed() { - var active_feed = $("#aside_feed .tree-folder-items .item.active"); - if (active_feed.length > 0) { - active_feed.nextAll(':visible:first').find('a').each(function(){this.click();}); - } else { + let found = false; + const feeds = document.querySelectorAll('#aside_feed .feed'); + for (let i = 0; i < feeds.length; i++) { + const feed = feeds[i]; + if (found && getComputedStyle(feed).display !== 'none') { + delayedClick(feed.querySelector('a.item-title')); + break; + } else if (feed.classList.contains('active')) { + found = true; + } + } + if (!found) { first_feed(); } } function first_feed() { - var feed = $("#aside_feed .tree-folder-items.active .item:visible:first"); - if (feed.length > 0) { - feed.find('a')[1].click(); - } + const a = document.querySelector('#aside_feed .category.active .feed:not([data-unread="0"]) a.item-title'); + delayedClick(a); } function last_feed() { - var feed = $("#aside_feed .tree-folder-items.active .item:visible:last"); - if (feed.length > 0) { - feed.find('a')[1].click(); + const links = document.querySelectorAll('#aside_feed .category.active .feed:not([data-unread="0"]) a.item-title'); + if (links && links.length > 0) { + delayedClick(links[links.length - 1]); } } function prev_category() { - var active_cat = $("#aside_feed .tree-folder.active"); - - if (active_cat.length > 0) { - var prev_cat = active_cat.prevAll(':visible:first').find('.tree-folder-title .title'); - if (prev_cat.length > 0) { - prev_cat[0].click(); + const active_cat = document.querySelector('#aside_feed .category.active'); + if (active_cat) { + let cat = active_cat; + do cat = cat.previousElementSibling; + while (cat && getComputedStyle(cat).display === 'none'); + if (cat) { + delayedClick(cat.querySelector('a.title')); } } else { last_category(); } - return; } function next_category() { - var active_cat = $("#aside_feed .tree-folder.active"); - - if (active_cat.length > 0) { - var next_cat = active_cat.nextAll(':visible:first').find('.tree-folder-title .title'); - if (next_cat.length > 0) { - next_cat[0].click(); + const active_cat = document.querySelector('#aside_feed .category.active'); + if (active_cat) { + let cat = active_cat; + do cat = cat.nextElementSibling; + while (cat && getComputedStyle(cat).display === 'none'); + if (cat) { + delayedClick(cat.querySelector('a.title')); } } else { first_category(); } - return; } function first_category() { - var cat = $("#aside_feed .tree-folder:visible:first"); - if (cat.length > 0) { - cat.find('.tree-folder-title .title')[0].click(); - } + const a = document.querySelector('#aside_feed .category:not([data-unread="0"]) a.title'); + delayedClick(a); } function last_category() { - var cat = $("#aside_feed .tree-folder:visible:last"); - if (cat.length > 0) { - cat.find('.tree-folder-title .title')[0].click(); + const links = document.querySelectorAll('#aside_feed .category:not([data-unread="0"]) a.title'); + if (links && links.length > 0) { + delayedClick(links[links.length - 1]); } } function collapse_entry() { - var flux_current = $(".flux.current"); + const flux_current = document.querySelector('.flux.current'); toggleContent(flux_current, flux_current, false); } function user_filter(key) { - var filter = $('#dropdown-query'); - var filters = filter.siblings('.dropdown-menu').find('.item.query a'); - if (typeof key === "undefined") { - if (!filter.length) { + const filter = document.getElementById('dropdown-query'), + filters = filter.parentElement.querySelectorAll('.dropdown-menu > .query > a'); + if (typeof key === 'undefined') { + if (!filters.length) { return; } // Display the filter div - window.location.hash = filter.attr('id'); + location.hash = filter.id; // Force scrolling to the filter div - var scroll = needsScroll($('.header')); + const scroll = needsScroll(document.querySelector('.header')); if (scroll !== 0) { - $('html,body').scrollTop(scroll); + document.documentElement.scrollTop = scroll; } // Force the key value if there is only one action, so we can trigger it automatically if (filters.length === 1) { @@ -460,18 +546,18 @@ function user_filter(key) { } function auto_share(key) { - var share = $(".flux.current.active").find('.dropdown-target[id^="dropdown-share"]'); - var shares = share.siblings('.dropdown-menu').find('.item a'); - if (typeof key === "undefined") { - if (!share.length) { - return; - } + const share = document.querySelector('.flux.current.active .dropdown-target[id^="dropdown-share"]'); + if (!share) { + return; + } + const shares = share.parentElement.querySelectorAll('.dropdown-menu .item a'); + if (typeof key === 'undefined') { // Display the share div - window.location.hash = share.attr('id'); + location.hash = share.id; // Force scrolling to the share div - var scroll = needsScroll(share.closest('.bottom')); - if (scroll !== 0) { - $('html,body').scrollTop(scroll); + const scrollTop = needsScroll(share.closest('.bottom')); + if (scrollTop !== 0) { + document.documentElement.scrollTop = scrollTop; } // Force the key value if there is only one action, so we can trigger it automatically if (shares.length === 1) { @@ -484,52 +570,70 @@ function auto_share(key) { key = parseInt(key); if (key <= shares.length) { shares[key - 1].click(); - share.siblings('.dropdown-menu').find('.dropdown-close a')[0].click(); + share.parentElement.querySelector('.dropdown-menu .dropdown-close a').click(); } } -function scrollAsRead(box_to_follow) { - var minTop = 40 + (context.current_view === 'global' ? box_to_follow.offset().top : box_to_follow.scrollTop()); - $('.not_read:not(.keep_unread):visible').each(function () { - var $this = $(this); - if ($this.offset().top + $this.height() < minTop) { - mark_read($this, true); - } - }); +var box_to_follow; + +function onScroll() { + if (!box_to_follow) { + return; + } + if (context.auto_mark_scroll) { + const minTop = 40 + box_to_follow.scrollTop; + document.querySelectorAll('.not_read:not(.keep_unread)').forEach(function (div) { + if (div.offsetHeight > 0 && + div.offsetParent.offsetTop + div.offsetTop + div.offsetHeight < minTop) { + mark_read(div, true); + } + }); + } + if (context.auto_remove_article) { + let maxTop = box_to_follow.scrollTop, + scrollOffset = 0; + document.querySelectorAll('.flux:not(.active):not(.keep_unread)').forEach(function (div) { + if (!pending_entries[div.id] && div.offsetHeight > 0 && + div.offsetParent.offsetTop + div.offsetTop + div.offsetHeight < maxTop) { + const p = div.previousElementSibling, + n = div.nextElementSibling; + if (p && p.classList.contains('day') && n && n.classList.contains('day')) { + p.remove(); + } + maxTop -= div.offsetHeight; + scrollOffset -= div.offsetHeight; + div.remove(); + } + }); + if (scrollOffset != 0) { + box_to_follow.scrollTop += scrollOffset; + return; //onscroll will be called again + } + } + if (context.auto_load_more) { + const pagination = document.getElementById('mark-read-pagination'); + if (pagination && box_to_follow.offsetHeight > 0 && + box_to_follow.scrollTop + box_to_follow.offsetHeight + (window.innerHeight / 2) >= pagination.offsetTop) { + load_more_posts(); + } + } } function init_posts() { - var box_to_follow = context.current_view === 'global' ? $("#panel") : $(window); - - if (context.auto_mark_scroll) { - var lastScroll = 0, //Throttle + if (context.auto_load_more || context.auto_mark_scroll || context.auto_remove_article) { + box_to_follow = context.current_view === 'global' ? document.getElementById('panel') : document.documentElement; + let lastScroll = 0, //Throttle timerId = 0; - box_to_follow.scroll(function () { - window.clearTimeout(timerId); + (box_to_follow === document.documentElement ? window : box_to_follow).onscroll = function () { + clearTimeout(timerId); if (lastScroll + 500 < Date.now()) { lastScroll = Date.now(); - scrollAsRead(box_to_follow); + onScroll(); } else { - timerId = window.setTimeout(function() { - scrollAsRead(box_to_follow); - }, 500); + timerId = setTimeout(onScroll, 500); } - }); - } - - if (context.auto_load_more) { - box_to_follow.scroll(function () { - var load_more = $("#load_more"); - if (!load_more.is(':visible')) { - return; - } - var boxBot = box_to_follow.scrollTop() + box_to_follow.height(), - load_more_top = load_more.offset().top; - if (boxBot >= load_more_top) { - load_more_posts(); - } - }); - box_to_follow.scroll(); + }; + onScroll(); } } @@ -538,482 +642,481 @@ function init_column_categories() { return; } - $('#aside_feed').on('click', '.tree-folder>.tree-folder-title>a.dropdown-toggle', function () { - $(this).children().each(function() { - if (this.alt === '▽') { - this.src = this.src.replace('/icons/down.', '/icons/up.'); - this.alt = '△'; + document.getElementById('aside_feed').onclick = function (ev) { + let a = ev.target.closest('.tree-folder > .tree-folder-title > a.dropdown-toggle'); + if (a) { + const img = a.querySelector('img'); + if (img.alt === '▽') { + img.src = img.src.replace('/icons/down.', '/icons/up.'); + img.alt = '△'; } else { - this.src = this.src.replace('/icons/up.', '/icons/down.'); - this.alt = '▽'; + img.src = img.src.replace('/icons/up.', '/icons/down.'); + img.alt = '▽'; } - }); - $(this).parent().next(".tree-folder-items").slideToggle(300, function () { - //Workaround for Gecko bug 1514498 in Firefox 64 - var sidebar = document.getElementById('sidebar'); - if (sidebar && sidebar.scrollHeight > sidebar.clientHeight && //if needs scrollbar - sidebar.scrollWidth >= sidebar.offsetWidth) { //but no scrollbar - sidebar.style['overflow-y'] = 'scroll'; //then force scrollbar - setTimeout(function () { sidebar.style['overflow-y'] = ''; }, 0); + + const ul = a.closest('li').querySelector('.tree-folder-items'); + let nbVisibleItems = 0; + for (let i = ul.children.length - 1; i >= 0; i--) { + if (ul.children[i].offsetHeight) { + nbVisibleItems++; + } } - }); - return false; - }); + ul.classList.toggle('active'); + //CSS transition does not work on max-height:auto + ul.style.maxHeight = ul.classList.contains('active') ? (nbVisibleItems * 4) + 'em' : 0; + return false; + } - $('#aside_feed').on('click', '.tree-folder-items .feed .dropdown-toggle', function () { - var itemId = $(this).closest('.item').attr('id'), - templateId = itemId.substring(0, 2) === 't_' ? 'tag_config_template' : 'feed_config_template', - id = itemId.substr(2), - feed_web = $(this).data('fweb'), - template = $('#' + templateId) - .html().replace(/------/g, id).replace('http://example.net/', feed_web); - if ($(this).next('.dropdown-menu').length === 0) { - $(this).attr('href', '#dropdown-' + id).prev('.dropdown-target').attr('id', 'dropdown-' + id).parent() - .append(template).find('button.confirm').removeAttr('disabled'); - } else { - if ($(this).next('.dropdown-menu').css('display') === 'none') { - id = $(this).closest('.item').attr('id').substr(2); - $(this).attr('href', '#dropdown-' + id); + a = ev.target.closest('.tree-folder-items > .feed .dropdown-toggle'); + if (a) { + const itemId = a.closest('.item').id, + templateId = itemId.substring(0, 2) === 't_' ? 'tag_config_template' : 'feed_config_template', + id = itemId.substr(2), + feed_web = a.getAttribute('data-fweb'), + div = a.parentElement, + dropdownMenu = div.querySelector('.dropdown-menu'), + template = document.getElementById(templateId) + .innerHTML.replace(/------/g, id).replace('http://example.net/', feed_web); + if (!dropdownMenu) { + a.href = '#dropdown-' + id; + div.querySelector('.dropdown-target').id = 'dropdown-' + id; + div.insertAdjacentHTML('beforeend', template); + div.querySelector('button.confirm').disabled = false; + } else if (getComputedStyle(dropdownMenu).display === 'none') { + const id2 = div.closest('.item').id.substr(2); + a.href = '#dropdown-' + id2; } else { - $(this).attr('href', "#close"); + a.href = '#close'; } + return true; } - }); + + return true; + }; } function init_shortcuts() { - if (!(window.shortcut && window.shortcuts)) { - if (window.console) { - console.log('FreshRSS waiting for shortcut.js…'); - } - window.setTimeout(init_shortcuts, 200); - return; - } - // Manipulation shortcuts - shortcut.add(shortcuts.mark_read, function () { - // Toggle the read state - var active = $(".flux.current"); - mark_read(active, false); - }, { - 'disable_in_input': true - }); - shortcut.add("shift+" + shortcuts.mark_read, function () { - // Mark everything as read - $(".nav_menu .read_all").click(); - }, { - 'disable_in_input': true - }); - shortcut.add(shortcuts.mark_favorite, function () { - // Toggle the favorite state - var active = $(".flux.current"); - mark_favorite(active); - }, { - 'disable_in_input': true - }); - shortcut.add(shortcuts.collapse_entry, function () { - // Toggle the collapse state - collapse_entry(); - }, { - 'disable_in_input': true - }); - shortcut.add(shortcuts.auto_share, function () { - // Display the share options - auto_share(); - }, { - 'disable_in_input': true - }); + Object.keys(context.shortcuts).forEach(function (k) { + context.shortcuts[k] = (context.shortcuts[k] || '').toUpperCase(); + }); - shortcut.add(shortcuts.user_filter, function () { - // Display the user filters - user_filter(); - }, { - 'disable_in_input': true - }); + document.body.onkeydown = function (ev) { + if (ev.target.closest('input, textarea') || + ev.ctrlKey || ev.metaKey || (ev.altKey && ev.shiftKey)) { + return true; + } - function addShortcut(evt) { - if ($('#dropdown-query').siblings('.dropdown-menu').is(':visible')) { - user_filter(String.fromCharCode(evt.keyCode)); - } else { - auto_share(String.fromCharCode(evt.keyCode)); - } - } - for (var i = 1; i < 10; i++) { - shortcut.add(i.toString(), addShortcut, { - 'disable_in_input': true - }); - } + const s = context.shortcuts, + k = (ev.key.trim() || ev.code).toUpperCase(); + if (location.hash.match(/^#dropdown-/)) { + const n = parseInt(k); + if (n) { + if (location.hash === '#dropdown-query') { + user_filter(n); + } else { + auto_share(n); + } + return false; + } + } + if (k === s.next_entry) { + if (ev.altKey) { + next_category(); + } else if (ev.shiftKey) { + next_feed(); + } else { + next_entry(false); + } + return false; + } + if (k === s.prev_entry) { + if (ev.altKey) { + prev_category(); + } else if (ev.shiftKey) { + prev_feed(); + } else { + prev_entry(false); + } + return false; + } + if (k === s.mark_read) { + if (ev.altKey) { + return true; + } else if (ev.shiftKey) { // Mark everything as read + document.querySelector('.nav_menu .read_all').click(); + } else { // Toggle the read state + mark_read(document.querySelector('.flux.current'), false); + } + return false; + } + if (k === s.first_entry) { + if (ev.altKey) { + first_category(); + } else if (ev.shiftKey) { + first_feed(); + } else { + const old_active = document.querySelector('.flux.current'), + first = document.querySelector('.flux'); + if (first.classList.contains('flux')) { + toggleContent(first, old_active, false); + } + } + return false; + } + if (k === s.last_entry) { + if (ev.altKey) { + last_category(); + } else if (ev.shiftKey) { + last_feed(); + } else { + const old_active = document.querySelector('.flux.current'), + last = document.querySelector('.flux:last-of-type'); + if (last.classList.contains('flux')) { + toggleContent(last, old_active, false); + } + } + return false; + } - // Entry navigation shortcuts - shortcut.add(shortcuts.prev_entry, prev_entry, { - 'disable_in_input': true - }); - shortcut.add(shortcuts.skip_prev_entry, skip_prev_entry, { - 'disable_in_input': true - }); - shortcut.add(shortcuts.first_entry, function () { - var old_active = $(".flux.current"), - first = $(".flux:first"); + if (ev.altKey || ev.shiftKey) { + return true; + } + if (k === s.mark_favorite) { // Toggle the favorite state + mark_favorite(document.querySelector('.flux.current')); + return false; + } + if (k === s.go_website) { + if (context.auto_mark_site) { + mark_read(document.querySelector('.flux.current'), true); + } + window.open(document.querySelector('.flux.current a.go_website').href); + return false; + } + if (k === s.skip_next_entry) { next_entry(true); return false; } + if (k === s.skip_prev_entry) { prev_entry(true); return false; } + if (k === s.collapse_entry) { collapse_entry(); return false; } + if (k === s.auto_share) { auto_share(); return false; } + if (k === s.user_filter) { user_filter(); return false; } + if (k === s.load_more) { load_more_posts(); return false; } + if (k === s.close_dropdown) { location.hash = null; return false; } + if (k === s.help) { window.open(context.urls.help); return false; } + if (k === s.focus_search) { document.getElementById('search').focus(); return false; } + if (k === s.normal_view) { delayedClick(document.querySelector('#nav_menu_views .view-normal')); return false; } + if (k === s.reading_view) { delayedClick(document.querySelector('#nav_menu_views .view-reader')); return false; } + if (k === s.global_view) { delayedClick(document.querySelector('#nav_menu_views .view-global')); return false; } + if (k === s.rss_view) { delayedClick(document.querySelector('#nav_menu_views .view-rss')); return false; } + return true; + }; +} - if (first.hasClass("flux")) { - toggleContent(first, old_active, false); +function init_stream(stream) { + stream.onclick = function (ev) { + let el = ev.target.closest('.flux a.read'); + if (el) { + mark_read(el.closest('.flux'), false); + return false; } - }, { - 'disable_in_input': true - }); - shortcut.add(shortcuts.next_entry, next_entry, { - 'disable_in_input': true - }); - shortcut.add(shortcuts.skip_next_entry, skip_next_entry, { - 'disable_in_input': true - }); - shortcut.add(shortcuts.last_entry, function () { - var old_active = $(".flux.current"), - last = $(".flux:last"); - if (last.hasClass("flux")) { - toggleContent(last, old_active, false); + el = ev.target.closest('.flux a.bookmark'); + if (el) { + mark_favorite(el.closest('.flux')); + return false; } - }, { - 'disable_in_input': true - }); - // Feed navigation shortcuts - shortcut.add("shift+" + shortcuts.prev_entry, prev_feed, { - 'disable_in_input': true - }); - shortcut.add("shift+" + shortcuts.next_entry, next_feed, { - 'disable_in_input': true - }); - shortcut.add("shift+" + shortcuts.first_entry, first_feed, { - 'disable_in_input': true - }); - shortcut.add("shift+" + shortcuts.last_entry, last_feed, { - 'disable_in_input': true - }); - // Category navigation shortcuts - shortcut.add("alt+" + shortcuts.prev_entry, prev_category, { - 'disable_in_input': true - }); - shortcut.add("alt+" + shortcuts.next_entry, next_category, { - 'disable_in_input': true - }); - shortcut.add("alt+" + shortcuts.first_entry, first_category, { - 'disable_in_input': true - }); - shortcut.add("alt+" + shortcuts.last_entry, last_category, { - 'disable_in_input': true - }); - - shortcut.add(shortcuts.go_website, function () { - var url_website = $('.flux.current a.go_website').attr("href"); - if (context.auto_mark_site) { - $(".flux.current").each(function () { - mark_read($(this), true); - }); + el = ev.target.closest('.dynamictags'); + if (el) { + loadDynamicTags(el); + return true; } - redirect(url_website, true); - }, { - 'disable_in_input': true - }); - - shortcut.add(shortcuts.load_more, function () { - load_more_posts(); - }, { - 'disable_in_input': true - }); - - shortcut.add(shortcuts.focus_search, function () { - focus_search(); - }, { - 'disable_in_input': true - }); - - shortcut.add(shortcuts.help, function () { - redirect(url.help, true); - }, { - 'disable_in_input': true - }); - - shortcut.add(shortcuts.close_dropdown, function () { - window.location.hash = null; - }, { - 'disable_in_input': true - }); - - shortcut.add(shortcuts.normal_view, function () { - $('#nav_menu_views .view-normal').get(0).click(); - }, { - 'disable_in_input': true - }); - - shortcut.add(shortcuts.global_view, function () { - $('#nav_menu_views .view-global').get(0).click(); - }, { - 'disable_in_input': true - }); - - shortcut.add(shortcuts.reading_view, function () { - $('#nav_menu_views .view-reader').get(0).click(); - }, { - 'disable_in_input': true - }); - - shortcut.add(shortcuts.rss_view, function () { - $('#nav_menu_views .view-rss').get(0).click(); - }, { - 'disable_in_input': true - }); -} - -function init_stream(divStream) { - divStream.on('click', '.flux_header,.flux_content', function (e) { //flux_toggle - if ($(e.target).closest('.content, .item.website, .item.link, .dropdown-menu').length > 0) { - return; + el = ev.target.closest('.item.title > a'); + if (el) { // Allow default control-click behaviour such as open in backround-tab + return ev.ctrlKey; } - if (!context.sides_close_article && $(e.target).is('div.flux_content')) { - // setting for not-closing after clicking outside article area - return; - } - var old_active = $(".flux.current"), - new_active = $(this).parent(); - isCollapsed = true; - if (e.target.tagName.toUpperCase() === 'A') { //Leave real links alone - if (context.auto_mark_article) { - mark_read(new_active, true); + + el = ev.target.closest('.flux .content a'); + if (el) { + if (!el.closest('div').classList.contains('author')) { + el.target = '_blank'; + el.rel = 'noreferrer'; } return true; } - toggleContent(new_active, old_active, false); - }); - divStream.on('click', '.flux a.read', function () { - var active = $(this).parents(".flux"); - if (context.auto_remove_article && active.hasClass('not_read')) { - auto_remove(active); + el = ev.target.closest('.item.share > a[href="#"]'); + if (el) { //Print + const content = '<html><head><style>' + + 'body { font-family: Serif; text-align: justify; }' + + 'a { color: #000; text-decoration: none; }' + + 'a:after { content: " [" attr(href) "]"}' + + '</style></head><body>' + + el.closest('.flux_content').querySelector('.content').innerHTML + + '</body></html>'; + const tmp_window = window.open(); + tmp_window.document.writeln(content); + tmp_window.document.close(); + tmp_window.focus(); + tmp_window.print(); + tmp_window.close(); + return false; } - mark_read(active, false); - return false; - }); - - divStream.on('click', '.flux a.bookmark', function () { - var active = $(this).parents(".flux"); - mark_favorite(active); - return false; - }); - divStream.on('click', '.item.title > a', function (e) { - // Allow default control-click behaviour such as open in backround-tab. - return e.ctrlKey; - }); - divStream.on('mouseup', '.item.title > a', function (e) { - // Mouseup enables us to catch middle click. - if (e.ctrlKey) { - // CTRL+click, it will be manage by previous rule. - return; + el = ev.target.closest('.item.share > a[href="POST"]'); + if (el) { //Share by POST + const f = el.parentElement.querySelector('form'); + f.disabled = false; + f.submit(); + return false; } - if (e.which == 2) { - // If middle click, we want same behaviour as CTRL+click. - var ev = jQuery.Event("click"); - ev.ctrlKey = true; - $(this).trigger(ev); - } else if(e.which == 1) { - // Normal click, just toggle article. - $(this).parent().click(); + el = ev.target.closest('.flux_header, .flux_content'); + if (el) { //flux_toggle + if (ev.target.closest('.content, .item.website, .item.link, .dropdown-menu')) { + return true; + } + if (!context.sides_close_article && ev.target.matches('div.flux_content')) { + // setting for not-closing after clicking outside article area + return false; + } + const old_active = document.querySelector('.flux.current'), + new_active = el.parentNode; + if (ev.target.tagName.toUpperCase() === 'A') { //Leave real links alone + if (context.auto_mark_article) { + mark_read(new_active, true); + } + return true; + } + toggleContent(new_active, old_active, false); + return false; } - }); + }; - divStream.on('click', '.flux .content a', function () { - if (!$(this).closest('div').hasClass('author')) { - $(this).attr('target', '_blank').attr('rel', 'noreferrer'); + stream.onmouseup = function (ev) { // Mouseup enables us to catch middle click + let el = ev.target.closest('.item.title > a'); + if (el) { + if (ev.ctrlKey) { + return; // CTRL+click, it will be manage by previous rule. + } + if (ev.which == 2) { + // If middle click, we want same behaviour as CTRL+click. + const evc = document.createEvent('click'); + evc.ctrlKey = true; + el.dispatchEvent(evc); + } else if (ev.which == 1) { + // Normal click, just toggle article. + el.parentElement.click(); + } } - }); - if (context.auto_mark_site) { - // catch mouseup instead of click so we can have the correct behaviour - // with middle button click (scroll button). - divStream.on('mouseup', '.flux .link > a', function (e) { - if (e.which == 3) { - return; + if (context.auto_mark_site) { + // catch mouseup instead of click so we can have the correct behaviour + // with middle button click (scroll button). + el = ev.target.closest('.flux .link > a'); + if (el) { + if (ev.which == 3) { + return; + } + mark_read(el.closest('.flux'), true); } + } + }; - mark_read($(this).parents(".flux"), true); - }); - } + stream.onchange = function (ev) { + const checkboxTag = ev.target.closest('.checkboxTag'); + if (checkboxTag) { //Dynamic tags + ev.stopPropagation(); + const isChecked = checkboxTag.checked, + tagId = checkboxTag.name.replace(/^t_/, ''), + tagName = checkboxTag.nextElementSibling ? checkboxTag.nextElementSibling.value : '', + entry = checkboxTag.closest('div.flux'), + entryId = entry.id.replace(/^flux_/, ''); + checkboxTag.disabled = true; + + const req = new XMLHttpRequest(); + req.open('POST', './?c=tag&a=tagEntry', true); + req.responseType = 'json'; + req.onerror = function (e) { + checkboxTag.checked = !isChecked; + if (this.status == 403) { + badAjax(); + } + }; + req.onload = function (e) { + if (this.status != 200) { + return req.onerror(e); + } + if (entry.classList.contains('not_read')) { + incUnreadsTag('t_' + tagId, isChecked ? 1 : -1); + } + }; + req.onloadend = function (e) { + checkboxTag.disabled = false; + if (tagId == 0) { + loadDynamicTags(checkboxTag.closest('div.dropdown')); + } + }; + req.setRequestHeader('Content-Type', 'application/json'); + req.send(JSON.stringify({ + _csrf: context.csrf, + id_tag: tagId, + name_tag: tagId == 0 ? tagName : '', + id_entry: entryId, + checked: isChecked, + })); + } + }; } -var $nav_entries = null; - function init_nav_entries() { - $nav_entries = $('#nav_entries'); - $nav_entries.find('.previous_entry').click(function () { - prev_entry(); - return false; - }); - $nav_entries.find('.next_entry').click(function () { - next_entry(); - return false; - }); - $nav_entries.find('.up').click(function () { - var active_item = $(".flux.current"), - windowTop = $(window).scrollTop(), - item_top = active_item.offset().top; - - if (windowTop > item_top) { - $("html,body").scrollTop(item_top); - } else { - $("html,body").scrollTop(0); - } - return false; - }); -} + const nav_entries = document.getElementById('nav_entries'); + if (nav_entries) { + nav_entries.querySelector('.previous_entry').onclick = function (e) { + prev_entry(false); + return false; + }; + nav_entries.querySelector('.next_entry').onclick = function (e) { + next_entry(false); + return false; + }; + nav_entries.querySelector('.up').onclick = function (e) { + const active_item = document.querySelector('.flux.current'), + windowTop = document.documentElement.scrollTop, + item_top = active_item.offsetParent.offsetTop + active_item.offsetTop; -function loadDynamicTags($div) { - $div.removeClass('dynamictags'); - $div.find('li.item').remove(); - var entryId = $div.closest('div.flux').attr('id').replace(/^flux_/, ''); - $.getJSON('./?c=tag&a=getTagsForEntry&id_entry=' + entryId) - .done(function (data) { - var $ul = $div.find('.dropdown-menu'); - $ul.append('<li class="item"><label><input class="checkboxTag" name="t_0" type="checkbox" /> <input type="text" name="newTag" /></label></li>'); - if (data && data.length) { - for (var i = 0; i < data.length; i++) { - var tag = data[i]; - $ul.append('<li class="item"><label><input class="checkboxTag" name="t_' + tag.id + '" type="checkbox"' + - (tag.checked ? ' checked="checked"' : '') + '> ' + tag.name + '</label></li>'); - } - } - }) - .fail(function () { - $div.find('li.item').remove(); - $div.addClass('dynamictags'); - }); + document.documentElement.scrollTop = windowTop > item_top ? item_top : 0; + return false; + }; + } } -function init_dynamic_tags() { - $stream.on('click', '.dynamictags', function () { - loadDynamicTags($(this)); - }); +function loadDynamicTags(div) { + div.classList.remove('dynamictags'); + div.querySelectorAll('li.item').forEach(function (li) { li.remove(); }); + const entryId = div.closest('div.flux').id.replace(/^flux_/, ''); - $stream.on('change', '.checkboxTag', function (ev) { - var $checkbox = $(this); - $checkbox.prop('disabled', true); - var isChecked = $checkbox.prop('checked'); - var tagId = $checkbox.attr('name').replace(/^t_/, ''); - var tagName = $checkbox.siblings('input[name]').val(); - var $entry = $checkbox.closest('div.flux'); - var entryId = $entry.attr('id').replace(/^flux_/, ''); - $.ajax({ - type: 'POST', - url: './?c=tag&a=tagEntry', - data: { - _csrf: context.csrf, - id_tag: tagId, - name_tag: tagId == 0 ? tagName : '', - id_entry: entryId, - checked: isChecked, - }, - }) - .done(function () { - if ($entry.hasClass('not_read')) { - incUnreadsTag(tagId, isChecked ? 1 : -1); - } - }) - .fail(function () { - $checkbox.prop('checked', !isChecked); - }) - .always(function () { - $checkbox.prop('disabled', false); - if (tagId == 0) { - loadDynamicTags($checkbox.closest('div.dropdown')); + const req = new XMLHttpRequest(); + req.open('GET', './?c=tag&a=getTagsForEntry&id_entry=' + entryId, true); + req.responseType = 'json'; + req.onerror = function (e) { + div.querySelectorAll('li.item').forEach(function (li) { li.remove(); }); + div.classList.add('dynamictags'); + }; + req.onload = function (e) { + if (this.status != 200) { + return req.onerror(e); + } + const json = xmlHttpRequestJson(this); + let html = '<li class="item"><label><input class="checkboxTag" name="t_0" type="checkbox" /> <input type="text" name="newTag" /></label></li>'; + if (json && json.length) { + for (let i = 0; i < json.length; i++) { + const tag = json[i]; + html += '<li class="item"><label><input class="checkboxTag" name="t_' + tag.id + '" type="checkbox"' + + (tag.checked ? ' checked="checked"' : '') + '> ' + tag.name + '</label></li>'; } - }); - }); + } + div.querySelector('.dropdown-menu').insertAdjacentHTML('beforeend', html); + }; + req.send(); } // <actualize> var feed_processed = 0; function updateFeed(feeds, feeds_count) { - var feed = feeds.pop(); + const feed = feeds.pop(); if (!feed) { return; } - $.ajax({ - type: 'POST', - url: feed.url, - data: { - _csrf: context.csrf, - noCommit: 1, - }, - }).always(function (data) { - feed_processed++; - $("#actualizeProgress .progress").html(feed_processed + " / " + feeds_count); - $("#actualizeProgress .title").html(feed.title); - - if (feed_processed === feeds_count) { - $.ajax({ //Empty request to commit new articles - type: 'POST', - url: './?c=feed&a=actualize&id=-1&ajax=1', - data: { + const req = new XMLHttpRequest(); + req.open('POST', feed.url, true); + req.onloadend = function (e) { + if (this.status != 200) { + return badAjax(); + } + feed_processed++; + const div = document.getElementById('actualizeProgress'); + div.querySelector('.progress').innerHTML = feed_processed + ' / ' + feeds_count; + div.querySelector('.title').innerHTML = feed.title; + if (feed_processed === feeds_count) { + //Empty request to commit new articles + const req2 = new XMLHttpRequest(); + req2.open('POST', './?c=feed&a=actualize&id=-1&ajax=1', true); + req2.onloadend = function (e) { + location.reload(); + }; + req2.setRequestHeader('Content-Type', 'application/json'); + req2.send(JSON.stringify({ _csrf: context.csrf, noCommit: 0, - }, - }).always(function (data) { - window.location.reload(); - }); - } else { - updateFeed(feeds, feeds_count); - } - }); + })); + } else { + updateFeed(feeds, feeds_count); + } + }; + req.setRequestHeader('Content-Type', 'application/json'); + req.send(JSON.stringify({ + _csrf: context.csrf, + noCommit: 1, + })); } function init_actualize() { - var auto = false; + let auto = false; - $("#actualize").click(function () { - if (ajax_loading) { + document.getElementById('actualize').onclick = function () { + if (context.ajax_loading) { return false; } - ajax_loading = true; - - $.getJSON('./?c=javascript&a=actualize').done(function (data) { - if (auto && data.feeds.length < 1) { - auto = false; - ajax_loading = false; - return false; - } - if (data.feeds.length === 0) { - openNotification(data.feedback_no_refresh, "good"); - $.ajax({ //Empty request to force refresh server database cache - type: 'POST', - url: './?c=feed&a=actualize&id=-1&ajax=1', - data: { - _csrf: context.csrf, - noCommit: 0, - }, - }).always(function (data) { - ajax_loading = false; - }); - return; - } - //Progress bar - var feeds_count = data.feeds.length; - $('body').after('<div id="actualizeProgress" class="notification good">' + data.feedback_actualize + - '<br /><span class="title">/</span><br /><span class="progress">0 / ' + feeds_count + - '</span></div>'); - for (var i = 10; i > 0; i--) { - updateFeed(data.feeds, feeds_count); - } - }); + context.ajax_loading = true; + + const req = new XMLHttpRequest(); + req.open('POST', './?c=javascript&a=actualize', true); + req.responseType = 'json'; + req.onload = function (e) { + if (this.status != 200) { + return badAjax(); + } + const json = xmlHttpRequestJson(this); + if (auto && json.feeds.length < 1) { + auto = false; + context.ajax_loading = false; + return false; + } + if (json.feeds.length === 0) { + openNotification(json.feedback_no_refresh, 'good'); + //Empty request to commit new articles + const req2 = new XMLHttpRequest(); + req2.open('POST', './?c=feed&a=actualize&id=-1&ajax=1', true); + req2.onloadend = function (e) { + context.ajax_loading = false; + }; + req2.setRequestHeader('Content-Type', 'application/json'); + req2.send(JSON.stringify({ + _csrf: context.csrf, + noCommit: 0, + })); + return; + } + //Progress bar + const feeds_count = json.feeds.length; + document.body.insertAdjacentHTML('beforeend', '<div id="actualizeProgress" class="notification good">' + + json.feedback_actualize + '<br /><span class="title">/</span><br /><span class="progress">0 / ' + + feeds_count + '</span></div>'); + for (let i = 10; i > 0; i--) { + updateFeed(json.feeds, feeds_count); + } + }; + req.setRequestHeader('Content-Type', 'application/json'); + req.send(JSON.stringify({ + _csrf: context.csrf, + })); return false; - }); + }; if (context.auto_actualize_feeds) { auto = true; - $("#actualize").click(); + document.getElementById('actualize').click(); } } // </actualize> @@ -1027,39 +1130,31 @@ function openNotification(msg, status) { if (notification_working === true) { return false; } - notification_working = true; + notification.querySelector('.msg').innerHTML = msg; + notification.className = 'notification'; + notification.classList.add(status); - notification.removeClass(); - notification.addClass("notification"); - notification.addClass(status); - notification.find(".msg").html(msg); - notification.fadeIn(300); - - notification_interval = window.setTimeout(closeNotification, 4000); + notification_interval = setTimeout(closeNotification, 4000); } function closeNotification() { - notification.fadeOut(600, function() { - notification.removeClass(); - notification.addClass('closed'); - - window.clearInterval(notification_interval); - notification_working = false; - }); + notification.classList.add('closed'); + clearInterval(notification_interval); + notification_working = false; } function init_notifications() { - notification = $("#notification"); + notification = document.getElementById('notification'); - notification.find("a.close").click(function () { - closeNotification(); - return false; - }); + notification.querySelector('a.close').onclick = function () { + closeNotification(); + return false; + }; - if (notification.find(".msg").html().length > 0) { + if (notification.querySelector('.msg').innerHTML.length > 0) { notification_working = true; - notification_interval = window.setTimeout(closeNotification, 4000); + notification_interval = setTimeout(closeNotification, 4000); } } // </notification> @@ -1078,24 +1173,24 @@ function notifs_html5_ask_permission() { } function notifs_html5_show(nb) { - if (notifs_html5_permission !== "granted") { + if (notifs_html5_permission !== 'granted') { return; } - var notification = new window.Notification(i18n.notif_title_articles, { - icon: "../themes/icons/favicon-256.png", - body: i18n.notif_body_articles.replace('%d', nb), - tag: "freshRssNewArticles" + const notification = new window.Notification(context.i18n.notif_title_articles, { + icon: '../themes/icons/favicon-256.png', + body: context.i18n.notif_body_articles.replace('%d', nb), + tag: 'freshRssNewArticles', }); - notification.onclick = function() { - window.location.reload(); + notification.onclick = function () { + location.reload(); window.focus(); notification.close(); }; if (context.html5_notif_timeout !== 0) { - setTimeout(function() { + setTimeout(function () { notification.close(); }, context.html5_notif_timeout * 1000); } @@ -1111,84 +1206,117 @@ function init_notifs_html5() { // </notifs html5> function refreshUnreads() { - $.getJSON('./?c=javascript&a=nbUnreadsPerFeed').done(function (data) { - var isAll = $('.category.all.active').length > 0, - new_articles = false; - - $.each(data.feeds, function(feed_id, nbUnreads) { - feed_id = 'f_' + feed_id; - var elem = $('#' + feed_id).get(0), - feed_unreads = elem ? str2int(elem.getAttribute('data-unread')) : 0; - - if ((incUnreadsFeed(null, feed_id, nbUnreads - feed_unreads) || isAll) && //Update of current view? - (nbUnreads - feed_unreads > 0)) { - $('#new-article').attr('aria-hidden', 'false').show(); - new_articles = true; - } - }); + const req = new XMLHttpRequest(); + req.open('GET', './?c=javascript&a=nbUnreadsPerFeed', true); + req.responseType = 'json'; + req.onload = function (e) { + const json = xmlHttpRequestJson(this); + const isAll = document.querySelector('.category.all.active'); + let new_articles = false; + + Object.keys(json.feeds).forEach(function (feed_id) { + const nbUnreads = json.feeds[feed_id]; + feed_id = 'f_' + feed_id; + const elem = document.getElementById(feed_id), + feed_unreads = elem ? str2int(elem.getAttribute('data-unread')) : 0; + + if ((incUnreadsFeed(null, feed_id, nbUnreads - feed_unreads) || isAll) && //Update of current view? + (nbUnreads - feed_unreads > 0)) { + const newArticle = document.getElementById('new-article'); + newArticle.setAttribute('aria-hidden', 'false'); + newArticle.style.display = 'block'; + new_articles = true; + } + }); - var nbUnreadTags = 0; + let nbUnreadTags = 0; - $.each(data.tags, function(tag_id, nbUnreads) { - nbUnreadTags += nbUnreads; - $('#t_' + tag_id).attr('data-unread', nbUnreads) - .children('.item-title').attr('data-unread', numberFormat(nbUnreads)); - }); + Object.keys(json.tags).forEach(function (tag_id) { + const nbUnreads = json.tags[tag_id]; + nbUnreadTags += nbUnreads; + const tag = document.getElementById('t_' + tag_id); + if (tag) { + tag.setAttribute('data-unread', nbUnreads); + tag.querySelector('.item-title').setAttribute('data-unread', numberFormat(nbUnreads)); + } + }); - $('.category.tags').attr('data-unread', nbUnreadTags) - .find('.title').attr('data-unread', numberFormat(nbUnreadTags)); + const tags = document.querySelector('.category.tags'); + if (tags) { + tags.setAttribute('data-unread', nbUnreadTags); + tags.querySelector('.title').setAttribute('data-unread', numberFormat(nbUnreadTags)); + } - var nb_unreads = str2int($('.category.all .title').attr('data-unread')); + const title = document.querySelector('.category.all .title'), + nb_unreads = title ? str2int(title.getAttribute('data-unread')) : 0; - if (nb_unreads > 0 && new_articles) { - faviconNbUnread(nb_unreads); - notifs_html5_show(nb_unreads); - } - }); + if (nb_unreads > 0 && new_articles) { + faviconNbUnread(nb_unreads); + notifs_html5_show(nb_unreads); + } + }; + req.send(); } //<endless_mode> -var url_load_more = "", +var url_load_more = '', load_more = false, box_load_more = null; function load_more_posts() { - if (load_more || url_load_more === '' || box_load_more === null) { + if (load_more || !url_load_more || !box_load_more) { return; } - load_more = true; - $('#load_more').addClass('loading'); - $.get(url_load_more, function (data) { - box_load_more.children('.flux:last').after($('#stream', data).children('.flux, .day')); - $('.pagination').replaceWith($('.pagination', data)); - if (context.display_order === 'ASC') { - $('#nav_menu_read_all .read_all').attr( - 'formaction', $('#bigMarkAsRead').attr('formaction') - ); - } else { - $('#bigMarkAsRead').attr( - 'formaction', $('#nav_menu_read_all .read_all').attr('formaction') - ); - } + document.getElementById('load_more').classList.add('loading'); + + const req = new XMLHttpRequest(); + req.open('GET', url_load_more, true); + req.responseType = 'document'; + req.onload = function (e) { + const html = this.response, + formPagination = document.getElementById('mark-read-pagination'); + + const streamAdopted = document.adoptNode(html.getElementById('stream')); + streamAdopted.querySelectorAll('.flux, .day').forEach(function (div) { + box_load_more.insertBefore(div, formPagination); + }); + + const paginationOld = formPagination.querySelector('.pagination'), + paginationNew = streamAdopted.querySelector('.pagination'); + formPagination.replaceChild(paginationNew, paginationOld); - $('[id^=day_]').each(function (i) { - var ids = $('[id="' + this.id + '"]'); - if (ids.length > 1) { - $('[id="' + this.id + '"]:gt(0)').remove(); + if (context.display_order === 'ASC') { + document.querySelector('#nav_menu_read_all .read_all').formAction = + document.getElementById('bigMarkAsRead').formAction; + } else { + const bigMarkAsRead = document.getElementById('bigMarkAsRead'); + if (bigMarkAsRead) { + bigMarkAsRead.formAction = document.querySelector('#nav_menu_read_all .read_all').formAction; + } } - }); - init_load_more(box_load_more); + document.querySelectorAll('[id^=day_]').forEach(function (div) { + const ids = document.querySelectorAll('[id="' + div.id + '"]'); + for (let i = ids.length - 1; i > 0; i--) { //Keep only the first + ids[i].remove(); + } + }); - $('#load_more').removeClass('loading'); - $('#bigMarkAsRead').removeAttr('disabled'); - load_more = false; - }); -} + init_load_more(box_load_more); -function focus_search() { - $('#search').focus(); + const bigMarkAsRead = document.getElementById('bigMarkAsRead'), + div_load_more = document.getElementById('load_more'); + if (bigMarkAsRead) { + bigMarkAsRead.removeAttribute('disabled'); + } + if (div_load_more) { + div_load_more.classList.remove('loading'); + } + + load_more = false; + }; + req.send(); } var freshrssLoadMoreEvent = document.createEvent('Event'); @@ -1198,208 +1326,52 @@ function init_load_more(box) { box_load_more = box; document.body.dispatchEvent(freshrssLoadMoreEvent); - var $next_link = $("#load_more"); - if (!$next_link.length) { + const next_link = document.getElementById('load_more'); + if (!next_link) { // no more article to load - url_load_more = ""; + url_load_more = ''; return; } - url_load_more = $next_link.attr("href"); + url_load_more = next_link.href; - $next_link.click(function () { - load_more_posts(); - return false; - }); + next_link.onclick = function (e) { + load_more_posts(); + return false; + }; } //</endless_mode> -//<crypto form (Web login)> -function poormanSalt() { //If crypto.getRandomValues is not available - var text = '$2a$04$', - base = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ.0123456789/abcdefghijklmnopqrstuvwxyz'; - for (var i = 22; i > 0; i--) { - text += base.charAt(Math.floor(Math.random() * 64)); - } - return text; -} - -function init_crypto_form() { - /* globals dcodeIO */ - var $crypto_form = $('#crypto-form'); - if ($crypto_form.length === 0) { - return; - } - - if (!(window.dcodeIO)) { - if (window.console) { - console.log('FreshRSS waiting for bcrypt.js…'); - } - window.setTimeout(init_crypto_form, 100); - return; - } - - $crypto_form.on('submit', function() { - var $submit_button = $(this).find('button[type="submit"]'); - $submit_button.attr('disabled', ''); - - var success = false; - $.ajax({ - url: './?c=javascript&a=nonce&user=' + $('#username').val(), - dataType: 'json', - async: false - }).done(function (data) { - if (!data.salt1 || !data.nonce) { - openNotification('Invalid user!', 'bad'); - } else { - try { - var strong = window.Uint32Array && window.crypto && (typeof window.crypto.getRandomValues === 'function'), - s = dcodeIO.bcrypt.hashSync($('#passwordPlain').val(), data.salt1), - c = dcodeIO.bcrypt.hashSync(data.nonce + s, strong ? dcodeIO.bcrypt.genSaltSync(4) : poormanSalt()); - $('#challenge').val(c); - if (!s || !c) { - openNotification('Crypto error!', 'bad'); - } else { - success = true; - } - } catch (e) { - openNotification('Crypto exception! ' + e, 'bad'); +function init_confirm_action() { + document.body.onclick = function (ev) { + const b = ev.target.closest('.confirm'); + if (b) { + let str_confirmation = this.getAttribute('data-str-confirm'); + if (!str_confirmation) { + str_confirmation = context.i18n.confirmation_default; } + return confirm(str_confirmation); } - }).fail(function() { - openNotification('Communication error!', 'bad'); - }); - - $submit_button.removeAttr('disabled'); - return success; - }); -} -//</crypto form (Web login)> - -function init_confirm_action() { - $('body').on('click', '.confirm', function () { - var str_confirmation = $(this).attr('data-str-confirm'); - if (!str_confirmation) { - str_confirmation = i18n.confirmation_default; - } - - return confirm(str_confirmation); - }); - $('button.confirm').removeAttr('disabled'); -} - -function init_print_action() { - $('.item.share > a[href="#"]').click(function (e) { - var content = "<html><head><style>" + - "body { font-family: Serif; text-align: justify; }" + - "a { color: #000; text-decoration: none; }" + - "a:after { content: ' [' attr(href) ']'}" + - "</style></head><body>" + - $(e.target).closest('.flux_content').find('.content').html() + - "</body></html>"; - - var tmp_window = window.open(); - tmp_window.document.writeln(content); - tmp_window.document.close(); - tmp_window.focus(); - tmp_window.print(); - tmp_window.close(); - - return false; - }); -} - -function init_post_action() { - $('.item.share > a[href="POST"]').click(function (event) { - event.preventDefault(); - var form = $(this).next('form'); - $.post(form.data('url'), form.serialize()); - }); -} - -function init_share_observers() { - shares = $('.group-share').length; - - $('.share.add').on('click', function(e) { - var opt = $(this).siblings('select').find(':selected'); - var row = $(this).parents('form').data(opt.data('form')); - row = row.replace(/##label##/g, opt.html().trim()); - row = row.replace(/##type##/g, opt.val()); - row = row.replace(/##help##/g, opt.data('help')); - row = row.replace(/##key##/g, shares); - row = row.replace(/##method##/g, opt.data('method')); - row = row.replace(/##field##/g, opt.data('field')); - $(this).parents('.form-group').before(row); - shares++; - - return false; - }); -} - -function init_stats_observers() { - $('.select-change').on('change', function(e) { - redirect($(this).find(':selected').data('url')); - }); -} - -function init_remove_observers() { - $('.post').on('click', 'a.remove', function(e) { - var remove_what = $(this).attr('data-remove'); - - if (remove_what !== undefined) { - var remove_obj = $('#' + remove_what); - remove_obj.remove(); - } - - return false; - }); -} - -function init_feed_observers() { - $('select[id="category"]').on('change', function() { - var detail = $('#new_category_name').parent(); - if ($(this).val() === 'nc') { - detail.attr('aria-hidden', 'false').show(); - detail.find('input').focus(); - } else { - detail.attr('aria-hidden', 'true').hide(); - } - }); -} - -function init_password_observers() { - $('.toggle-password').on('mousedown', function(e) { - var button = $(this); - var passwordField = $('#' + button.attr('data-toggle')); - passwordField.attr('type', 'text'); - button.addClass('active'); - - return false; - }).on('mouseup', function(e) { - var button = $(this); - var passwordField = $('#' + button.attr('data-toggle')); - passwordField.attr('type', 'password'); - button.removeClass('active'); - - return false; - }); + }; + document.querySelectorAll('button.confirm').forEach(function (b) { b.disabled = false; }); } function faviconNbUnread(n) { if (typeof n === 'undefined') { - n = str2int($('.category.all .title').attr('data-unread')); + const t = document.querySelector('.category.all .title'); + n = t ? str2int(t.getAttribute('data-unread')) : 0; } //http://remysharp.com/2010/08/24/dynamic-favicons/ - var canvas = document.createElement('canvas'), + const canvas = document.createElement('canvas'), link = document.getElementById('favicon').cloneNode(true); if (canvas.getContext && link) { canvas.height = canvas.width = 16; - var img = document.createElement('img'); + const img = document.createElement('img'); img.onload = function () { - var ctx = canvas.getContext('2d'); + const ctx = canvas.getContext('2d'); ctx.drawImage(this, 0, 0, canvas.width, canvas.height); if (n > 0) { - var text = ''; + let text = ''; if (n < 1000) { text = n; } else if (n < 100000) { @@ -1414,167 +1386,61 @@ function faviconNbUnread(n) { ctx.fillText(text, 0, canvas.height - 1); } link.href = canvas.toDataURL('image/png'); - $('link[rel~=icon]').remove(); + document.querySelector('link[rel~=icon]').remove(); document.head.appendChild(link); }; img.src = '../favicon.ico'; } } -function init_slider_observers() { - var slider = $('#slider'), - closer = $('#close-slider'); - if (slider.length < 1) { - return; - } - - $('.post').on('click', '.open-slider', function() { - if (ajax_loading) { - return false; - } - - ajax_loading = true; - var url_slide = $(this).attr('href'); - - $.ajax({ - type: 'GET', - url: url_slide, - data: { ajax: true } - }).done(function (data) { - slider.html(data); - closer.addClass('active'); - slider.addClass('active'); - ajax_loading = false; - }); - - return false; - }); - - closer.on('click', function() { - closer.removeClass('active'); - slider.removeClass('active'); - return false; - }); -} - -function init_configuration_alert() { - $(window).on('submit', function(e) { - window.hasSubmit = true; - }); - $(window).on('beforeunload', function(e) { - if (window.hasSubmit) { - return; - } - var fields = $("[data-leave-validation]"); - for (var i = 0; i < fields.length; i++) { - if ($(fields[i]).attr('type') === 'checkbox' || $(fields[i]).attr('type') === 'radio') { - // The use of != is done on purpose to check boolean against integer - if ($(fields[i]).is(':checked') != $(fields[i]).attr('data-leave-validation')) { - return false; - } - } else { - if ($(fields[i]).attr('data-leave-validation') !== $(fields[i]).val()) { - return false; - } - } - } - return; - }); -} - -function init_subscription() { - $('body').on('click', '.bookmarkClick', function (e) { - return false; - }); -} - -function parseJsonVars() { - var jsonVars = document.getElementById('jsonVars'), - json = JSON.parse(jsonVars.innerHTML); - jsonVars.outerHTML = ''; - window.context = json.context; - window.shortcuts = json.shortcuts; - window.url = json.url; - window.i18n = json.i18n; - window.icons = json.icons; -} - function init_normal() { - $stream = $('#stream'); - if ($stream.length < 1) { + const stream = document.getElementById('stream'); + if (!stream) { if (window.console) { console.log('FreshRSS waiting for content…'); } - window.setTimeout(init_normal, 100); + setTimeout(init_normal, 100); return; } init_column_categories(); - init_stream($stream); + init_stream(stream); init_shortcuts(); init_actualize(); faviconNbUnread(); } function init_beforeDOM() { - if (!window.$) { - if (window.console) { - console.log('FreshRSS waiting for jQuery…'); - } - window.setTimeout(init_beforeDOM, 100); - return; - } if (['normal', 'reader', 'global'].indexOf(context.current_view) >= 0) { init_normal(); } } function init_afterDOM() { - if (!window.$) { - if (window.console) { - console.log('FreshRSS waiting again for jQuery…'); - } - window.setTimeout(init_afterDOM, 100); - return; - } init_notifications(); init_confirm_action(); - $stream = $('#stream'); - if ($stream.length > 0) { - init_load_more($stream); + const stream = document.getElementById('stream'); + if (stream) { + init_load_more(stream); init_posts(); init_nav_entries(); - init_dynamic_tags(); - init_print_action(); - init_post_action(); init_notifs_html5(); - window.setInterval(refreshUnreads, 120000); - } else { - init_subscription(); - init_crypto_form(); - init_share_observers(); - init_remove_observers(); - init_feed_observers(); - init_password_observers(); - init_stats_observers(); - init_slider_observers(); - init_configuration_alert(); + setInterval(refreshUnreads, 120000); } if (window.console) { - console.log('FreshRSS init done.'); + console.log('FreshRSS main init done.'); } } -parseJsonVars(); init_beforeDOM(); //Can be called before DOM is fully loaded if (document.readyState && document.readyState !== 'loading') { init_afterDOM(); -} else if (document.addEventListener) { +} else { document.addEventListener('DOMContentLoaded', function () { - if (window.console) { - console.log('FreshRSS waiting for DOMContentLoaded…'); - } - init_afterDOM(); - }, false); + if (window.console) { + console.log('FreshRSS waiting for DOMContentLoaded…'); + } + init_afterDOM(); + }, false); } diff --git a/p/scripts/repartition.js b/p/scripts/repartition.js index be70456fa..e71fa71c4 100644 --- a/p/scripts/repartition.js +++ b/p/scripts/repartition.js @@ -1,6 +1,6 @@ "use strict"; /* globals Flotr, numberFormat */ -/* jshint globalstrict: true */ +/* jshint esversion:6, strict:global */ function initStats() { if (!window.Flotr) { @@ -10,7 +10,7 @@ function initStats() { window.setTimeout(initStats, 50); return; } - var jsonRepartition = document.getElementById('jsonRepartition'), + const jsonRepartition = document.getElementById('jsonRepartition'), stats = JSON.parse(jsonRepartition.innerHTML); jsonRepartition.outerHTML = ''; // Entry per hour diff --git a/p/scripts/shortcut.js b/p/scripts/shortcut.js deleted file mode 100644 index e78cf6f5e..000000000 --- a/p/scripts/shortcut.js +++ /dev/null @@ -1,225 +0,0 @@ -/** - * http://www.openjs.com/scripts/events/keyboard_shortcuts/ - * Version : 2.01.B - * By Binny V A - * License : BSD - */ -shortcut = { - 'all_shortcuts':{},//All the shortcuts are stored in this array - 'add': function(shortcut_combination,callback,opt) { - //Provide a set of default options - var default_options = { - 'type':'keydown', - 'propagate':false, - 'disable_in_input':false, - 'target':document, - 'keycode':false - } - if(!opt) opt = default_options; - else { - for(var dfo in default_options) { - if(typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo]; - } - } - - var ele = opt.target; - if(typeof opt.target == 'string') ele = document.getElementById(opt.target); - var ths = this; - shortcut_combination = shortcut_combination.toLowerCase(); - - //The function to be called at keypress - var func = function(e) { - e = e || window.event; - - if(opt['disable_in_input']) { //Don't enable shortcut keys in Input, Textarea fields - var element; - if(e.target) element=e.target; - else if(e.srcElement) element=e.srcElement; - if(element.nodeType==3) element=element.parentNode; - - if(element.tagName == 'INPUT' || element.tagName == 'TEXTAREA') return; - } - - //Find Which key is pressed - if (e.keyCode) code = e.keyCode; - else if (e.which) code = e.which; - if (code == 32 || (code >= 48 && code <= 90) || (code >= 96 && code <= 111) || (code >= 186 && code <= 192) || (code >= 219 && code <= 222)) { //FreshRSS - var character = String.fromCharCode(code).toLowerCase(); - } - - if(code == 188) character=","; //If the user presses , when the type is onkeydown - if(code == 190) character="."; //If the user presses , when the type is onkeydown - - var keys = shortcut_combination.split("+"); - //Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked - var kp = 0; - - //Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken - var shift_nums = { - "`":"~", - "1":"!", - "2":"@", - "3":"#", - "4":"$", - "5":"%", - "6":"^", - "7":"&", - "8":"*", - "9":"(", - "0":")", - "-":"_", - "=":"+", - ";":":", - "'":"\"", - ",":"<", - ".":">", - "/":"?", - "\\":"|" - } - //Special Keys - and their codes - var special_keys = { - 'esc':27, - 'escape':27, - 'tab':9, - 'space':32, - 'return':13, - 'enter':13, - 'backspace':8, - - 'scrolllock':145, - 'scroll_lock':145, - 'scroll':145, - 'capslock':20, - 'caps_lock':20, - 'caps':20, - 'numlock':144, - 'num_lock':144, - 'num':144, - - 'pause':19, - 'break':19, - - 'insert':45, - 'home':36, - 'delete':46, - 'end':35, - - 'pageup':33, - 'page_up':33, - 'pu':33, - - 'pagedown':34, - 'page_down':34, - 'pd':34, - - 'left':37, - 'up':38, - 'right':39, - 'down':40, - - 'f1':112, - 'f2':113, - 'f3':114, - 'f4':115, - 'f5':116, - 'f6':117, - 'f7':118, - 'f8':119, - 'f9':120, - 'f10':121, - 'f11':122, - 'f12':123 - } - - var modifiers = { - shift: { wanted:false, pressed:false}, - ctrl : { wanted:false, pressed:false}, - alt : { wanted:false, pressed:false}, - meta : { wanted:false, pressed:false} //Meta is Mac specific - }; - - if(e.ctrlKey) modifiers.ctrl.pressed = true; - if(e.shiftKey) modifiers.shift.pressed = true; - if(e.altKey) modifiers.alt.pressed = true; - if(e.metaKey) modifiers.meta.pressed = true; - - for(var i=0; k=keys[i],i<keys.length; i++) { - //Modifiers - if(k == 'ctrl' || k == 'control') { - kp++; - modifiers.ctrl.wanted = true; - - } else if(k == 'shift') { - kp++; - modifiers.shift.wanted = true; - - } else if(k == 'alt') { - kp++; - modifiers.alt.wanted = true; - } else if(k == 'meta') { - kp++; - modifiers.meta.wanted = true; - } else if(k.length > 1) { //If it is a special key - if(special_keys[k] == code) kp++; - - } else if(opt['keycode']) { - if(opt['keycode'] == code) kp++; - - } else { //The special keys did not match - if(character == k) kp++; - else { - if(shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase - character = shift_nums[character]; - if(character == k) kp++; - } - } - } - } - - if(kp == keys.length && - modifiers.ctrl.pressed == modifiers.ctrl.wanted && - modifiers.shift.pressed == modifiers.shift.wanted && - modifiers.alt.pressed == modifiers.alt.wanted && - modifiers.meta.pressed == modifiers.meta.wanted) { - callback(e); - - if(!opt['propagate']) { //Stop the event - //e.cancelBubble is supported by IE - this will kill the bubbling process. - e.cancelBubble = true; - e.returnValue = false; - - //e.stopPropagation works in Firefox. - if (e.stopPropagation) { - e.stopPropagation(); - e.preventDefault(); - } - return false; - } - } - } - this.all_shortcuts[shortcut_combination] = { - 'callback':func, - 'target':ele, - 'event': opt['type'] - }; - //Attach the function with the event - if(ele.addEventListener) ele.addEventListener(opt['type'], func, false); - else if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func); - else ele['on'+opt['type']] = func; - }, - - //Remove the shortcut - just specify the shortcut and I will remove the binding - 'remove':function(shortcut_combination) { - shortcut_combination = shortcut_combination.toLowerCase(); - var binding = this.all_shortcuts[shortcut_combination]; - delete(this.all_shortcuts[shortcut_combination]) - if(!binding) return; - var type = binding['event']; - var ele = binding['target']; - var callback = binding['callback']; - - if(ele.detachEvent) ele.detachEvent('on'+type, callback); - else if(ele.removeEventListener) ele.removeEventListener(type, callback, false); - else ele['on'+type] = false; - } -}
\ No newline at end of file diff --git a/p/scripts/stats.js b/p/scripts/stats.js index 9cd14721c..b47188d77 100644 --- a/p/scripts/stats.js +++ b/p/scripts/stats.js @@ -1,6 +1,6 @@ "use strict"; /* globals Flotr, numberFormat */ -/* jshint globalstrict: true */ +/* jshint esversion:6, strict:global */ function initStats() { if (!window.Flotr) { @@ -10,12 +10,12 @@ function initStats() { window.setTimeout(initStats, 50); return; } - var jsonStats = document.getElementById('jsonStats'), + const jsonStats = document.getElementById('jsonStats'), stats = JSON.parse(jsonStats.innerHTML); jsonStats.outerHTML = ''; // Entry per day - var avg = []; - for (var i = -31; i <= 0; i++) { + const avg = []; + for (let i = -31; i <= 0; i++) { avg.push([i, stats.average]); } Flotr.draw(document.getElementById('statsEntryPerDay'), diff --git a/p/themes/Ansum/_components.scss b/p/themes/Ansum/_components.scss new file mode 100644 index 000000000..cf8cb5e91 --- /dev/null +++ b/p/themes/Ansum/_components.scss @@ -0,0 +1,352 @@ +/*=== COMPONENTS */ +/*===============*/ +/*=== Forms */ +// parti dans _forms.scss + +/*=== Horizontal-list */ +.horizontal-list { + margin: 0; + padding: 0.1rem 0; + + .item{ + vertical-align: middle; + + &:first-child{ + padding-left: 0.5rem; + } + + } +} + +/*=== Dropdown */ +.dropdown-menu { + background: $grey-lighter; + margin: 0; + font-size: 1rem; + text-align: left; + padding: 0.5rem 0 1rem 0; + border: none; + border-radius: 3px; + + -webkit-box-shadow: 0px 6px 8px 0px rgba(0,0,0,0.35); + -moz-box-shadow: 0px 6px 8px 0px rgba(0,0,0,0.35); + box-shadow: 0px 6px 8px 0px rgba(0,0,0,0.35); + + &::after { + content: ""; + position: absolute; + top: -4px; + right: 13px; + width: 10px; + height: 10px; + z-index: -10; + transform: rotate(45deg); + -moz-transform: rotate(45deg); + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + background: white; + // border-top: 1px solid #95a5a6; + // border-left: 1px solid #95a5a6; + } + + .dropdown-header { + // padding: 0 5px 5px; + margin: 1.75rem 0 0.5rem 2rem; + font-weight: bold; + text-align: left; + color: $grey-dark; + text-transform: uppercase; + letter-spacing: 1px; + + + } + + .item{ + @include transition(all, 0.075s, ease-in-out); + a, span, .as-link{ + padding: 0 2rem; + line-height: 2.5em; + font-size: 1rem; + color: $main-font-color; + } + &:hover{ + background: $main-first; + color: $white; + + a, button{ + text-decoration: none; + color: $white; + } + } + &[aria-checked="true"]{ + a::before{ + font-weight: bold; + margin: 0 0 0 -14px; + } + } + } + .input{ + select, input{ + margin: 0 auto 5px; + padding: 2px 5px; + border-radius: 3px; + } + } + .separator { + margin: 0.75rem 0; + border-bottom: 1px solid $grey-light; + // display: none; + } + +} +.tree .tree-folder .tree-folder-items .dropdown-menu, +.tree .tree-folder .tree-folder-items .dropdown-menu{ + // tout ça sert à restaurer l'apparence du dropdown dans un contexte de sidebar sombre + + .item{ + padding: 0; + + a, + button{ + color: $main-font-color; + + &:hover{ + color: $white; + } + } + &:hover{ + background: $main-first; + } + } +} + + + + +/*=== Alerts */ +.alert { + margin: 1rem 0; + // width: 100%; + padding: 1rem; + font-size: 1rem; + background: $grey-lighter; + border: 1px solid $grey-medium; + border-radius: 3px; + color: $grey-dark; + text-shadow: 0 0 1px $grey-light; +} +.alert-head { + font-size: 1.15em; +} +.alert > a { + text-decoration: underline; + color: inherit; +} +.alert-warn { + background: $warning-light; + border: 1px solid unquote($warning-text+'33'); // on ajoute l'opacité à la fin + color: $warning-text; +} +.alert-success { + background: $success-light; + border: 1px solid unquote($success-text+'33'); + color: $success-text; +} +.alert-error { + background: $alert-light; + border: 1px solid unquote($alert-text+'33'); + color: $alert-text; +} + +/*=== Pagination */ +.pagination { + text-align: center; + font-size: 0.8em; + background: $grey-light; + color: $main-font-color; + + .item{ + &.pager-current { + font-weight: bold; + font-size: 1.5em; + background: $sid-bg; + color: $grey-light; + } + a { + display: block; + font-style: italic; + line-height: 3em; + text-decoration: none; + color: $main-font-color; + + &:hover{ + background: $main-font-color; + color: $grey-light; + } + } + } + + .loading, + a:hover.loading { + font-size: 0; + background: url("loader.gif") center center no-repeat #34495e; + } +} +.content .pagination { + margin: 0; + padding: 0; +} + + +/*=== Boxes */ +.box { + // border: 1px solid #ddd; + border: none; + border-radius: 3px; + background: $white; + + -webkit-box-shadow: 0px 2px 2px 0px rgba(0,0,0,0.25); + -moz-box-shadow: 0px 2px 2px 0px rgba(0,0,0,0.25); + box-shadow: 0px 2px 2px 0px rgba(0,0,0,0.25); + + .box-title { + margin: 0; + padding: 5px 10px; + background: $grey-light; + color: $main-font-color; + // border-bottom: 1px solid #ddd; + border-radius: 2px 2px 0 0; + + form{ + input{ + width: 85%; + } + .dropdown{ + float: right; + a.dropdown-toggle{ + padding: 0; + background-image: url(icons/more.svg); + background-repeat: no-repeat; + background-position: right 8px; + // float: right; + border-radius: 0; + img{ + display: none; + } + } + } + } + } + .box-content { + // max-height: 260px; + + .item { + padding: 0.5rem 0.75rem; + font-size: 1rem; + color: $main-font-color; + line-height: 1.7em; + border-bottom: 1px solid $grey-light; + + img{ + margin-right: 0.75rem; + } + + .configure { + visibility: hidden; + width: 1.75rem; + height: 1.75rem; + display: block; + border-radius: 2px; + float: left; + margin-right: 0.5rem; + background: url("icons/cog.svg") no-repeat 4px 4px; + + .icon { + vertical-align: middle; + border-radius: 3px; + display: none; + } + &:hover{ + // background: $main-first; + background: url("icons/cog-white.svg") no-repeat 4px 4px $main-first; + } + } + &:hover .configure { + visibility: visible; + } + } + .item:last-child{ + border-bottom: none; + } + } +} + +/*=== "Load more" part */ +#bigMarkAsRead { + text-align: center; + text-decoration: none; + background: $main-first-light; + color: $main-first; + + @include transition(all, 0.15s, ease-in-out); + + &:hover { + background: $main-first; + color: #fff; + + .bigTick{ + background: url(icons/tick-white.svg) center no-repeat; + } + } + .bigTick{ + margin: 0.5rem 0; + display: inline-block; + text-indent: -9999px; + background: url(icons/tick-color.svg) center no-repeat; + height: 64px; + width: 64px; + white-space: nowrap; + } +} + +// page de login +.formLogin{ + background: $sid-bg; + + .header{ + .configure{ + padding-right: 1rem; + img{ + margin-right: 0.5rem; + } + + a.signin{ + color: $white; + } + } + } + + h1{ + color: $white; + } + form#crypto-form{ + div{ + margin-bottom: 1rem; + + label{ + font-size: 1rem; + color: $grey-medium; + + + } + input{ + background: $main-first-darker; + + &:focus{ + background: $grey-lighter; + color: $main-font-color; + } + } + } + } +} diff --git a/p/themes/Ansum/_configuration.scss b/p/themes/Ansum/_configuration.scss new file mode 100644 index 000000000..c3c6fd417 --- /dev/null +++ b/p/themes/Ansum/_configuration.scss @@ -0,0 +1,90 @@ +/*=== Configuration pages */ +.post { + padding: 1rem 2rem; + font-size: 1rem; + + form { + margin: 1rem 0; + + // Gestion des extensions + .horizontal-list{ + margin-bottom: 0.5rem; + + .item{ + .stick{ + // width: 65%; + // margin-right: 1rem; + // display:flex; + + } + .btn{ + // width: 8rem; + // flex-grow: 1; + } + } + + } + } + &.content { + max-width: 550px; + } + + h1, h2{ // pages titles + font-size: 3rem; + margin-top: 1.75rem; + font-weight: 300; + line-height: 1.2em; + // font-family: "spectral"; + color: $main-font-color; + } + + a[href="./"]{ // C'est le bouton "Retour à vos flux" + display: inline-block; + // min-height: 38px; + min-width: 15px; + line-height: 25px; + margin: 0; + padding: 0.75rem 1.5rem; + font-size: 1rem; + vertical-align: middle; + cursor: pointer; + overflow: hidden; + background: $grey-lighter; + border: 1px solid $grey-medium-light; + border-radius: 5px; + // border: none; + color: $grey-dark; + + &:hover{ + text-decoration: none; + background: $main-first; + color: white; + border: 1px solid $main-first; + } + } + +} + + + +#slider{ + border-left: none; + + -webkit-box-shadow: 0px 6px 8px 0px rgba(0,0,0,0.35); + -moz-box-shadow: 0px 6px 8px 0px rgba(0,0,0,0.35); + box-shadow: 0px 6px 8px 0px rgba(0,0,0,0.35); +} + +.slide-container{ + .properties{ + background: rgba(0, 0, 0, 0.75); + border: 0; + padding: 1rem; + color: white; + + .page-number{ + right: 1rem; + top: 1rem; + } + } +} diff --git a/p/themes/Ansum/_divers.scss b/p/themes/Ansum/_divers.scss new file mode 100644 index 000000000..7d122f1b4 --- /dev/null +++ b/p/themes/Ansum/_divers.scss @@ -0,0 +1,12 @@ +/*=== DIVERS */ +/*===========*/ +.aside.aside_feed .nav-form input, +.aside.aside_feed .nav-form select { + width: 140px; +} +.aside.aside_feed .nav-form .dropdown .dropdown-menu { + right: -20px; +} +.aside.aside_feed .nav-form .dropdown .dropdown-menu::after { + right: 33px; +} diff --git a/p/themes/Ansum/_fonts.scss b/p/themes/Ansum/_fonts.scss new file mode 100644 index 000000000..5891be834 --- /dev/null +++ b/p/themes/Ansum/_fonts.scss @@ -0,0 +1,56 @@ +@font-face { + font-family: "lato"; + font-style: normal; + font-stretch: normal; + font-weight: 400; + src: local("Lato"), url("../fonts/LatoLatin-Regular.woff") format("woff"); +} +@font-face { + font-family: "lato"; + font-style: italic; + font-stretch: normal; + font-weight: 400; + src: local("Lato"), url("../fonts/LatoLatin-Italic.woff") format("woff"); +} +@font-face { + font-family: "lato"; + font-style: normal; + font-stretch: normal; + font-weight: 700; + src: local("Lato"), url("../fonts/LatoLatin-Bold.woff") format("woff"); +} +@font-face { + font-family: "lato"; + font-style: italic; + font-stretch: normal; + font-weight: 700; + src: local("Lato"), url("../fonts/LatoLatin-BoldItalic.woff") format("woff"); +} +@font-face { + font-family: "spectral"; + font-style: normal; + font-stretch: normal; + font-weight: 400; + src: local("Spectral"), url("../fonts/Spectral-Regular.woff") format("woff"); +} +@font-face { + font-family: "spectral"; + font-style: italic; + font-stretch: normal; + font-weight: 400; + src: local("Spectral"), url("../fonts/Spectral-Italic.woff") format("woff"); +} +@font-face { + font-family: "spectral"; + font-style: normal; + font-stretch: normal; + font-weight: 700; + src: local("Spectral"), url("../fonts/Spectral-Bold.woff") format("woff"); +} +@font-face { + font-family: "spectral"; + font-style: italic; + font-stretch: normal; + font-weight: 700; + src: local("Spectral"), url("../fonts/Spectral-BoldItalic.woff") format("woff"); +} diff --git a/p/themes/Ansum/_forms.scss b/p/themes/Ansum/_forms.scss new file mode 100644 index 000000000..8a388aa8a --- /dev/null +++ b/p/themes/Ansum/_forms.scss @@ -0,0 +1,153 @@ +/* btns */ + +.btn { + display: inline-block; + min-height: 38px; + min-width: 15px; + line-height: 25px; + margin: 0; + padding: 0.5rem 1.5rem; + font-size: 1rem; + vertical-align: middle; + cursor: pointer; + overflow: hidden; + background: $grey-lighter; + border-radius: 5px; + border: none; + color: $grey-dark; + + @include transition(all, 0.15s, ease-in-out); + + &.btn-important { + background: $main-first; + color: $white; + + // @include transition(all, 0.15s, ease-in-out); + + &:hover, + &:active { + background: $main-first-alt; + } + } + + + &.btn-attention { + background: $alert-bg; + color: #fff; + + &:hover, + &:active { + background: $alert-text; + } + } + + &:hover { + text-decoration: none; + } +} + +a.btn { + min-height: 25px; + line-height: 25px; +} + +/*=== Forms */ +legend { + display: inline-block; + width: auto; + margin: 2rem 0 1rem 0; + padding: 0; + font-size: 1rem; + clear: both; + text-transform: uppercase; + letter-spacing: 1px; + font-weight: 700; +} +label { + min-height: 25px; + padding: 5px 0; + cursor: pointer; + color: $grey-dark; +} +textarea { + width: 360px; + height: 100px; +} +input, select, textarea, button { + font-family: "lato", "Helvetica", "Arial", sans-serif; + min-height: 25px; + padding: 5px 10px; + line-height: 25px; + vertical-align: middle; + background: $white; + border: 1px solid $grey-light; + font-size: 1rem; + color: $grey-dark; + border-radius: 2px; +} +option { + padding: 0 .5em; +} +input:focus, select:focus, textarea:focus { + color: $main-font-color; + border-color: $main-first; +} +input:invalid, select:invalid { + color: $alert-bg; + border-color: $alert-bg; + box-shadow: none; +} +input:disabled, select:disabled { + background: $grey-light; +} +input.extend { + transition: width 200ms linear; + -moz-transition: width 200ms linear; + -webkit-transition: width 200ms linear; + -o-transition: width 200ms linear; + -ms-transition: width 200ms linear; +} + + +.form-group { + padding: 5px; + border-radius: 3px; + + &::after { + content: ""; + display: block; + clear: both; + } + &:hover { + // background: #fff; + // border: 1px solid #eee; + // border-radius: 3px; + // border: 1px solid #eee; + } + .group-name { + padding: 10px 0; + text-align: right; + } + .group-controls { + min-height: 25px; + padding: 5px 0; + } + .group-controls .control { + line-height: 2.0em; + } + table { + margin: 10px 0 0 220px; + } + + &.form-actions { + margin: 15px 0 25px; + padding: 5px 0; + // background: #333; + } + &.form-actions .btn { + margin: 0 0.5rem 0 0; + } +} + + + diff --git a/p/themes/Ansum/_global-view.scss b/p/themes/Ansum/_global-view.scss new file mode 100644 index 000000000..30979bd6c --- /dev/null +++ b/p/themes/Ansum/_global-view.scss @@ -0,0 +1,80 @@ +/*=== GLOBAL VIEW */ +/*================*/ + +#stream{ + .box.category{ + + &:not([data-unread="0"]) .box-title { + // background: #3498db; + } + &:not([data-unread="0"]) .box-title:active { + // background: #2980b9; + } + &:not([data-unread="0"]) .box-title .title { + font-weight: bold; + // color: #fff; + } + + .box-title{ + background: none; + padding: 1.5rem; + + a.title{ + font-weight: normal; + text-decoration: none; + text-align: left; + font-size: 1rem; + text-transform: uppercase; + letter-spacing: 1px; + color: $grey-dark; + + &:not([data-unread="0"])::after { + position: absolute; + top: 1.75rem; + right: 0; + line-height: 1.5rem; + background: $grey-light; + border-radius: 12px; + padding: 0 0.75rem; + margin: -0.5rem 1rem 0 0; + text-align: center; + } + &:hover{ + color: $main-first; + } + } + } + + .box-content{ + padding-bottom: 0.5rem; + .item.feed { + // padding: 2px 10px; + font-size: 1rem; + padding: 0.5rem 1.5rem; + + a{ + color: $main-font-color; + font-weight: 400; + + &:hover{ + color: $main-first; + text-decoration: none; + } + } + } + } + } +} + + +// le panel qui apparait en overlay pour afficher les flux +#overlay{ + background: rgba(0, 0, 0, 0.65); +} +#panel{ + top: 3rem; + right: 3rem; + bottom: 3rem; + left: 3rem; + border-radius: 3px; +} diff --git a/p/themes/Ansum/_layout.scss b/p/themes/Ansum/_layout.scss new file mode 100644 index 000000000..de684504a --- /dev/null +++ b/p/themes/Ansum/_layout.scss @@ -0,0 +1,462 @@ +/*=== STRUCTURE */ +/*===============*/ +/*=== Header */ +.header { + background: $sid-bg; + padding: 0.5rem 1.35rem; + display: block; + table-layout: none; + width: auto; + + .item{ + vertical-align: middle; + // text-align: center; + // display: flex; + // justify-content: space-between; + // flex-direction: row; + + &.title{ + + font-weight: 400; + width: 280px; + + h1{ + a{ + text-decoration: none; + color: $sid-font-color; + font-size: 1rem; + text-transform: uppercase; + letter-spacing: 1px; + + img{ + margin-right: 0.5rem; + + } + } + } + } + &.search{ + // text-align: center; + // width: 50%; + + input{ + width: 230px; + border-radius: 2px 0 0 2px; + background-color: $sid-bg-alt; + color: $sid-font-color; + border: none; + + @include transition(all, 0.15s, ease-in-out); + + &:hover{ + background-color: $sid-bg-dark; + } + + &:focus{ + width: 350px; + + background-color: $white; + color: $grey-dark; + } + } + .btn{ + img{display: none;} + border-radius: 0 2px 2px 0; + + background-color: $main-first; + background-position: center; + background-repeat: no-repeat; + background-image: url(icons/magnifier.svg); + + border-left-width: 0; + + width: 3rem; + min-height: 35px; + + &:hover{ + background-color: $main-first-alt; + } + } + } + &.configure{ + width: 2rem; + position: absolute; + right: 1rem; + top: 1.25rem; + text-align: center; + // float: right; + + .btn{ + img{display: none;} + // border-radius: 0 2px 2px 0; + + background-color: transparent; + background-position: center; + background-repeat: no-repeat; + background-image: url(icons/cog.svg); + + padding: 0 0.5rem; + + // border-left-width: 0; + + // width: 3rem; + + &:hover{ + // background-color: $main-first-alt; + } + } + } + } + + +} + +/*=== Body */ +#global { + height: calc(100% - 85px); +} + + + + +/*=== Prompt (centered) */ +.prompt { + text-align: center; +} +.prompt label { + text-align: left; +} +.prompt form { + margin: 10px auto 20px auto; + width: 200px; +} +.prompt input { + margin: 5px auto; + width: 100%; +} +.prompt p { + margin: 20px 0; +} + +/*=== New article notification */ +#new-article { + text-align: center; + font-size: 1rem; + background: $main-first; +} +#new-article:hover { + background: $main-first-alt; +} +#new-article > a { + line-height: 3em; + font-weight: bold; + color: $white; +} +#new-article > a:hover { + text-decoration: none; +} + +/*=== Day indication */ +.day { + padding: 1rem 0 0 1.25rem; + font-weight: 700; + line-height: 3em; + letter-spacing: 1px; + text-transform: uppercase; + font-size: 0.875rem; + color: $light-font-color; + // border-left: 2px solid #ecf0f1; + + .name{ + padding: 0 1rem 0 1rem; + font-size: 0.875rem; + // font-weight: 700; + color: $main-font-color; + position: relative; + left: 0; + + // letter-spacing: 1px; + text-transform: uppercase; + } +} + +/*=== Index menu */ +.nav_menu { + text-align: center; + padding: 5px 0; + + .btn{ + border-left-width: 0; + padding: 0.5rem 1rem; + background-color: $grey-lighter; + background-position: center; + background-repeat: no-repeat; + + &:hover{ + background-color: $grey-light; + } + } + + .stick{ + background: $grey-lighter; + + .btn{ + border-left-width: 0; + padding: 0.5rem 1rem; + background-color: $grey-lighter; + background-position: center; + background-repeat: no-repeat; + @include transition(all, 0.15s, ease-in-out); + + &:hover{ + background-color: $grey-medium-light; + } + + &.active{ + background-color: $main-first; + } + + img.icon{display: none;} // on efface pour afficher nos icones, mouhahaha !! + + + // actions + &#toggle-read{ + background-image: url(icons/read.svg); + } + &#toggle-read.active{ + background-image: url(icons/read-white.svg); + } + + &#toggle-unread{ + background-image: url(icons/unread.svg); + } + &#toggle-unread.active{ + background-image: url(icons/unread-white.svg); + } + + &#toggle-starred{ + background-image: url(icons/starred.svg); + } + &#toggle-starred.active{ + background-image: url(icons/starred-white.svg); + } + + &#toggle-non-starred{ + background-image: url(icons/non-starred.svg); + } + &#toggle-non-starred.active{ + background-image: url(icons/non-starred-white.svg); + } + + // read all + &.read_all{ + background-color: $grey-lighter; + // min-height: 0; + color:$main-font-color; + padding: 5px 16px; + @include transition(all, 0.15s, ease-in-out); + + &:hover{ + background-color: $grey-medium-light; + } + } + + // views + &.view-normal{ + background-image: url(icons/view-list.svg); + } + &.view-normal.active{ + background-image: url(icons/view-list-white.svg); + } + + &.view-global{ + background-image: url(icons/view-global.svg); + } + &.view-global.active{ + background-image: url(icons/view-global-white.svg); + } + + &.view-reader{ + background-image: url(icons/view-reader.svg); + } + &.view-reader.active{ + background-image: url(icons/view-reader-white.svg); + } + + &.view-rss{ + background-image: url(icons/rss.svg); + } + + } + .dropdown { + a.dropdown-toggle{ + border-left-width: 0; + background-image: url(icons/more.svg); + } + } + + &#nav_menu_action{ + + } + &#nav_menu_read_all{ + + } + &#nav_menu_views{ + + } + } +} + + +#dropdown-query ~ .dropdown-menu .dropdown-header .icon { + vertical-align: middle; + background-color: $grey-medium-dark; + border-radius: 3px; +} + + +/*=== Content of feed articles */ +.content, .content.thin { + padding: 20px 10px; + + font-size: 1.125rem; + line-height: 1.8rem; + + h1.title, h1{ + + a{ + color: $main-font-color; + font-family: "spectral"; + font-size: 2rem; + + &:hover{ + color: $main-first; + text-decoration: none; + } + } + } + .author{ + font-size: 1.125rem; + color: $light-font-color; + } + p, ul{ + font-size: 1.125rem; + line-height: 1.8rem; + } + hr{ + } + .content hr { + margin: 30px 10px; + height: 1px; + background: $grey-medium-light; + border: 0; + box-shadow: 0 2px 5px #ccc; + } + + pre { + margin: 10px auto; + padding: 10px 20px; + overflow: auto; + background: $main-first-darker; + color: $white; + font-size: 0.9rem; + border-radius: 3px; + + code { + background: transparent; + color: $white; + border: none; + } + } + code { + padding: 2px 5px; + color: $grey-light; + background: $grey-lighter; + border: 1px solid $grey-light; + border-radius: 3px; + } + + + blockquote { + display: block; + margin: 0; + padding: 5px 20px; + border-top: 1px solid $grey-medium-light; + border-bottom: 1px solid $grey-medium-light; + background: $grey-lighter; + color: $main-font-color; + + p { + margin: 0; + } + } + +} + + +/*=== Notification and actualize notification */ +.notification { + position: fixed; + top: auto; + bottom: 0; + left: 0; + right: 0; + width: 100%; + height: 3rem; + + padding: 1rem 0; + text-align: center; + // font-weight: bold; + font-size: 1em; + line-height: 3em; + z-index: 10; + vertical-align: middle; + background: $grey-medium-light; + color: $grey-dark; + // border-radius: 3px; + border: none; + + .msg{ + font-size: 1rem; + display: inline-block; + } + + &.good { + background: $success-bg; + color: $white; + } + &.bad { + background: $alert-bg; + color: $white; + } + a.close { + padding: 0 15px; + line-height: 3em; + border-radius: 0 3px 3px 0; + } + + &.good a.close:hover { + background: $success-text; + } + &.bad a.close:hover { + background: $alert-text; + } + + &#actualizeProgress { + line-height: 2em; + + br{ + display: none; + } + } +} + + +/*=== Navigation menu (for articles) */ +#nav_entries { + margin: 0; + text-align: center; + line-height: 3em; + table-layout: fixed; + background: $sid-bg; +} diff --git a/p/themes/Ansum/_list-view.scss b/p/themes/Ansum/_list-view.scss new file mode 100644 index 000000000..78f100203 --- /dev/null +++ b/p/themes/Ansum/_list-view.scss @@ -0,0 +1,92 @@ +/*=== Feed articles */ +.flux { + // border-left: 2px solid #ecf0f1; + background: $white; + + @include transition(all, 0.15s, ease-in-out); + + &:hover{ + background: $grey-lighter; + + &:not(.current):hover .item.title { + background: $grey-lighter; + + + } + } + &.current{ + border-left-color: $main-first; + background: $white; + } + &.not_read{ + background: $unread-bg; //-------------------- + // border-left-color: #FF5300; + + &:hover{ + background: $unread-bg-light; //-------------------- + } + + &:not(.current):hover .item.title { + background: $unread-bg-light; + + + } + .item.title{ + a{ + color: $unread-font-color; //-------------------- + } + + } + .item.website{ + a{ + color: $unread-font-color; //-------------------- + } + } + .item.date{ + color: unquote($unread-font-color+"99"); //-------------------- + } +} + + &.favorite { + background: $fav-light; + border-left-color: $fav-bg; + + @include transition(all, 0.15s, ease-in-out); + + &:not(.current):hover .item.title { + background: $fav-light; + } + } + + .website{ + a{ + color: $main-font-color; + opacity: 0.75; + } + + .favicon { + padding: 5px; + } + } + .date { + font-size: 0.85rem; + color: $main-font-color; + opacity: 0.75; + } + + .bottom { + font-size: 1rem; + text-align: center; + } +} + +.flux_header { + font-size: 1rem; + cursor: pointer; + border-top: 1px solid $grey-light; + + .title { + font-size: 1rem; + } +} + diff --git a/p/themes/Ansum/_logs.scss b/p/themes/Ansum/_logs.scss new file mode 100644 index 000000000..ae1e24c6c --- /dev/null +++ b/p/themes/Ansum/_logs.scss @@ -0,0 +1,34 @@ +/*=== LOGS */ +/*=========*/ +.loglist { + overflow: hidden; + border: 1px solid $grey-medium-dark; +} +.log { + margin: 10px 0; + padding: 5px 2%; + overflow: auto; + font-size: 0.8rem; + background: $grey-lighter; + color: $grey-dark; +} + +.log > .date { + margin: 0 10px 0 0; + padding: 5px 10px; + border-radius: 20px; +} +.log.error > .date { + background: $alert-bg; + color: #fff; +} +.log.warning > .date { + background: $warning-bg; +} +.log.notice > .date { + background: $grey-light; +} +.log.debug > .date { + background: $main-first-darker; + color: $white; +} diff --git a/p/themes/Ansum/_mixins.scss b/p/themes/Ansum/_mixins.scss new file mode 100644 index 000000000..4c82c438a --- /dev/null +++ b/p/themes/Ansum/_mixins.scss @@ -0,0 +1,57 @@ +/* FUNCTIONS */ + +//animation +@mixin transition($target, $duration, $ease) { + -webkit-transition: $target $duration $ease; + -moz-transition: $target $duration $ease; + -o-transition: $target $duration $ease; + transition: $target $duration $ease; +} + +//animation +@mixin animation-delay($delay) { + -webkit-animation-delay: $delay; + /* Safari 4.0 - 8.0 */ + animation-delay: $delay; +} + +//animation +@mixin animation($animate...) { + $max: length($animate); + $animations: ''; + @for $i from 1 through $max { + $animations: #{$animations + nth($animate, $i)}; + @if $i < $max { + $animations: #{$animations + ", "}; + } + } + -webkit-animation: $animations; + -moz-animation: $animations; + -o-animation: $animations; + animation: $animations; +} + +//keyframes +@mixin keyframes($animationName) { + @-webkit-keyframes #{$animationName} { + @content; + } + @-moz-keyframes #{$animationName} { + @content; + } + @-o-keyframes #{$animationName} { + @content; + } + @keyframes #{$animationName} { + @content; + } +} + +@mixin border-radius($radius: 4px){ + -moz-border-radius: $radius; + -webkit-border-radius: $radius; + -ms-border-radius: $radius; + -o-border-radius: $radius; + -khtml-border-radius: $radius; + border-radius: $radius; +} diff --git a/p/themes/Ansum/_mobile.scss b/p/themes/Ansum/_mobile.scss new file mode 100644 index 000000000..10b432241 --- /dev/null +++ b/p/themes/Ansum/_mobile.scss @@ -0,0 +1,170 @@ +/*=== MOBILE */ +/*===========*/ +@media(max-width: 840px) { + html, body{ + // font-size: 1rem; + } + ul.nav{ + .item{ + width: 100%; + + img{ + display: none; + } + a{ + display: inline-block; + padding: 1rem 1rem 1rem 2.5rem; + color: $sid-font-color; + width: 100%; + + background: url("../../themes/icons/logout.svg") no-repeat $sid-bg-dark 3% center; + + @include transition(all, 0.2s, ease-in-out); + + &:hover, + &:active{ + background: url("../../themes/icons/logout.svg") no-repeat $alert-bg 3% center; + text-decoration: none; + color: $white; + } + } + + } + + } + .aside { + @include transition(all, 0.2s, ease-in-out); + + &.aside_feed { + padding: 0; + } + + .tree .tree-folder .tree-folder-items .item a{ + padding: 0.5rem 1rem; + } + } + .aside .toggle_aside, + #panel .close { + display: block; + width: 100%; + height: 50px; + line-height: 50px; + text-align: center; + background: $main-first-alt; + } + + .header{ + padding: 0.5rem; + .item{ + &.title{ + display: none; + } + + &.search{ + input{ + width: 90%; + height: 3.5rem; + + &:focus{ + width: 100%; + + } + } + .btn{ + min-height: 49px; + padding: 0.5rem 2rem; + } + } + &.configure{ + width: 2.75rem; + top: 3.125rem; + .dropdown{ + .btn{ + padding: 1.125rem; + } + } + } + } + } + + .nav_menu{ + .btn { + margin: 0; + padding: 0.85rem 1.25rem; + } + .stick { + margin: 0.5rem 0.5rem; + + .btn{ + margin: 0; + padding: 0.85rem 1.25rem; + + &.read_all{ + padding: 0.85rem 1.25rem; + } + } + } + .search { + display: none; + max-width: 97%; + + .input{ + + max-width: 97%; + width: 90px; + + &::focus{ + width: 400px; + } + } + } + } + #stream{ + .flux{ + .flux_header{ + padding: 0.5rem 0; + } + } + } + + + + .day{ + text-align: center; + padding: 1rem 0; + .name { + // font-size: 1.1rem; + display: block; + padding: 0; + width: 100%; + line-height: 1.5rem; + margin-bottom: 1rem; + } + + } + + .pagination { + margin: 0 0 3.5em; + } + + #nav_entries{ + line-height: 4.5rem; + } + + .notification { + border-radius: 0; + + a.close { + display: block; + left: 0; + background: transparent; + } + a.close:hover { + opacity: 0.5; + } + a.close .icon { + display: none; + + } + } +} diff --git a/p/themes/Ansum/_reader-view.scss b/p/themes/Ansum/_reader-view.scss new file mode 100644 index 000000000..4368908d6 --- /dev/null +++ b/p/themes/Ansum/_reader-view.scss @@ -0,0 +1,13 @@ +/*=== READER VIEW */ +/*================*/ +#stream.reader .flux { + padding: 0 0 50px; + background: $grey-light; + color: $main-font-color; + border: none; +} +#stream.reader .flux .author { + margin: 0 0 10px; + font-size: 90%; + color: $grey-medium-dark; +} diff --git a/p/themes/Ansum/_sidebar.scss b/p/themes/Ansum/_sidebar.scss new file mode 100644 index 000000000..87d5bd1a9 --- /dev/null +++ b/p/themes/Ansum/_sidebar.scss @@ -0,0 +1,299 @@ +/*=== Tree */ +.tree { + margin: 10px 0; + + &#sidebar{ + scrollbar-color: rgba(255,255, 0, 0.1) rgba(0, 0, 0, 0.05); + scrollbar-color: unquote($sid-font-color+"33") unquote($sid-font-color+"22"); + + + } + + + .tree-folder{ + border-bottom: 1px solid $sid-sep; + + -moz-box-shadow: inset -1px -11px 8px #00000033; + -webkit-box-shadow: inset -1px -11px 8px #00000033; + box-shadow: inset -1px -11px 8px #00000033; + + .tree-folder-title { + position: relative; + background: $sid-bg; + font-size: 0.85rem; + letter-spacing: 1px; + padding: 12px 16px; + font-weight: 700; + text-transform: uppercase; + + .title { + background: inherit; + color: $sid-font-color; + &:hover{ + text-decoration: none; + } + } + } + &.active { + .tree-folder-title { + background: $sid-bg; + font-weight: bold; + } + } + .tree-folder-items { + background: $sid-bg-alt; + + .item{ + padding: 0 1rem; + line-height: 2.5rem; + font-size: 1rem; + font-weight: 400; + @include transition(all, 0.15s, ease-in-out); + + &.active{ + background: $sid-active; + + .dropdown li a{ + color: $main-font-color; + + &:hover{ + color: $sid-font-color; + } + } + + a{ + color: $sid-active-font; + } + } + + &:hover{ + background: $sid-bg-dark; + } + + a{ + text-decoration: none; + color: $sid-font-color; + } + } + + .feed .item-title:not([data-unread="0"])::before { + content: attr(data-unread); + background: $sid-pills; + font-size: 0.75rem; + display: block; + float: left; + padding: 3px 4px; + text-align:center; + border-radius: 12px; + margin: 11px 6px 0 4px; + line-height: 0.75rem; + } + .feed .item-title:not([data-unread="0"]) { + + } + } + } +} + +/*=== Buttons */ +.stick { + vertical-align: middle; + font-size: 0; + + input, .btn { + border-radius: 0; + } + .btn:first-child, + input:first-child { + border-radius: 5px 0 0 5px; + } + .btn:last-child, input:last-child, .btn + .dropdown > .btn { + border-radius: 0 5px 5px 0; + } + .btn + .btn, + .btn + input, + .btn + .dropdown > .btn, + input + .btn, + input + input, + input + .dropdown > .btn, + .dropdown + .btn, + .dropdown + input, + .dropdown + .dropdown > .btn { + border-left: 1px solid $grey-medium-light; + } + +} + +.aside { + background: $sid-bg; + + + &.aside_feed { + padding: 10px 0; + text-align: center; + background: $sid-bg; + border-right: 1px solid $sid-sep; + } + &.aside_feed .tree { + margin: 10px 0 50px; + } + +} + + +/* Sidebar des pages de configuration */ + + + +/*=== Navigation */ + +.nav-list{ + .nav-header, + .item{ + height: 2.5em; + line-height: 2.5em; + font-size: 1rem; + } + .item{ + background: $sid-bg; + @include transition(all, 0.15s, ease-in-out); + a{ + padding: 0 1rem; + color: $sid-font-color; + } + .error{ + a{ + color: $alert-bg; + } + } + &:hover{ + background: $sid-bg-dark; + color: $sid-font-color; + + .error{ + a{ + color: $sid-font-color; + background: $main-first; + } + } + .empty{ + a{ + color: $sid-font-color; + background: $warning-bg; + } + } + + a{ + color: $sid-font-color; + text-decoration: none; + } + } + &.active{ + background: $main-first; + color: $white; + + .error{ + a{ + color: $white; + background: $main-first; + } + } + + .empty{ + a{ + color: $white; + background: $warning-bg; + } + } + + a{ + color: $white; + text-decoration: none; + } + } + + } + &.empty{ + a{ + color: $warning-bg; + } + } + .disable{ + text-align: center; + background: $grey-lighter; + color: $grey-medium-dark; + } + + .nav-header { + padding: 0 10px; + font-weight: bold; + color: $grey-dark; + text-transform: uppercase; + letter-spacing: 1px; + margin-top: 1rem; + } + + .nav-form { + padding: 3px; + text-align: center; + } + + .nav-head { + margin: 0; + text-align: right; + // background: #34495e; + color: $white; + a { + color: $white; + } + .item { + padding: 5px 10px; + font-size: 0.9rem; + line-height: 1.5rem; + } + } +} + +/*=== Aside main page (categories) */ +.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { + position: absolute; + right: 0; + line-height: 1.5rem; + background: $sid-pills; + border-radius: 12px; + padding: 0 0.75rem; + margin: -0.5rem 1rem 0 0; + text-align: center; +} + +.feed.item.empty.active { + background: $grey-dark; +} +.feed.item.error.active { + background: $grey-dark; +} +.feed.item.empty, +.feed.item.empty > a { + color: $grey-dark; +} +.feed.item.error, +.feed.item.error > a { + color: $grey-dark; +} +.feed.item.empty.active, +.feed.item.error.active, +.feed.item.empty.active > a, +.feed.item.error.active > a { + color: $white; +} +.aside_feed .tree-folder-items .dropdown-menu::after { + left: 2px; +} +.aside_feed .tree-folder-items .item .dropdown-target:target ~ .dropdown-toggle > .icon, +.aside_feed .tree-folder-items .item:hover .dropdown-toggle > .icon, +.aside_feed .tree-folder-items .item.active .dropdown-toggle > .icon { + border-radius: 3px; +} +.aside_feed .stick #btn-importExport{ + border-left-color: $sid-bg; +} diff --git a/p/themes/Ansum/_stats.scss b/p/themes/Ansum/_stats.scss new file mode 100644 index 000000000..f287efa08 --- /dev/null +++ b/p/themes/Ansum/_stats.scss @@ -0,0 +1,27 @@ +/*=== STATISTICS */ +/*===============*/ +.stat { + margin: 10px 0 20px; +} + +.stat th, +.stat td, +.stat tr { + border: none; +} +.stat > table td, +.stat > table th { + border-bottom: 1px solid $grey-medium-light; +} + +.stat > .horizontal-list { + margin: 0 0 5px; +} +.stat > .horizontal-list .item { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.stat > .horizontal-list .item:first-child { + width: 270px; +} diff --git a/p/themes/Ansum/_tables.scss b/p/themes/Ansum/_tables.scss new file mode 100644 index 000000000..608e19aca --- /dev/null +++ b/p/themes/Ansum/_tables.scss @@ -0,0 +1,17 @@ +/*=== Tables */ +table { + border-collapse: collapse; +} + +tr, th, td { + padding: 0.5em; + border: 1px solid $grey-medium-light; +} +th { + background: $grey-lighter; +} +form td, +form th { + font-weight: normal; + text-align: center; +} diff --git a/p/themes/Ansum/_variables.scss b/p/themes/Ansum/_variables.scss new file mode 100644 index 000000000..9fc4238ab --- /dev/null +++ b/p/themes/Ansum/_variables.scss @@ -0,0 +1,53 @@ +// La couleur principale du thème +$main-first: #ca7227; // couleur principale +$main-first-alt: #b7641d; // var pour les hovers +$main-first-light: #fdf6ef; // var light 1 +$main-first-lighter: #fefaf7; // var light 2 +$main-first-dark: #3c3835; // var pour les hovers +$main-first-darker: #221f1d; // var pour les hovers + +// les couleurs de polices liées +$main-font-color: #363330; +$light-font-color: #6d655f; +$white: #fff; // le blanc (des fois qu'on aurait envie de le teinter un peu) + +// toute la palette des gris, très utile +// on essaiera de teinter ces gris suivant la couleur principale +$grey-darker: #524236; +$grey-dark: #766556; +$grey-medium-dark: #bbaa99; +$grey-medium: #d9ccbf; +$grey-medium-light: #e4d8cc; +$grey-light: #f5f0ec; +$grey-lighter: #fcfaf8; + +$unread-font-color: #161a38; +$unread-bg: #f2f6f8; +$unread-bg-light: #fdfdfe; + +// les couleurs d'alertes (rouge, jaune, vert) +$alert-bg: #f5633e; // la base +$alert-light: #fde0d8; // +light +$alert-text: #73341f; // +foncé + +$warning-bg: #f4f762; +$warning-light: #fdfde0; +$warning-text: #73762f; + +$success-bg: #10f5b2; +$success-light: #cffdef; +$success-text: #0c7556; + +// les favoris +$fav-bg: #FFC300; +$fav-light: #FFF6DA; + +// la couleur de sidebar, utile si on a envie d'un thème qui aurait une sidebar foncé, e.g. +$sid-font-color: #363330; // la couleur de fond de la barre de gauche et du header +$sid-bg: #fbf9f6; // le background général de la barre de gauche, et du header +$sid-bg-alt: #f7f2ea; // le background de l'intérieur des groupes +$sid-bg-dark: #efe3d3; // les hovers +$sid-sep: #f0e7da; // les séparateurs +$sid-active: $main-first; // la couleur active +$sid-active-font: #FFFFFF; // la couleur active +$sid-pills: rgba(35,35,0, 0.15); // les gélules diff --git a/p/themes/Ansum/ansum.css b/p/themes/Ansum/ansum.css new file mode 100644 index 000000000..bc4ae36b4 --- /dev/null +++ b/p/themes/Ansum/ansum.css @@ -0,0 +1,1299 @@ +@font-face { + font-family: "lato"; + font-style: normal; + font-stretch: normal; + font-weight: 400; + src: local("Lato"), url("../fonts/LatoLatin-Regular.woff") format("woff"); } +@font-face { + font-family: "lato"; + font-style: italic; + font-stretch: normal; + font-weight: 400; + src: local("Lato"), url("../fonts/LatoLatin-Italic.woff") format("woff"); } +@font-face { + font-family: "lato"; + font-style: normal; + font-stretch: normal; + font-weight: 700; + src: local("Lato"), url("../fonts/LatoLatin-Bold.woff") format("woff"); } +@font-face { + font-family: "lato"; + font-style: italic; + font-stretch: normal; + font-weight: 700; + src: local("Lato"), url("../fonts/LatoLatin-BoldItalic.woff") format("woff"); } +@font-face { + font-family: "spectral"; + font-style: normal; + font-stretch: normal; + font-weight: 400; + src: local("Spectral"), url("../fonts/Spectral-Regular.woff") format("woff"); } +@font-face { + font-family: "spectral"; + font-style: italic; + font-stretch: normal; + font-weight: 400; + src: local("Spectral"), url("../fonts/Spectral-Italic.woff") format("woff"); } +@font-face { + font-family: "spectral"; + font-style: normal; + font-stretch: normal; + font-weight: 700; + src: local("Spectral"), url("../fonts/Spectral-Bold.woff") format("woff"); } +@font-face { + font-family: "spectral"; + font-style: italic; + font-stretch: normal; + font-weight: 700; + src: local("Spectral"), url("../fonts/Spectral-BoldItalic.woff") format("woff"); } +/* FUNCTIONS */ +/* btns */ +.btn { + display: inline-block; + min-height: 38px; + min-width: 15px; + line-height: 25px; + margin: 0; + padding: 0.5rem 1.5rem; + font-size: 1rem; + vertical-align: middle; + cursor: pointer; + overflow: hidden; + background: #fcfaf8; + border-radius: 5px; + border: none; + color: #766556; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -o-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; } + .btn.btn-important { + background: #ca7227; + color: #fff; } + .btn.btn-important:hover, .btn.btn-important:active { + background: #b7641d; } + .btn.btn-attention { + background: #f5633e; + color: #fff; } + .btn.btn-attention:hover, .btn.btn-attention:active { + background: #73341f; } + .btn:hover { + text-decoration: none; } + +a.btn { + min-height: 25px; + line-height: 25px; } + +/*=== Forms */ +legend { + display: inline-block; + width: auto; + margin: 2rem 0 1rem 0; + padding: 0; + font-size: 1rem; + clear: both; + text-transform: uppercase; + letter-spacing: 1px; + font-weight: 700; } + +label { + min-height: 25px; + padding: 5px 0; + cursor: pointer; + color: #766556; } + +textarea { + width: 360px; + height: 100px; } + +input, select, textarea, button { + font-family: "lato", "Helvetica", "Arial", sans-serif; + min-height: 25px; + padding: 5px 10px; + line-height: 25px; + vertical-align: middle; + background: #fff; + border: 1px solid #f5f0ec; + font-size: 1rem; + color: #766556; + border-radius: 2px; } + +option { + padding: 0 .5em; } + +input:focus, select:focus, textarea:focus { + color: #363330; + border-color: #ca7227; } + +input:invalid, select:invalid { + color: #f5633e; + border-color: #f5633e; + box-shadow: none; } + +input:disabled, select:disabled { + background: #f5f0ec; } + +input.extend { + transition: width 200ms linear; + -moz-transition: width 200ms linear; + -webkit-transition: width 200ms linear; + -o-transition: width 200ms linear; + -ms-transition: width 200ms linear; } + +.form-group { + padding: 5px; + border-radius: 3px; } + .form-group::after { + content: ""; + display: block; + clear: both; } + .form-group .group-name { + padding: 10px 0; + text-align: right; } + .form-group .group-controls { + min-height: 25px; + padding: 5px 0; } + .form-group .group-controls .control { + line-height: 2.0em; } + .form-group table { + margin: 10px 0 0 220px; } + .form-group.form-actions { + margin: 15px 0 25px; + padding: 5px 0; } + .form-group.form-actions .btn { + margin: 0 0.5rem 0 0; } + +/*=== Tables */ +table { + border-collapse: collapse; } + +tr, th, td { + padding: 0.5em; + border: 1px solid #e4d8cc; } + +th { + background: #fcfaf8; } + +form td, +form th { + font-weight: normal; + text-align: center; } + +/*=== COMPONENTS */ +/*===============*/ +/*=== Forms */ +/*=== Horizontal-list */ +.horizontal-list { + margin: 0; + padding: 0.1rem 0; } + .horizontal-list .item { + vertical-align: middle; } + .horizontal-list .item:first-child { + padding-left: 0.5rem; } + +/*=== Dropdown */ +.dropdown-menu { + background: #fcfaf8; + margin: 0; + font-size: 1rem; + text-align: left; + padding: 0.5rem 0 1rem 0; + border: none; + border-radius: 3px; + -webkit-box-shadow: 0px 6px 8px 0px rgba(0, 0, 0, 0.35); + -moz-box-shadow: 0px 6px 8px 0px rgba(0, 0, 0, 0.35); + box-shadow: 0px 6px 8px 0px rgba(0, 0, 0, 0.35); } + .dropdown-menu::after { + content: ""; + position: absolute; + top: -4px; + right: 13px; + width: 10px; + height: 10px; + z-index: -10; + transform: rotate(45deg); + -moz-transform: rotate(45deg); + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + background: white; } + .dropdown-menu .dropdown-header { + margin: 1.75rem 0 0.5rem 2rem; + font-weight: bold; + text-align: left; + color: #766556; + text-transform: uppercase; + letter-spacing: 1px; } + .dropdown-menu .item { + -webkit-transition: all 0.075s ease-in-out; + -moz-transition: all 0.075s ease-in-out; + -o-transition: all 0.075s ease-in-out; + transition: all 0.075s ease-in-out; } + .dropdown-menu .item a, .dropdown-menu .item span, .dropdown-menu .item .as-link { + padding: 0 2rem; + line-height: 2.5em; + font-size: 1rem; + color: #363330; } + .dropdown-menu .item:hover { + background: #ca7227; + color: #fff; } + .dropdown-menu .item:hover a, .dropdown-menu .item:hover button { + text-decoration: none; + color: #fff; } + .dropdown-menu .item[aria-checked="true"] a::before { + font-weight: bold; + margin: 0 0 0 -14px; } + .dropdown-menu .input select, .dropdown-menu .input input { + margin: 0 auto 5px; + padding: 2px 5px; + border-radius: 3px; } + .dropdown-menu .separator { + margin: 0.75rem 0; + border-bottom: 1px solid #f5f0ec; } + +.tree .tree-folder .tree-folder-items .dropdown-menu .item, +.tree .tree-folder .tree-folder-items .dropdown-menu .item { + padding: 0; } + .tree .tree-folder .tree-folder-items .dropdown-menu .item a, + .tree .tree-folder .tree-folder-items .dropdown-menu .item button, + .tree .tree-folder .tree-folder-items .dropdown-menu .item a, + .tree .tree-folder .tree-folder-items .dropdown-menu .item button { + color: #363330; } + .tree .tree-folder .tree-folder-items .dropdown-menu .item a:hover, + .tree .tree-folder .tree-folder-items .dropdown-menu .item button:hover, + .tree .tree-folder .tree-folder-items .dropdown-menu .item a:hover, + .tree .tree-folder .tree-folder-items .dropdown-menu .item button:hover { + color: #fff; } + .tree .tree-folder .tree-folder-items .dropdown-menu .item:hover, + .tree .tree-folder .tree-folder-items .dropdown-menu .item:hover { + background: #ca7227; } + +/*=== Alerts */ +.alert { + margin: 1rem 0; + padding: 1rem; + font-size: 1rem; + background: #fcfaf8; + border: 1px solid #d9ccbf; + border-radius: 3px; + color: #766556; + text-shadow: 0 0 1px #f5f0ec; } + +.alert-head { + font-size: 1.15em; } + +.alert > a { + text-decoration: underline; + color: inherit; } + +.alert-warn { + background: #fdfde0; + border: 1px solid #73762f33; + color: #73762f; } + +.alert-success { + background: #cffdef; + border: 1px solid #0c755633; + color: #0c7556; } + +.alert-error { + background: #fde0d8; + border: 1px solid #73341f33; + color: #73341f; } + +/*=== Pagination */ +.pagination { + text-align: center; + font-size: 0.8em; + background: #f5f0ec; + color: #363330; } + .pagination .item.pager-current { + font-weight: bold; + font-size: 1.5em; + background: #fbf9f6; + color: #f5f0ec; } + .pagination .item a { + display: block; + font-style: italic; + line-height: 3em; + text-decoration: none; + color: #363330; } + .pagination .item a:hover { + background: #363330; + color: #f5f0ec; } + .pagination .loading, + .pagination a:hover.loading { + font-size: 0; + background: url("loader.gif") center center no-repeat #34495e; } + +.content .pagination { + margin: 0; + padding: 0; } + +/*=== Boxes */ +.box { + border: none; + border-radius: 3px; + background: #fff; + -webkit-box-shadow: 0px 2px 2px 0px rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0px 2px 2px 0px rgba(0, 0, 0, 0.25); + box-shadow: 0px 2px 2px 0px rgba(0, 0, 0, 0.25); } + .box .box-title { + margin: 0; + padding: 5px 10px; + background: #f5f0ec; + color: #363330; + border-radius: 2px 2px 0 0; } + .box .box-title form input { + width: 85%; } + .box .box-title form .dropdown { + float: right; } + .box .box-title form .dropdown a.dropdown-toggle { + padding: 0; + background-image: url(icons/more.svg); + background-repeat: no-repeat; + background-position: right 8px; + border-radius: 0; } + .box .box-title form .dropdown a.dropdown-toggle img { + display: none; } + .box .box-content .item { + padding: 0.5rem 0.75rem; + font-size: 1rem; + color: #363330; + line-height: 1.7em; + border-bottom: 1px solid #f5f0ec; } + .box .box-content .item img { + margin-right: 0.75rem; } + .box .box-content .item .configure { + visibility: hidden; + width: 1.75rem; + height: 1.75rem; + display: block; + border-radius: 2px; + float: left; + margin-right: 0.5rem; + background: url("icons/cog.svg") no-repeat 4px 4px; } + .box .box-content .item .configure .icon { + vertical-align: middle; + border-radius: 3px; + display: none; } + .box .box-content .item .configure:hover { + background: url("icons/cog-white.svg") no-repeat 4px 4px #ca7227; } + .box .box-content .item:hover .configure { + visibility: visible; } + .box .box-content .item:last-child { + border-bottom: none; } + +/*=== "Load more" part */ +#bigMarkAsRead { + text-align: center; + text-decoration: none; + background: #fdf6ef; + color: #ca7227; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -o-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; } + #bigMarkAsRead:hover { + background: #ca7227; + color: #fff; } + #bigMarkAsRead:hover .bigTick { + background: url(icons/tick-white.svg) center no-repeat; } + #bigMarkAsRead .bigTick { + margin: 0.5rem 0; + display: inline-block; + text-indent: -9999px; + background: url(icons/tick-color.svg) center no-repeat; + height: 64px; + width: 64px; + white-space: nowrap; } + +.formLogin { + background: #fbf9f6; } + .formLogin .header .configure { + padding-right: 1rem; } + .formLogin .header .configure img { + margin-right: 0.5rem; } + .formLogin .header .configure a.signin { + color: #fff; } + .formLogin h1 { + color: #fff; } + .formLogin form#crypto-form div { + margin-bottom: 1rem; } + .formLogin form#crypto-form div label { + font-size: 1rem; + color: #d9ccbf; } + .formLogin form#crypto-form div input { + background: #221f1d; } + .formLogin form#crypto-form div input:focus { + background: #fcfaf8; + color: #363330; } + +/*=== DIVERS */ +/*===========*/ +.aside.aside_feed .nav-form input, +.aside.aside_feed .nav-form select { + width: 140px; } + +.aside.aside_feed .nav-form .dropdown .dropdown-menu { + right: -20px; } + +.aside.aside_feed .nav-form .dropdown .dropdown-menu::after { + right: 33px; } + +/*=== Tree */ +.tree { + margin: 10px 0; } + .tree#sidebar { + scrollbar-color: rgba(255, 255, 0, 0.1) rgba(0, 0, 0, 0.05); + scrollbar-color: #36333033 #36333022; } + .tree .tree-folder { + border-bottom: 1px solid #f0e7da; + -moz-box-shadow: inset -1px -11px 8px #00000033; + -webkit-box-shadow: inset -1px -11px 8px #00000033; + box-shadow: inset -1px -11px 8px #00000033; } + .tree .tree-folder .tree-folder-title { + position: relative; + background: #fbf9f6; + font-size: 0.85rem; + letter-spacing: 1px; + padding: 12px 16px; + font-weight: 700; + text-transform: uppercase; } + .tree .tree-folder .tree-folder-title .title { + background: inherit; + color: #363330; } + .tree .tree-folder .tree-folder-title .title:hover { + text-decoration: none; } + .tree .tree-folder.active .tree-folder-title { + background: #fbf9f6; + font-weight: bold; } + .tree .tree-folder .tree-folder-items { + background: #f7f2ea; } + .tree .tree-folder .tree-folder-items .item { + padding: 0 1rem; + line-height: 2.5rem; + font-size: 1rem; + font-weight: 400; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -o-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; } + .tree .tree-folder .tree-folder-items .item.active { + background: #ca7227; } + .tree .tree-folder .tree-folder-items .item.active .dropdown li a { + color: #363330; } + .tree .tree-folder .tree-folder-items .item.active .dropdown li a:hover { + color: #363330; } + .tree .tree-folder .tree-folder-items .item.active a { + color: #FFFFFF; } + .tree .tree-folder .tree-folder-items .item:hover { + background: #efe3d3; } + .tree .tree-folder .tree-folder-items .item a { + text-decoration: none; + color: #363330; } + .tree .tree-folder .tree-folder-items .feed .item-title:not([data-unread="0"])::before { + content: attr(data-unread); + background: rgba(35, 35, 0, 0.15); + font-size: 0.75rem; + display: block; + float: left; + padding: 3px 4px; + text-align: center; + border-radius: 12px; + margin: 11px 6px 0 4px; + line-height: 0.75rem; } + +/*=== Buttons */ +.stick { + vertical-align: middle; + font-size: 0; } + .stick input, .stick .btn { + border-radius: 0; } + .stick .btn:first-child, + .stick input:first-child { + border-radius: 5px 0 0 5px; } + .stick .btn:last-child, .stick input:last-child, .stick .btn + .dropdown > .btn { + border-radius: 0 5px 5px 0; } + .stick .btn + .btn, + .stick .btn + input, + .stick .btn + .dropdown > .btn, + .stick input + .btn, + .stick input + input, + .stick input + .dropdown > .btn, + .stick .dropdown + .btn, + .stick .dropdown + input, + .stick .dropdown + .dropdown > .btn { + border-left: 1px solid #e4d8cc; } + +.aside { + background: #fbf9f6; } + .aside.aside_feed { + padding: 10px 0; + text-align: center; + background: #fbf9f6; + border-right: 1px solid #f0e7da; } + .aside.aside_feed .tree { + margin: 10px 0 50px; } + +/* Sidebar des pages de configuration */ +/*=== Navigation */ +.nav-list .nav-header, +.nav-list .item { + height: 2.5em; + line-height: 2.5em; + font-size: 1rem; } +.nav-list .item { + background: #fbf9f6; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -o-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; } + .nav-list .item a { + padding: 0 1rem; + color: #363330; } + .nav-list .item .error a { + color: #f5633e; } + .nav-list .item:hover { + background: #efe3d3; + color: #363330; } + .nav-list .item:hover .error a { + color: #363330; + background: #ca7227; } + .nav-list .item:hover .empty a { + color: #363330; + background: #f4f762; } + .nav-list .item:hover a { + color: #363330; + text-decoration: none; } + .nav-list .item.active { + background: #ca7227; + color: #fff; } + .nav-list .item.active .error a { + color: #fff; + background: #ca7227; } + .nav-list .item.active .empty a { + color: #fff; + background: #f4f762; } + .nav-list .item.active a { + color: #fff; + text-decoration: none; } +.nav-list.empty a { + color: #f4f762; } +.nav-list .disable { + text-align: center; + background: #fcfaf8; + color: #bbaa99; } +.nav-list .nav-header { + padding: 0 10px; + font-weight: bold; + color: #766556; + text-transform: uppercase; + letter-spacing: 1px; + margin-top: 1rem; } +.nav-list .nav-form { + padding: 3px; + text-align: center; } +.nav-list .nav-head { + margin: 0; + text-align: right; + color: #fff; } + .nav-list .nav-head a { + color: #fff; } + .nav-list .nav-head .item { + padding: 5px 10px; + font-size: 0.9rem; + line-height: 1.5rem; } + +/*=== Aside main page (categories) */ +.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { + position: absolute; + right: 0; + line-height: 1.5rem; + background: rgba(35, 35, 0, 0.15); + border-radius: 12px; + padding: 0 0.75rem; + margin: -0.5rem 1rem 0 0; + text-align: center; } + +.feed.item.empty.active { + background: #766556; } + +.feed.item.error.active { + background: #766556; } + +.feed.item.empty, +.feed.item.empty > a { + color: #766556; } + +.feed.item.error, +.feed.item.error > a { + color: #766556; } + +.feed.item.empty.active, +.feed.item.error.active, +.feed.item.empty.active > a, +.feed.item.error.active > a { + color: #fff; } + +.aside_feed .tree-folder-items .dropdown-menu::after { + left: 2px; } + +.aside_feed .tree-folder-items .item .dropdown-target:target ~ .dropdown-toggle > .icon, +.aside_feed .tree-folder-items .item:hover .dropdown-toggle > .icon, +.aside_feed .tree-folder-items .item.active .dropdown-toggle > .icon { + border-radius: 3px; } + +.aside_feed .stick #btn-importExport { + border-left-color: #fbf9f6; } + +/*=== STRUCTURE */ +/*===============*/ +/*=== Header */ +.header { + background: #fbf9f6; + padding: 0.5rem 1.35rem; + display: block; + table-layout: none; + width: auto; } + .header .item { + vertical-align: middle; } + .header .item.title { + font-weight: 400; + width: 280px; } + .header .item.title h1 a { + text-decoration: none; + color: #363330; + font-size: 1rem; + text-transform: uppercase; + letter-spacing: 1px; } + .header .item.title h1 a img { + margin-right: 0.5rem; } + .header .item.search input { + width: 230px; + border-radius: 2px 0 0 2px; + background-color: #f7f2ea; + color: #363330; + border: none; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -o-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; } + .header .item.search input:hover { + background-color: #efe3d3; } + .header .item.search input:focus { + width: 350px; + background-color: #fff; + color: #766556; } + .header .item.search .btn { + border-radius: 0 2px 2px 0; + background-color: #ca7227; + background-position: center; + background-repeat: no-repeat; + background-image: url(icons/magnifier.svg); + border-left-width: 0; + width: 3rem; + min-height: 35px; } + .header .item.search .btn img { + display: none; } + .header .item.search .btn:hover { + background-color: #b7641d; } + .header .item.configure { + width: 2rem; + position: absolute; + right: 1rem; + top: 1.25rem; + text-align: center; } + .header .item.configure .btn { + background-color: transparent; + background-position: center; + background-repeat: no-repeat; + background-image: url(icons/cog.svg); + padding: 0 0.5rem; } + .header .item.configure .btn img { + display: none; } + +/*=== Body */ +#global { + height: calc(100% - 85px); } + +/*=== Prompt (centered) */ +.prompt { + text-align: center; } + +.prompt label { + text-align: left; } + +.prompt form { + margin: 10px auto 20px auto; + width: 200px; } + +.prompt input { + margin: 5px auto; + width: 100%; } + +.prompt p { + margin: 20px 0; } + +/*=== New article notification */ +#new-article { + text-align: center; + font-size: 1rem; + background: #ca7227; } + +#new-article:hover { + background: #b7641d; } + +#new-article > a { + line-height: 3em; + font-weight: bold; + color: #fff; } + +#new-article > a:hover { + text-decoration: none; } + +/*=== Day indication */ +.day { + padding: 1rem 0 0 1.25rem; + font-weight: 700; + line-height: 3em; + letter-spacing: 1px; + text-transform: uppercase; + font-size: 0.875rem; + color: #6d655f; } + .day .name { + padding: 0 1rem 0 1rem; + font-size: 0.875rem; + color: #363330; + position: relative; + left: 0; + text-transform: uppercase; } + +/*=== Index menu */ +.nav_menu { + text-align: center; + padding: 5px 0; } + .nav_menu .btn { + border-left-width: 0; + padding: 0.5rem 1rem; + background-color: #fcfaf8; + background-position: center; + background-repeat: no-repeat; } + .nav_menu .btn:hover { + background-color: #f5f0ec; } + .nav_menu .stick { + background: #fcfaf8; } + .nav_menu .stick .btn { + border-left-width: 0; + padding: 0.5rem 1rem; + background-color: #fcfaf8; + background-position: center; + background-repeat: no-repeat; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -o-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; } + .nav_menu .stick .btn:hover { + background-color: #e4d8cc; } + .nav_menu .stick .btn.active { + background-color: #ca7227; } + .nav_menu .stick .btn img.icon { + display: none; } + .nav_menu .stick .btn#toggle-read { + background-image: url(icons/read.svg); } + .nav_menu .stick .btn#toggle-read.active { + background-image: url(icons/read-white.svg); } + .nav_menu .stick .btn#toggle-unread { + background-image: url(icons/unread.svg); } + .nav_menu .stick .btn#toggle-unread.active { + background-image: url(icons/unread-white.svg); } + .nav_menu .stick .btn#toggle-starred { + background-image: url(icons/starred.svg); } + .nav_menu .stick .btn#toggle-starred.active { + background-image: url(icons/starred-white.svg); } + .nav_menu .stick .btn#toggle-non-starred { + background-image: url(icons/non-starred.svg); } + .nav_menu .stick .btn#toggle-non-starred.active { + background-image: url(icons/non-starred-white.svg); } + .nav_menu .stick .btn.read_all { + background-color: #fcfaf8; + color: #363330; + padding: 5px 16px; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -o-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; } + .nav_menu .stick .btn.read_all:hover { + background-color: #e4d8cc; } + .nav_menu .stick .btn.view-normal { + background-image: url(icons/view-list.svg); } + .nav_menu .stick .btn.view-normal.active { + background-image: url(icons/view-list-white.svg); } + .nav_menu .stick .btn.view-global { + background-image: url(icons/view-global.svg); } + .nav_menu .stick .btn.view-global.active { + background-image: url(icons/view-global-white.svg); } + .nav_menu .stick .btn.view-reader { + background-image: url(icons/view-reader.svg); } + .nav_menu .stick .btn.view-reader.active { + background-image: url(icons/view-reader-white.svg); } + .nav_menu .stick .btn.view-rss { + background-image: url(icons/rss.svg); } + .nav_menu .stick .dropdown a.dropdown-toggle { + border-left-width: 0; + background-image: url(icons/more.svg); } + +#dropdown-query ~ .dropdown-menu .dropdown-header .icon { + vertical-align: middle; + background-color: #bbaa99; + border-radius: 3px; } + +/*=== Content of feed articles */ +.content, .content.thin { + padding: 20px 10px; + font-size: 1.125rem; + line-height: 1.8rem; } + .content h1.title a, .content h1 a, .content.thin h1.title a, .content.thin h1 a { + color: #363330; + font-family: "spectral"; + font-size: 2rem; } + .content h1.title a:hover, .content h1 a:hover, .content.thin h1.title a:hover, .content.thin h1 a:hover { + color: #ca7227; + text-decoration: none; } + .content .author, .content.thin .author { + font-size: 1.125rem; + color: #6d655f; } + .content p, .content ul, .content.thin p, .content.thin ul { + font-size: 1.125rem; + line-height: 1.8rem; } + .content .content hr, .content.thin .content hr { + margin: 30px 10px; + height: 1px; + background: #e4d8cc; + border: 0; + box-shadow: 0 2px 5px #ccc; } + .content pre, .content.thin pre { + margin: 10px auto; + padding: 10px 20px; + overflow: auto; + background: #221f1d; + color: #fff; + font-size: 0.9rem; + border-radius: 3px; } + .content pre code, .content.thin pre code { + background: transparent; + color: #fff; + border: none; } + .content code, .content.thin code { + padding: 2px 5px; + color: #f5f0ec; + background: #fcfaf8; + border: 1px solid #f5f0ec; + border-radius: 3px; } + .content blockquote, .content.thin blockquote { + display: block; + margin: 0; + padding: 5px 20px; + border-top: 1px solid #e4d8cc; + border-bottom: 1px solid #e4d8cc; + background: #fcfaf8; + color: #363330; } + .content blockquote p, .content.thin blockquote p { + margin: 0; } + +/*=== Notification and actualize notification */ +.notification { + position: fixed; + top: auto; + bottom: 0; + left: 0; + right: 0; + width: 100%; + height: 3rem; + padding: 1rem 0; + text-align: center; + font-size: 1em; + line-height: 3em; + z-index: 10; + vertical-align: middle; + background: #e4d8cc; + color: #766556; + border: none; } + .notification .msg { + font-size: 1rem; + display: inline-block; } + .notification.good { + background: #10f5b2; + color: #fff; } + .notification.bad { + background: #f5633e; + color: #fff; } + .notification a.close { + padding: 0 15px; + line-height: 3em; + border-radius: 0 3px 3px 0; } + .notification.good a.close:hover { + background: #0c7556; } + .notification.bad a.close:hover { + background: #73341f; } + .notification#actualizeProgress { + line-height: 2em; } + .notification#actualizeProgress br { + display: none; } + +/*=== Navigation menu (for articles) */ +#nav_entries { + margin: 0; + text-align: center; + line-height: 3em; + table-layout: fixed; + background: #fbf9f6; } + +/*=== Feed articles */ +.flux { + background: #fff; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -o-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; } + .flux:hover { + background: #fcfaf8; } + .flux:hover:not(.current):hover .item.title { + background: #fcfaf8; } + .flux.current { + border-left-color: #ca7227; + background: #fff; } + .flux.not_read { + background: #f2f6f8; } + .flux.not_read:hover { + background: #fdfdfe; } + .flux.not_read:not(.current):hover .item.title { + background: #fdfdfe; } + .flux.not_read .item.title a { + color: #161a38; } + .flux.not_read .item.website a { + color: #161a38; } + .flux.not_read .item.date { + color: #161a3899; } + .flux.favorite { + background: #FFF6DA; + border-left-color: #FFC300; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -o-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; } + .flux.favorite:not(.current):hover .item.title { + background: #FFF6DA; } + .flux .website a { + color: #363330; + opacity: 0.75; } + .flux .website .favicon { + padding: 5px; } + .flux .date { + font-size: 0.85rem; + color: #363330; + opacity: 0.75; } + .flux .bottom { + font-size: 1rem; + text-align: center; } + +.flux_header { + font-size: 1rem; + cursor: pointer; + border-top: 1px solid #f5f0ec; } + .flux_header .title { + font-size: 1rem; } + +/*=== GLOBAL VIEW */ +/*================*/ +#stream .box.category:not([data-unread="0"]) .box-title .title { + font-weight: bold; } +#stream .box.category .box-title { + background: none; + padding: 1.5rem; } + #stream .box.category .box-title a.title { + font-weight: normal; + text-decoration: none; + text-align: left; + font-size: 1rem; + text-transform: uppercase; + letter-spacing: 1px; + color: #766556; } + #stream .box.category .box-title a.title:not([data-unread="0"])::after { + position: absolute; + top: 1.75rem; + right: 0; + line-height: 1.5rem; + background: #f5f0ec; + border-radius: 12px; + padding: 0 0.75rem; + margin: -0.5rem 1rem 0 0; + text-align: center; } + #stream .box.category .box-title a.title:hover { + color: #ca7227; } +#stream .box.category .box-content { + padding-bottom: 0.5rem; } + #stream .box.category .box-content .item.feed { + font-size: 1rem; + padding: 0.5rem 1.5rem; } + #stream .box.category .box-content .item.feed a { + color: #363330; + font-weight: 400; } + #stream .box.category .box-content .item.feed a:hover { + color: #ca7227; + text-decoration: none; } + +#overlay { + background: rgba(0, 0, 0, 0.65); } + +#panel { + top: 3rem; + right: 3rem; + bottom: 3rem; + left: 3rem; + border-radius: 3px; } + +/*=== READER VIEW */ +/*================*/ +#stream.reader .flux { + padding: 0 0 50px; + background: #f5f0ec; + color: #363330; + border: none; } + +#stream.reader .flux .author { + margin: 0 0 10px; + font-size: 90%; + color: #bbaa99; } + +/*=== Configuration pages */ +.post { + padding: 1rem 2rem; + font-size: 1rem; } + .post form { + margin: 1rem 0; } + .post form .horizontal-list { + margin-bottom: 0.5rem; } + .post.content { + max-width: 550px; } + .post h1, .post h2 { + font-size: 3rem; + margin-top: 1.75rem; + font-weight: 300; + line-height: 1.2em; + color: #363330; } + .post a[href="./"] { + display: inline-block; + min-width: 15px; + line-height: 25px; + margin: 0; + padding: 0.75rem 1.5rem; + font-size: 1rem; + vertical-align: middle; + cursor: pointer; + overflow: hidden; + background: #fcfaf8; + border: 1px solid #e4d8cc; + border-radius: 5px; + color: #766556; } + .post a[href="./"]:hover { + text-decoration: none; + background: #ca7227; + color: white; + border: 1px solid #ca7227; } + +#slider { + border-left: none; + -webkit-box-shadow: 0px 6px 8px 0px rgba(0, 0, 0, 0.35); + -moz-box-shadow: 0px 6px 8px 0px rgba(0, 0, 0, 0.35); + box-shadow: 0px 6px 8px 0px rgba(0, 0, 0, 0.35); } + +.slide-container .properties { + background: rgba(0, 0, 0, 0.75); + border: 0; + padding: 1rem; + color: white; } + .slide-container .properties .page-number { + right: 1rem; + top: 1rem; } + +/*=== LOGS */ +/*=========*/ +.loglist { + overflow: hidden; + border: 1px solid #bbaa99; } + +.log { + margin: 10px 0; + padding: 5px 2%; + overflow: auto; + font-size: 0.8rem; + background: #fcfaf8; + color: #766556; } + +.log > .date { + margin: 0 10px 0 0; + padding: 5px 10px; + border-radius: 20px; } + +.log.error > .date { + background: #f5633e; + color: #fff; } + +.log.warning > .date { + background: #f4f762; } + +.log.notice > .date { + background: #f5f0ec; } + +.log.debug > .date { + background: #221f1d; + color: #fff; } + +/*=== STATISTICS */ +/*===============*/ +.stat { + margin: 10px 0 20px; } + +.stat th, +.stat td, +.stat tr { + border: none; } + +.stat > table td, +.stat > table th { + border-bottom: 1px solid #e4d8cc; } + +.stat > .horizontal-list { + margin: 0 0 5px; } + +.stat > .horizontal-list .item { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; } + +.stat > .horizontal-list .item:first-child { + width: 270px; } + +/*=== MOBILE */ +/*===========*/ +@media (max-width: 840px) { + ul.nav .item { + width: 100%; } + ul.nav .item img { + display: none; } + ul.nav .item a { + display: inline-block; + padding: 1rem 1rem 1rem 2.5rem; + color: #363330; + width: 100%; + background: url("../../themes/icons/logout.svg") no-repeat #efe3d3 3% center; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; } + ul.nav .item a:hover, ul.nav .item a:active { + background: url("../../themes/icons/logout.svg") no-repeat #f5633e 3% center; + text-decoration: none; + color: #fff; } + + .aside { + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; } + .aside.aside_feed { + padding: 0; } + .aside .tree .tree-folder .tree-folder-items .item a { + padding: 0.5rem 1rem; } + + .aside .toggle_aside, + #panel .close { + display: block; + width: 100%; + height: 50px; + line-height: 50px; + text-align: center; + background: #b7641d; } + + .header { + padding: 0.5rem; } + .header .item.title { + display: none; } + .header .item.search input { + width: 90%; + height: 3.5rem; } + .header .item.search input:focus { + width: 100%; } + .header .item.search .btn { + min-height: 49px; + padding: 0.5rem 2rem; } + .header .item.configure { + width: 2.75rem; + top: 3.125rem; } + .header .item.configure .dropdown .btn { + padding: 1.125rem; } + + .nav_menu .btn { + margin: 0; + padding: 0.85rem 1.25rem; } + .nav_menu .stick { + margin: 0.5rem 0.5rem; } + .nav_menu .stick .btn { + margin: 0; + padding: 0.85rem 1.25rem; } + .nav_menu .stick .btn.read_all { + padding: 0.85rem 1.25rem; } + .nav_menu .search { + display: none; + max-width: 97%; } + .nav_menu .search .input { + max-width: 97%; + width: 90px; } + .nav_menu .search .input::focus { + width: 400px; } + + #stream .flux .flux_header { + padding: 0.5rem 0; } + + .day { + text-align: center; + padding: 1rem 0; } + .day .name { + display: block; + padding: 0; + width: 100%; + line-height: 1.5rem; + margin-bottom: 1rem; } + + .pagination { + margin: 0 0 3.5em; } + + #nav_entries { + line-height: 4.5rem; } + + .notification { + border-radius: 0; } + .notification a.close { + display: block; + left: 0; + background: transparent; } + .notification a.close:hover { + opacity: 0.5; } + .notification a.close .icon { + display: none; } } +html, body { + font-family: "lato", "Helvetica", "Arial", sans-serif; + font-size: 0.875rem; } + +/*=== GENERAL */ +/*============*/ +html, body { + height: 100%; + background: #f5f0ec; } + +/*=== Links */ +a, button.as-link { + outline: none; + color: #ca7227; } + +/*# sourceMappingURL=ansum.css.map */ diff --git a/p/themes/Ansum/ansum.css.map b/p/themes/Ansum/ansum.css.map new file mode 100644 index 000000000..7b1c15ade --- /dev/null +++ b/p/themes/Ansum/ansum.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "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", +"sources": ["_fonts.scss","_mixins.scss","_forms.scss","_variables.scss","_tables.scss","_components.scss","_divers.scss","_sidebar.scss","_layout.scss","_list-view.scss","_global-view.scss","_reader-view.scss","_configuration.scss","_logs.scss","_stats.scss","_mobile.scss","ansum.scss"], +"names": [], +"file": "ansum.css" +}
\ No newline at end of file diff --git a/p/themes/Ansum/ansum.scss b/p/themes/Ansum/ansum.scss new file mode 100644 index 000000000..1a538b50a --- /dev/null +++ b/p/themes/Ansum/ansum.scss @@ -0,0 +1,51 @@ +@import "fonts"; +@import "mixins"; +@import "variables"; + +@import "forms"; +@import "tables"; +@import "components"; + +@import "divers"; + +@import "sidebar"; +@import "layout"; +@import "list-view"; +@import "global-view"; +@import "reader-view"; + +@import "configuration"; + +@import "logs"; +@import "stats"; + +@import "mobile"; + +html, body{ + font-family: "lato", "Helvetica", "Arial", sans-serif; + font-size: 0.875rem; +} + +@charset "UTF-8"; + +/*=== GENERAL */ +/*============*/ +html, body { + height: 100%; + background: $grey-light; +} + +/*=== Links */ +a, button.as-link { + outline: none; + color: $main-first; +} + + + + + + + + + diff --git a/p/themes/Ansum/icons/cog-white.svg b/p/themes/Ansum/icons/cog-white.svg new file mode 100644 index 000000000..3df8c2d70 --- /dev/null +++ b/p/themes/Ansum/icons/cog-white.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16" version="1.1"> +<g id="surface2"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(94.901961%,94.901961%,94.901961%);fill-opacity:1;" d="M 6.667969 0 L 6.667969 2.839844 C 6.179688 2.964844 5.71875 3.160156 5.292969 3.410156 L 3.285156 1.402344 L 1.402344 3.285156 L 3.410156 5.292969 C 3.160156 5.71875 2.964844 6.179688 2.839844 6.667969 L 0 6.667969 L 0 9.332031 L 2.839844 9.332031 C 2.964844 9.820312 3.15625 10.28125 3.410156 10.707031 L 1.402344 12.714844 L 3.285156 14.597656 L 5.292969 12.589844 C 5.71875 12.839844 6.179688 13.03125 6.667969 13.15625 L 6.667969 16 L 9.332031 16 L 9.332031 13.15625 C 9.820312 13.03125 10.28125 12.839844 10.703125 12.589844 L 12.714844 14.597656 L 14.601562 12.714844 L 12.589844 10.707031 C 12.839844 10.28125 13.03125 9.820312 13.160156 9.332031 L 16 9.332031 L 16 6.667969 L 13.160156 6.667969 C 13.03125 6.179688 12.839844 5.71875 12.589844 5.292969 L 14.601562 3.285156 L 12.714844 1.398438 L 10.703125 3.410156 C 10.28125 3.15625 9.820312 2.964844 9.332031 2.839844 L 9.332031 0 Z M 8 5.332031 C 9.472656 5.332031 10.664062 6.527344 10.664062 8 C 10.664062 9.472656 9.472656 10.664062 8 10.664062 C 6.527344 10.664062 5.332031 9.472656 5.332031 8 C 5.332031 6.527344 6.527344 5.332031 8 5.332031 Z M 8 5.332031 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Ansum/icons/cog.svg b/p/themes/Ansum/icons/cog.svg new file mode 100644 index 000000000..aa56d862b --- /dev/null +++ b/p/themes/Ansum/icons/cog.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="17" + viewBox="0 0 16 17" + version="1.1" + id="svg5" + sodipodi:docname="cog.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="14.75" + inkscape:cx="8" + inkscape:cy="8" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 6.667969,1 v 2.839844 c -0.488281,0.125 -0.949219,0.320312 -1.375,0.570312 L 3.285156,2.402344 1.402344,4.285156 3.410156,6.292969 C 3.160156,6.71875 2.964844,7.179688 2.839844,7.664062 H 0 v 2.667969 h 2.839844 c 0.125,0.488281 0.316406,0.949219 0.570312,1.375 l -2.007812,2.007813 1.882812,1.882812 2.007813,-2.007812 c 0.425781,0.25 0.886719,0.441406 1.375,0.566406 V 17 h 2.664062 v -2.84375 c 0.488281,-0.125 0.949219,-0.316406 1.371094,-0.566406 l 2.011719,2.007812 1.886718,-1.882812 -2.011718,-2.007813 c 0.25,-0.425781 0.441406,-0.886719 0.570312,-1.375 H 16 V 7.664062 H 13.160156 C 13.03125,7.179688 12.839844,6.71875 12.589844,6.292969 L 14.601562,4.285156 12.714844,2.398438 10.703125,4.410156 C 10.28125,4.15625 9.820312,3.964844 9.332031,3.839844 V 1 Z M 8,6.332031 c 1.472656,0 2.664062,1.195313 2.664062,2.667969 0,1.472656 -1.191406,2.664062 -2.664062,2.664062 C 6.527344,11.664062 5.332031,10.472656 5.332031,9 5.332031,7.527344 6.527344,6.332031 8,6.332031 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/down-white.svg b/p/themes/Ansum/icons/down-white.svg new file mode 100644 index 000000000..df05a4704 --- /dev/null +++ b/p/themes/Ansum/icons/down-white.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="10" + viewBox="0 0 16 10" + version="1.1" + id="svg5" + sodipodi:docname="down-white.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="26.222222" + inkscape:cx="7.5" + inkscape:cy="4.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 1.800781,0.347656 0.386719,1.761719 8.09375,9.46875 15.800781,1.761719 14.386719,0.347656 8.09375,6.640625 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/down.svg b/p/themes/Ansum/icons/down.svg new file mode 100644 index 000000000..5c732e199 --- /dev/null +++ b/p/themes/Ansum/icons/down.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="10" + viewBox="0 0 16 10" + version="1.1" + id="svg5" + sodipodi:docname="down.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="26.222222" + inkscape:cx="7.5" + inkscape:cy="4.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 1.800781,0.347656 0.386719,1.761719 8.09375,9.46875 15.800781,1.761719 14.386719,0.347656 8.09375,6.640625 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/icon.svg b/p/themes/Ansum/icons/icon.svg new file mode 100644 index 000000000..7900c0a79 --- /dev/null +++ b/p/themes/Ansum/icons/icon.svg @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="40" + height="40" + viewBox="0 0 40 40" + version="1.1" + id="svg13" + sodipodi:docname="icon-orange.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata19"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs17" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview15" + showgrid="false" + inkscape:zoom="2.085965" + inkscape:cx="-43.005158" + inkscape:cy="2.3651309" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg13" /> + <path + inkscape:connector-curvature="0" + id="path2" + d="m 25.15625,20 c 0,-2.847656 -2.308594,-5.15625 -5.15625,-5.15625 -2.847656,0 -5.15625,2.308594 -5.15625,5.15625 0,2.847656 2.308594,5.15625 5.15625,5.15625 2.847656,0 5.15625,-2.308594 5.15625,-5.15625 z m 0,0" + style="fill:#ca7227;fill-opacity:1;fill-rule:nonzero;stroke:none" /> + <path + inkscape:connector-curvature="0" + id="path4" + d="M 19.558594,0.0078125 C 17.125,0.0585938 14.679688,0.554688 12.347656,1.523438 4.878906,4.617188 0,11.917969 0,20 H 3.75 C 3.75,13.421875 7.703125,7.503906 13.78125,4.988281 19.859375,2.46875 26.839844,3.859375 31.488281,8.511719 36.140625,13.160156 37.53125,20.140625 35.011719,26.21875 32.496094,32.296875 26.578125,36.25 20,36.25 V 40 c 8.082031,0 15.382812,-4.878906 18.476562,-12.347656 3.09375,-7.46875 1.382813,-16.078125 -4.335937,-21.792969 -3.929687,-3.929687 -9.226563,-5.96875 -14.582031,-5.8515625 z m 0,0" + style="fill:#cb7428;fill-opacity:0.25098041;fill-rule:nonzero;stroke:none" /> + <path + inkscape:connector-curvature="0" + id="path6" + d="M 20.683594,6.582031 C 18.726562,6.480469 16.738281,6.804688 14.859375,7.585938 9.839844,9.664062 6.5625,14.570312 6.5625,20 h 3.75 c 0,-3.921875 2.355469,-7.449219 5.980469,-8.949219 3.625,-1.503906 7.78125,-0.675781 10.558593,2.097657 2.773438,2.777343 3.601563,6.933593 2.097657,10.558593 -1.5,3.625 -5.027344,5.980469 -8.949219,5.980469 v 3.75 c 5.429688,0 10.335938,-3.277344 12.414062,-8.296875 C 34.492188,20.125 33.339844,14.335938 29.5,10.5 27.101562,8.097656 23.941406,6.75 20.683594,6.582031 Z m 0,0" + style="fill:#cb7428;fill-opacity:0.25098041;fill-rule:nonzero;stroke:none" /> + <path + inkscape:connector-curvature="0" + id="path8" + d="m 20,0 v 3.75 c 8.996094,0 16.25,7.253906 16.25,16.25 H 40 C 40,8.976562 31.023438,0 20,0 Z m 0,0" + style="fill:#ca7227;fill-opacity:1;fill-rule:nonzero;stroke:none" /> + <path + inkscape:connector-curvature="0" + id="path10" + d="m 20,6.5625 v 3.75 c 5.371094,0 9.6875,4.316406 9.6875,9.6875 h 3.75 C 33.4375,12.601562 27.398438,6.5625 20,6.5625 Z m 0,0" + style="fill:#ca7227;fill-opacity:1;fill-rule:nonzero;stroke:none" /> +</svg> diff --git a/p/themes/Ansum/icons/link-white.svg b/p/themes/Ansum/icons/link-white.svg new file mode 100644 index 000000000..c6baadc85 --- /dev/null +++ b/p/themes/Ansum/icons/link-white.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="17" + height="17" + viewBox="0 0 17 17" + version="1.1" + id="svg5" + sodipodi:docname="link-white.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="13.882353" + inkscape:cx="8.5" + inkscape:cy="8.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2" + transform="translate(0,-1)"> + <path + style="fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 8.5,1 C 3.816406,1 0,4.816406 0,9.5 0,14.183594 3.816406,18 8.5,18 13.183594,18 17,14.183594 17,9.5 17,4.816406 13.183594,1 8.5,1 Z M 5.480469,3.742188 C 4.609375,4.957031 3.78125,6.570312 3.558594,8.5 H 2.082031 C 2.402344,6.421875 3.691406,4.679688 5.480469,3.742188 Z m 6.035156,0 C 13.308594,4.679688 14.597656,6.421875 14.914062,8.5 H 13.4375 C 13.21875,6.570312 12.390625,4.957031 11.515625,3.742188 Z M 7.5,4.4375 V 8.5 H 5.578125 C 5.839844,6.835938 6.695312,5.4375 7.5,4.4375 Z m 2,0 c 0.804688,1 1.660156,2.398438 1.921875,4.0625 H 9.5 Z M 2.082031,10.5 h 1.472657 c 0.1875,1.828125 0.863281,3.371094 1.589843,4.566406 C 3.53125,14.09375 2.382812,12.441406 2.082031,10.5 Z m 3.488281,0 H 7.5 v 4.460938 C 6.734375,13.957031 5.820312,12.40625 5.570312,10.5 Z M 9.5,10.5 h 1.917969 C 11.160156,12.171875 10.304688,13.570312 9.5,14.5625 Z m 3.9375,0 h 1.476562 c -0.316406,2.078125 -1.605468,3.824219 -3.398437,4.757812 0.875,-1.214843 1.703125,-2.828124 1.921875,-4.757812 z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/link.svg b/p/themes/Ansum/icons/link.svg new file mode 100644 index 000000000..44ee847b0 --- /dev/null +++ b/p/themes/Ansum/icons/link.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="17" height="17" viewBox="0 0 17 17" version="1.1"> +<g id="surface2"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(32.54902%,32.54902%,32.54902%);fill-opacity:1;" d="M 8.5 0 C 3.816406 0 0 3.816406 0 8.5 C 0 13.183594 3.816406 17 8.5 17 C 13.183594 17 17 13.183594 17 8.5 C 17 3.816406 13.183594 0 8.5 0 Z M 5.480469 2.742188 C 4.609375 3.957031 3.78125 5.570312 3.558594 7.5 L 2.082031 7.5 C 2.402344 5.421875 3.691406 3.679688 5.480469 2.742188 Z M 11.515625 2.742188 C 13.308594 3.679688 14.597656 5.421875 14.914062 7.5 L 13.4375 7.5 C 13.21875 5.570312 12.390625 3.957031 11.515625 2.742188 Z M 7.5 3.4375 L 7.5 7.5 L 5.578125 7.5 C 5.839844 5.835938 6.695312 4.4375 7.5 3.4375 Z M 9.5 3.4375 C 10.304688 4.4375 11.160156 5.835938 11.421875 7.5 L 9.5 7.5 Z M 2.082031 9.5 L 3.554688 9.5 C 3.742188 11.328125 4.417969 12.871094 5.144531 14.066406 C 3.53125 13.09375 2.382812 11.441406 2.082031 9.5 Z M 5.570312 9.5 L 7.5 9.5 L 7.5 13.960938 C 6.734375 12.957031 5.820312 11.40625 5.570312 9.5 Z M 9.5 9.5 L 11.417969 9.5 C 11.160156 11.171875 10.304688 12.570312 9.5 13.5625 Z M 13.4375 9.5 L 14.914062 9.5 C 14.597656 11.578125 13.308594 13.324219 11.515625 14.257812 C 12.390625 13.042969 13.21875 11.429688 13.4375 9.5 Z M 13.4375 9.5 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Ansum/icons/magnifier.svg b/p/themes/Ansum/icons/magnifier.svg new file mode 100644 index 000000000..ae3732c69 --- /dev/null +++ b/p/themes/Ansum/icons/magnifier.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16" version="1.1"> +<g id="surface2"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(94.901961%,94.901961%,94.901961%);fill-opacity:1;" d="M 9.464844 0 C 5.867188 0 2.929688 2.9375 2.929688 6.535156 C 2.929688 7.972656 3.40625 9.300781 4.199219 10.382812 L 0.710938 13.867188 L 0 14.578125 L 1.421875 16 L 2.132812 15.289062 L 5.617188 11.800781 C 6.699219 12.59375 8.027344 13.070312 9.464844 13.070312 C 13.0625 13.070312 16 10.132812 16 6.535156 C 16 2.9375 13.0625 0 9.464844 0 Z M 9.464844 2.011719 C 11.976562 2.011719 13.988281 4.023438 13.988281 6.535156 C 13.988281 9.046875 11.976562 11.058594 9.464844 11.058594 C 6.953125 11.058594 4.941406 9.046875 4.941406 6.535156 C 4.941406 4.023438 6.953125 2.011719 9.464844 2.011719 Z M 9.464844 2.011719 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Ansum/icons/more.svg b/p/themes/Ansum/icons/more.svg new file mode 100644 index 000000000..6e505e71b --- /dev/null +++ b/p/themes/Ansum/icons/more.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="3" + height="15" + viewBox="0 0 3 15" + version="1.1" + id="svg5" + sodipodi:docname="more.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="16.857143" + inkscape:cx="1.5" + inkscape:cy="7" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 0,0 H 3 V 3 H 0 Z M 0,6 H 3 V 9 H 0 Z m 0,6 h 3 v 3 H 0 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/non-starred-white.svg b/p/themes/Ansum/icons/non-starred-white.svg new file mode 100644 index 000000000..9bd48c801 --- /dev/null +++ b/p/themes/Ansum/icons/non-starred-white.svg @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="18" + height="16" + viewBox="0 0 18 16" + version="1.1" + id="svg5" + sodipodi:docname="non-starred-white.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="15.733333" + inkscape:cx="8.5" + inkscape:cy="7.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg5" /> + <g + id="surface2" + transform="translate(0,-1)"> + <path + style="fill:none;stroke:#ffffff;stroke-width:0.26879001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="m 107.00018,143.49705 1.62575,-0.0138 0.49783,-1.54754 0.51657,1.54119 1.62575,-0.004 -1.30706,0.96642 0.50616,1.54542 -1.32372,-0.94419 -1.31226,0.95901 0.48845,-1.55072 z m 0,0" + transform="matrix(3.750673,0,0,3.690326,-399.91249,-522.49621)" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/non-starred.svg b/p/themes/Ansum/icons/non-starred.svg new file mode 100644 index 000000000..9d49930c0 --- /dev/null +++ b/p/themes/Ansum/icons/non-starred.svg @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="18" + height="16" + viewBox="0 0 18 16" + version="1.1" + id="svg5" + sodipodi:docname="non-starred.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="15.733333" + inkscape:cx="8.5" + inkscape:cy="7.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:none;stroke:#515151;stroke-width:0.26879001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="m 107.00018,150.49714 1.62575,-0.0138 0.49783,-1.5486 0.51657,1.54225 1.62575,-0.004 -1.30706,0.96642 0.50616,1.54542 -1.32372,-0.94419 -1.31226,0.95901 0.48845,-1.55072 z m 0,0" + transform="matrix(3.750673,0,0,3.690326,-399.91249,-548.8718)" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/read-grey.svg b/p/themes/Ansum/icons/read-grey.svg new file mode 100644 index 000000000..4857aca02 --- /dev/null +++ b/p/themes/Ansum/icons/read-grey.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="18" viewBox="0 0 16 18" version="1.1"> +<g id="surface2"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80.784314%,80.784314%,80.784314%);fill-opacity:1;" d="M 8 0 L 0.460938 4.933594 L 0 5.234375 L 0 18 L 16 18 L 16 5.234375 Z M 8 2.417969 L 13.625 6.101562 L 8 10.601562 L 2.371094 6.101562 Z M 2 8.390625 L 8 13.1875 L 14 8.390625 L 14 15.964844 L 2 15.964844 Z M 2 8.390625 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Ansum/icons/read-white.svg b/p/themes/Ansum/icons/read-white.svg new file mode 100644 index 000000000..578facdc7 --- /dev/null +++ b/p/themes/Ansum/icons/read-white.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="18" + viewBox="0 0 16 18" + version="1.1" + id="svg5" + sodipodi:docname="read-white.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="13.882353" + inkscape:cx="8" + inkscape:cy="8.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 8,0 0.460938,4.933594 0,5.234375 V 18 H 16 V 5.234375 Z m 0,2.417969 5.628906,3.683593 -5.628906,4.5 -5.628906,-4.5 z M 2,8.390625 8,13.1875 14,8.390625 v 7.574219 H 2 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/read.svg b/p/themes/Ansum/icons/read.svg new file mode 100644 index 000000000..d583cce03 --- /dev/null +++ b/p/themes/Ansum/icons/read.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="18" + viewBox="0 0 16 18" + version="1.1" + id="svg5" + sodipodi:docname="read.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="13.882353" + inkscape:cx="8" + inkscape:cy="8.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 8,0 0.460938,4.933594 0,5.234375 V 18 H 16 V 5.234375 Z m 0,2.417969 5.628906,3.683593 -5.628906,4.5 -5.628906,-4.5 z M 2,8.390625 8,13.1875 14,8.390625 v 7.574219 H 2 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/refresh.svg b/p/themes/Ansum/icons/refresh.svg new file mode 100644 index 000000000..f23fbf4a2 --- /dev/null +++ b/p/themes/Ansum/icons/refresh.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="17" + height="17" + viewBox="0 0 17 17" + version="1.1" + id="svg5" + sodipodi:docname="refresh.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="14.75" + inkscape:cx="8" + inkscape:cy="8" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg5" /> + <g + id="surface3"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 15,0 V 3.042969 C 12.386719,-0.0820312 7.859375,-0.945312 4.25,1.132812 0.1875,3.480469 -1.207031,8.679688 1.140625,12.746094 3.488281,16.8125 8.683594,18.207031 12.75,15.859375 c 0.140625,-0.08594 0.28125,-0.179687 0.417969,-0.273437 L 12.171875,13.859375 C 12.035156,13.953125 11.894531,14.042969 11.75,14.125 8.640625,15.921875 4.667969,14.855469 2.871094,11.746094 1.078125,8.636719 2.140625,4.660156 5.25,2.863281 8.191406,1.167969 11.941406,2.019531 13.859375,4.820312 L 14.035156,5 H 10 v 2 h 7 V 0 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/rss-white.svg b/p/themes/Ansum/icons/rss-white.svg new file mode 100644 index 000000000..b7fbf9987 --- /dev/null +++ b/p/themes/Ansum/icons/rss-white.svg @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="17" + height="17" + viewBox="0 0 17 17" + version="1.1" + id="svg5" + sodipodi:docname="rss-white.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="8" + inkscape:cx="-5.9380772" + inkscape:cy="10.889349" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg5" /> + <g + id="surface2" + transform="translate(0,-1)"> + <path + style="fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 4.246094,15.433594 c 0,1.101562 -0.898438,2 -2,2 -1.105469,0 -2,-0.898438 -2,-2 0,-1.105469 0.894531,-2 2,-2 1.101562,0 2,0.894531 2,2 m 5,2 c 0,-4.984375 -4.019532,-9 -9,-9 v -2 c 6.0625,0 11,4.933594 11,11 z m 5.5,0 c 0,-8.019532 -6.480469,-14.5 -14.5,-14.5 v -2 c 9.097656,0 16.5,7.398437 16.5,16.5 z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/rss.svg b/p/themes/Ansum/icons/rss.svg new file mode 100644 index 000000000..7044bbaa4 --- /dev/null +++ b/p/themes/Ansum/icons/rss.svg @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="17" + height="17" + viewBox="0 0 17 17" + version="1.1" + id="svg5" + sodipodi:docname="rss.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="14.75" + inkscape:cx="8" + inkscape:cy="8" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2" + transform="translate(0,-1)"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 4.246094,15.433594 c 0,1.101562 -0.898438,2 -2,2 -1.105469,0 -2,-0.898438 -2,-2 0,-1.105469 0.894531,-2 2,-2 1.101562,0 2,0.894531 2,2 m 5,2 c 0,-4.984375 -4.019532,-9 -9,-9 v -2 c 6.0625,0 11,4.933594 11,11 z m 5.5,0 c 0,-8.019532 -6.480469,-14.5 -14.5,-14.5 v -2 c 9.097656,0 16.5,7.398437 16.5,16.5 z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/starred-white.svg b/p/themes/Ansum/icons/starred-white.svg new file mode 100644 index 000000000..896dd1eeb --- /dev/null +++ b/p/themes/Ansum/icons/starred-white.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="15" + viewBox="0 0 16 15" + version="1.1" + id="svg5" + sodipodi:docname="starred-white.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="16.857143" + inkscape:cx="7.5" + inkscape:cy="7" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 0.410156,6.054688 6.507812,6.003906 8.375,0.292969 10.3125,5.980469 16.410156,5.964844 11.507812,9.53125 13.40625,15.234375 8.441406,11.75 3.519531,15.289062 5.351562,9.566406 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/starred.svg b/p/themes/Ansum/icons/starred.svg new file mode 100644 index 000000000..3b0bf8cb8 --- /dev/null +++ b/p/themes/Ansum/icons/starred.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="15" viewBox="0 0 16 15" version="1.1"> +<g id="surface2"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(32.54902%,32.54902%,32.54902%);fill-opacity:1;" d="M 0 5.765625 L 6.097656 5.710938 L 7.964844 0 L 9.902344 5.691406 L 16 5.671875 L 11.097656 9.242188 L 13 14.941406 L 8.035156 11.457031 L 3.109375 15 L 4.945312 9.277344 Z M 0 5.765625 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Ansum/icons/tick-color.svg b/p/themes/Ansum/icons/tick-color.svg new file mode 100644 index 000000000..fe0c28a84 --- /dev/null +++ b/p/themes/Ansum/icons/tick-color.svg @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="48" + height="48" + viewBox="0 0 48 48" + version="1.1" + id="svg5" + sodipodi:docname="tick-color.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="4.9166667" + inkscape:cx="24" + inkscape:cy="24" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="surface3" /> + <g + id="surface3"> + <path + style="stroke:none;fill-rule:nonzero;fill:#ca7227;fill-opacity:1" + d="M 24 0 C 10.746094 0 0 10.746094 0 24 C 0 37.253906 10.746094 48 24 48 C 37.253906 48 48 37.253906 48 24 C 48 10.746094 37.253906 0 24 0 Z M 36.96875 14.488281 C 37.585938 14.472656 38.148438 14.835938 38.386719 15.402344 C 38.628906 15.96875 38.5 16.625 38.0625 17.054688 L 22.058594 33.058594 C 21.472656 33.644531 20.523438 33.644531 19.941406 33.058594 L 12.941406 26.0625 C 12.386719 25.472656 12.402344 24.550781 12.972656 23.976562 C 13.542969 23.402344 14.464844 23.386719 15.058594 23.9375 L 21.003906 29.878906 L 35.945312 14.9375 C 36.214844 14.664062 36.582031 14.5 36.96875 14.488281 Z M 36.96875 14.488281 " + id="path2" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/tick-white.svg b/p/themes/Ansum/icons/tick-white.svg new file mode 100644 index 000000000..0bcc26f47 --- /dev/null +++ b/p/themes/Ansum/icons/tick-white.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" viewBox="0 0 48 48" version="1.1"> +<g id="surface3"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 24 0 C 10.746094 0 0 10.746094 0 24 C 0 37.253906 10.746094 48 24 48 C 37.253906 48 48 37.253906 48 24 C 48 10.746094 37.253906 0 24 0 Z M 36.96875 14.488281 C 37.585938 14.472656 38.148438 14.835938 38.386719 15.402344 C 38.628906 15.96875 38.5 16.625 38.0625 17.054688 L 22.058594 33.058594 C 21.472656 33.644531 20.523438 33.644531 19.941406 33.058594 L 12.941406 26.0625 C 12.386719 25.472656 12.402344 24.550781 12.972656 23.976562 C 13.542969 23.402344 14.464844 23.386719 15.058594 23.9375 L 21.003906 29.878906 L 35.945312 14.9375 C 36.214844 14.664062 36.582031 14.5 36.96875 14.488281 Z M 36.96875 14.488281 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Ansum/icons/tick.svg b/p/themes/Ansum/icons/tick.svg new file mode 100644 index 000000000..9c436e7a0 --- /dev/null +++ b/p/themes/Ansum/icons/tick.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="47" viewBox="0 0 48 47" version="1.1"> +<g id="surface3"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(18.823529%,19.215686%,21.176471%);fill-opacity:1;" d="M 24 0 C 10.746094 0 0 10.746094 0 24 C 0 37.253906 10.746094 48 24 48 C 37.253906 48 48 37.253906 48 24 C 48 10.746094 37.253906 0 24 0 Z M 36.96875 14.488281 C 37.585938 14.472656 38.148438 14.835938 38.386719 15.402344 C 38.628906 15.96875 38.5 16.625 38.0625 17.054688 L 22.058594 33.058594 C 21.472656 33.644531 20.523438 33.644531 19.941406 33.058594 L 12.941406 26.0625 C 12.386719 25.472656 12.402344 24.550781 12.972656 23.976562 C 13.542969 23.402344 14.464844 23.386719 15.058594 23.9375 L 21.003906 29.878906 L 35.945312 14.9375 C 36.214844 14.664062 36.582031 14.5 36.96875 14.488281 Z M 36.96875 14.488281 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Ansum/icons/unread-grey.svg b/p/themes/Ansum/icons/unread-grey.svg new file mode 100644 index 000000000..1981cf92c --- /dev/null +++ b/p/themes/Ansum/icons/unread-grey.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="13" + viewBox="0 0 16 13" + version="1.1" + id="svg5" + sodipodi:docname="unread.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="19.666667" + inkscape:cx="8" + inkscape:cy="6" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 0,0 V 13 H 16 V 0 Z m 3.257812,2 h 9.484376 L 8,5.726562 Z M 2,3.554688 8,8.269531 14,3.554688 V 11 H 2 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/unread-white.svg b/p/themes/Ansum/icons/unread-white.svg new file mode 100644 index 000000000..6623924ab --- /dev/null +++ b/p/themes/Ansum/icons/unread-white.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="13" viewBox="0 0 16 13" version="1.1"> +<g id="surface2"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(94.901961%,94.901961%,94.901961%);fill-opacity:1;" d="M 0 0 L 0 13 L 16 13 L 16 0 Z M 3.257812 2 L 12.742188 2 L 8 5.726562 Z M 2 3.558594 L 8 8.273438 L 14 3.558594 L 14 11 L 2 11 Z M 2 3.558594 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Ansum/icons/unread.svg b/p/themes/Ansum/icons/unread.svg new file mode 100644 index 000000000..5c6c3ac8e --- /dev/null +++ b/p/themes/Ansum/icons/unread.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="13" + viewBox="0 0 16 13" + version="1.1" + id="svg5" + sodipodi:docname="unread-main-color.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="19.666667" + inkscape:cx="8" + inkscape:cy="6" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#3366cc;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 0,0 V 13 H 16 V 0 Z m 3.257812,2 h 9.484376 L 8,5.726562 Z M 2,3.554688 8,8.273438 14,3.554688 V 11 H 2 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/up-white.svg b/p/themes/Ansum/icons/up-white.svg new file mode 100644 index 000000000..e19d1e1d9 --- /dev/null +++ b/p/themes/Ansum/icons/up-white.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="10" + viewBox="0 0 16 10" + version="1.1" + id="svg5" + sodipodi:docname="up-white.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="26.222222" + inkscape:cx="7.5" + inkscape:cy="4.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 14.386719,9.46875 15.800781,8.054688 8.09375,0.347656 0.386719,8.054688 1.800781,9.46875 8.09375,3.175781 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/up.svg b/p/themes/Ansum/icons/up.svg new file mode 100644 index 000000000..306b076e9 --- /dev/null +++ b/p/themes/Ansum/icons/up.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="10" + viewBox="0 0 16 10" + version="1.1" + id="svg5" + sodipodi:docname="up.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="26.222222" + inkscape:cx="7.5" + inkscape:cy="4.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 14.386719,9.46875 15.800781,8.054688 8.09375,0.347656 0.386719,8.054688 1.800781,9.46875 8.09375,3.175781 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/view-global-white.svg b/p/themes/Ansum/icons/view-global-white.svg new file mode 100644 index 000000000..950267f6a --- /dev/null +++ b/p/themes/Ansum/icons/view-global-white.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="15" height="15" viewBox="0 0 15 15" version="1.1"> +<g id="surface2"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(94.901961%,94.901961%,94.901961%);fill-opacity:1;" d="M 6 12 L 9 12 L 9 15 L 6 15 Z M 12 12 L 15 12 L 15 15 L 12 15 Z M 0 12 L 3 12 L 3 15 L 0 15 Z M 6 6 L 9 6 L 9 9 L 6 9 Z M 12 6 L 15 6 L 15 9 L 12 9 Z M 0 6 L 3 6 L 3 9 L 0 9 Z M 6 0 L 9 0 L 9 3 L 6 3 Z M 12 0 L 15 0 L 15 3 L 12 3 Z M 0 0 L 3 0 L 3 3 L 0 3 Z M 0 0 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Ansum/icons/view-global.svg b/p/themes/Ansum/icons/view-global.svg new file mode 100644 index 000000000..08632a190 --- /dev/null +++ b/p/themes/Ansum/icons/view-global.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="15" + height="15" + viewBox="0 0 15 15" + version="1.1" + id="svg5" + sodipodi:docname="view-global.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="16.857143" + inkscape:cx="7.5" + inkscape:cy="7" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 6,12 h 3 v 3 H 6 Z m 6,0 h 3 v 3 H 12 Z M 0,12 h 3 v 3 H 0 Z M 6,6 H 9 V 9 H 6 Z m 6,0 h 3 V 9 H 12 Z M 0,6 H 3 V 9 H 0 Z M 6,0 H 9 V 3 H 6 Z m 6,0 h 3 V 3 H 12 Z M 0,0 H 3 V 3 H 0 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/view-list-white.svg b/p/themes/Ansum/icons/view-list-white.svg new file mode 100644 index 000000000..c76fc298b --- /dev/null +++ b/p/themes/Ansum/icons/view-list-white.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="15" height="14" viewBox="0 0 15 14" version="1.1"> +<g id="surface2"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(94.901961%,94.901961%,94.901961%);fill-opacity:1;" d="M 0 12 L 15 12 L 15 14 L 0 14 Z M 0 6 L 15 6 L 15 8 L 0 8 Z M 0 0 L 15 0 L 15 2 L 0 2 Z M 0 0 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Ansum/icons/view-list.svg b/p/themes/Ansum/icons/view-list.svg new file mode 100644 index 000000000..bcea01055 --- /dev/null +++ b/p/themes/Ansum/icons/view-list.svg @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="15" + height="14" + viewBox="0 0 15 14" + version="1.1" + id="svg5" + sodipodi:docname="view-list.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="16.857143" + inkscape:cx="7.5" + inkscape:cy="7" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2" + transform="translate(0,-1)"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 0,13 h 15 v 2 H 0 Z M 0,7 H 15 V 9 H 0 Z M 0,1 H 15 V 3 H 0 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/view-reader-white.svg b/p/themes/Ansum/icons/view-reader-white.svg new file mode 100644 index 000000000..70175c623 --- /dev/null +++ b/p/themes/Ansum/icons/view-reader-white.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="14" + height="16" + viewBox="0 0 14 16" + version="1.1" + id="svg5" + sodipodi:docname="view-reader-white.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="15.733333" + inkscape:cx="7" + inkscape:cy="7.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 3.5,10 H 8 v 1.5 H 3.5 Z m 0,-3 h 7 v 1.5 h -7 z m 0,-3 h 7 v 1.5 h -7 z M 0,16 V 0 H 14 V 16 Z M 2,14 H 12 V 2 H 2 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/icons/view-reader.svg b/p/themes/Ansum/icons/view-reader.svg new file mode 100644 index 000000000..7471037d9 --- /dev/null +++ b/p/themes/Ansum/icons/view-reader.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="14" + height="16" + viewBox="0 0 14 16" + version="1.1" + id="svg5" + sodipodi:docname="view-reader.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="8" + inkscape:cx="-1.7138348" + inkscape:cy="3.5263348" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 3.5,10 H 8 v 1.5 H 3.5 Z m 0,-3 h 7 v 1.5 h -7 z m 0,-3 h 7 v 1.5 h -7 z M 0,16 V 0 H 14 V 16 Z M 2,14 H 12 V 2 H 2 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Ansum/loader.gif b/p/themes/Ansum/loader.gif Binary files differnew file mode 100644 index 000000000..ce36565b3 --- /dev/null +++ b/p/themes/Ansum/loader.gif diff --git a/p/themes/Ansum/metadata.json b/p/themes/Ansum/metadata.json new file mode 100644 index 000000000..c76c3fa9c --- /dev/null +++ b/p/themes/Ansum/metadata.json @@ -0,0 +1,7 @@ +{ + "name": "Ansum", + "author": "Thomas Guesnon", + "description": "Thème sablonneux", + "version": 0.1, + "files": ["_template.css", "ansum.css"] +} diff --git a/p/themes/Ansum/sass.sh b/p/themes/Ansum/sass.sh new file mode 100644 index 000000000..a653acace --- /dev/null +++ b/p/themes/Ansum/sass.sh @@ -0,0 +1 @@ +sass --watch ansum.scss:ansum.css diff --git a/p/themes/Ansum/thumbs/original.png b/p/themes/Ansum/thumbs/original.png Binary files differnew file mode 100644 index 000000000..6351ee51e --- /dev/null +++ b/p/themes/Ansum/thumbs/original.png diff --git a/p/themes/Mapco/_components.scss b/p/themes/Mapco/_components.scss new file mode 100644 index 000000000..cf8cb5e91 --- /dev/null +++ b/p/themes/Mapco/_components.scss @@ -0,0 +1,352 @@ +/*=== COMPONENTS */ +/*===============*/ +/*=== Forms */ +// parti dans _forms.scss + +/*=== Horizontal-list */ +.horizontal-list { + margin: 0; + padding: 0.1rem 0; + + .item{ + vertical-align: middle; + + &:first-child{ + padding-left: 0.5rem; + } + + } +} + +/*=== Dropdown */ +.dropdown-menu { + background: $grey-lighter; + margin: 0; + font-size: 1rem; + text-align: left; + padding: 0.5rem 0 1rem 0; + border: none; + border-radius: 3px; + + -webkit-box-shadow: 0px 6px 8px 0px rgba(0,0,0,0.35); + -moz-box-shadow: 0px 6px 8px 0px rgba(0,0,0,0.35); + box-shadow: 0px 6px 8px 0px rgba(0,0,0,0.35); + + &::after { + content: ""; + position: absolute; + top: -4px; + right: 13px; + width: 10px; + height: 10px; + z-index: -10; + transform: rotate(45deg); + -moz-transform: rotate(45deg); + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + background: white; + // border-top: 1px solid #95a5a6; + // border-left: 1px solid #95a5a6; + } + + .dropdown-header { + // padding: 0 5px 5px; + margin: 1.75rem 0 0.5rem 2rem; + font-weight: bold; + text-align: left; + color: $grey-dark; + text-transform: uppercase; + letter-spacing: 1px; + + + } + + .item{ + @include transition(all, 0.075s, ease-in-out); + a, span, .as-link{ + padding: 0 2rem; + line-height: 2.5em; + font-size: 1rem; + color: $main-font-color; + } + &:hover{ + background: $main-first; + color: $white; + + a, button{ + text-decoration: none; + color: $white; + } + } + &[aria-checked="true"]{ + a::before{ + font-weight: bold; + margin: 0 0 0 -14px; + } + } + } + .input{ + select, input{ + margin: 0 auto 5px; + padding: 2px 5px; + border-radius: 3px; + } + } + .separator { + margin: 0.75rem 0; + border-bottom: 1px solid $grey-light; + // display: none; + } + +} +.tree .tree-folder .tree-folder-items .dropdown-menu, +.tree .tree-folder .tree-folder-items .dropdown-menu{ + // tout ça sert à restaurer l'apparence du dropdown dans un contexte de sidebar sombre + + .item{ + padding: 0; + + a, + button{ + color: $main-font-color; + + &:hover{ + color: $white; + } + } + &:hover{ + background: $main-first; + } + } +} + + + + +/*=== Alerts */ +.alert { + margin: 1rem 0; + // width: 100%; + padding: 1rem; + font-size: 1rem; + background: $grey-lighter; + border: 1px solid $grey-medium; + border-radius: 3px; + color: $grey-dark; + text-shadow: 0 0 1px $grey-light; +} +.alert-head { + font-size: 1.15em; +} +.alert > a { + text-decoration: underline; + color: inherit; +} +.alert-warn { + background: $warning-light; + border: 1px solid unquote($warning-text+'33'); // on ajoute l'opacité à la fin + color: $warning-text; +} +.alert-success { + background: $success-light; + border: 1px solid unquote($success-text+'33'); + color: $success-text; +} +.alert-error { + background: $alert-light; + border: 1px solid unquote($alert-text+'33'); + color: $alert-text; +} + +/*=== Pagination */ +.pagination { + text-align: center; + font-size: 0.8em; + background: $grey-light; + color: $main-font-color; + + .item{ + &.pager-current { + font-weight: bold; + font-size: 1.5em; + background: $sid-bg; + color: $grey-light; + } + a { + display: block; + font-style: italic; + line-height: 3em; + text-decoration: none; + color: $main-font-color; + + &:hover{ + background: $main-font-color; + color: $grey-light; + } + } + } + + .loading, + a:hover.loading { + font-size: 0; + background: url("loader.gif") center center no-repeat #34495e; + } +} +.content .pagination { + margin: 0; + padding: 0; +} + + +/*=== Boxes */ +.box { + // border: 1px solid #ddd; + border: none; + border-radius: 3px; + background: $white; + + -webkit-box-shadow: 0px 2px 2px 0px rgba(0,0,0,0.25); + -moz-box-shadow: 0px 2px 2px 0px rgba(0,0,0,0.25); + box-shadow: 0px 2px 2px 0px rgba(0,0,0,0.25); + + .box-title { + margin: 0; + padding: 5px 10px; + background: $grey-light; + color: $main-font-color; + // border-bottom: 1px solid #ddd; + border-radius: 2px 2px 0 0; + + form{ + input{ + width: 85%; + } + .dropdown{ + float: right; + a.dropdown-toggle{ + padding: 0; + background-image: url(icons/more.svg); + background-repeat: no-repeat; + background-position: right 8px; + // float: right; + border-radius: 0; + img{ + display: none; + } + } + } + } + } + .box-content { + // max-height: 260px; + + .item { + padding: 0.5rem 0.75rem; + font-size: 1rem; + color: $main-font-color; + line-height: 1.7em; + border-bottom: 1px solid $grey-light; + + img{ + margin-right: 0.75rem; + } + + .configure { + visibility: hidden; + width: 1.75rem; + height: 1.75rem; + display: block; + border-radius: 2px; + float: left; + margin-right: 0.5rem; + background: url("icons/cog.svg") no-repeat 4px 4px; + + .icon { + vertical-align: middle; + border-radius: 3px; + display: none; + } + &:hover{ + // background: $main-first; + background: url("icons/cog-white.svg") no-repeat 4px 4px $main-first; + } + } + &:hover .configure { + visibility: visible; + } + } + .item:last-child{ + border-bottom: none; + } + } +} + +/*=== "Load more" part */ +#bigMarkAsRead { + text-align: center; + text-decoration: none; + background: $main-first-light; + color: $main-first; + + @include transition(all, 0.15s, ease-in-out); + + &:hover { + background: $main-first; + color: #fff; + + .bigTick{ + background: url(icons/tick-white.svg) center no-repeat; + } + } + .bigTick{ + margin: 0.5rem 0; + display: inline-block; + text-indent: -9999px; + background: url(icons/tick-color.svg) center no-repeat; + height: 64px; + width: 64px; + white-space: nowrap; + } +} + +// page de login +.formLogin{ + background: $sid-bg; + + .header{ + .configure{ + padding-right: 1rem; + img{ + margin-right: 0.5rem; + } + + a.signin{ + color: $white; + } + } + } + + h1{ + color: $white; + } + form#crypto-form{ + div{ + margin-bottom: 1rem; + + label{ + font-size: 1rem; + color: $grey-medium; + + + } + input{ + background: $main-first-darker; + + &:focus{ + background: $grey-lighter; + color: $main-font-color; + } + } + } + } +} diff --git a/p/themes/Mapco/_configuration.scss b/p/themes/Mapco/_configuration.scss new file mode 100644 index 000000000..c3c6fd417 --- /dev/null +++ b/p/themes/Mapco/_configuration.scss @@ -0,0 +1,90 @@ +/*=== Configuration pages */ +.post { + padding: 1rem 2rem; + font-size: 1rem; + + form { + margin: 1rem 0; + + // Gestion des extensions + .horizontal-list{ + margin-bottom: 0.5rem; + + .item{ + .stick{ + // width: 65%; + // margin-right: 1rem; + // display:flex; + + } + .btn{ + // width: 8rem; + // flex-grow: 1; + } + } + + } + } + &.content { + max-width: 550px; + } + + h1, h2{ // pages titles + font-size: 3rem; + margin-top: 1.75rem; + font-weight: 300; + line-height: 1.2em; + // font-family: "spectral"; + color: $main-font-color; + } + + a[href="./"]{ // C'est le bouton "Retour à vos flux" + display: inline-block; + // min-height: 38px; + min-width: 15px; + line-height: 25px; + margin: 0; + padding: 0.75rem 1.5rem; + font-size: 1rem; + vertical-align: middle; + cursor: pointer; + overflow: hidden; + background: $grey-lighter; + border: 1px solid $grey-medium-light; + border-radius: 5px; + // border: none; + color: $grey-dark; + + &:hover{ + text-decoration: none; + background: $main-first; + color: white; + border: 1px solid $main-first; + } + } + +} + + + +#slider{ + border-left: none; + + -webkit-box-shadow: 0px 6px 8px 0px rgba(0,0,0,0.35); + -moz-box-shadow: 0px 6px 8px 0px rgba(0,0,0,0.35); + box-shadow: 0px 6px 8px 0px rgba(0,0,0,0.35); +} + +.slide-container{ + .properties{ + background: rgba(0, 0, 0, 0.75); + border: 0; + padding: 1rem; + color: white; + + .page-number{ + right: 1rem; + top: 1rem; + } + } +} diff --git a/p/themes/Mapco/_divers.scss b/p/themes/Mapco/_divers.scss new file mode 100644 index 000000000..7d122f1b4 --- /dev/null +++ b/p/themes/Mapco/_divers.scss @@ -0,0 +1,12 @@ +/*=== DIVERS */ +/*===========*/ +.aside.aside_feed .nav-form input, +.aside.aside_feed .nav-form select { + width: 140px; +} +.aside.aside_feed .nav-form .dropdown .dropdown-menu { + right: -20px; +} +.aside.aside_feed .nav-form .dropdown .dropdown-menu::after { + right: 33px; +} diff --git a/p/themes/Mapco/_fonts.scss b/p/themes/Mapco/_fonts.scss new file mode 100644 index 000000000..5891be834 --- /dev/null +++ b/p/themes/Mapco/_fonts.scss @@ -0,0 +1,56 @@ +@font-face { + font-family: "lato"; + font-style: normal; + font-stretch: normal; + font-weight: 400; + src: local("Lato"), url("../fonts/LatoLatin-Regular.woff") format("woff"); +} +@font-face { + font-family: "lato"; + font-style: italic; + font-stretch: normal; + font-weight: 400; + src: local("Lato"), url("../fonts/LatoLatin-Italic.woff") format("woff"); +} +@font-face { + font-family: "lato"; + font-style: normal; + font-stretch: normal; + font-weight: 700; + src: local("Lato"), url("../fonts/LatoLatin-Bold.woff") format("woff"); +} +@font-face { + font-family: "lato"; + font-style: italic; + font-stretch: normal; + font-weight: 700; + src: local("Lato"), url("../fonts/LatoLatin-BoldItalic.woff") format("woff"); +} +@font-face { + font-family: "spectral"; + font-style: normal; + font-stretch: normal; + font-weight: 400; + src: local("Spectral"), url("../fonts/Spectral-Regular.woff") format("woff"); +} +@font-face { + font-family: "spectral"; + font-style: italic; + font-stretch: normal; + font-weight: 400; + src: local("Spectral"), url("../fonts/Spectral-Italic.woff") format("woff"); +} +@font-face { + font-family: "spectral"; + font-style: normal; + font-stretch: normal; + font-weight: 700; + src: local("Spectral"), url("../fonts/Spectral-Bold.woff") format("woff"); +} +@font-face { + font-family: "spectral"; + font-style: italic; + font-stretch: normal; + font-weight: 700; + src: local("Spectral"), url("../fonts/Spectral-BoldItalic.woff") format("woff"); +} diff --git a/p/themes/Mapco/_forms.scss b/p/themes/Mapco/_forms.scss new file mode 100644 index 000000000..8a388aa8a --- /dev/null +++ b/p/themes/Mapco/_forms.scss @@ -0,0 +1,153 @@ +/* btns */ + +.btn { + display: inline-block; + min-height: 38px; + min-width: 15px; + line-height: 25px; + margin: 0; + padding: 0.5rem 1.5rem; + font-size: 1rem; + vertical-align: middle; + cursor: pointer; + overflow: hidden; + background: $grey-lighter; + border-radius: 5px; + border: none; + color: $grey-dark; + + @include transition(all, 0.15s, ease-in-out); + + &.btn-important { + background: $main-first; + color: $white; + + // @include transition(all, 0.15s, ease-in-out); + + &:hover, + &:active { + background: $main-first-alt; + } + } + + + &.btn-attention { + background: $alert-bg; + color: #fff; + + &:hover, + &:active { + background: $alert-text; + } + } + + &:hover { + text-decoration: none; + } +} + +a.btn { + min-height: 25px; + line-height: 25px; +} + +/*=== Forms */ +legend { + display: inline-block; + width: auto; + margin: 2rem 0 1rem 0; + padding: 0; + font-size: 1rem; + clear: both; + text-transform: uppercase; + letter-spacing: 1px; + font-weight: 700; +} +label { + min-height: 25px; + padding: 5px 0; + cursor: pointer; + color: $grey-dark; +} +textarea { + width: 360px; + height: 100px; +} +input, select, textarea, button { + font-family: "lato", "Helvetica", "Arial", sans-serif; + min-height: 25px; + padding: 5px 10px; + line-height: 25px; + vertical-align: middle; + background: $white; + border: 1px solid $grey-light; + font-size: 1rem; + color: $grey-dark; + border-radius: 2px; +} +option { + padding: 0 .5em; +} +input:focus, select:focus, textarea:focus { + color: $main-font-color; + border-color: $main-first; +} +input:invalid, select:invalid { + color: $alert-bg; + border-color: $alert-bg; + box-shadow: none; +} +input:disabled, select:disabled { + background: $grey-light; +} +input.extend { + transition: width 200ms linear; + -moz-transition: width 200ms linear; + -webkit-transition: width 200ms linear; + -o-transition: width 200ms linear; + -ms-transition: width 200ms linear; +} + + +.form-group { + padding: 5px; + border-radius: 3px; + + &::after { + content: ""; + display: block; + clear: both; + } + &:hover { + // background: #fff; + // border: 1px solid #eee; + // border-radius: 3px; + // border: 1px solid #eee; + } + .group-name { + padding: 10px 0; + text-align: right; + } + .group-controls { + min-height: 25px; + padding: 5px 0; + } + .group-controls .control { + line-height: 2.0em; + } + table { + margin: 10px 0 0 220px; + } + + &.form-actions { + margin: 15px 0 25px; + padding: 5px 0; + // background: #333; + } + &.form-actions .btn { + margin: 0 0.5rem 0 0; + } +} + + + diff --git a/p/themes/Mapco/_global-view.scss b/p/themes/Mapco/_global-view.scss new file mode 100644 index 000000000..30979bd6c --- /dev/null +++ b/p/themes/Mapco/_global-view.scss @@ -0,0 +1,80 @@ +/*=== GLOBAL VIEW */ +/*================*/ + +#stream{ + .box.category{ + + &:not([data-unread="0"]) .box-title { + // background: #3498db; + } + &:not([data-unread="0"]) .box-title:active { + // background: #2980b9; + } + &:not([data-unread="0"]) .box-title .title { + font-weight: bold; + // color: #fff; + } + + .box-title{ + background: none; + padding: 1.5rem; + + a.title{ + font-weight: normal; + text-decoration: none; + text-align: left; + font-size: 1rem; + text-transform: uppercase; + letter-spacing: 1px; + color: $grey-dark; + + &:not([data-unread="0"])::after { + position: absolute; + top: 1.75rem; + right: 0; + line-height: 1.5rem; + background: $grey-light; + border-radius: 12px; + padding: 0 0.75rem; + margin: -0.5rem 1rem 0 0; + text-align: center; + } + &:hover{ + color: $main-first; + } + } + } + + .box-content{ + padding-bottom: 0.5rem; + .item.feed { + // padding: 2px 10px; + font-size: 1rem; + padding: 0.5rem 1.5rem; + + a{ + color: $main-font-color; + font-weight: 400; + + &:hover{ + color: $main-first; + text-decoration: none; + } + } + } + } + } +} + + +// le panel qui apparait en overlay pour afficher les flux +#overlay{ + background: rgba(0, 0, 0, 0.65); +} +#panel{ + top: 3rem; + right: 3rem; + bottom: 3rem; + left: 3rem; + border-radius: 3px; +} diff --git a/p/themes/Mapco/_layout.scss b/p/themes/Mapco/_layout.scss new file mode 100644 index 000000000..b62618d81 --- /dev/null +++ b/p/themes/Mapco/_layout.scss @@ -0,0 +1,462 @@ +/*=== STRUCTURE */ +/*===============*/ +/*=== Header */ +.header { + background: $sid-bg; + padding: 0.5rem 1.35rem; + display: block; + table-layout: none; + width: auto; + + .item{ + vertical-align: middle; + // text-align: center; + // display: flex; + // justify-content: space-between; + // flex-direction: row; + + &.title{ + + font-weight: 400; + width: 280px; + + h1{ + a{ + text-decoration: none; + color: $sid-font-color; + font-size: 1rem; + text-transform: uppercase; + letter-spacing: 1px; + + img{ + margin-right: 0.5rem; + + } + } + } + } + &.search{ + // text-align: center; + // width: 50%; + + input{ + width: 230px; + border-radius: 2px 0 0 2px; + background-color: $sid-bg-alt; + color: $sid-font-color; + border: none; + + @include transition(all, 0.15s, ease-in-out); + + &:hover{ + background-color: $sid-bg-dark; + } + + &:focus{ + width: 350px; + + background-color: $white; + color: $grey-dark; + } + } + .btn{ + img{display: none;} + border-radius: 0 2px 2px 0; + + background-color: $main-first; + background-position: center; + background-repeat: no-repeat; + background-image: url(icons/magnifier.svg); + + border-left-width: 0; + + width: 3rem; + min-height: 35px; + + &:hover{ + background-color: $main-first-alt; + } + } + } + &.configure{ + width: 2rem; + position: absolute; + right: 1rem; + top: 1.25rem; + text-align: center; + // float: right; + + .btn{ + img{display: none;} + // border-radius: 0 2px 2px 0; + + background-color: transparent; + background-position: center; + background-repeat: no-repeat; + background-image: url(icons/cog-white.svg); + + padding: 0 0.5rem; + + // border-left-width: 0; + + // width: 3rem; + + &:hover{ + // background-color: $main-first-alt; + } + } + } + } + + +} + +/*=== Body */ +#global { + height: calc(100% - 85px); +} + + + + +/*=== Prompt (centered) */ +.prompt { + text-align: center; +} +.prompt label { + text-align: left; +} +.prompt form { + margin: 10px auto 20px auto; + width: 200px; +} +.prompt input { + margin: 5px auto; + width: 100%; +} +.prompt p { + margin: 20px 0; +} + +/*=== New article notification */ +#new-article { + text-align: center; + font-size: 1rem; + background: $main-first; +} +#new-article:hover { + background: $main-first-alt; +} +#new-article > a { + line-height: 3em; + font-weight: bold; + color: $white; +} +#new-article > a:hover { + text-decoration: none; +} + +/*=== Day indication */ +.day { + padding: 1rem 0 0 1.25rem; + font-weight: 700; + line-height: 3em; + letter-spacing: 1px; + text-transform: uppercase; + font-size: 0.875rem; + color: $light-font-color; + // border-left: 2px solid #ecf0f1; + + .name{ + padding: 0 1rem 0 1rem; + font-size: 0.875rem; + // font-weight: 700; + color: $main-font-color; + position: relative; + left: 0; + + // letter-spacing: 1px; + text-transform: uppercase; + } +} + +/*=== Index menu */ +.nav_menu { + text-align: center; + padding: 5px 0; + + .btn{ + border-left-width: 0; + padding: 0.5rem 1rem; + background-color: $grey-lighter; + background-position: center; + background-repeat: no-repeat; + + &:hover{ + background-color: $grey-light; + } + } + + .stick{ + background: $grey-lighter; + + .btn{ + border-left-width: 0; + padding: 0.5rem 1rem; + background-color: $grey-lighter; + background-position: center; + background-repeat: no-repeat; + @include transition(all, 0.15s, ease-in-out); + + &:hover{ + background-color: $grey-medium-light; + } + + &.active{ + background-color: $main-first; + } + + img.icon{display: none;} // on efface pour afficher nos icones, mouhahaha !! + + + // actions + &#toggle-read{ + background-image: url(icons/read.svg); + } + &#toggle-read.active{ + background-image: url(icons/read-white.svg); + } + + &#toggle-unread{ + background-image: url(icons/unread.svg); + } + &#toggle-unread.active{ + background-image: url(icons/unread-white.svg); + } + + &#toggle-starred{ + background-image: url(icons/starred.svg); + } + &#toggle-starred.active{ + background-image: url(icons/starred-white.svg); + } + + &#toggle-non-starred{ + background-image: url(icons/non-starred.svg); + } + &#toggle-non-starred.active{ + background-image: url(icons/non-starred-white.svg); + } + + // read all + &.read_all{ + background-color: $grey-lighter; + // min-height: 0; + color:$main-font-color; + padding: 5px 16px; + @include transition(all, 0.15s, ease-in-out); + + &:hover{ + background-color: $grey-medium-light; + } + } + + // views + &.view-normal{ + background-image: url(icons/view-list.svg); + } + &.view-normal.active{ + background-image: url(icons/view-list-white.svg); + } + + &.view-global{ + background-image: url(icons/view-global.svg); + } + &.view-global.active{ + background-image: url(icons/view-global-white.svg); + } + + &.view-reader{ + background-image: url(icons/view-reader.svg); + } + &.view-reader.active{ + background-image: url(icons/view-reader-white.svg); + } + + &.view-rss{ + background-image: url(icons/rss.svg); + } + + } + .dropdown { + a.dropdown-toggle{ + border-left-width: 0; + background-image: url(icons/more.svg); + } + } + + &#nav_menu_action{ + + } + &#nav_menu_read_all{ + + } + &#nav_menu_views{ + + } + } +} + + +#dropdown-query ~ .dropdown-menu .dropdown-header .icon { + vertical-align: middle; + background-color: $grey-medium-dark; + border-radius: 3px; +} + + +/*=== Content of feed articles */ +.content, .content.thin { + padding: 20px 10px; + + font-size: 1.125rem; + line-height: 1.8rem; + + h1.title, h1{ + + a{ + color: $main-font-color; + font-family: "spectral"; + font-size: 2rem; + + &:hover{ + color: $main-first; + text-decoration: none; + } + } + } + .author{ + font-size: 1.125rem; + color: $light-font-color; + } + p, ul{ + font-size: 1.125rem; + line-height: 1.8rem; + } + hr{ + } + .content hr { + margin: 30px 10px; + height: 1px; + background: $grey-medium-light; + border: 0; + box-shadow: 0 2px 5px #ccc; + } + + pre { + margin: 10px auto; + padding: 10px 20px; + overflow: auto; + background: $main-first-darker; + color: $white; + font-size: 0.9rem; + border-radius: 3px; + + code { + background: transparent; + color: $white; + border: none; + } + } + code { + padding: 2px 5px; + color: $grey-light; + background: $grey-lighter; + border: 1px solid $grey-light; + border-radius: 3px; + } + + + blockquote { + display: block; + margin: 0; + padding: 5px 20px; + border-top: 1px solid $grey-medium-light; + border-bottom: 1px solid $grey-medium-light; + background: $grey-lighter; + color: $main-font-color; + + p { + margin: 0; + } + } + +} + + +/*=== Notification and actualize notification */ +.notification { + position: fixed; + top: auto; + bottom: 0; + left: 0; + right: 0; + width: 100%; + height: 3rem; + + padding: 1rem 0; + text-align: center; + // font-weight: bold; + font-size: 1em; + line-height: 3em; + z-index: 10; + vertical-align: middle; + background: $grey-medium-light; + color: $grey-dark; + // border-radius: 3px; + border: none; + + .msg{ + font-size: 1rem; + display: inline-block; + } + + &.good { + background: $success-bg; + color: $white; + } + &.bad { + background: $alert-bg; + color: $white; + } + a.close { + padding: 0 15px; + line-height: 3em; + border-radius: 0 3px 3px 0; + } + + &.good a.close:hover { + background: $success-text; + } + &.bad a.close:hover { + background: $alert-text; + } + + &#actualizeProgress { + line-height: 2em; + + br{ + display: none; + } + } +} + + +/*=== Navigation menu (for articles) */ +#nav_entries { + margin: 0; + text-align: center; + line-height: 3em; + table-layout: fixed; + background: $sid-bg; +} diff --git a/p/themes/Mapco/_list-view.scss b/p/themes/Mapco/_list-view.scss new file mode 100644 index 000000000..69cd8a81d --- /dev/null +++ b/p/themes/Mapco/_list-view.scss @@ -0,0 +1,92 @@ +/*=== Feed articles */ +.flux { + // border-left: 2px solid #ecf0f1; + background: $white; + + @include transition(all, 0.15s, ease-in-out); + + &:hover{ + background: $grey-lighter; + + &:not(.current):hover .item.title { + background: $grey-lighter; + + + } + } + &.current{ + border-left-color: $main-first; + background: $grey-lighter; + } + &.not_read{ + background: $unread-bg; //-------------------- + // border-left-color: #FF5300; + + &:hover{ + background: $unread-bg-light; //-------------------- + } + + &:not(.current):hover .item.title { + background: $unread-bg-light; + + + } + .item.title{ + a{ + color: $unread-font-color; //-------------------- + } + + } + .item.website{ + a{ + color: $unread-font-color; //-------------------- + } + } + .item.date{ + color: unquote($unread-font-color+"99"); //-------------------- + } +} + + &.favorite { + background: $fav-light; + border-left-color: $fav-bg; + + @include transition(all, 0.15s, ease-in-out); + + &:not(.current):hover .item.title { + background: $fav-light; + } + } + + .website{ + a{ + color: $main-font-color; + opacity: 0.75; + } + + .favicon { + padding: 5px; + } + } + .date { + font-size: 0.85rem; + color: $main-font-color; + opacity: 0.75; + } + + .bottom { + font-size: 1rem; + text-align: center; + } +} + +.flux_header { + font-size: 1rem; + cursor: pointer; + border-top: 1px solid $grey-light; + + .title { + font-size: 1rem; + } +} + diff --git a/p/themes/Mapco/_logs.scss b/p/themes/Mapco/_logs.scss new file mode 100644 index 000000000..ae1e24c6c --- /dev/null +++ b/p/themes/Mapco/_logs.scss @@ -0,0 +1,34 @@ +/*=== LOGS */ +/*=========*/ +.loglist { + overflow: hidden; + border: 1px solid $grey-medium-dark; +} +.log { + margin: 10px 0; + padding: 5px 2%; + overflow: auto; + font-size: 0.8rem; + background: $grey-lighter; + color: $grey-dark; +} + +.log > .date { + margin: 0 10px 0 0; + padding: 5px 10px; + border-radius: 20px; +} +.log.error > .date { + background: $alert-bg; + color: #fff; +} +.log.warning > .date { + background: $warning-bg; +} +.log.notice > .date { + background: $grey-light; +} +.log.debug > .date { + background: $main-first-darker; + color: $white; +} diff --git a/p/themes/Mapco/_mixins.scss b/p/themes/Mapco/_mixins.scss new file mode 100644 index 000000000..3542ade6b --- /dev/null +++ b/p/themes/Mapco/_mixins.scss @@ -0,0 +1,59 @@ +/* FUNCTIONS */ + +//animation +@mixin transition($target, $duration, $ease) { + -webkit-transition: $target $duration $ease; + -moz-transition: $target $duration $ease; + -o-transition: $target $duration $ease; + -ms-transition: $target $duration $ease; + transition: $target $duration $ease; +} + +//animation +@mixin animation-delay($delay) { + -webkit-animation-delay: $delay; + /* Safari 4.0 - 8.0 */ + animation-delay: $delay; +} + +//animation +@mixin animation($animate...) { + $max: length($animate); + $animations: ''; + @for $i from 1 through $max { + $animations: #{$animations + nth($animate, $i)}; + @if $i < $max { + $animations: #{$animations + ", "}; + } + } + -webkit-animation: $animations; + -moz-animation: $animations; + -o-animation: $animations; + -ms-transition: $animations; + animation: $animations; +} + +//keyframes +@mixin keyframes($animationName) { + @-webkit-keyframes #{$animationName} { + @content; + } + @-moz-keyframes #{$animationName} { + @content; + } + @-o-keyframes #{$animationName} { + @content; + } + @keyframes #{$animationName} { + @content; + } +} + +@mixin border-radius($radius: 4px){ + -moz-border-radius: $radius; + -webkit-border-radius: $radius; + -ms-border-radius: $radius; + -o-border-radius: $radius; + -khtml-border-radius: $radius; + border-radius: $radius; +} diff --git a/p/themes/Mapco/_mobile.scss b/p/themes/Mapco/_mobile.scss new file mode 100644 index 000000000..dcf4e74f2 --- /dev/null +++ b/p/themes/Mapco/_mobile.scss @@ -0,0 +1,169 @@ +/*=== MOBILE */ +/*===========*/ +@media(max-width: 840px) { + html, body{ + // font-size: 1rem; + } + ul.nav{ + .item{ + width: 100%; + + img{ + display: none; + } + a{ + display: inline-block; + padding: 1rem 1rem 1rem 2.5rem; + color: $sid-font-color; + width: 100%; + + background: url("../../themes/icons/logout.svg") no-repeat $sid-bg-dark 3% center; + + @include transition(all, 0.2s, ease-in-out); + + &:hover, + &:active{ + background: url("../../themes/icons/logout.svg") no-repeat $alert-bg 3% center; + text-decoration: none; + } + } + + } + + } + .aside { + @include transition(all, 0.2s, ease-in-out); + + &.aside_feed { + padding: 0; + } + + .tree .tree-folder .tree-folder-items .item a{ + padding: 0.5rem 1rem; + } + } + .aside .toggle_aside, + #panel .close { + display: block; + width: 100%; + height: 50px; + line-height: 50px; + text-align: center; + background: $main-first-alt; + } + + .header{ + padding: 0.5rem; + .item{ + &.title{ + display: none; + } + + &.search{ + input{ + width: 90%; + height: 3.5rem; + + &:focus{ + width: 100%; + + } + } + .btn{ + min-height: 49px; + padding: 0.5rem 2rem; + } + } + &.configure{ + width: 2.75rem; + top: 3.125rem; + .dropdown{ + .btn{ + padding: 1.125rem; + } + } + } + } + } + + .nav_menu{ + .btn { + margin: 0; + padding: 0.85rem 1.25rem; + } + .stick { + margin: 0.5rem 0.5rem; + + .btn{ + margin: 0; + padding: 0.85rem 1.25rem; + + &.read_all{ + padding: 0.85rem 1.25rem; + } + } + } + .search { + display: none; + max-width: 97%; + + .input{ + + max-width: 97%; + width: 90px; + + &::focus{ + width: 400px; + } + } + } + } + #stream{ + .flux{ + .flux_header{ + padding: 0.5rem 0; + } + } + } + + + + .day{ + text-align: center; + padding: 1rem 0; + .name { + // font-size: 1.1rem; + display: block; + padding: 0; + width: 100%; + line-height: 1.5rem; + margin-bottom: 1rem; + } + + } + + .pagination { + margin: 0 0 3.5em; + } + + #nav_entries{ + line-height: 4.5rem; + } + + .notification { + border-radius: 0; + + a.close { + display: block; + left: 0; + background: transparent; + } + a.close:hover { + opacity: 0.5; + } + a.close .icon { + display: none; + + } + } +} diff --git a/p/themes/Mapco/_reader-view.scss b/p/themes/Mapco/_reader-view.scss new file mode 100644 index 000000000..4368908d6 --- /dev/null +++ b/p/themes/Mapco/_reader-view.scss @@ -0,0 +1,13 @@ +/*=== READER VIEW */ +/*================*/ +#stream.reader .flux { + padding: 0 0 50px; + background: $grey-light; + color: $main-font-color; + border: none; +} +#stream.reader .flux .author { + margin: 0 0 10px; + font-size: 90%; + color: $grey-medium-dark; +} diff --git a/p/themes/Mapco/_sidebar.scss b/p/themes/Mapco/_sidebar.scss new file mode 100644 index 000000000..62ec1c1cf --- /dev/null +++ b/p/themes/Mapco/_sidebar.scss @@ -0,0 +1,291 @@ +/*=== Tree */ +.tree { + margin: 10px 0; + + &#sidebar{ + scrollbar-color: rgba(255,255, 0, 0.1) rgba(0, 0, 0, 0.05); + scrollbar-color: unquote($sid-font-color+"33") unquote($sid-font-color+"22"); + } + + + .tree-folder{ + border-bottom: 1px solid $sid-sep; + + .tree-folder-title { + position: relative; + background: $sid-bg; + font-size: 0.85rem; + letter-spacing: 1px; + padding: 12px 16px; + font-weight: 700; + text-transform: uppercase; + + .title { + background: inherit; + color: $sid-font-color; + &:hover{ + text-decoration: none; + } + } + } + &.active { + .tree-folder-title { + background: $sid-bg; + font-weight: bold; + } + } + .tree-folder-items { + background: $sid-bg-alt; + + .item{ + padding: 0 1rem; + line-height: 2.5rem; + font-size: 1rem; + font-weight: 400; + @include transition(all, 0.15s, ease-in-out); + + &.active{ + background: $sid-active; + + .dropdown li a{ + color: $main-font-color; + + &:hover{ + color: $sid-font-color; + } + } + + a{ + color: $sid-active-font; + } + } + + &:hover{ + background: $sid-bg-dark; + } + + a{ + text-decoration: none; + color: $sid-font-color; + } + } + + .feed .item-title:not([data-unread="0"])::before { + content: attr(data-unread); + background: $sid-pills; + font-size: 0.75rem; + display: block; + float: left; + padding: 3px 4px; + text-align:center; + border-radius: 12px; + margin: 11px 6px 0 4px; + line-height: 0.75rem; + } + .feed .item-title:not([data-unread="0"]) { + + } + } + } +} + +/*=== Buttons */ +.stick { + vertical-align: middle; + font-size: 0; + + input, .btn { + border-radius: 0; + } + .btn:first-child, + input:first-child { + border-radius: 5px 0 0 5px; + } + .btn:last-child, input:last-child, .btn + .dropdown > .btn { + border-radius: 0 5px 5px 0; + } + .btn + .btn, + .btn + input, + .btn + .dropdown > .btn, + input + .btn, + input + input, + input + .dropdown > .btn, + .dropdown + .btn, + .dropdown + input, + .dropdown + .dropdown > .btn { + border-left: 1px solid $grey-medium-light; + } + +} + +.aside { + background: $sid-bg; + + &.aside_feed { + padding: 10px 0; + text-align: center; + background: $sid-bg; + } + &.aside_feed .tree { + margin: 10px 0 50px; + } + +} + + +/* Sidebar des pages de configuration */ + + + +/*=== Navigation */ + +.nav-list{ + .nav-header, + .item{ + height: 2.5em; + line-height: 2.5em; + font-size: 1rem; + } + .item{ + background: $sid-bg; + @include transition(all, 0.15s, ease-in-out); + a{ + padding: 0 1rem; + color: $sid-font-color; + } + .error{ + a{ + color: $alert-bg; + } + } + &:hover{ + background: $sid-bg-dark; + color: $sid-font-color; + + .error{ + a{ + color: $sid-font-color; + background: $main-first; + } + } + .empty{ + a{ + color: $sid-font-color; + background: $warning-bg; + } + } + + a{ + color: $sid-font-color; + text-decoration: none; + } + } + &.active{ + background: $main-first; + color: $white; + + .error{ + a{ + color: $white; + background: $main-first; + } + } + + .empty{ + a{ + color: $white; + background: $warning-bg; + } + } + + a{ + color: $white; + text-decoration: none; + } + } + + } + &.empty{ + a{ + color: $warning-bg; + } + } + .disable{ + text-align: center; + background: $grey-lighter; + color: $grey-medium-dark; + } + + .nav-header { + padding: 0 10px; + font-weight: bold; + color: $grey-dark; + text-transform: uppercase; + letter-spacing: 1px; + margin-top: 1rem; + } + + .nav-form { + padding: 3px; + text-align: center; + } + + .nav-head { + margin: 0; + text-align: right; + // background: #34495e; + color: $white; + a { + color: $white; + } + .item { + padding: 5px 10px; + font-size: 0.9rem; + line-height: 1.5rem; + } + } +} + +/*=== Aside main page (categories) */ +.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { + position: absolute; + right: 0; + line-height: 1.5rem; + background: $sid-pills; + border-radius: 12px; + padding: 0 0.75rem; + margin: -0.5rem 1rem 0 0; + text-align: center; +} + +.feed.item.empty.active { + background: $grey-dark; +} +.feed.item.error.active { + background: $grey-dark; +} +.feed.item.empty, +.feed.item.empty > a { + color: $grey-dark; +} +.feed.item.error, +.feed.item.error > a { + color: $grey-dark; +} +.feed.item.empty.active, +.feed.item.error.active, +.feed.item.empty.active > a, +.feed.item.error.active > a { + color: $white; +} +.aside_feed .tree-folder-items .dropdown-menu::after { + left: 2px; +} +.aside_feed .tree-folder-items .item .dropdown-target:target ~ .dropdown-toggle > .icon, +.aside_feed .tree-folder-items .item:hover .dropdown-toggle > .icon, +.aside_feed .tree-folder-items .item.active .dropdown-toggle > .icon { + border-radius: 3px; +} +.aside_feed .stick #btn-importExport{ + border-left-color: $sid-bg; +} diff --git a/p/themes/Mapco/_stats.scss b/p/themes/Mapco/_stats.scss new file mode 100644 index 000000000..f287efa08 --- /dev/null +++ b/p/themes/Mapco/_stats.scss @@ -0,0 +1,27 @@ +/*=== STATISTICS */ +/*===============*/ +.stat { + margin: 10px 0 20px; +} + +.stat th, +.stat td, +.stat tr { + border: none; +} +.stat > table td, +.stat > table th { + border-bottom: 1px solid $grey-medium-light; +} + +.stat > .horizontal-list { + margin: 0 0 5px; +} +.stat > .horizontal-list .item { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.stat > .horizontal-list .item:first-child { + width: 270px; +} diff --git a/p/themes/Mapco/_tables.scss b/p/themes/Mapco/_tables.scss new file mode 100644 index 000000000..608e19aca --- /dev/null +++ b/p/themes/Mapco/_tables.scss @@ -0,0 +1,17 @@ +/*=== Tables */ +table { + border-collapse: collapse; +} + +tr, th, td { + padding: 0.5em; + border: 1px solid $grey-medium-light; +} +th { + background: $grey-lighter; +} +form td, +form th { + font-weight: normal; + text-align: center; +} diff --git a/p/themes/Mapco/_variables.scss b/p/themes/Mapco/_variables.scss new file mode 100644 index 000000000..b01d9bd67 --- /dev/null +++ b/p/themes/Mapco/_variables.scss @@ -0,0 +1,53 @@ +// La couleur principale du thème +$main-first: #3366cc; // couleur principale +$main-first-alt: #2255cc; // var pour les hovers +$main-first-light: #effcfd; // var light 1 +$main-first-lighter: #f7fdfe; // var light 2 +$main-first-dark: #35363c; // var pour les hovers +$main-first-darker: #1d1e22; // var pour les hovers + +// les couleurs de polices liées +$main-font-color: #303136; +$light-font-color: #5b6871; +$white: #fff; // le blanc (des fois qu'on aurait envie de le teinter un peu) + +// toute la palette des gris, très utile +// on essaiera de teinter ces gris suivant la couleur principale +$grey-darker: #3b3f4d; +$grey-dark: #5b6871; +$grey-medium-dark: #a6a7ae; +$grey-medium: #c5ced3; +$grey-medium-light: #d5d8db; +$grey-light: #eff0f2; +$grey-lighter: #f9fafb; + +$unread-font-color: $main-first; +$unread-bg: #f2f6f8; +$unread-bg-light: #fdfdfe; + +// les couleurs d'alertes (rouge, jaune, vert) +$alert-bg: #f5633e; // la base +$alert-light: #fde0d8; // +light +$alert-text: #73341f; // +foncé + +$warning-bg: #f4f762; +$warning-light: #fdfde0; +$warning-text: #73762f; + +$success-bg: #10f587; +$success-light: #cffde7; +$success-text: #0c7540; + +// les favoris +$fav-bg: #FFC300; +$fav-light: #FFF6DA; + +// la couleur de sidebar, utile si on a envie d'un thème qui aurait une sidebar foncé, e.g. +$sid-font-color: #FFFFFF; // la couleur de fond de la barre de gauche et du header +$sid-bg: #303136; // le background général de la barre de gauche, et du header +$sid-bg-alt: #26272a; // le background de l'intérieur des groupes +$sid-bg-dark: #17181a; // les hovers +$sid-sep: #3f3f3f; // les séparateurs +$sid-active: $main-first; // la couleur active +$sid-active-font: #FFFFFF; // la couleur active +$sid-pills: rgba(0,0,0, 0.25); // les gélules diff --git a/p/themes/Mapco/icons/cog-white.svg b/p/themes/Mapco/icons/cog-white.svg new file mode 100644 index 000000000..3df8c2d70 --- /dev/null +++ b/p/themes/Mapco/icons/cog-white.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16" version="1.1"> +<g id="surface2"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(94.901961%,94.901961%,94.901961%);fill-opacity:1;" d="M 6.667969 0 L 6.667969 2.839844 C 6.179688 2.964844 5.71875 3.160156 5.292969 3.410156 L 3.285156 1.402344 L 1.402344 3.285156 L 3.410156 5.292969 C 3.160156 5.71875 2.964844 6.179688 2.839844 6.667969 L 0 6.667969 L 0 9.332031 L 2.839844 9.332031 C 2.964844 9.820312 3.15625 10.28125 3.410156 10.707031 L 1.402344 12.714844 L 3.285156 14.597656 L 5.292969 12.589844 C 5.71875 12.839844 6.179688 13.03125 6.667969 13.15625 L 6.667969 16 L 9.332031 16 L 9.332031 13.15625 C 9.820312 13.03125 10.28125 12.839844 10.703125 12.589844 L 12.714844 14.597656 L 14.601562 12.714844 L 12.589844 10.707031 C 12.839844 10.28125 13.03125 9.820312 13.160156 9.332031 L 16 9.332031 L 16 6.667969 L 13.160156 6.667969 C 13.03125 6.179688 12.839844 5.71875 12.589844 5.292969 L 14.601562 3.285156 L 12.714844 1.398438 L 10.703125 3.410156 C 10.28125 3.15625 9.820312 2.964844 9.332031 2.839844 L 9.332031 0 Z M 8 5.332031 C 9.472656 5.332031 10.664062 6.527344 10.664062 8 C 10.664062 9.472656 9.472656 10.664062 8 10.664062 C 6.527344 10.664062 5.332031 9.472656 5.332031 8 C 5.332031 6.527344 6.527344 5.332031 8 5.332031 Z M 8 5.332031 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Mapco/icons/cog.svg b/p/themes/Mapco/icons/cog.svg new file mode 100644 index 000000000..aa56d862b --- /dev/null +++ b/p/themes/Mapco/icons/cog.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="17" + viewBox="0 0 16 17" + version="1.1" + id="svg5" + sodipodi:docname="cog.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="14.75" + inkscape:cx="8" + inkscape:cy="8" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 6.667969,1 v 2.839844 c -0.488281,0.125 -0.949219,0.320312 -1.375,0.570312 L 3.285156,2.402344 1.402344,4.285156 3.410156,6.292969 C 3.160156,6.71875 2.964844,7.179688 2.839844,7.664062 H 0 v 2.667969 h 2.839844 c 0.125,0.488281 0.316406,0.949219 0.570312,1.375 l -2.007812,2.007813 1.882812,1.882812 2.007813,-2.007812 c 0.425781,0.25 0.886719,0.441406 1.375,0.566406 V 17 h 2.664062 v -2.84375 c 0.488281,-0.125 0.949219,-0.316406 1.371094,-0.566406 l 2.011719,2.007812 1.886718,-1.882812 -2.011718,-2.007813 c 0.25,-0.425781 0.441406,-0.886719 0.570312,-1.375 H 16 V 7.664062 H 13.160156 C 13.03125,7.179688 12.839844,6.71875 12.589844,6.292969 L 14.601562,4.285156 12.714844,2.398438 10.703125,4.410156 C 10.28125,4.15625 9.820312,3.964844 9.332031,3.839844 V 1 Z M 8,6.332031 c 1.472656,0 2.664062,1.195313 2.664062,2.667969 0,1.472656 -1.191406,2.664062 -2.664062,2.664062 C 6.527344,11.664062 5.332031,10.472656 5.332031,9 5.332031,7.527344 6.527344,6.332031 8,6.332031 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/down-white.svg b/p/themes/Mapco/icons/down-white.svg new file mode 100644 index 000000000..df05a4704 --- /dev/null +++ b/p/themes/Mapco/icons/down-white.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="10" + viewBox="0 0 16 10" + version="1.1" + id="svg5" + sodipodi:docname="down-white.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="26.222222" + inkscape:cx="7.5" + inkscape:cy="4.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 1.800781,0.347656 0.386719,1.761719 8.09375,9.46875 15.800781,1.761719 14.386719,0.347656 8.09375,6.640625 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/down.svg b/p/themes/Mapco/icons/down.svg new file mode 100644 index 000000000..5c732e199 --- /dev/null +++ b/p/themes/Mapco/icons/down.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="10" + viewBox="0 0 16 10" + version="1.1" + id="svg5" + sodipodi:docname="down.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="26.222222" + inkscape:cx="7.5" + inkscape:cy="4.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 1.800781,0.347656 0.386719,1.761719 8.09375,9.46875 15.800781,1.761719 14.386719,0.347656 8.09375,6.640625 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/icon.svg b/p/themes/Mapco/icons/icon.svg new file mode 100644 index 000000000..594abba59 --- /dev/null +++ b/p/themes/Mapco/icons/icon.svg @@ -0,0 +1,9 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="40" height="40" viewBox="0 0 40 40" version="1.1"> +<g id="surface2"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 25.15625 20 C 25.15625 17.152344 22.847656 14.84375 20 14.84375 C 17.152344 14.84375 14.84375 17.152344 14.84375 20 C 14.84375 22.847656 17.152344 25.15625 20 25.15625 C 22.847656 25.15625 25.15625 22.847656 25.15625 20 Z M 25.15625 20 "/> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(38.431373%,39.215686%,43.137255%);fill-opacity:1;" d="M 19.558594 0.0078125 C 17.125 0.0585938 14.679688 0.554688 12.347656 1.523438 C 4.878906 4.617188 0 11.917969 0 20 L 3.75 20 C 3.75 13.421875 7.703125 7.503906 13.78125 4.988281 C 19.859375 2.46875 26.839844 3.859375 31.488281 8.511719 C 36.140625 13.160156 37.53125 20.140625 35.011719 26.21875 C 32.496094 32.296875 26.578125 36.25 20 36.25 L 20 40 C 28.082031 40 35.382812 35.121094 38.476562 27.652344 C 41.570312 20.183594 39.859375 11.574219 34.140625 5.859375 C 30.210938 1.929688 24.914062 -0.109375 19.558594 0.0078125 Z M 19.558594 0.0078125 "/> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(38.431373%,39.215686%,43.137255%);fill-opacity:1;" d="M 20.683594 6.582031 C 18.726562 6.480469 16.738281 6.804688 14.859375 7.585938 C 9.839844 9.664062 6.5625 14.570312 6.5625 20 L 10.3125 20 C 10.3125 16.078125 12.667969 12.550781 16.292969 11.050781 C 19.917969 9.546875 24.074219 10.375 26.851562 13.148438 C 29.625 15.925781 30.453125 20.082031 28.949219 23.707031 C 27.449219 27.332031 23.921875 29.6875 20 29.6875 L 20 33.4375 C 25.429688 33.4375 30.335938 30.160156 32.414062 25.140625 C 34.492188 20.125 33.339844 14.335938 29.5 10.5 C 27.101562 8.097656 23.941406 6.75 20.683594 6.582031 Z M 20.683594 6.582031 "/> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 20 0 L 20 3.75 C 28.996094 3.75 36.25 11.003906 36.25 20 L 40 20 C 40 8.976562 31.023438 0 20 0 Z M 20 0 "/> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 20 6.5625 L 20 10.3125 C 25.371094 10.3125 29.6875 14.628906 29.6875 20 L 33.4375 20 C 33.4375 12.601562 27.398438 6.5625 20 6.5625 Z M 20 6.5625 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Mapco/icons/link-white.svg b/p/themes/Mapco/icons/link-white.svg new file mode 100644 index 000000000..c6baadc85 --- /dev/null +++ b/p/themes/Mapco/icons/link-white.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="17" + height="17" + viewBox="0 0 17 17" + version="1.1" + id="svg5" + sodipodi:docname="link-white.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="13.882353" + inkscape:cx="8.5" + inkscape:cy="8.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2" + transform="translate(0,-1)"> + <path + style="fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 8.5,1 C 3.816406,1 0,4.816406 0,9.5 0,14.183594 3.816406,18 8.5,18 13.183594,18 17,14.183594 17,9.5 17,4.816406 13.183594,1 8.5,1 Z M 5.480469,3.742188 C 4.609375,4.957031 3.78125,6.570312 3.558594,8.5 H 2.082031 C 2.402344,6.421875 3.691406,4.679688 5.480469,3.742188 Z m 6.035156,0 C 13.308594,4.679688 14.597656,6.421875 14.914062,8.5 H 13.4375 C 13.21875,6.570312 12.390625,4.957031 11.515625,3.742188 Z M 7.5,4.4375 V 8.5 H 5.578125 C 5.839844,6.835938 6.695312,5.4375 7.5,4.4375 Z m 2,0 c 0.804688,1 1.660156,2.398438 1.921875,4.0625 H 9.5 Z M 2.082031,10.5 h 1.472657 c 0.1875,1.828125 0.863281,3.371094 1.589843,4.566406 C 3.53125,14.09375 2.382812,12.441406 2.082031,10.5 Z m 3.488281,0 H 7.5 v 4.460938 C 6.734375,13.957031 5.820312,12.40625 5.570312,10.5 Z M 9.5,10.5 h 1.917969 C 11.160156,12.171875 10.304688,13.570312 9.5,14.5625 Z m 3.9375,0 h 1.476562 c -0.316406,2.078125 -1.605468,3.824219 -3.398437,4.757812 0.875,-1.214843 1.703125,-2.828124 1.921875,-4.757812 z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/link.svg b/p/themes/Mapco/icons/link.svg new file mode 100644 index 000000000..44ee847b0 --- /dev/null +++ b/p/themes/Mapco/icons/link.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="17" height="17" viewBox="0 0 17 17" version="1.1"> +<g id="surface2"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(32.54902%,32.54902%,32.54902%);fill-opacity:1;" d="M 8.5 0 C 3.816406 0 0 3.816406 0 8.5 C 0 13.183594 3.816406 17 8.5 17 C 13.183594 17 17 13.183594 17 8.5 C 17 3.816406 13.183594 0 8.5 0 Z M 5.480469 2.742188 C 4.609375 3.957031 3.78125 5.570312 3.558594 7.5 L 2.082031 7.5 C 2.402344 5.421875 3.691406 3.679688 5.480469 2.742188 Z M 11.515625 2.742188 C 13.308594 3.679688 14.597656 5.421875 14.914062 7.5 L 13.4375 7.5 C 13.21875 5.570312 12.390625 3.957031 11.515625 2.742188 Z M 7.5 3.4375 L 7.5 7.5 L 5.578125 7.5 C 5.839844 5.835938 6.695312 4.4375 7.5 3.4375 Z M 9.5 3.4375 C 10.304688 4.4375 11.160156 5.835938 11.421875 7.5 L 9.5 7.5 Z M 2.082031 9.5 L 3.554688 9.5 C 3.742188 11.328125 4.417969 12.871094 5.144531 14.066406 C 3.53125 13.09375 2.382812 11.441406 2.082031 9.5 Z M 5.570312 9.5 L 7.5 9.5 L 7.5 13.960938 C 6.734375 12.957031 5.820312 11.40625 5.570312 9.5 Z M 9.5 9.5 L 11.417969 9.5 C 11.160156 11.171875 10.304688 12.570312 9.5 13.5625 Z M 13.4375 9.5 L 14.914062 9.5 C 14.597656 11.578125 13.308594 13.324219 11.515625 14.257812 C 12.390625 13.042969 13.21875 11.429688 13.4375 9.5 Z M 13.4375 9.5 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Mapco/icons/magnifier.svg b/p/themes/Mapco/icons/magnifier.svg new file mode 100644 index 000000000..ae3732c69 --- /dev/null +++ b/p/themes/Mapco/icons/magnifier.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="16" viewBox="0 0 16 16" version="1.1"> +<g id="surface2"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(94.901961%,94.901961%,94.901961%);fill-opacity:1;" d="M 9.464844 0 C 5.867188 0 2.929688 2.9375 2.929688 6.535156 C 2.929688 7.972656 3.40625 9.300781 4.199219 10.382812 L 0.710938 13.867188 L 0 14.578125 L 1.421875 16 L 2.132812 15.289062 L 5.617188 11.800781 C 6.699219 12.59375 8.027344 13.070312 9.464844 13.070312 C 13.0625 13.070312 16 10.132812 16 6.535156 C 16 2.9375 13.0625 0 9.464844 0 Z M 9.464844 2.011719 C 11.976562 2.011719 13.988281 4.023438 13.988281 6.535156 C 13.988281 9.046875 11.976562 11.058594 9.464844 11.058594 C 6.953125 11.058594 4.941406 9.046875 4.941406 6.535156 C 4.941406 4.023438 6.953125 2.011719 9.464844 2.011719 Z M 9.464844 2.011719 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Mapco/icons/more.svg b/p/themes/Mapco/icons/more.svg new file mode 100644 index 000000000..6e505e71b --- /dev/null +++ b/p/themes/Mapco/icons/more.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="3" + height="15" + viewBox="0 0 3 15" + version="1.1" + id="svg5" + sodipodi:docname="more.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="16.857143" + inkscape:cx="1.5" + inkscape:cy="7" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 0,0 H 3 V 3 H 0 Z M 0,6 H 3 V 9 H 0 Z m 0,6 h 3 v 3 H 0 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/non-starred-white.svg b/p/themes/Mapco/icons/non-starred-white.svg new file mode 100644 index 000000000..9bd48c801 --- /dev/null +++ b/p/themes/Mapco/icons/non-starred-white.svg @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="18" + height="16" + viewBox="0 0 18 16" + version="1.1" + id="svg5" + sodipodi:docname="non-starred-white.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="15.733333" + inkscape:cx="8.5" + inkscape:cy="7.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg5" /> + <g + id="surface2" + transform="translate(0,-1)"> + <path + style="fill:none;stroke:#ffffff;stroke-width:0.26879001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="m 107.00018,143.49705 1.62575,-0.0138 0.49783,-1.54754 0.51657,1.54119 1.62575,-0.004 -1.30706,0.96642 0.50616,1.54542 -1.32372,-0.94419 -1.31226,0.95901 0.48845,-1.55072 z m 0,0" + transform="matrix(3.750673,0,0,3.690326,-399.91249,-522.49621)" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/non-starred.svg b/p/themes/Mapco/icons/non-starred.svg new file mode 100644 index 000000000..9d49930c0 --- /dev/null +++ b/p/themes/Mapco/icons/non-starred.svg @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="18" + height="16" + viewBox="0 0 18 16" + version="1.1" + id="svg5" + sodipodi:docname="non-starred.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="15.733333" + inkscape:cx="8.5" + inkscape:cy="7.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:none;stroke:#515151;stroke-width:0.26879001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="m 107.00018,150.49714 1.62575,-0.0138 0.49783,-1.5486 0.51657,1.54225 1.62575,-0.004 -1.30706,0.96642 0.50616,1.54542 -1.32372,-0.94419 -1.31226,0.95901 0.48845,-1.55072 z m 0,0" + transform="matrix(3.750673,0,0,3.690326,-399.91249,-548.8718)" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/read-grey.svg b/p/themes/Mapco/icons/read-grey.svg new file mode 100644 index 000000000..4857aca02 --- /dev/null +++ b/p/themes/Mapco/icons/read-grey.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="18" viewBox="0 0 16 18" version="1.1"> +<g id="surface2"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(80.784314%,80.784314%,80.784314%);fill-opacity:1;" d="M 8 0 L 0.460938 4.933594 L 0 5.234375 L 0 18 L 16 18 L 16 5.234375 Z M 8 2.417969 L 13.625 6.101562 L 8 10.601562 L 2.371094 6.101562 Z M 2 8.390625 L 8 13.1875 L 14 8.390625 L 14 15.964844 L 2 15.964844 Z M 2 8.390625 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Mapco/icons/read-white.svg b/p/themes/Mapco/icons/read-white.svg new file mode 100644 index 000000000..578facdc7 --- /dev/null +++ b/p/themes/Mapco/icons/read-white.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="18" + viewBox="0 0 16 18" + version="1.1" + id="svg5" + sodipodi:docname="read-white.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="13.882353" + inkscape:cx="8" + inkscape:cy="8.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 8,0 0.460938,4.933594 0,5.234375 V 18 H 16 V 5.234375 Z m 0,2.417969 5.628906,3.683593 -5.628906,4.5 -5.628906,-4.5 z M 2,8.390625 8,13.1875 14,8.390625 v 7.574219 H 2 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/read.svg b/p/themes/Mapco/icons/read.svg new file mode 100644 index 000000000..d583cce03 --- /dev/null +++ b/p/themes/Mapco/icons/read.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="18" + viewBox="0 0 16 18" + version="1.1" + id="svg5" + sodipodi:docname="read.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="13.882353" + inkscape:cx="8" + inkscape:cy="8.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 8,0 0.460938,4.933594 0,5.234375 V 18 H 16 V 5.234375 Z m 0,2.417969 5.628906,3.683593 -5.628906,4.5 -5.628906,-4.5 z M 2,8.390625 8,13.1875 14,8.390625 v 7.574219 H 2 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/refresh.svg b/p/themes/Mapco/icons/refresh.svg new file mode 100644 index 000000000..f23fbf4a2 --- /dev/null +++ b/p/themes/Mapco/icons/refresh.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="17" + height="17" + viewBox="0 0 17 17" + version="1.1" + id="svg5" + sodipodi:docname="refresh.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="14.75" + inkscape:cx="8" + inkscape:cy="8" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg5" /> + <g + id="surface3"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 15,0 V 3.042969 C 12.386719,-0.0820312 7.859375,-0.945312 4.25,1.132812 0.1875,3.480469 -1.207031,8.679688 1.140625,12.746094 3.488281,16.8125 8.683594,18.207031 12.75,15.859375 c 0.140625,-0.08594 0.28125,-0.179687 0.417969,-0.273437 L 12.171875,13.859375 C 12.035156,13.953125 11.894531,14.042969 11.75,14.125 8.640625,15.921875 4.667969,14.855469 2.871094,11.746094 1.078125,8.636719 2.140625,4.660156 5.25,2.863281 8.191406,1.167969 11.941406,2.019531 13.859375,4.820312 L 14.035156,5 H 10 v 2 h 7 V 0 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/rss-white.svg b/p/themes/Mapco/icons/rss-white.svg new file mode 100644 index 000000000..b7fbf9987 --- /dev/null +++ b/p/themes/Mapco/icons/rss-white.svg @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="17" + height="17" + viewBox="0 0 17 17" + version="1.1" + id="svg5" + sodipodi:docname="rss-white.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="8" + inkscape:cx="-5.9380772" + inkscape:cy="10.889349" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg5" /> + <g + id="surface2" + transform="translate(0,-1)"> + <path + style="fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 4.246094,15.433594 c 0,1.101562 -0.898438,2 -2,2 -1.105469,0 -2,-0.898438 -2,-2 0,-1.105469 0.894531,-2 2,-2 1.101562,0 2,0.894531 2,2 m 5,2 c 0,-4.984375 -4.019532,-9 -9,-9 v -2 c 6.0625,0 11,4.933594 11,11 z m 5.5,0 c 0,-8.019532 -6.480469,-14.5 -14.5,-14.5 v -2 c 9.097656,0 16.5,7.398437 16.5,16.5 z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/rss.svg b/p/themes/Mapco/icons/rss.svg new file mode 100644 index 000000000..7044bbaa4 --- /dev/null +++ b/p/themes/Mapco/icons/rss.svg @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="17" + height="17" + viewBox="0 0 17 17" + version="1.1" + id="svg5" + sodipodi:docname="rss.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="14.75" + inkscape:cx="8" + inkscape:cy="8" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2" + transform="translate(0,-1)"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 4.246094,15.433594 c 0,1.101562 -0.898438,2 -2,2 -1.105469,0 -2,-0.898438 -2,-2 0,-1.105469 0.894531,-2 2,-2 1.101562,0 2,0.894531 2,2 m 5,2 c 0,-4.984375 -4.019532,-9 -9,-9 v -2 c 6.0625,0 11,4.933594 11,11 z m 5.5,0 c 0,-8.019532 -6.480469,-14.5 -14.5,-14.5 v -2 c 9.097656,0 16.5,7.398437 16.5,16.5 z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/starred-white.svg b/p/themes/Mapco/icons/starred-white.svg new file mode 100644 index 000000000..896dd1eeb --- /dev/null +++ b/p/themes/Mapco/icons/starred-white.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="15" + viewBox="0 0 16 15" + version="1.1" + id="svg5" + sodipodi:docname="starred-white.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="16.857143" + inkscape:cx="7.5" + inkscape:cy="7" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 0.410156,6.054688 6.507812,6.003906 8.375,0.292969 10.3125,5.980469 16.410156,5.964844 11.507812,9.53125 13.40625,15.234375 8.441406,11.75 3.519531,15.289062 5.351562,9.566406 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/starred.svg b/p/themes/Mapco/icons/starred.svg new file mode 100644 index 000000000..3b0bf8cb8 --- /dev/null +++ b/p/themes/Mapco/icons/starred.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="15" viewBox="0 0 16 15" version="1.1"> +<g id="surface2"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(32.54902%,32.54902%,32.54902%);fill-opacity:1;" d="M 0 5.765625 L 6.097656 5.710938 L 7.964844 0 L 9.902344 5.691406 L 16 5.671875 L 11.097656 9.242188 L 13 14.941406 L 8.035156 11.457031 L 3.109375 15 L 4.945312 9.277344 Z M 0 5.765625 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Mapco/icons/tick-color.svg b/p/themes/Mapco/icons/tick-color.svg new file mode 100644 index 000000000..302541e80 --- /dev/null +++ b/p/themes/Mapco/icons/tick-color.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" viewBox="0 0 48 48" version="1.1"> +<g id="surface3"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(20%,40%,80%);fill-opacity:1;" d="M 24 0 C 10.746094 0 0 10.746094 0 24 C 0 37.253906 10.746094 48 24 48 C 37.253906 48 48 37.253906 48 24 C 48 10.746094 37.253906 0 24 0 Z M 36.96875 14.488281 C 37.585938 14.472656 38.148438 14.835938 38.386719 15.402344 C 38.628906 15.96875 38.5 16.625 38.0625 17.054688 L 22.058594 33.058594 C 21.472656 33.644531 20.523438 33.644531 19.941406 33.058594 L 12.941406 26.0625 C 12.386719 25.472656 12.402344 24.550781 12.972656 23.976562 C 13.542969 23.402344 14.464844 23.386719 15.058594 23.9375 L 21.003906 29.878906 L 35.945312 14.9375 C 36.214844 14.664062 36.582031 14.5 36.96875 14.488281 Z M 36.96875 14.488281 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Mapco/icons/tick-white.svg b/p/themes/Mapco/icons/tick-white.svg new file mode 100644 index 000000000..0bcc26f47 --- /dev/null +++ b/p/themes/Mapco/icons/tick-white.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="48" viewBox="0 0 48 48" version="1.1"> +<g id="surface3"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 24 0 C 10.746094 0 0 10.746094 0 24 C 0 37.253906 10.746094 48 24 48 C 37.253906 48 48 37.253906 48 24 C 48 10.746094 37.253906 0 24 0 Z M 36.96875 14.488281 C 37.585938 14.472656 38.148438 14.835938 38.386719 15.402344 C 38.628906 15.96875 38.5 16.625 38.0625 17.054688 L 22.058594 33.058594 C 21.472656 33.644531 20.523438 33.644531 19.941406 33.058594 L 12.941406 26.0625 C 12.386719 25.472656 12.402344 24.550781 12.972656 23.976562 C 13.542969 23.402344 14.464844 23.386719 15.058594 23.9375 L 21.003906 29.878906 L 35.945312 14.9375 C 36.214844 14.664062 36.582031 14.5 36.96875 14.488281 Z M 36.96875 14.488281 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Mapco/icons/tick.svg b/p/themes/Mapco/icons/tick.svg new file mode 100644 index 000000000..9c436e7a0 --- /dev/null +++ b/p/themes/Mapco/icons/tick.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="48" height="47" viewBox="0 0 48 47" version="1.1"> +<g id="surface3"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(18.823529%,19.215686%,21.176471%);fill-opacity:1;" d="M 24 0 C 10.746094 0 0 10.746094 0 24 C 0 37.253906 10.746094 48 24 48 C 37.253906 48 48 37.253906 48 24 C 48 10.746094 37.253906 0 24 0 Z M 36.96875 14.488281 C 37.585938 14.472656 38.148438 14.835938 38.386719 15.402344 C 38.628906 15.96875 38.5 16.625 38.0625 17.054688 L 22.058594 33.058594 C 21.472656 33.644531 20.523438 33.644531 19.941406 33.058594 L 12.941406 26.0625 C 12.386719 25.472656 12.402344 24.550781 12.972656 23.976562 C 13.542969 23.402344 14.464844 23.386719 15.058594 23.9375 L 21.003906 29.878906 L 35.945312 14.9375 C 36.214844 14.664062 36.582031 14.5 36.96875 14.488281 Z M 36.96875 14.488281 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Mapco/icons/unread-grey.svg b/p/themes/Mapco/icons/unread-grey.svg new file mode 100644 index 000000000..1981cf92c --- /dev/null +++ b/p/themes/Mapco/icons/unread-grey.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="13" + viewBox="0 0 16 13" + version="1.1" + id="svg5" + sodipodi:docname="unread.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="19.666667" + inkscape:cx="8" + inkscape:cy="6" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 0,0 V 13 H 16 V 0 Z m 3.257812,2 h 9.484376 L 8,5.726562 Z M 2,3.554688 8,8.269531 14,3.554688 V 11 H 2 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/unread-white.svg b/p/themes/Mapco/icons/unread-white.svg new file mode 100644 index 000000000..6623924ab --- /dev/null +++ b/p/themes/Mapco/icons/unread-white.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="13" viewBox="0 0 16 13" version="1.1"> +<g id="surface2"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(94.901961%,94.901961%,94.901961%);fill-opacity:1;" d="M 0 0 L 0 13 L 16 13 L 16 0 Z M 3.257812 2 L 12.742188 2 L 8 5.726562 Z M 2 3.558594 L 8 8.273438 L 14 3.558594 L 14 11 L 2 11 Z M 2 3.558594 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Mapco/icons/unread.svg b/p/themes/Mapco/icons/unread.svg new file mode 100644 index 000000000..5c6c3ac8e --- /dev/null +++ b/p/themes/Mapco/icons/unread.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="13" + viewBox="0 0 16 13" + version="1.1" + id="svg5" + sodipodi:docname="unread-main-color.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="19.666667" + inkscape:cx="8" + inkscape:cy="6" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#3366cc;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 0,0 V 13 H 16 V 0 Z m 3.257812,2 h 9.484376 L 8,5.726562 Z M 2,3.554688 8,8.273438 14,3.554688 V 11 H 2 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/up-white.svg b/p/themes/Mapco/icons/up-white.svg new file mode 100644 index 000000000..e19d1e1d9 --- /dev/null +++ b/p/themes/Mapco/icons/up-white.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="10" + viewBox="0 0 16 10" + version="1.1" + id="svg5" + sodipodi:docname="up-white.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="26.222222" + inkscape:cx="7.5" + inkscape:cy="4.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 14.386719,9.46875 15.800781,8.054688 8.09375,0.347656 0.386719,8.054688 1.800781,9.46875 8.09375,3.175781 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/up.svg b/p/themes/Mapco/icons/up.svg new file mode 100644 index 000000000..306b076e9 --- /dev/null +++ b/p/themes/Mapco/icons/up.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="16" + height="10" + viewBox="0 0 16 10" + version="1.1" + id="svg5" + sodipodi:docname="up.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="1920" + inkscape:window-height="1026" + id="namedview7" + showgrid="false" + inkscape:zoom="26.222222" + inkscape:cx="7.5" + inkscape:cy="4.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="1" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 14.386719,9.46875 15.800781,8.054688 8.09375,0.347656 0.386719,8.054688 1.800781,9.46875 8.09375,3.175781 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/view-global-white.svg b/p/themes/Mapco/icons/view-global-white.svg new file mode 100644 index 000000000..950267f6a --- /dev/null +++ b/p/themes/Mapco/icons/view-global-white.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="15" height="15" viewBox="0 0 15 15" version="1.1"> +<g id="surface2"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(94.901961%,94.901961%,94.901961%);fill-opacity:1;" d="M 6 12 L 9 12 L 9 15 L 6 15 Z M 12 12 L 15 12 L 15 15 L 12 15 Z M 0 12 L 3 12 L 3 15 L 0 15 Z M 6 6 L 9 6 L 9 9 L 6 9 Z M 12 6 L 15 6 L 15 9 L 12 9 Z M 0 6 L 3 6 L 3 9 L 0 9 Z M 6 0 L 9 0 L 9 3 L 6 3 Z M 12 0 L 15 0 L 15 3 L 12 3 Z M 0 0 L 3 0 L 3 3 L 0 3 Z M 0 0 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Mapco/icons/view-global.svg b/p/themes/Mapco/icons/view-global.svg new file mode 100644 index 000000000..08632a190 --- /dev/null +++ b/p/themes/Mapco/icons/view-global.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="15" + height="15" + viewBox="0 0 15 15" + version="1.1" + id="svg5" + sodipodi:docname="view-global.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="16.857143" + inkscape:cx="7.5" + inkscape:cy="7" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 6,12 h 3 v 3 H 6 Z m 6,0 h 3 v 3 H 12 Z M 0,12 h 3 v 3 H 0 Z M 6,6 H 9 V 9 H 6 Z m 6,0 h 3 V 9 H 12 Z M 0,6 H 3 V 9 H 0 Z M 6,0 H 9 V 3 H 6 Z m 6,0 h 3 V 3 H 12 Z M 0,0 H 3 V 3 H 0 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/view-list-white.svg b/p/themes/Mapco/icons/view-list-white.svg new file mode 100644 index 000000000..c76fc298b --- /dev/null +++ b/p/themes/Mapco/icons/view-list-white.svg @@ -0,0 +1,5 @@ +<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="15" height="14" viewBox="0 0 15 14" version="1.1"> +<g id="surface2"> +<path style=" stroke:none;fill-rule:nonzero;fill:rgb(94.901961%,94.901961%,94.901961%);fill-opacity:1;" d="M 0 12 L 15 12 L 15 14 L 0 14 Z M 0 6 L 15 6 L 15 8 L 0 8 Z M 0 0 L 15 0 L 15 2 L 0 2 Z M 0 0 "/> +</g> +</svg>
\ No newline at end of file diff --git a/p/themes/Mapco/icons/view-list.svg b/p/themes/Mapco/icons/view-list.svg new file mode 100644 index 000000000..bcea01055 --- /dev/null +++ b/p/themes/Mapco/icons/view-list.svg @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="15" + height="14" + viewBox="0 0 15 14" + version="1.1" + id="svg5" + sodipodi:docname="view-list.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="16.857143" + inkscape:cx="7.5" + inkscape:cy="7" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2" + transform="translate(0,-1)"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="m 0,13 h 15 v 2 H 0 Z M 0,7 H 15 V 9 H 0 Z M 0,1 H 15 V 3 H 0 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/view-reader-white.svg b/p/themes/Mapco/icons/view-reader-white.svg new file mode 100644 index 000000000..70175c623 --- /dev/null +++ b/p/themes/Mapco/icons/view-reader-white.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="14" + height="16" + viewBox="0 0 14 16" + version="1.1" + id="svg5" + sodipodi:docname="view-reader-white.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="15.733333" + inkscape:cx="7" + inkscape:cy="7.5" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#f0f0f0;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 3.5,10 H 8 v 1.5 H 3.5 Z m 0,-3 h 7 v 1.5 h -7 z m 0,-3 h 7 v 1.5 h -7 z M 0,16 V 0 H 14 V 16 Z M 2,14 H 12 V 2 H 2 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/icons/view-reader.svg b/p/themes/Mapco/icons/view-reader.svg new file mode 100644 index 000000000..7471037d9 --- /dev/null +++ b/p/themes/Mapco/icons/view-reader.svg @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="14" + height="16" + viewBox="0 0 14 16" + version="1.1" + id="svg5" + sodipodi:docname="view-reader.svg" + inkscape:version="0.92.3 (unknown)"> + <metadata + id="metadata11"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + <dc:title></dc:title> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs9" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="841" + inkscape:window-height="480" + id="namedview7" + showgrid="false" + inkscape:zoom="8" + inkscape:cx="-1.7138348" + inkscape:cy="3.5263348" + inkscape:window-x="0" + inkscape:window-y="27" + inkscape:window-maximized="0" + inkscape:current-layer="svg5" /> + <g + id="surface2"> + <path + style="fill:#515151;fill-opacity:1;fill-rule:nonzero;stroke:none" + d="M 3.5,10 H 8 v 1.5 H 3.5 Z m 0,-3 h 7 v 1.5 h -7 z m 0,-3 h 7 v 1.5 h -7 z M 0,16 V 0 H 14 V 16 Z M 2,14 H 12 V 2 H 2 Z m 0,0" + id="path2" + inkscape:connector-curvature="0" /> + </g> +</svg> diff --git a/p/themes/Mapco/loader.gif b/p/themes/Mapco/loader.gif Binary files differnew file mode 100644 index 000000000..ce36565b3 --- /dev/null +++ b/p/themes/Mapco/loader.gif diff --git a/p/themes/Mapco/mapco.css b/p/themes/Mapco/mapco.css new file mode 100644 index 000000000..90994163e --- /dev/null +++ b/p/themes/Mapco/mapco.css @@ -0,0 +1,1306 @@ +@font-face { + font-family: "lato"; + font-style: normal; + font-stretch: normal; + font-weight: 400; + src: local("Lato"), url("../fonts/LatoLatin-Regular.woff") format("woff"); } +@font-face { + font-family: "lato"; + font-style: italic; + font-stretch: normal; + font-weight: 400; + src: local("Lato"), url("../fonts/LatoLatin-Italic.woff") format("woff"); } +@font-face { + font-family: "lato"; + font-style: normal; + font-stretch: normal; + font-weight: 700; + src: local("Lato"), url("../fonts/LatoLatin-Bold.woff") format("woff"); } +@font-face { + font-family: "lato"; + font-style: italic; + font-stretch: normal; + font-weight: 700; + src: local("Lato"), url("../fonts/LatoLatin-BoldItalic.woff") format("woff"); } +@font-face { + font-family: "spectral"; + font-style: normal; + font-stretch: normal; + font-weight: 400; + src: local("Spectral"), url("../fonts/Spectral-Regular.woff") format("woff"); } +@font-face { + font-family: "spectral"; + font-style: italic; + font-stretch: normal; + font-weight: 400; + src: local("Spectral"), url("../fonts/Spectral-Italic.woff") format("woff"); } +@font-face { + font-family: "spectral"; + font-style: normal; + font-stretch: normal; + font-weight: 700; + src: local("Spectral"), url("../fonts/Spectral-Bold.woff") format("woff"); } +@font-face { + font-family: "spectral"; + font-style: italic; + font-stretch: normal; + font-weight: 700; + src: local("Spectral"), url("../fonts/Spectral-BoldItalic.woff") format("woff"); } +/* FUNCTIONS */ +/* btns */ +.btn { + display: inline-block; + min-height: 38px; + min-width: 15px; + line-height: 25px; + margin: 0; + padding: 0.5rem 1.5rem; + font-size: 1rem; + vertical-align: middle; + cursor: pointer; + overflow: hidden; + background: #f9fafb; + border-radius: 5px; + border: none; + color: #5b6871; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -o-transition: all 0.15s ease-in-out; + -ms-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; } + .btn.btn-important { + background: #3366cc; + color: #fff; } + .btn.btn-important:hover, .btn.btn-important:active { + background: #2255cc; } + .btn.btn-attention { + background: #f5633e; + color: #fff; } + .btn.btn-attention:hover, .btn.btn-attention:active { + background: #73341f; } + .btn:hover { + text-decoration: none; } + +a.btn { + min-height: 25px; + line-height: 25px; } + +/*=== Forms */ +legend { + display: inline-block; + width: auto; + margin: 2rem 0 1rem 0; + padding: 0; + font-size: 1rem; + clear: both; + text-transform: uppercase; + letter-spacing: 1px; + font-weight: 700; } + +label { + min-height: 25px; + padding: 5px 0; + cursor: pointer; + color: #5b6871; } + +textarea { + width: 360px; + height: 100px; } + +input, select, textarea, button { + font-family: "lato", "Helvetica", "Arial", sans-serif; + min-height: 25px; + padding: 5px 10px; + line-height: 25px; + vertical-align: middle; + background: #fff; + border: 1px solid #eff0f2; + font-size: 1rem; + color: #5b6871; + border-radius: 2px; } + +option { + padding: 0 .5em; } + +input:focus, select:focus, textarea:focus { + color: #303136; + border-color: #3366cc; } + +input:invalid, select:invalid { + color: #f5633e; + border-color: #f5633e; + box-shadow: none; } + +input:disabled, select:disabled { + background: #eff0f2; } + +input.extend { + transition: width 200ms linear; + -moz-transition: width 200ms linear; + -webkit-transition: width 200ms linear; + -o-transition: width 200ms linear; + -ms-transition: width 200ms linear; } + +.form-group { + padding: 5px; + border-radius: 3px; } + .form-group::after { + content: ""; + display: block; + clear: both; } + .form-group .group-name { + padding: 10px 0; + text-align: right; } + .form-group .group-controls { + min-height: 25px; + padding: 5px 0; } + .form-group .group-controls .control { + line-height: 2.0em; } + .form-group table { + margin: 10px 0 0 220px; } + .form-group.form-actions { + margin: 15px 0 25px; + padding: 5px 0; } + .form-group.form-actions .btn { + margin: 0 0.5rem 0 0; } + +/*=== Tables */ +table { + border-collapse: collapse; } + +tr, th, td { + padding: 0.5em; + border: 1px solid #d5d8db; } + +th { + background: #f9fafb; } + +form td, +form th { + font-weight: normal; + text-align: center; } + +/*=== COMPONENTS */ +/*===============*/ +/*=== Forms */ +/*=== Horizontal-list */ +.horizontal-list { + margin: 0; + padding: 0.1rem 0; } + .horizontal-list .item { + vertical-align: middle; } + .horizontal-list .item:first-child { + padding-left: 0.5rem; } + +/*=== Dropdown */ +.dropdown-menu { + background: #f9fafb; + margin: 0; + font-size: 1rem; + text-align: left; + padding: 0.5rem 0 1rem 0; + border: none; + border-radius: 3px; + -webkit-box-shadow: 0px 6px 8px 0px rgba(0, 0, 0, 0.35); + -moz-box-shadow: 0px 6px 8px 0px rgba(0, 0, 0, 0.35); + box-shadow: 0px 6px 8px 0px rgba(0, 0, 0, 0.35); } + .dropdown-menu::after { + content: ""; + position: absolute; + top: -4px; + right: 13px; + width: 10px; + height: 10px; + z-index: -10; + transform: rotate(45deg); + -moz-transform: rotate(45deg); + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + background: white; } + .dropdown-menu .dropdown-header { + margin: 1.75rem 0 0.5rem 2rem; + font-weight: bold; + text-align: left; + color: #5b6871; + text-transform: uppercase; + letter-spacing: 1px; } + .dropdown-menu .item { + -webkit-transition: all 0.075s ease-in-out; + -moz-transition: all 0.075s ease-in-out; + -o-transition: all 0.075s ease-in-out; + -ms-transition: all 0.075s ease-in-out; + transition: all 0.075s ease-in-out; } + .dropdown-menu .item a, .dropdown-menu .item span, .dropdown-menu .item .as-link { + padding: 0 2rem; + line-height: 2.5em; + font-size: 1rem; + color: #303136; } + .dropdown-menu .item:hover { + background: #3366cc; + color: #fff; } + .dropdown-menu .item:hover a, .dropdown-menu .item:hover button { + text-decoration: none; + color: #fff; } + .dropdown-menu .item[aria-checked="true"] a::before { + font-weight: bold; + margin: 0 0 0 -14px; } + .dropdown-menu .input select, .dropdown-menu .input input { + margin: 0 auto 5px; + padding: 2px 5px; + border-radius: 3px; } + .dropdown-menu .separator { + margin: 0.75rem 0; + border-bottom: 1px solid #eff0f2; } + +.tree .tree-folder .tree-folder-items .dropdown-menu .item, +.tree .tree-folder .tree-folder-items .dropdown-menu .item { + padding: 0; } + .tree .tree-folder .tree-folder-items .dropdown-menu .item a, + .tree .tree-folder .tree-folder-items .dropdown-menu .item button, + .tree .tree-folder .tree-folder-items .dropdown-menu .item a, + .tree .tree-folder .tree-folder-items .dropdown-menu .item button { + color: #303136; } + .tree .tree-folder .tree-folder-items .dropdown-menu .item a:hover, + .tree .tree-folder .tree-folder-items .dropdown-menu .item button:hover, + .tree .tree-folder .tree-folder-items .dropdown-menu .item a:hover, + .tree .tree-folder .tree-folder-items .dropdown-menu .item button:hover { + color: #fff; } + .tree .tree-folder .tree-folder-items .dropdown-menu .item:hover, + .tree .tree-folder .tree-folder-items .dropdown-menu .item:hover { + background: #3366cc; } + +/*=== Alerts */ +.alert { + margin: 1rem 0; + padding: 1rem; + font-size: 1rem; + background: #f9fafb; + border: 1px solid #c5ced3; + border-radius: 3px; + color: #5b6871; + text-shadow: 0 0 1px #eff0f2; } + +.alert-head { + font-size: 1.15em; } + +.alert > a { + text-decoration: underline; + color: inherit; } + +.alert-warn { + background: #fdfde0; + border: 1px solid #73762f33; + color: #73762f; } + +.alert-success { + background: #cffde7; + border: 1px solid #0c754033; + color: #0c7540; } + +.alert-error { + background: #fde0d8; + border: 1px solid #73341f33; + color: #73341f; } + +/*=== Pagination */ +.pagination { + text-align: center; + font-size: 0.8em; + background: #eff0f2; + color: #303136; } + .pagination .item.pager-current { + font-weight: bold; + font-size: 1.5em; + background: #303136; + color: #eff0f2; } + .pagination .item a { + display: block; + font-style: italic; + line-height: 3em; + text-decoration: none; + color: #303136; } + .pagination .item a:hover { + background: #303136; + color: #eff0f2; } + .pagination .loading, + .pagination a:hover.loading { + font-size: 0; + background: url("loader.gif") center center no-repeat #34495e; } + +.content .pagination { + margin: 0; + padding: 0; } + +/*=== Boxes */ +.box { + border: none; + border-radius: 3px; + background: #fff; + -webkit-box-shadow: 0px 2px 2px 0px rgba(0, 0, 0, 0.25); + -moz-box-shadow: 0px 2px 2px 0px rgba(0, 0, 0, 0.25); + box-shadow: 0px 2px 2px 0px rgba(0, 0, 0, 0.25); } + .box .box-title { + margin: 0; + padding: 5px 10px; + background: #eff0f2; + color: #303136; + border-radius: 2px 2px 0 0; } + .box .box-title form input { + width: 85%; } + .box .box-title form .dropdown { + float: right; } + .box .box-title form .dropdown a.dropdown-toggle { + padding: 0; + background-image: url(icons/more.svg); + background-repeat: no-repeat; + background-position: right 8px; + border-radius: 0; } + .box .box-title form .dropdown a.dropdown-toggle img { + display: none; } + .box .box-content .item { + padding: 0.5rem 0.75rem; + font-size: 1rem; + color: #303136; + line-height: 1.7em; + border-bottom: 1px solid #eff0f2; } + .box .box-content .item img { + margin-right: 0.75rem; } + .box .box-content .item .configure { + visibility: hidden; + width: 1.75rem; + height: 1.75rem; + display: block; + border-radius: 2px; + float: left; + margin-right: 0.5rem; + background: url("icons/cog.svg") no-repeat 4px 4px; } + .box .box-content .item .configure .icon { + vertical-align: middle; + border-radius: 3px; + display: none; } + .box .box-content .item .configure:hover { + background: url("icons/cog-white.svg") no-repeat 4px 4px #3366cc; } + .box .box-content .item:hover .configure { + visibility: visible; } + .box .box-content .item:last-child { + border-bottom: none; } + +/*=== "Load more" part */ +#bigMarkAsRead { + text-align: center; + text-decoration: none; + background: #effcfd; + color: #3366cc; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -o-transition: all 0.15s ease-in-out; + -ms-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; } + #bigMarkAsRead:hover { + background: #3366cc; + color: #fff; } + #bigMarkAsRead:hover .bigTick { + background: url(icons/tick-white.svg) center no-repeat; } + #bigMarkAsRead .bigTick { + margin: 0.5rem 0; + display: inline-block; + text-indent: -9999px; + background: url(icons/tick-color.svg) center no-repeat; + height: 64px; + width: 64px; + white-space: nowrap; } + +.formLogin { + background: #303136; } + .formLogin .header .configure { + padding-right: 1rem; } + .formLogin .header .configure img { + margin-right: 0.5rem; } + .formLogin .header .configure a.signin { + color: #fff; } + .formLogin h1 { + color: #fff; } + .formLogin form#crypto-form div { + margin-bottom: 1rem; } + .formLogin form#crypto-form div label { + font-size: 1rem; + color: #c5ced3; } + .formLogin form#crypto-form div input { + background: #1d1e22; } + .formLogin form#crypto-form div input:focus { + background: #f9fafb; + color: #303136; } + +/*=== DIVERS */ +/*===========*/ +.aside.aside_feed .nav-form input, +.aside.aside_feed .nav-form select { + width: 140px; } + +.aside.aside_feed .nav-form .dropdown .dropdown-menu { + right: -20px; } + +.aside.aside_feed .nav-form .dropdown .dropdown-menu::after { + right: 33px; } + +/*=== Tree */ +.tree { + margin: 10px 0; } + .tree#sidebar { + scrollbar-color: rgba(255, 255, 0, 0.1) rgba(0, 0, 0, 0.05); + scrollbar-color: #FFFFFF33 #FFFFFF22; } + .tree .tree-folder { + border-bottom: 1px solid #3f3f3f; } + .tree .tree-folder .tree-folder-title { + position: relative; + background: #303136; + font-size: 0.85rem; + letter-spacing: 1px; + padding: 12px 16px; + font-weight: 700; + text-transform: uppercase; } + .tree .tree-folder .tree-folder-title .title { + background: inherit; + color: #FFFFFF; } + .tree .tree-folder .tree-folder-title .title:hover { + text-decoration: none; } + .tree .tree-folder.active .tree-folder-title { + background: #303136; + font-weight: bold; } + .tree .tree-folder .tree-folder-items { + background: #26272a; } + .tree .tree-folder .tree-folder-items .item { + padding: 0 1rem; + line-height: 2.5rem; + font-size: 1rem; + font-weight: 400; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -o-transition: all 0.15s ease-in-out; + -ms-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; } + .tree .tree-folder .tree-folder-items .item.active { + background: #3366cc; } + .tree .tree-folder .tree-folder-items .item.active .dropdown li a { + color: #303136; } + .tree .tree-folder .tree-folder-items .item.active .dropdown li a:hover { + color: #FFFFFF; } + .tree .tree-folder .tree-folder-items .item.active a { + color: #FFFFFF; } + .tree .tree-folder .tree-folder-items .item:hover { + background: #17181a; } + .tree .tree-folder .tree-folder-items .item a { + text-decoration: none; + color: #FFFFFF; } + .tree .tree-folder .tree-folder-items .feed .item-title:not([data-unread="0"])::before { + content: attr(data-unread); + background: rgba(0, 0, 0, 0.25); + font-size: 0.75rem; + display: block; + float: left; + padding: 3px 4px; + text-align: center; + border-radius: 12px; + margin: 11px 6px 0 4px; + line-height: 0.75rem; } + +/*=== Buttons */ +.stick { + vertical-align: middle; + font-size: 0; } + .stick input, .stick .btn { + border-radius: 0; } + .stick .btn:first-child, + .stick input:first-child { + border-radius: 5px 0 0 5px; } + .stick .btn:last-child, .stick input:last-child, .stick .btn + .dropdown > .btn { + border-radius: 0 5px 5px 0; } + .stick .btn + .btn, + .stick .btn + input, + .stick .btn + .dropdown > .btn, + .stick input + .btn, + .stick input + input, + .stick input + .dropdown > .btn, + .stick .dropdown + .btn, + .stick .dropdown + input, + .stick .dropdown + .dropdown > .btn { + border-left: 1px solid #d5d8db; } + +.aside { + background: #303136; } + .aside.aside_feed { + padding: 10px 0; + text-align: center; + background: #303136; } + .aside.aside_feed .tree { + margin: 10px 0 50px; } + +/* Sidebar des pages de configuration */ +/*=== Navigation */ +.nav-list .nav-header, +.nav-list .item { + height: 2.5em; + line-height: 2.5em; + font-size: 1rem; } +.nav-list .item { + background: #303136; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -o-transition: all 0.15s ease-in-out; + -ms-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; } + .nav-list .item a { + padding: 0 1rem; + color: #FFFFFF; } + .nav-list .item .error a { + color: #f5633e; } + .nav-list .item:hover { + background: #17181a; + color: #FFFFFF; } + .nav-list .item:hover .error a { + color: #FFFFFF; + background: #3366cc; } + .nav-list .item:hover .empty a { + color: #FFFFFF; + background: #f4f762; } + .nav-list .item:hover a { + color: #FFFFFF; + text-decoration: none; } + .nav-list .item.active { + background: #3366cc; + color: #fff; } + .nav-list .item.active .error a { + color: #fff; + background: #3366cc; } + .nav-list .item.active .empty a { + color: #fff; + background: #f4f762; } + .nav-list .item.active a { + color: #fff; + text-decoration: none; } +.nav-list.empty a { + color: #f4f762; } +.nav-list .disable { + text-align: center; + background: #f9fafb; + color: #a6a7ae; } +.nav-list .nav-header { + padding: 0 10px; + font-weight: bold; + color: #5b6871; + text-transform: uppercase; + letter-spacing: 1px; + margin-top: 1rem; } +.nav-list .nav-form { + padding: 3px; + text-align: center; } +.nav-list .nav-head { + margin: 0; + text-align: right; + color: #fff; } + .nav-list .nav-head a { + color: #fff; } + .nav-list .nav-head .item { + padding: 5px 10px; + font-size: 0.9rem; + line-height: 1.5rem; } + +/*=== Aside main page (categories) */ +.aside_feed .tree-folder-title > .title:not([data-unread="0"])::after { + position: absolute; + right: 0; + line-height: 1.5rem; + background: rgba(0, 0, 0, 0.25); + border-radius: 12px; + padding: 0 0.75rem; + margin: -0.5rem 1rem 0 0; + text-align: center; } + +.feed.item.empty.active { + background: #5b6871; } + +.feed.item.error.active { + background: #5b6871; } + +.feed.item.empty, +.feed.item.empty > a { + color: #5b6871; } + +.feed.item.error, +.feed.item.error > a { + color: #5b6871; } + +.feed.item.empty.active, +.feed.item.error.active, +.feed.item.empty.active > a, +.feed.item.error.active > a { + color: #fff; } + +.aside_feed .tree-folder-items .dropdown-menu::after { + left: 2px; } + +.aside_feed .tree-folder-items .item .dropdown-target:target ~ .dropdown-toggle > .icon, +.aside_feed .tree-folder-items .item:hover .dropdown-toggle > .icon, +.aside_feed .tree-folder-items .item.active .dropdown-toggle > .icon { + border-radius: 3px; } + +.aside_feed .stick #btn-importExport { + border-left-color: #303136; } + +/*=== STRUCTURE */ +/*===============*/ +/*=== Header */ +.header { + background: #303136; + padding: 0.5rem 1.35rem; + display: block; + table-layout: none; + width: auto; } + .header .item { + vertical-align: middle; } + .header .item.title { + font-weight: 400; + width: 280px; } + .header .item.title h1 a { + text-decoration: none; + color: #FFFFFF; + font-size: 1rem; + text-transform: uppercase; + letter-spacing: 1px; } + .header .item.title h1 a img { + margin-right: 0.5rem; } + .header .item.search input { + width: 230px; + border-radius: 2px 0 0 2px; + background-color: #26272a; + color: #FFFFFF; + border: none; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -o-transition: all 0.15s ease-in-out; + -ms-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; } + .header .item.search input:hover { + background-color: #17181a; } + .header .item.search input:focus { + width: 350px; + background-color: #fff; + color: #5b6871; } + .header .item.search .btn { + border-radius: 0 2px 2px 0; + background-color: #3366cc; + background-position: center; + background-repeat: no-repeat; + background-image: url(icons/magnifier.svg); + border-left-width: 0; + width: 3rem; + min-height: 35px; } + .header .item.search .btn img { + display: none; } + .header .item.search .btn:hover { + background-color: #2255cc; } + .header .item.configure { + width: 2rem; + position: absolute; + right: 1rem; + top: 1.25rem; + text-align: center; } + .header .item.configure .btn { + background-color: transparent; + background-position: center; + background-repeat: no-repeat; + background-image: url(icons/cog-white.svg); + padding: 0 0.5rem; } + .header .item.configure .btn img { + display: none; } + +/*=== Body */ +#global { + height: calc(100% - 85px); } + +/*=== Prompt (centered) */ +.prompt { + text-align: center; } + +.prompt label { + text-align: left; } + +.prompt form { + margin: 10px auto 20px auto; + width: 200px; } + +.prompt input { + margin: 5px auto; + width: 100%; } + +.prompt p { + margin: 20px 0; } + +/*=== New article notification */ +#new-article { + text-align: center; + font-size: 1rem; + background: #3366cc; } + +#new-article:hover { + background: #2255cc; } + +#new-article > a { + line-height: 3em; + font-weight: bold; + color: #fff; } + +#new-article > a:hover { + text-decoration: none; } + +/*=== Day indication */ +.day { + padding: 1rem 0 0 1.25rem; + font-weight: 700; + line-height: 3em; + letter-spacing: 1px; + text-transform: uppercase; + font-size: 0.875rem; + color: #5b6871; } + .day .name { + padding: 0 1rem 0 1rem; + font-size: 0.875rem; + color: #303136; + position: relative; + left: 0; + text-transform: uppercase; } + +/*=== Index menu */ +.nav_menu { + text-align: center; + padding: 5px 0; } + .nav_menu .btn { + border-left-width: 0; + padding: 0.5rem 1rem; + background-color: #f9fafb; + background-position: center; + background-repeat: no-repeat; } + .nav_menu .btn:hover { + background-color: #eff0f2; } + .nav_menu .stick { + background: #f9fafb; } + .nav_menu .stick .btn { + border-left-width: 0; + padding: 0.5rem 1rem; + background-color: #f9fafb; + background-position: center; + background-repeat: no-repeat; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -o-transition: all 0.15s ease-in-out; + -ms-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; } + .nav_menu .stick .btn:hover { + background-color: #d5d8db; } + .nav_menu .stick .btn.active { + background-color: #3366cc; } + .nav_menu .stick .btn img.icon { + display: none; } + .nav_menu .stick .btn#toggle-read { + background-image: url(icons/read.svg); } + .nav_menu .stick .btn#toggle-read.active { + background-image: url(icons/read-white.svg); } + .nav_menu .stick .btn#toggle-unread { + background-image: url(icons/unread.svg); } + .nav_menu .stick .btn#toggle-unread.active { + background-image: url(icons/unread-white.svg); } + .nav_menu .stick .btn#toggle-starred { + background-image: url(icons/starred.svg); } + .nav_menu .stick .btn#toggle-starred.active { + background-image: url(icons/starred-white.svg); } + .nav_menu .stick .btn#toggle-non-starred { + background-image: url(icons/non-starred.svg); } + .nav_menu .stick .btn#toggle-non-starred.active { + background-image: url(icons/non-starred-white.svg); } + .nav_menu .stick .btn.read_all { + background-color: #f9fafb; + color: #303136; + padding: 5px 16px; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -o-transition: all 0.15s ease-in-out; + -ms-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; } + .nav_menu .stick .btn.read_all:hover { + background-color: #d5d8db; } + .nav_menu .stick .btn.view-normal { + background-image: url(icons/view-list.svg); } + .nav_menu .stick .btn.view-normal.active { + background-image: url(icons/view-list-white.svg); } + .nav_menu .stick .btn.view-global { + background-image: url(icons/view-global.svg); } + .nav_menu .stick .btn.view-global.active { + background-image: url(icons/view-global-white.svg); } + .nav_menu .stick .btn.view-reader { + background-image: url(icons/view-reader.svg); } + .nav_menu .stick .btn.view-reader.active { + background-image: url(icons/view-reader-white.svg); } + .nav_menu .stick .btn.view-rss { + background-image: url(icons/rss.svg); } + .nav_menu .stick .dropdown a.dropdown-toggle { + border-left-width: 0; + background-image: url(icons/more.svg); } + +#dropdown-query ~ .dropdown-menu .dropdown-header .icon { + vertical-align: middle; + background-color: #a6a7ae; + border-radius: 3px; } + +/*=== Content of feed articles */ +.content, .content.thin { + padding: 20px 10px; + font-size: 1.125rem; + line-height: 1.8rem; } + .content h1.title a, .content h1 a, .content.thin h1.title a, .content.thin h1 a { + color: #303136; + font-family: "spectral"; + font-size: 2rem; } + .content h1.title a:hover, .content h1 a:hover, .content.thin h1.title a:hover, .content.thin h1 a:hover { + color: #3366cc; + text-decoration: none; } + .content .author, .content.thin .author { + font-size: 1.125rem; + color: #5b6871; } + .content p, .content ul, .content.thin p, .content.thin ul { + font-size: 1.125rem; + line-height: 1.8rem; } + .content .content hr, .content.thin .content hr { + margin: 30px 10px; + height: 1px; + background: #d5d8db; + border: 0; + box-shadow: 0 2px 5px #ccc; } + .content pre, .content.thin pre { + margin: 10px auto; + padding: 10px 20px; + overflow: auto; + background: #1d1e22; + color: #fff; + font-size: 0.9rem; + border-radius: 3px; } + .content pre code, .content.thin pre code { + background: transparent; + color: #fff; + border: none; } + .content code, .content.thin code { + padding: 2px 5px; + color: #eff0f2; + background: #f9fafb; + border: 1px solid #eff0f2; + border-radius: 3px; } + .content blockquote, .content.thin blockquote { + display: block; + margin: 0; + padding: 5px 20px; + border-top: 1px solid #d5d8db; + border-bottom: 1px solid #d5d8db; + background: #f9fafb; + color: #303136; } + .content blockquote p, .content.thin blockquote p { + margin: 0; } + +/*=== Notification and actualize notification */ +.notification { + position: fixed; + top: auto; + bottom: 0; + left: 0; + right: 0; + width: 100%; + height: 3rem; + padding: 1rem 0; + text-align: center; + font-size: 1em; + line-height: 3em; + z-index: 10; + vertical-align: middle; + background: #d5d8db; + color: #5b6871; + border: none; } + .notification .msg { + font-size: 1rem; + display: inline-block; } + .notification.good { + background: #10f587; + color: #fff; } + .notification.bad { + background: #f5633e; + color: #fff; } + .notification a.close { + padding: 0 15px; + line-height: 3em; + border-radius: 0 3px 3px 0; } + .notification.good a.close:hover { + background: #0c7540; } + .notification.bad a.close:hover { + background: #73341f; } + .notification#actualizeProgress { + line-height: 2em; } + .notification#actualizeProgress br { + display: none; } + +/*=== Navigation menu (for articles) */ +#nav_entries { + margin: 0; + text-align: center; + line-height: 3em; + table-layout: fixed; + background: #303136; } + +/*=== Feed articles */ +.flux { + background: #fff; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -o-transition: all 0.15s ease-in-out; + -ms-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; } + .flux:hover { + background: #f9fafb; } + .flux:hover:not(.current):hover .item.title { + background: #f9fafb; } + .flux.current { + border-left-color: #3366cc; + background: #f9fafb; } + .flux.not_read { + background: #f2f6f8; } + .flux.not_read:hover { + background: #fdfdfe; } + .flux.not_read:not(.current):hover .item.title { + background: #fdfdfe; } + .flux.not_read .item.title a { + color: #3366cc; } + .flux.not_read .item.website a { + color: #3366cc; } + .flux.not_read .item.date { + color: #3366cc99; } + .flux.favorite { + background: #FFF6DA; + border-left-color: #FFC300; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -o-transition: all 0.15s ease-in-out; + -ms-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; } + .flux.favorite:not(.current):hover .item.title { + background: #FFF6DA; } + .flux .website a { + color: #303136; + opacity: 0.75; } + .flux .website .favicon { + padding: 5px; } + .flux .date { + font-size: 0.85rem; + color: #303136; + opacity: 0.75; } + .flux .bottom { + font-size: 1rem; + text-align: center; } + +.flux_header { + font-size: 1rem; + cursor: pointer; + border-top: 1px solid #eff0f2; } + .flux_header .title { + font-size: 1rem; } + +/*=== GLOBAL VIEW */ +/*================*/ +#stream .box.category:not([data-unread="0"]) .box-title .title { + font-weight: bold; } +#stream .box.category .box-title { + background: none; + padding: 1.5rem; } + #stream .box.category .box-title a.title { + font-weight: normal; + text-decoration: none; + text-align: left; + font-size: 1rem; + text-transform: uppercase; + letter-spacing: 1px; + color: #5b6871; } + #stream .box.category .box-title a.title:not([data-unread="0"])::after { + position: absolute; + top: 1.75rem; + right: 0; + line-height: 1.5rem; + background: #eff0f2; + border-radius: 12px; + padding: 0 0.75rem; + margin: -0.5rem 1rem 0 0; + text-align: center; } + #stream .box.category .box-title a.title:hover { + color: #3366cc; } +#stream .box.category .box-content { + padding-bottom: 0.5rem; } + #stream .box.category .box-content .item.feed { + font-size: 1rem; + padding: 0.5rem 1.5rem; } + #stream .box.category .box-content .item.feed a { + color: #303136; + font-weight: 400; } + #stream .box.category .box-content .item.feed a:hover { + color: #3366cc; + text-decoration: none; } + +#overlay { + background: rgba(0, 0, 0, 0.65); } + +#panel { + top: 3rem; + right: 3rem; + bottom: 3rem; + left: 3rem; + border-radius: 3px; } + +/*=== READER VIEW */ +/*================*/ +#stream.reader .flux { + padding: 0 0 50px; + background: #eff0f2; + color: #303136; + border: none; } + +#stream.reader .flux .author { + margin: 0 0 10px; + font-size: 90%; + color: #a6a7ae; } + +/*=== Configuration pages */ +.post { + padding: 1rem 2rem; + font-size: 1rem; } + .post form { + margin: 1rem 0; } + .post form .horizontal-list { + margin-bottom: 0.5rem; } + .post.content { + max-width: 550px; } + .post h1, .post h2 { + font-size: 3rem; + margin-top: 1.75rem; + font-weight: 300; + line-height: 1.2em; + color: #303136; } + .post a[href="./"] { + display: inline-block; + min-width: 15px; + line-height: 25px; + margin: 0; + padding: 0.75rem 1.5rem; + font-size: 1rem; + vertical-align: middle; + cursor: pointer; + overflow: hidden; + background: #f9fafb; + border: 1px solid #d5d8db; + border-radius: 5px; + color: #5b6871; } + .post a[href="./"]:hover { + text-decoration: none; + background: #3366cc; + color: white; + border: 1px solid #3366cc; } + +#slider { + border-left: none; + -webkit-box-shadow: 0px 6px 8px 0px rgba(0, 0, 0, 0.35); + -moz-box-shadow: 0px 6px 8px 0px rgba(0, 0, 0, 0.35); + box-shadow: 0px 6px 8px 0px rgba(0, 0, 0, 0.35); } + +.slide-container .properties { + background: rgba(0, 0, 0, 0.75); + border: 0; + padding: 1rem; + color: white; } + .slide-container .properties .page-number { + right: 1rem; + top: 1rem; } + +/*=== LOGS */ +/*=========*/ +.loglist { + overflow: hidden; + border: 1px solid #a6a7ae; } + +.log { + margin: 10px 0; + padding: 5px 2%; + overflow: auto; + font-size: 0.8rem; + background: #f9fafb; + color: #5b6871; } + +.log > .date { + margin: 0 10px 0 0; + padding: 5px 10px; + border-radius: 20px; } + +.log.error > .date { + background: #f5633e; + color: #fff; } + +.log.warning > .date { + background: #f4f762; } + +.log.notice > .date { + background: #eff0f2; } + +.log.debug > .date { + background: #1d1e22; + color: #fff; } + +/*=== STATISTICS */ +/*===============*/ +.stat { + margin: 10px 0 20px; } + +.stat th, +.stat td, +.stat tr { + border: none; } + +.stat > table td, +.stat > table th { + border-bottom: 1px solid #d5d8db; } + +.stat > .horizontal-list { + margin: 0 0 5px; } + +.stat > .horizontal-list .item { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; } + +.stat > .horizontal-list .item:first-child { + width: 270px; } + +/*=== MOBILE */ +/*===========*/ +@media (max-width: 840px) { + ul.nav .item { + width: 100%; } + ul.nav .item img { + display: none; } + ul.nav .item a { + display: inline-block; + padding: 1rem 1rem 1rem 2.5rem; + color: #FFFFFF; + width: 100%; + background: url("../../themes/icons/logout.svg") no-repeat #17181a 3% center; + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; } + ul.nav .item a:hover, ul.nav .item a:active { + background: url("../../themes/icons/logout.svg") no-repeat #f5633e 3% center; + text-decoration: none; } + + .aside { + -webkit-transition: all 0.2s ease-in-out; + -moz-transition: all 0.2s ease-in-out; + -o-transition: all 0.2s ease-in-out; + -ms-transition: all 0.2s ease-in-out; + transition: all 0.2s ease-in-out; } + .aside.aside_feed { + padding: 0; } + .aside .tree .tree-folder .tree-folder-items .item a { + padding: 0.5rem 1rem; } + + .aside .toggle_aside, + #panel .close { + display: block; + width: 100%; + height: 50px; + line-height: 50px; + text-align: center; + background: #2255cc; } + + .header { + padding: 0.5rem; } + .header .item.title { + display: none; } + .header .item.search input { + width: 90%; + height: 3.5rem; } + .header .item.search input:focus { + width: 100%; } + .header .item.search .btn { + min-height: 49px; + padding: 0.5rem 2rem; } + .header .item.configure { + width: 2.75rem; + top: 3.125rem; } + .header .item.configure .dropdown .btn { + padding: 1.125rem; } + + .nav_menu .btn { + margin: 0; + padding: 0.85rem 1.25rem; } + .nav_menu .stick { + margin: 0.5rem 0.5rem; } + .nav_menu .stick .btn { + margin: 0; + padding: 0.85rem 1.25rem; } + .nav_menu .stick .btn.read_all { + padding: 0.85rem 1.25rem; } + .nav_menu .search { + display: none; + max-width: 97%; } + .nav_menu .search .input { + max-width: 97%; + width: 90px; } + .nav_menu .search .input::focus { + width: 400px; } + + #stream .flux .flux_header { + padding: 0.5rem 0; } + + .day { + text-align: center; + padding: 1rem 0; } + .day .name { + display: block; + padding: 0; + width: 100%; + line-height: 1.5rem; + margin-bottom: 1rem; } + + .pagination { + margin: 0 0 3.5em; } + + #nav_entries { + line-height: 4.5rem; } + + .notification { + border-radius: 0; } + .notification a.close { + display: block; + left: 0; + background: transparent; } + .notification a.close:hover { + opacity: 0.5; } + .notification a.close .icon { + display: none; } } +html, body { + font-family: "lato", "Helvetica", "Arial", sans-serif; + font-size: 0.875rem; } + +/*=== GENERAL */ +/*============*/ +html, body { + height: 100%; + background: #eff0f2; } + +/*=== Links */ +a, button.as-link { + outline: none; + color: #3366cc; } + +/*# sourceMappingURL=mapco.css.map */ diff --git a/p/themes/Mapco/mapco.css.map b/p/themes/Mapco/mapco.css.map new file mode 100644 index 000000000..9441efeb4 --- /dev/null +++ b/p/themes/Mapco/mapco.css.map @@ -0,0 +1,7 @@ +{ +"version": 3, +"mappings": "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", +"sources": ["_fonts.scss","_mixins.scss","_forms.scss","_variables.scss","_tables.scss","_components.scss","_divers.scss","_sidebar.scss","_layout.scss","_list-view.scss","_global-view.scss","_reader-view.scss","_configuration.scss","_logs.scss","_stats.scss","_mobile.scss","mapco.scss"], +"names": [], +"file": "mapco.css" +}
\ No newline at end of file diff --git a/p/themes/Mapco/mapco.scss b/p/themes/Mapco/mapco.scss new file mode 100644 index 000000000..1a538b50a --- /dev/null +++ b/p/themes/Mapco/mapco.scss @@ -0,0 +1,51 @@ +@import "fonts"; +@import "mixins"; +@import "variables"; + +@import "forms"; +@import "tables"; +@import "components"; + +@import "divers"; + +@import "sidebar"; +@import "layout"; +@import "list-view"; +@import "global-view"; +@import "reader-view"; + +@import "configuration"; + +@import "logs"; +@import "stats"; + +@import "mobile"; + +html, body{ + font-family: "lato", "Helvetica", "Arial", sans-serif; + font-size: 0.875rem; +} + +@charset "UTF-8"; + +/*=== GENERAL */ +/*============*/ +html, body { + height: 100%; + background: $grey-light; +} + +/*=== Links */ +a, button.as-link { + outline: none; + color: $main-first; +} + + + + + + + + + diff --git a/p/themes/Mapco/metadata.json b/p/themes/Mapco/metadata.json new file mode 100644 index 000000000..24bb04b87 --- /dev/null +++ b/p/themes/Mapco/metadata.json @@ -0,0 +1,7 @@ +{ + "name": "Mapco", + "author": "Thomas Guesnon", + "description": "Thème pour FreshRSS", + "version": 0.1, + "files": ["_template.css", "mapco.css"] +} diff --git a/p/themes/Mapco/sass.sh b/p/themes/Mapco/sass.sh new file mode 100644 index 000000000..316d04cf2 --- /dev/null +++ b/p/themes/Mapco/sass.sh @@ -0,0 +1 @@ +sass --watch mapco.scss:mapco.css diff --git a/p/themes/Mapco/thumbs/original.png b/p/themes/Mapco/thumbs/original.png Binary files differnew file mode 100644 index 000000000..6dd7ec72c --- /dev/null +++ b/p/themes/Mapco/thumbs/original.png diff --git a/p/themes/base-theme/template.css b/p/themes/base-theme/template.css index 099aee916..fb62f8d74 100644 --- a/p/themes/base-theme/template.css +++ b/p/themes/base-theme/template.css @@ -280,7 +280,7 @@ a.btn { left: 0; right: 0; display: block; z-index: -10; - cursor: default; + cursor: default; } .separator { display: block; @@ -418,8 +418,10 @@ a.btn { } .tree-folder-items { - padding: 0; list-style: none; + max-height: 200em; + padding: 0; + transition: max-height .3s linear; } .tree-folder-title { display: block; @@ -502,7 +504,11 @@ a.btn { padding: 0px 15px; } .aside_feed .tree-folder-items:not(.active) { - display: none; + border: none; + margin: 0; + max-height: 0; + padding: 0; + overflow: hidden; } .aside_feed .tree-folder-items .dropdown { vertical-align: top; @@ -632,9 +638,13 @@ br + br + br { z-index: 10; background: #fff; border: 1px solid #aaa; + opacity: 1; + visibility: visible; + transition: visibility 0s, opacity .3s linear; } .notification.closed { - display: none; + opacity: 0; + visibility: hidden; } .notification a.close { position: absolute; @@ -710,15 +720,15 @@ br + br + br { /*=== LOGIN VIEW */ /*================*/ .formLogin .header > .item { - padding: 10px 30px; + padding: 10px 30px; } .formLogin .header > .item.title { - text-align: left; + text-align: left; } .formLogin .header > .item.configure { - text-align: right; + text-align: right; } @@ -731,14 +741,29 @@ br + br + br { #stream.global .box { text-align: left; } - +#global > #panel { + bottom: 99vh; + display: block; + transition: visibility .3s, bottom .3s; + visibility: hidden; +} +#global > #panel.visible { + bottom: 1em; + visibility: visible; +} /*=== Panel */ #overlay { - display: none; position: fixed; top: 0; bottom: 0; left: 0; right: 0; background: rgba(0, 0, 0, 0.9); + opacity: 0; + transition: visibility .3s, opacity .3s; + visibility: hidden; +} +#overlay.visible { + opacity: 1; + visibility: visible; } #panel { display: none; diff --git a/p/themes/fonts/LatoLatin-Bold.woff b/p/themes/fonts/LatoLatin-Bold.woff Binary files differnew file mode 100644 index 000000000..cdfcbe0fb --- /dev/null +++ b/p/themes/fonts/LatoLatin-Bold.woff diff --git a/p/themes/fonts/LatoLatin-BoldItalic.woff b/p/themes/fonts/LatoLatin-BoldItalic.woff Binary files differnew file mode 100644 index 000000000..3e683fea7 --- /dev/null +++ b/p/themes/fonts/LatoLatin-BoldItalic.woff diff --git a/p/themes/fonts/LatoLatin-Italic.woff b/p/themes/fonts/LatoLatin-Italic.woff Binary files differnew file mode 100644 index 000000000..d8cf84c8b --- /dev/null +++ b/p/themes/fonts/LatoLatin-Italic.woff diff --git a/p/themes/fonts/LatoLatin-Regular.woff b/p/themes/fonts/LatoLatin-Regular.woff Binary files differnew file mode 100644 index 000000000..bf73a6d9f --- /dev/null +++ b/p/themes/fonts/LatoLatin-Regular.woff diff --git a/p/themes/fonts/Spectral-Bold.woff b/p/themes/fonts/Spectral-Bold.woff Binary files differnew file mode 100644 index 000000000..10bbc7bbe --- /dev/null +++ b/p/themes/fonts/Spectral-Bold.woff diff --git a/p/themes/fonts/Spectral-BoldItalic.woff b/p/themes/fonts/Spectral-BoldItalic.woff Binary files differnew file mode 100644 index 000000000..2486d78a1 --- /dev/null +++ b/p/themes/fonts/Spectral-BoldItalic.woff diff --git a/p/themes/fonts/Spectral-Italic.woff b/p/themes/fonts/Spectral-Italic.woff Binary files differnew file mode 100644 index 000000000..3a7d9cbed --- /dev/null +++ b/p/themes/fonts/Spectral-Italic.woff diff --git a/p/themes/fonts/Spectral-Regular.woff b/p/themes/fonts/Spectral-Regular.woff Binary files differnew file mode 100644 index 000000000..a472c4be3 --- /dev/null +++ b/p/themes/fonts/Spectral-Regular.woff |
