- [ShaarliOS](https://github.com/mro/ShaarliOS) - Apple iOS share extension.
- [Shaarli for Android](http://sebsauvage.net/links/?ZAyDzg) - Android application that adds Shaarli as a sharing provider
- [Shaarlier for Android](https://github.com/dimtion/Shaarlier) - Android application to simply add links directly into your Shaarli
+- [Stakali for Android](https://stakali.toneiv.eu) - Stakali is a personal bookmark manager which synchronizes with Shaarli
### Browser addons
- * [Shaarli Web Extension](https://github.com/ikipatang/shaarli-web-extension) - toolbar button to share your current tab with Shaarli.
+- [Shaarli Firefox Extension](https://github.com/ikipatang/shaarli-web-extension) - toolbar button to share your current tab with Shaarli.
+- [Shaarli Chrome Extension](https://github.com/octplane/Shiny-Shaarli) - toolbar button to share your current tab with Shaarli.
### Server apps
- [shaarchiver](https://github.com/nodiscc/shaarchiver) - Archive your Shaarli bookmarks and their content
* Shaare's descriptions are parsed with Markdown.
*/
+use Shaarli\Config\ConfigManager;
+
/*
* If this tag is used on a shaare, the description won't be processed by Parsedown.
*/
$value = stripNoMarkdownTag($value);
continue;
}
+ $value['description'] = reverse_feed_permalink($value['description']);
$value['description'] = process_markdown(
$value['description'],
$conf->get('security.markdown_escape', true),
return preg_replace('/(^| ) /m', '$1 ', $description);
}
+function reverse_feed_permalink($description)
+{
+ return preg_replace('@— <a href="([^"]+)" title="[^"]+">(\w+)</a>$@im', '— [$2]($1)', $description);
+}
+
/**
* Replace not whitelisted protocols with http:// in given description.
*
$this->assertNotFalse(strpos($data['links'][0]['description'], '<p>'));
}
+ /**
+ * Test render_feed hook.
+ */
+ public function testMarkdownFeed()
+ {
+ $markdown = '# My title' . PHP_EOL . 'Very interesting content.';
+ $markdown .= '— <a href="http://domain.tld/?0oc_VQ" title="Permalien">Permalien</a>';
+ $data = array(
+ 'links' => array(
+ 0 => array(
+ 'description' => $markdown,
+ ),
+ ),
+ );
+
+ $data = hook_markdown_render_feed($data, $this->conf);
+ $this->assertNotFalse(strpos($data['links'][0]['description'], '<h1>'));
+ $this->assertNotFalse(strpos($data['links'][0]['description'], '<p>'));
+ $this->assertStringEndsWith(
+ '— <a href="http://domain.tld/?0oc_VQ">Permalien</a></p></div>',
+ $data['links'][0]['description']
+ );
+ }
+
/**
* Test render_daily hook.
* Only check that there is basic markdown rendering.
$this->assertEquals($text, $reversedText);
}
+ public function testReverseFeedPermalink()
+ {
+ $text = 'Description... ';
+ $text .= '— <a href="http://domain.tld/?0oc_VQ" title="Permalien">Permalien</a>';
+ $expected = 'Description... — [Permalien](http://domain.tld/?0oc_VQ)';
+ $processedText = reverse_feed_permalink($text);
+
+ $this->assertEquals($expected, $processedText);
+ }
+
+ public function testReverseLastFeedPermalink()
+ {
+ $text = 'Description... ';
+ $text .= '<br>— <a href="http://domain.tld/?0oc_VQ" title="Permalien">Permalien</a>';
+ $expected = $text;
+ $text .= '<br>— <a href="http://domain.tld/?0oc_VQ" title="Permalien">Permalien</a>';
+ $expected .= '<br>— [Permalien](http://domain.tld/?0oc_VQ)';
+ $processedText = reverse_feed_permalink($text);
+
+ $this->assertEquals($expected, $processedText);
+ }
+
+ public function testReverseNoFeedPermalink()
+ {
+ $text = 'Hello! Where are you from?';
+ $expected = $text;
+ $processedText = reverse_feed_permalink($text);
+
+ $this->assertEquals($expected, $processedText);
+ }
+
/**
* Test sanitize_html().
*/
</div>
<div class="tools-item">
<a href="https://play.google.com/store/apps/details?id=com.dimtion.shaarlier&hl=fr"
- title="Android">
- <span class="pure-button pure-u-lg-2-3 pure-u-3-4">Android</span>
+ title="Android Shaarlier">
+ <span class="pure-button pure-u-lg-2-3 pure-u-3-4">Android Shaarlier</span>
+ </a>
+ </div>
+ <div class="tools-item">
+ <a href="https://stakali.toneiv.eu/"
+ title="Android Stakali">
+ <span class="pure-button pure-u-lg-2-3 pure-u-3-4">Android Stakali</span>
</a>
</div>
<div class="tools-item">