diff options
-rw-r--r-- | assets/default/js/base.js | 2 | ||||
-rw-r--r-- | index.php | 11 | ||||
-rw-r--r-- | plugins/isso/comment.png | bin | 0 -> 277 bytes | |||
-rw-r--r-- | plugins/isso/isso.php | 31 | ||||
-rw-r--r-- | plugins/isso/isso_button.html | 5 | ||||
-rw-r--r-- | tests/plugins/PluginIssoTest.php | 16 |
6 files changed, 55 insertions, 10 deletions
diff --git a/assets/default/js/base.js b/assets/default/js/base.js index 8bf79d3e..1b8d8c36 100644 --- a/assets/default/js/base.js +++ b/assets/default/js/base.js | |||
@@ -548,7 +548,7 @@ function init(description) { | |||
548 | event.preventDefault(); | 548 | event.preventDefault(); |
549 | const block = findParent(event.target, 'div', { class: 'tag-list-item' }); | 549 | const block = findParent(event.target, 'div', { class: 'tag-list-item' }); |
550 | const tag = block.getAttribute('data-tag'); | 550 | const tag = block.getAttribute('data-tag'); |
551 | const refreshedToken = document.getElementById('token'); | 551 | const refreshedToken = document.getElementById('token').value; |
552 | 552 | ||
553 | if (confirm(`Are you sure you want to delete the tag "${tag}"?`)) { | 553 | if (confirm(`Are you sure you want to delete the tag "${tag}"?`)) { |
554 | const xhr = new XMLHttpRequest(); | 554 | const xhr = new XMLHttpRequest(); |
@@ -1084,7 +1084,8 @@ function renderPage($conf, $pluginManager, $LINKSDB, $history, $sessionManager, | |||
1084 | die(t('Wrong token.')); | 1084 | die(t('Wrong token.')); |
1085 | } | 1085 | } |
1086 | 1086 | ||
1087 | $alteredLinks = $LINKSDB->renameTag(escape($_POST['fromtag']), escape($_POST['totag'])); | 1087 | $toTag = isset($_POST['totag']) ? escape($_POST['totag']) : null; |
1088 | $alteredLinks = $LINKSDB->renameTag(escape($_POST['fromtag']), $toTag); | ||
1088 | $LINKSDB->save($conf->get('resource.page_cache')); | 1089 | $LINKSDB->save($conf->get('resource.page_cache')); |
1089 | foreach ($alteredLinks as $link) { | 1090 | foreach ($alteredLinks as $link) { |
1090 | $history->updateLink($link); | 1091 | $history->updateLink($link); |
@@ -1858,6 +1859,7 @@ $app->group('/api/v1', function() { | |||
1858 | })->add('\Shaarli\Api\ApiMiddleware'); | 1859 | })->add('\Shaarli\Api\ApiMiddleware'); |
1859 | 1860 | ||
1860 | $response = $app->run(true); | 1861 | $response = $app->run(true); |
1862 | |||
1861 | // Hack to make Slim and Shaarli router work together: | 1863 | // Hack to make Slim and Shaarli router work together: |
1862 | // If a Slim route isn't found and NOT API call, we call renderPage(). | 1864 | // If a Slim route isn't found and NOT API call, we call renderPage(). |
1863 | if ($response->getStatusCode() == 404 && strpos($_SERVER['REQUEST_URI'], '/api/v1') === false) { | 1865 | if ($response->getStatusCode() == 404 && strpos($_SERVER['REQUEST_URI'], '/api/v1') === false) { |
@@ -1865,5 +1867,12 @@ if ($response->getStatusCode() == 404 && strpos($_SERVER['REQUEST_URI'], '/api/v | |||
1865 | header('Content-Type: text/html; charset=utf-8'); | 1867 | header('Content-Type: text/html; charset=utf-8'); |
1866 | renderPage($conf, $pluginManager, $linkDb, $history, $sessionManager, $loginManager); | 1868 | renderPage($conf, $pluginManager, $linkDb, $history, $sessionManager, $loginManager); |
1867 | } else { | 1869 | } else { |
1870 | $response = $response | ||
1871 | ->withHeader('Access-Control-Allow-Origin', '*') | ||
1872 | ->withHeader( | ||
1873 | 'Access-Control-Allow-Headers', | ||
1874 | 'X-Requested-With, Content-Type, Accept, Origin, Authorization' | ||
1875 | ) | ||
1876 | ->withHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); | ||
1868 | $app->respond($response); | 1877 | $app->respond($response); |
1869 | } | 1878 | } |
diff --git a/plugins/isso/comment.png b/plugins/isso/comment.png new file mode 100644 index 00000000..0158c03b --- /dev/null +++ b/plugins/isso/comment.png | |||
Binary files differ | |||
diff --git a/plugins/isso/isso.php b/plugins/isso/isso.php index 5bc1cce2..378c11af 100644 --- a/plugins/isso/isso.php +++ b/plugins/isso/isso.php | |||
@@ -46,9 +46,36 @@ function hook_isso_render_linklist($data, $conf) | |||
46 | 46 | ||
47 | $isso = sprintf($issoHtml, $issoUrl, $issoUrl, $link['id'], $link['id']); | 47 | $isso = sprintf($issoHtml, $issoUrl, $issoUrl, $link['id'], $link['id']); |
48 | $data['plugin_end_zone'][] = $isso; | 48 | $data['plugin_end_zone'][] = $isso; |
49 | } else { | ||
50 | $button = '<span><a href="?%s#isso-thread">'; | ||
51 | // For the default theme we use a FontAwesome icon which is better than an image | ||
52 | if ($conf->get('resource.theme') === 'default') { | ||
53 | $button .= '<i class="linklist-plugin-icon fa fa-comment"></i>'; | ||
54 | } else { | ||
55 | $button .= '<img class="linklist-plugin-icon" src="plugins/isso/comment.png" '; | ||
56 | $button .= 'title="Comment on this shaare" alt="Comments" />'; | ||
57 | } | ||
58 | $button .= '</a></span>'; | ||
59 | foreach ($data['links'] as &$value) { | ||
60 | $commentLink = sprintf($button, $value['shorturl']); | ||
61 | $value['link_plugin'][] = $commentLink; | ||
62 | } | ||
63 | } | ||
49 | 64 | ||
50 | // Hackish way to include this CSS file only when necessary. | 65 | return $data; |
51 | $data['plugins_includes']['css_files'][] = PluginManager::$PLUGINS_PATH . '/isso/isso.css'; | 66 | } |
67 | |||
68 | /** | ||
69 | * When linklist is displayed, include isso CSS file. | ||
70 | * | ||
71 | * @param array $data - header data. | ||
72 | * | ||
73 | * @return mixed - header data with isso CSS file added. | ||
74 | */ | ||
75 | function hook_isso_render_includes($data) | ||
76 | { | ||
77 | if ($data['_PAGE_'] == Router::$PAGE_LINKLIST) { | ||
78 | $data['css_files'][] = PluginManager::$PLUGINS_PATH . '/isso/isso.css'; | ||
52 | } | 79 | } |
53 | 80 | ||
54 | return $data; | 81 | return $data; |
diff --git a/plugins/isso/isso_button.html b/plugins/isso/isso_button.html new file mode 100644 index 00000000..3f828480 --- /dev/null +++ b/plugins/isso/isso_button.html | |||
@@ -0,0 +1,5 @@ | |||
1 | <span> | ||
2 | <a href="?%s#isso-thread"> | ||
3 | <img class="linklist-plugin-icon" src="plugins/archiveorg/internetarchive.png" title="%s" alt="archive.org" /> | ||
4 | </a> | ||
5 | </span> | ||
diff --git a/tests/plugins/PluginIssoTest.php b/tests/plugins/PluginIssoTest.php index 0ae73183..2c9efbcd 100644 --- a/tests/plugins/PluginIssoTest.php +++ b/tests/plugins/PluginIssoTest.php | |||
@@ -21,7 +21,7 @@ class PluginIssoTest extends PHPUnit_Framework_TestCase | |||
21 | /** | 21 | /** |
22 | * Test Isso init without errors. | 22 | * Test Isso init without errors. |
23 | */ | 23 | */ |
24 | public function testWallabagInitNoError() | 24 | public function testIssoInitNoError() |
25 | { | 25 | { |
26 | $conf = new ConfigManager(''); | 26 | $conf = new ConfigManager(''); |
27 | $conf->set('plugins.ISSO_SERVER', 'value'); | 27 | $conf->set('plugins.ISSO_SERVER', 'value'); |
@@ -32,7 +32,7 @@ class PluginIssoTest extends PHPUnit_Framework_TestCase | |||
32 | /** | 32 | /** |
33 | * Test Isso init with errors. | 33 | * Test Isso init with errors. |
34 | */ | 34 | */ |
35 | public function testWallabagInitError() | 35 | public function testIssoInitError() |
36 | { | 36 | { |
37 | $conf = new ConfigManager(''); | 37 | $conf = new ConfigManager(''); |
38 | $errors = isso_init($conf); | 38 | $errors = isso_init($conf); |
@@ -96,19 +96,22 @@ class PluginIssoTest extends PHPUnit_Framework_TestCase | |||
96 | array( | 96 | array( |
97 | 'id' => 12, | 97 | 'id' => 12, |
98 | 'url' => $str, | 98 | 'url' => $str, |
99 | 'shorturl' => $short1 = 'abcd', | ||
99 | 'created' => DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $date1), | 100 | 'created' => DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $date1), |
100 | ), | 101 | ), |
101 | array( | 102 | array( |
102 | 'id' => 13, | 103 | 'id' => 13, |
103 | 'url' => $str . '2', | 104 | 'url' => $str . '2', |
105 | 'shorturl' => $short2 = 'efgh', | ||
104 | 'created' => DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $date2), | 106 | 'created' => DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $date2), |
105 | ), | 107 | ), |
106 | ) | 108 | ) |
107 | ); | 109 | ); |
108 | 110 | ||
109 | $processed = hook_isso_render_linklist($data, $conf); | 111 | $processed = hook_isso_render_linklist($data, $conf); |
110 | // data shouldn't be altered | 112 | // link_plugin should be added for the icon |
111 | $this->assertEquals($data, $processed); | 113 | $this->assertContains('<a href="?'. $short1 .'#isso-thread">', $processed['links'][0]['link_plugin'][0]); |
114 | $this->assertContains('<a href="?'. $short2 .'#isso-thread">', $processed['links'][1]['link_plugin'][0]); | ||
112 | } | 115 | } |
113 | 116 | ||
114 | /** | 117 | /** |
@@ -127,6 +130,7 @@ class PluginIssoTest extends PHPUnit_Framework_TestCase | |||
127 | array( | 130 | array( |
128 | 'id' => 12, | 131 | 'id' => 12, |
129 | 'url' => $str, | 132 | 'url' => $str, |
133 | 'shorturl' => $short1 = 'abcd', | ||
130 | 'created' => DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $date), | 134 | 'created' => DateTime::createFromFormat(LinkDB::LINK_DATE_FORMAT, $date), |
131 | ) | 135 | ) |
132 | ), | 136 | ), |
@@ -135,8 +139,8 @@ class PluginIssoTest extends PHPUnit_Framework_TestCase | |||
135 | 139 | ||
136 | $processed = hook_isso_render_linklist($data, $conf); | 140 | $processed = hook_isso_render_linklist($data, $conf); |
137 | 141 | ||
138 | // data shouldn't be altered | 142 | // link_plugin should be added for the icon |
139 | $this->assertEquals($data, $processed); | 143 | $this->assertContains('<a href="?'. $short1 .'#isso-thread">', $processed['links'][0]['link_plugin'][0]); |
140 | } | 144 | } |
141 | 145 | ||
142 | /** | 146 | /** |