New sharing service: Web sharing API (#4271)

* new optional option: HTMLtag

* Update main.js

* add: web sharing API

* Update gen.php

* Update gen.php

* Update gen.php

* fix spaces

* Update shares.php

* fixed JavaScript

* Update template.rtl.css

* Typo

* improved: if (!navigator.share)

* Update main.js

* comma-dangle only for arrays and objects

* Update app/i18n/fr/gen.php

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>

* i18n: System sharing

Co-authored-by: Alexandre Alapetite <alexandre@alapetite.fr>
This commit is contained in:
maTh 2022-03-16 23:23:15 +01:00 committed by GitHub
parent 9748ac48e4
commit a89fce27cb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
25 changed files with 146 additions and 84 deletions

View File

@ -8,7 +8,10 @@
], ],
"rules": { "rules": {
"camelcase": "off", "camelcase": "off",
"comma-dangle": ["warn", "always-multiline"], "comma-dangle": ["warn", {
"arrays": "always-multiline",
"objects": "always-multiline"
}],
"eqeqeq": "off", "eqeqeq": "off",
"indent": ["warn", "tab", { "SwitchCase": 1 }], "indent": ["warn", "tab", { "SwitchCase": 1 }],
"linebreak-style": ["error", "unix"], "linebreak-style": ["error", "unix"],

View File

@ -20,13 +20,14 @@ class FreshRSS_Share {
return; return;
} }
$HTMLtag = isset($share_options['HTMLtag']) ? $share_options['HTMLtag'] : 'link';
$isDeprecated = isset($share_options['deprecated']) ? $share_options['deprecated'] : false; $isDeprecated = isset($share_options['deprecated']) ? $share_options['deprecated'] : false;
$help_url = isset($share_options['help']) ? $share_options['help'] : ''; $help_url = isset($share_options['help']) ? $share_options['help'] : '';
$field = isset($share_options['field']) ? $share_options['field'] : null; $field = isset($share_options['field']) ? $share_options['field'] : null;
self::$list_sharing[$type] = new FreshRSS_Share( self::$list_sharing[$type] = new FreshRSS_Share(
$type, $share_options['url'], $share_options['transform'], $type, $share_options['url'], $share_options['transform'],
$share_options['form'], $help_url, $share_options['method'], $share_options['form'], $help_url, $share_options['method'],
$field, $isDeprecated $field, $HTMLtag, $isDeprecated
); );
} }
@ -87,6 +88,7 @@ class FreshRSS_Share {
private $isDeprecated = false; private $isDeprecated = false;
private $method = 'GET'; private $method = 'GET';
private $field; private $field;
private $HTMLtag = 'link';
/** /**
* Create a FreshRSS_Share object. * Create a FreshRSS_Share object.
@ -99,11 +101,12 @@ class FreshRSS_Share {
* @param string $help_url is an optional url to give help on this option. * @param string $help_url is an optional url to give help on this option.
* @param string $method defines the sharing method (GET or POST) * @param string $method defines the sharing method (GET or POST)
*/ */
private function __construct($type, $url_transform, $transform, $form_type, $help_url, $method, $field, $isDeprecated = false) { private function __construct($type, $url_transform, $transform, $form_type, $help_url, $method, $field, $HTMLtag, $isDeprecated = false) {
$this->type = $type; $this->type = $type;
$this->name = _t('gen.share.' . $type); $this->name = _t('gen.share.' . $type);
$this->url_transform = $url_transform; $this->url_transform = $url_transform;
$this->help_url = $help_url; $this->help_url = $help_url;
$this->HTMLtag = $HTMLtag;
$this->isDeprecated = $isDeprecated; $this->isDeprecated = $isDeprecated;
if (!is_array($transform)) { if (!is_array($transform)) {
@ -181,6 +184,13 @@ class FreshRSS_Share {
return $this->help_url; return $this->help_url;
} }
/**
* Return the type of HTML tag of the share option.
*/
public function HTMLtag() {
return $this->HTMLtag;
}
/** /**
* Return the current name of the share option. * Return the current name of the share option.
*/ */

View File

@ -198,17 +198,18 @@ return array(
'mastodon' => 'Mastodon', // IGNORE 'mastodon' => 'Mastodon', // IGNORE
'movim' => 'Movim', // IGNORE 'movim' => 'Movim', // IGNORE
'pinboard' => 'Pinboard', // IGNORE 'pinboard' => 'Pinboard', // IGNORE
'pinterest' => 'Pinterest', // TODO 'pinterest' => 'Pinterest', // IGNORE
'pocket' => 'Pocket', // IGNORE 'pocket' => 'Pocket', // IGNORE
'print' => 'Tisknout', 'print' => 'Tisknout',
'raindrop' => 'Raindrop.io', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE
'reddit' => 'Reddit', // TODO 'reddit' => 'Reddit', // IGNORE
'shaarli' => 'Shaarli', // IGNORE 'shaarli' => 'Shaarli', // IGNORE
'twitter' => 'Twitter', // IGNORE 'twitter' => 'Twitter', // IGNORE
'wallabag' => 'Wallabag v1', 'wallabag' => 'wallabag v1', // IGNORE
'wallabagv2' => 'Wallabag v2', 'wallabagv2' => 'wallabag v2', // IGNORE
'whatsapp' => 'Whatsapp', // TODO 'web-sharing-api' => 'System sharing', // TODO
'xing' => 'Xing', // TODO 'whatsapp' => 'Whatsapp', // IGNORE
'xing' => 'Xing', // IGNORE
), ),
'short' => array( 'short' => array(
'attention' => 'Upozornění!', 'attention' => 'Upozornění!',

View File

@ -198,17 +198,18 @@ return array(
'mastodon' => 'Mastodon', // IGNORE 'mastodon' => 'Mastodon', // IGNORE
'movim' => 'Movim', // IGNORE 'movim' => 'Movim', // IGNORE
'pinboard' => 'Pinboard', // IGNORE 'pinboard' => 'Pinboard', // IGNORE
'pinterest' => 'Pinterest', // TODO 'pinterest' => 'Pinterest', // IGNORE
'pocket' => 'Pocket', // IGNORE 'pocket' => 'Pocket', // IGNORE
'print' => 'Drucken', 'print' => 'Drucken',
'raindrop' => 'Raindrop.io', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE
'reddit' => 'Reddit', // TODO 'reddit' => 'Reddit', // IGNORE
'shaarli' => 'Shaarli', // IGNORE 'shaarli' => 'Shaarli', // IGNORE
'twitter' => 'Twitter', // IGNORE 'twitter' => 'Twitter', // IGNORE
'wallabag' => 'wallabag v1', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE
'wallabagv2' => 'wallabag v2', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE
'whatsapp' => 'Whatsapp', // TODO 'web-sharing-api' => 'Teilen (Systemstandard)',
'xing' => 'Xing', // TODO 'whatsapp' => 'Whatsapp', // IGNORE
'xing' => 'Xing', // IGNORE
), ),
'short' => array( 'short' => array(
'attention' => 'Achtung!', 'attention' => 'Achtung!',

View File

@ -198,17 +198,18 @@ return array(
'mastodon' => 'Mastodon', // IGNORE 'mastodon' => 'Mastodon', // IGNORE
'movim' => 'Movim', // IGNORE 'movim' => 'Movim', // IGNORE
'pinboard' => 'Pinboard', // IGNORE 'pinboard' => 'Pinboard', // IGNORE
'pinterest' => 'Pinterest', // TODO 'pinterest' => 'Pinterest', // IGNORE
'pocket' => 'Pocket', // IGNORE 'pocket' => 'Pocket', // IGNORE
'print' => 'Print', // IGNORE 'print' => 'Print', // IGNORE
'raindrop' => 'Raindrop.io', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE
'reddit' => 'Reddit', // TODO 'reddit' => 'Reddit', // IGNORE
'shaarli' => 'Shaarli', // IGNORE 'shaarli' => 'Shaarli', // IGNORE
'twitter' => 'Twitter', // IGNORE 'twitter' => 'Twitter', // IGNORE
'wallabag' => 'wallabag v1', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE
'wallabagv2' => 'wallabag v2', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE
'whatsapp' => 'Whatsapp', // TODO 'web-sharing-api' => 'System sharing', // TODO
'xing' => 'Xing', // TODO 'whatsapp' => 'Whatsapp', // IGNORE
'xing' => 'Xing', // IGNORE
), ),
'short' => array( 'short' => array(
'attention' => 'Warning!', // IGNORE 'attention' => 'Warning!', // IGNORE

View File

@ -198,17 +198,18 @@ return array(
'mastodon' => 'Mastodon', 'mastodon' => 'Mastodon',
'movim' => 'Movim', 'movim' => 'Movim',
'pinboard' => 'Pinboard', 'pinboard' => 'Pinboard',
'pinterest' => 'Pinterest', // TODO 'pinterest' => 'Pinterest',
'pocket' => 'Pocket', 'pocket' => 'Pocket',
'print' => 'Print', 'print' => 'Print',
'raindrop' => 'Raindrop.io', 'raindrop' => 'Raindrop.io',
'reddit' => 'Reddit', // TODO 'reddit' => 'Reddit',
'shaarli' => 'Shaarli', 'shaarli' => 'Shaarli',
'twitter' => 'Twitter', 'twitter' => 'Twitter',
'wallabag' => 'wallabag v1', 'wallabag' => 'wallabag v1',
'wallabagv2' => 'wallabag v2', 'wallabagv2' => 'wallabag v2',
'whatsapp' => 'Whatsapp', // TODO 'web-sharing-api' => 'System sharing',
'xing' => 'Xing', // TODO 'whatsapp' => 'Whatsapp',
'xing' => 'Xing',
), ),
'short' => array( 'short' => array(
'attention' => 'Warning!', 'attention' => 'Warning!',

View File

@ -198,17 +198,18 @@ return array(
'mastodon' => 'Mastodon', // IGNORE 'mastodon' => 'Mastodon', // IGNORE
'movim' => 'Movim', // IGNORE 'movim' => 'Movim', // IGNORE
'pinboard' => 'Pinboard', // IGNORE 'pinboard' => 'Pinboard', // IGNORE
'pinterest' => 'Pinterest', // TODO 'pinterest' => 'Pinterest', // IGNORE
'pocket' => 'Pocket', // IGNORE 'pocket' => 'Pocket', // IGNORE
'print' => 'Imprimir', 'print' => 'Imprimir',
'raindrop' => 'Raindrop.io', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE
'reddit' => 'Reddit', // TODO 'reddit' => 'Reddit', // IGNORE
'shaarli' => 'Shaarli', // IGNORE 'shaarli' => 'Shaarli', // IGNORE
'twitter' => 'Twitter', // IGNORE 'twitter' => 'Twitter', // IGNORE
'wallabag' => 'wallabag v1', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE
'wallabagv2' => 'wallabag v2', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE
'whatsapp' => 'Whatsapp', // TODO 'web-sharing-api' => 'System sharing', // TODO
'xing' => 'Xing', // TODO 'whatsapp' => 'Whatsapp', // IGNORE
'xing' => 'Xing', // IGNORE
), ),
'short' => array( 'short' => array(
'attention' => '¡Aviso!', 'attention' => '¡Aviso!',

View File

@ -198,17 +198,18 @@ return array(
'mastodon' => 'Mastodon', // IGNORE 'mastodon' => 'Mastodon', // IGNORE
'movim' => 'Movim', // IGNORE 'movim' => 'Movim', // IGNORE
'pinboard' => 'Pinboard', // IGNORE 'pinboard' => 'Pinboard', // IGNORE
'pinterest' => 'Pinterest', // TODO 'pinterest' => 'Pinterest', // IGNORE
'pocket' => 'Pocket', // IGNORE 'pocket' => 'Pocket', // IGNORE
'print' => 'Imprimer', 'print' => 'Imprimer',
'raindrop' => 'Raindrop.io', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE
'reddit' => 'Reddit', // TODO 'reddit' => 'Reddit', // IGNORE
'shaarli' => 'Shaarli', // IGNORE 'shaarli' => 'Shaarli', // IGNORE
'twitter' => 'Twitter', // IGNORE 'twitter' => 'Twitter', // IGNORE
'wallabag' => 'wallabag v1', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE
'wallabagv2' => 'wallabag v2', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE
'whatsapp' => 'Whatsapp', // TODO 'web-sharing-api' => 'Partage standard',
'xing' => 'Xing', // TODO 'whatsapp' => 'Whatsapp', // IGNORE
'xing' => 'Xing', // IGNORE
), ),
'short' => array( 'short' => array(
'attention' => 'Attention !', 'attention' => 'Attention !',

View File

@ -198,17 +198,18 @@ return array(
'mastodon' => 'Mastodon', // IGNORE 'mastodon' => 'Mastodon', // IGNORE
'movim' => 'Movim', // IGNORE 'movim' => 'Movim', // IGNORE
'pinboard' => 'Pinboard', // IGNORE 'pinboard' => 'Pinboard', // IGNORE
'pinterest' => 'Pinterest', // TODO 'pinterest' => 'Pinterest', // IGNORE
'pocket' => 'Pocket', // IGNORE 'pocket' => 'Pocket', // IGNORE
'print' => 'הדפסה', 'print' => 'הדפסה',
'raindrop' => 'Raindrop.io', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE
'reddit' => 'Reddit', // TODO 'reddit' => 'Reddit', // IGNORE
'shaarli' => 'Shaarli', // IGNORE 'shaarli' => 'Shaarli', // IGNORE
'twitter' => 'Twitter', // IGNORE 'twitter' => 'Twitter', // IGNORE
'wallabag' => 'wallabag v1', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE
'wallabagv2' => 'wallabag v2', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE
'whatsapp' => 'Whatsapp', // TODO 'web-sharing-api' => 'System sharing', // TODO
'xing' => 'Xing', // TODO 'whatsapp' => 'Whatsapp', // IGNORE
'xing' => 'Xing', // IGNORE
), ),
'short' => array( 'short' => array(
'attention' => 'זהירות!', 'attention' => 'זהירות!',

View File

@ -198,17 +198,18 @@ return array(
'mastodon' => 'Mastodon', // IGNORE 'mastodon' => 'Mastodon', // IGNORE
'movim' => 'Movim', // IGNORE 'movim' => 'Movim', // IGNORE
'pinboard' => 'Pinboard', // IGNORE 'pinboard' => 'Pinboard', // IGNORE
'pinterest' => 'Pinterest', // TODO 'pinterest' => 'Pinterest', // IGNORE
'pocket' => 'Pocket', // IGNORE 'pocket' => 'Pocket', // IGNORE
'print' => 'Stampa', 'print' => 'Stampa',
'raindrop' => 'Raindrop.io', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE
'reddit' => 'Reddit', // TODO 'reddit' => 'Reddit', // IGNORE
'shaarli' => 'Shaarli', // IGNORE 'shaarli' => 'Shaarli', // IGNORE
'twitter' => 'Twitter', // IGNORE 'twitter' => 'Twitter', // IGNORE
'wallabag' => 'wallabag v1', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE
'wallabagv2' => 'wallabag v2', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE
'whatsapp' => 'Whatsapp', // TODO 'web-sharing-api' => 'System sharing', // TODO
'xing' => 'Xing', // TODO 'whatsapp' => 'Whatsapp', // IGNORE
'xing' => 'Xing', // IGNORE
), ),
'short' => array( 'short' => array(
'attention' => 'Attenzione!', 'attention' => 'Attenzione!',

View File

@ -198,17 +198,18 @@ return array(
'mastodon' => 'Mastodon', // IGNORE 'mastodon' => 'Mastodon', // IGNORE
'movim' => 'Movim', // IGNORE 'movim' => 'Movim', // IGNORE
'pinboard' => 'Pinboard', // IGNORE 'pinboard' => 'Pinboard', // IGNORE
'pinterest' => 'Pinterest', // TODO 'pinterest' => 'Pinterest', // IGNORE
'pocket' => 'Pocket', // IGNORE 'pocket' => 'Pocket', // IGNORE
'print' => '印刷', 'print' => '印刷',
'raindrop' => 'Raindrop.io', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE
'reddit' => 'Reddit', // TODO 'reddit' => 'Reddit', // IGNORE
'shaarli' => 'Shaarli', // IGNORE 'shaarli' => 'Shaarli', // IGNORE
'twitter' => 'Twitter', // IGNORE 'twitter' => 'Twitter', // IGNORE
'wallabag' => 'wallabag v1', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE
'wallabagv2' => 'wallabag v2', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE
'whatsapp' => 'Whatsapp', // TODO 'web-sharing-api' => 'System sharing', // TODO
'xing' => 'Xing', // TODO 'whatsapp' => 'Whatsapp', // IGNORE
'xing' => 'Xing', // IGNORE
), ),
'short' => array( 'short' => array(
'attention' => '警告!', 'attention' => '警告!',

View File

@ -198,17 +198,18 @@ return array(
'mastodon' => 'Mastodon', // IGNORE 'mastodon' => 'Mastodon', // IGNORE
'movim' => 'Movim', // IGNORE 'movim' => 'Movim', // IGNORE
'pinboard' => 'Pinboard', // IGNORE 'pinboard' => 'Pinboard', // IGNORE
'pinterest' => 'Pinterest', // TODO 'pinterest' => 'Pinterest', // IGNORE
'pocket' => 'Pocket', // IGNORE 'pocket' => 'Pocket', // IGNORE
'print' => '인쇄', 'print' => '인쇄',
'raindrop' => 'Raindrop.io', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE
'reddit' => 'Reddit', // TODO 'reddit' => 'Reddit', // IGNORE
'shaarli' => 'Shaarli', // IGNORE 'shaarli' => 'Shaarli', // IGNORE
'twitter' => 'Twitter', // IGNORE 'twitter' => 'Twitter', // IGNORE
'wallabag' => 'wallabag v1', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE
'wallabagv2' => 'wallabag v2', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE
'whatsapp' => 'Whatsapp', // TODO 'web-sharing-api' => 'System sharing', // TODO
'xing' => 'Xing', // TODO 'whatsapp' => 'Whatsapp', // IGNORE
'xing' => 'Xing', // IGNORE
), ),
'short' => array( 'short' => array(
'attention' => '경고!', 'attention' => '경고!',

View File

@ -198,17 +198,18 @@ return array(
'mastodon' => 'Mastodon', // IGNORE 'mastodon' => 'Mastodon', // IGNORE
'movim' => 'Movim', // IGNORE 'movim' => 'Movim', // IGNORE
'pinboard' => 'Pinboard', // IGNORE 'pinboard' => 'Pinboard', // IGNORE
'pinterest' => 'Pinterest', // TODO 'pinterest' => 'Pinterest', // IGNORE
'pocket' => 'Pocket', // IGNORE 'pocket' => 'Pocket', // IGNORE
'print' => 'Print', // IGNORE 'print' => 'Print', // IGNORE
'raindrop' => 'Raindrop.io', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE
'reddit' => 'Reddit', // TODO 'reddit' => 'Reddit', // IGNORE
'shaarli' => 'Shaarli', // IGNORE 'shaarli' => 'Shaarli', // IGNORE
'twitter' => 'Twitter', // IGNORE 'twitter' => 'Twitter', // IGNORE
'wallabag' => 'wallabag v1', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE
'wallabagv2' => 'wallabag v2', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE
'whatsapp' => 'Whatsapp', // TODO 'web-sharing-api' => 'System sharing', // TODO
'xing' => 'Xing', // TODO 'whatsapp' => 'Whatsapp', // IGNORE
'xing' => 'Xing', // IGNORE
), ),
'short' => array( 'short' => array(
'attention' => 'Attentie!', 'attention' => 'Attentie!',

View File

@ -198,17 +198,18 @@ return array(
'mastodon' => 'Mastodon', // IGNORE 'mastodon' => 'Mastodon', // IGNORE
'movim' => 'Movim', // IGNORE 'movim' => 'Movim', // IGNORE
'pinboard' => 'Pinboard', // IGNORE 'pinboard' => 'Pinboard', // IGNORE
'pinterest' => 'Pinterest', // TODO 'pinterest' => 'Pinterest', // IGNORE
'pocket' => 'Pocket', // IGNORE 'pocket' => 'Pocket', // IGNORE
'print' => 'Imprimir', 'print' => 'Imprimir',
'raindrop' => 'Raindrop.io', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE
'reddit' => 'Reddit', // TODO 'reddit' => 'Reddit', // IGNORE
'shaarli' => 'Shaarli', // IGNORE 'shaarli' => 'Shaarli', // IGNORE
'twitter' => 'Twitter', // IGNORE 'twitter' => 'Twitter', // IGNORE
'wallabag' => 'wallabag v1', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE
'wallabagv2' => 'wallabag v2', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE
'whatsapp' => 'Whatsapp', // TODO 'web-sharing-api' => 'System sharing', // TODO
'xing' => 'Xing', // TODO 'whatsapp' => 'Whatsapp', // IGNORE
'xing' => 'Xing', // IGNORE
), ),
'short' => array( 'short' => array(
'attention' => 'Atencion!', 'attention' => 'Atencion!',

View File

@ -198,17 +198,18 @@ return array(
'mastodon' => 'Mastodon', // IGNORE 'mastodon' => 'Mastodon', // IGNORE
'movim' => 'Movim', // IGNORE 'movim' => 'Movim', // IGNORE
'pinboard' => 'Pinboard', // IGNORE 'pinboard' => 'Pinboard', // IGNORE
'pinterest' => 'Pinterest', // TODO 'pinterest' => 'Pinterest', // IGNORE
'pocket' => 'Pocket', // IGNORE 'pocket' => 'Pocket', // IGNORE
'print' => 'Wydruk', 'print' => 'Wydruk',
'raindrop' => 'Raindrop.io', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE
'reddit' => 'Reddit', // TODO 'reddit' => 'Reddit', // IGNORE
'shaarli' => 'Shaarli', // IGNORE 'shaarli' => 'Shaarli', // IGNORE
'twitter' => 'Twitter', // IGNORE 'twitter' => 'Twitter', // IGNORE
'wallabag' => 'wallabag v1', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE
'wallabagv2' => 'wallabag v2', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE
'whatsapp' => 'Whatsapp', // TODO 'web-sharing-api' => 'System sharing', // TODO
'xing' => 'Xing', // TODO 'whatsapp' => 'Whatsapp', // IGNORE
'xing' => 'Xing', // IGNORE
), ),
'short' => array( 'short' => array(
'attention' => 'Uwaga!', 'attention' => 'Uwaga!',

View File

@ -198,17 +198,18 @@ return array(
'mastodon' => 'Mastodon', // IGNORE 'mastodon' => 'Mastodon', // IGNORE
'movim' => 'Movim', // IGNORE 'movim' => 'Movim', // IGNORE
'pinboard' => 'Pinboard', // IGNORE 'pinboard' => 'Pinboard', // IGNORE
'pinterest' => 'Pinterest', // TODO 'pinterest' => 'Pinterest', // IGNORE
'pocket' => 'Pocket', // IGNORE 'pocket' => 'Pocket', // IGNORE
'print' => 'Imprimir', 'print' => 'Imprimir',
'raindrop' => 'Raindrop.io', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE
'reddit' => 'Reddit', // TODO 'reddit' => 'Reddit', // IGNORE
'shaarli' => 'Shaarli', // IGNORE 'shaarli' => 'Shaarli', // IGNORE
'twitter' => 'Twitter', // IGNORE 'twitter' => 'Twitter', // IGNORE
'wallabag' => 'wallabag v1', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE
'wallabagv2' => 'wallabag v2', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE
'whatsapp' => 'Whatsapp', // TODO 'web-sharing-api' => 'System sharing', // TODO
'xing' => 'Xing', // TODO 'whatsapp' => 'Whatsapp', // IGNORE
'xing' => 'Xing', // IGNORE
), ),
'short' => array( 'short' => array(
'attention' => 'Atenção!', 'attention' => 'Atenção!',

View File

@ -198,17 +198,18 @@ return array(
'mastodon' => 'Mastodon', // IGNORE 'mastodon' => 'Mastodon', // IGNORE
'movim' => 'Movim', // IGNORE 'movim' => 'Movim', // IGNORE
'pinboard' => 'Pinboard', // IGNORE 'pinboard' => 'Pinboard', // IGNORE
'pinterest' => 'Pinterest', // TODO 'pinterest' => 'Pinterest', // IGNORE
'pocket' => 'Pocket', // IGNORE 'pocket' => 'Pocket', // IGNORE
'print' => 'Распечатать', 'print' => 'Распечатать',
'raindrop' => 'Raindrop.io', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE
'reddit' => 'Reddit', // TODO 'reddit' => 'Reddit', // IGNORE
'shaarli' => 'Shaarli', // IGNORE 'shaarli' => 'Shaarli', // IGNORE
'twitter' => 'Twitter', // IGNORE 'twitter' => 'Twitter', // IGNORE
'wallabag' => 'wallabag v1', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE
'wallabagv2' => 'wallabag v2', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE
'whatsapp' => 'Whatsapp', // TODO 'web-sharing-api' => 'System sharing', // TODO
'xing' => 'Xing', // TODO 'whatsapp' => 'Whatsapp', // IGNORE
'xing' => 'Xing', // IGNORE
), ),
'short' => array( 'short' => array(
'attention' => 'Предупреждение!', 'attention' => 'Предупреждение!',

View File

@ -198,17 +198,18 @@ return array(
'mastodon' => 'Mastodon', // IGNORE 'mastodon' => 'Mastodon', // IGNORE
'movim' => 'Movim', // IGNORE 'movim' => 'Movim', // IGNORE
'pinboard' => 'Pinboard', // IGNORE 'pinboard' => 'Pinboard', // IGNORE
'pinterest' => 'Pinterest', // TODO 'pinterest' => 'Pinterest', // IGNORE
'pocket' => 'Pocket', // IGNORE 'pocket' => 'Pocket', // IGNORE
'print' => 'Print', // IGNORE 'print' => 'Print', // IGNORE
'raindrop' => 'Raindrop.io', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE
'reddit' => 'Reddit', // TODO 'reddit' => 'Reddit', // IGNORE
'shaarli' => 'Shaarli', // IGNORE 'shaarli' => 'Shaarli', // IGNORE
'twitter' => 'Twitter', // IGNORE 'twitter' => 'Twitter', // IGNORE
'wallabag' => 'wallabag v1', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE
'wallabagv2' => 'wallabag v2', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE
'whatsapp' => 'Whatsapp', // TODO 'web-sharing-api' => 'System sharing', // TODO
'xing' => 'Xing', // TODO 'whatsapp' => 'Whatsapp', // IGNORE
'xing' => 'Xing', // IGNORE
), ),
'short' => array( 'short' => array(
'attention' => 'Upozornenie!', 'attention' => 'Upozornenie!',

View File

@ -198,17 +198,18 @@ return array(
'mastodon' => 'Mastodon', // IGNORE 'mastodon' => 'Mastodon', // IGNORE
'movim' => 'Movim', // IGNORE 'movim' => 'Movim', // IGNORE
'pinboard' => 'Pinboard', // IGNORE 'pinboard' => 'Pinboard', // IGNORE
'pinterest' => 'Pinterest', // TODO 'pinterest' => 'Pinterest', // IGNORE
'pocket' => 'Pocket', // IGNORE 'pocket' => 'Pocket', // IGNORE
'print' => 'Print', // IGNORE 'print' => 'Print', // IGNORE
'raindrop' => 'Raindrop.io', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE
'reddit' => 'Reddit', // TODO 'reddit' => 'Reddit', // IGNORE
'shaarli' => 'Shaarli', // IGNORE 'shaarli' => 'Shaarli', // IGNORE
'twitter' => 'Twitter', // IGNORE 'twitter' => 'Twitter', // IGNORE
'wallabag' => 'wallabag v1', // IGNORE 'wallabag' => 'wallabag v1', // IGNORE
'wallabagv2' => 'wallabag v2', // IGNORE 'wallabagv2' => 'wallabag v2', // IGNORE
'whatsapp' => 'Whatsapp', // TODO 'web-sharing-api' => 'System sharing', // TODO
'xing' => 'Xing', // TODO 'whatsapp' => 'Whatsapp', // IGNORE
'xing' => 'Xing', // IGNORE
), ),
'short' => array( 'short' => array(
'attention' => 'Tehlike!', 'attention' => 'Tehlike!',

View File

@ -198,17 +198,18 @@ return array(
'mastodon' => 'Mastodon', // IGNORE 'mastodon' => 'Mastodon', // IGNORE
'movim' => 'Movim', // IGNORE 'movim' => 'Movim', // IGNORE
'pinboard' => 'Pinboard', // IGNORE 'pinboard' => 'Pinboard', // IGNORE
'pinterest' => 'Pinterest', // TODO 'pinterest' => 'Pinterest', // IGNORE
'pocket' => 'Pocket', // IGNORE 'pocket' => 'Pocket', // IGNORE
'print' => '打印', 'print' => '打印',
'raindrop' => 'Raindrop.io', // IGNORE 'raindrop' => 'Raindrop.io', // IGNORE
'reddit' => 'Reddit', // TODO 'reddit' => 'Reddit', // IGNORE
'shaarli' => 'Shaarli', // IGNORE 'shaarli' => 'Shaarli', // IGNORE
'twitter' => '推特', // IGNORE 'twitter' => '推特', // IGNORE
'wallabag' => 'Wallabag v1', // IGNORE 'wallabag' => 'Wallabag v1', // IGNORE
'wallabagv2' => 'Wallabag v2', // IGNORE 'wallabagv2' => 'Wallabag v2', // IGNORE
'whatsapp' => 'Whatsapp', // TODO 'web-sharing-api' => 'System sharing', // TODO
'xing' => 'Xing', // TODO 'whatsapp' => 'Whatsapp', // IGNORE
'xing' => 'Xing', // IGNORE
), ),
'short' => array( 'short' => array(
'attention' => '警告!', 'attention' => '警告!',

View File

@ -35,6 +35,7 @@ return array(
'method' => 'GET', 'method' => 'GET',
), ),
'clipboard' => array( 'clipboard' => array(
'HTMLtag' => 'button',
'url' => '~LINK~', 'url' => '~LINK~',
'transform' => array(), 'transform' => array(),
'form' => 'simple', 'form' => 'simple',
@ -127,6 +128,7 @@ return array(
'method' => 'GET', 'method' => 'GET',
), ),
'print' => array( 'print' => array(
'HTMLtag' => 'button',
'url' => '#', 'url' => '#',
'transform' => array(), 'transform' => array(),
'form' => 'simple', 'form' => 'simple',
@ -172,6 +174,13 @@ return array(
'form' => 'advanced', 'form' => 'advanced',
'method' => 'GET', 'method' => 'GET',
), ),
'web-sharing-api' => array(
'HTMLtag' => 'button',
'url' => '~LINK~',
'transform' => array(),
'form' => 'simple',
'method' => 'GET',
),
'whatsapp' => array( 'whatsapp' => array(
'url' => 'https://wa.me/?text=~TITLE~ | ~LINK~', 'url' => 'https://wa.me/?text=~TITLE~ | ~LINK~',
'transform' => array('rawurlencode'), 'transform' => array('rawurlencode'),

View File

@ -96,9 +96,14 @@
$share_options['title'] = $title; $share_options['title'] = $title;
$share->update($share_options); $share->update($share_options);
?><li class="item share<?= $cssClass ?>"> ?><li class="item share<?= $cssClass ?>">
<?php if ('GET' === $share->method()) {?> <?php if ('GET' === $share->method()) {
if ($share->HTMLtag() !== 'button') {?>
<a target="_blank" rel="noreferrer" href="<?= $share->url() ?>" data-type="<?= $share->type() ?>"><?= $share->name() ?></a> <a target="_blank" rel="noreferrer" href="<?= $share->url() ?>" data-type="<?= $share->type() ?>"><?= $share->name() ?></a>
<?php } else {?> <?php } else { ?>
<button type="button" class="as-link" data-url="<?= $share->url() ?>" data-type="<?= $share->type() ?>" data-title="<?= htmlspecialchars($title) ?>"><?= $share->name() ?></button>
<?php
}
} else {?>
<a href="POST"><?= $share->name() ?></a> <a href="POST"><?= $share->name() ?></a>
<form method="POST" action="<?= $share->url() ?>" disabled="disabled"> <form method="POST" action="<?= $share->url() ?>" disabled="disabled">
<input type="hidden" value="<?= $link ?>" name="<?= $share->field() ?>"/> <input type="hidden" value="<?= $link ?>" name="<?= $share->field() ?>"/>

View File

@ -1018,7 +1018,7 @@ function init_stream(stream) {
return true; return true;
} }
el = ev.target.closest('.item.share > a[data-type="print"]'); el = ev.target.closest('.item.share > button[data-type="print"]');
if (el) { // Print if (el) { // Print
const tmp_window = window.open(); const tmp_window = window.open();
for (let i = 0; i < document.styleSheets.length; i++) { for (let i = 0; i < document.styleSheets.length; i++) {
@ -1032,9 +1032,19 @@ function init_stream(stream) {
return false; return false;
} }
el = ev.target.closest('.item.share > a[data-type="clipboard"]'); el = ev.target.closest('.item.share > button[data-type="clipboard"]');
if (el && navigator.clipboard) { // Clipboard if (el && navigator.clipboard) { // Clipboard
navigator.clipboard.writeText(el.href); navigator.clipboard.writeText(el.dataset.url);
return false;
}
el = ev.target.closest('.item.share > button[data-type="web-sharing-api"]');
if (el && navigator.share) { // https://developer.mozilla.org/en-US/docs/Web/API/Navigator/share
const shareData = {
url: el.dataset.url,
title: decodeURI(el.dataset.title),
};
navigator.share(shareData);
return false; return false;
} }
@ -1068,6 +1078,15 @@ function init_stream(stream) {
} }
}; };
if (!navigator.share) {
// https://developer.mozilla.org/en-US/docs/Web/API/Navigator/share
// do not show the menu entry if browser does not support navigator.share
document.styleSheets[0].insertRule(
'button.as-link[data-type="web-sharing-api"] {display: none !important;}',
document.styleSheets[0].cssRules.length
);
}
stream.onmouseup = function (ev) { // Mouseup enables us to catch middle click, and control+click in IE/Edge stream.onmouseup = function (ev) { // Mouseup enables us to catch middle click, and control+click in IE/Edge
if (ev.altKey || ev.metaKey || ev.shiftKey) { if (ev.altKey || ev.metaKey || ev.shiftKey) {
return; return;

View File

@ -1077,7 +1077,6 @@ a.website:hover .favicon {
overflow: hidden; overflow: hidden;
} }
.flux .item.share > a,
.item.query > a { .item.query > a {
display: list-item; display: list-item;
list-style-position: inside; list-style-position: inside;

View File

@ -1077,7 +1077,6 @@ a.website:hover .favicon {
overflow: hidden; overflow: hidden;
} }
.flux .item.share > a,
.item.query > a { .item.query > a {
display: list-item; display: list-item;
list-style-position: inside; list-style-position: inside;