parent
c15fdd0505
commit
523ac0fa60
Binary file not shown.
@ -0,0 +1,73 @@
|
||||
<?php
|
||||
/**
|
||||
* Plugin qrcode
|
||||
* Add QRCode containing URL for each links.
|
||||
* Display a QRCode icon in link list.
|
||||
*/
|
||||
|
||||
use Shaarli\Plugin\PluginManager;
|
||||
use Shaarli\Router;
|
||||
|
||||
/**
|
||||
* Add qrcode icon to link_plugin when rendering linklist.
|
||||
*
|
||||
* @param array $data - linklist data.
|
||||
*
|
||||
* @return mixed - linklist data with qrcode plugin.
|
||||
*/
|
||||
function hook_qrcode_render_linklist($data)
|
||||
{
|
||||
$qrcode_html = file_get_contents(PluginManager::$PLUGINS_PATH . '/qrcode/qrcode.html');
|
||||
|
||||
foreach ($data['links'] as &$value) {
|
||||
$qrcode = sprintf(
|
||||
$qrcode_html,
|
||||
$value['url'],
|
||||
PluginManager::$PLUGINS_PATH
|
||||
);
|
||||
$value['link_plugin'][] = $qrcode;
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* When linklist is displayed, include qrcode JS files.
|
||||
*
|
||||
* @param array $data - footer data.
|
||||
*
|
||||
* @return mixed - footer data with qrcode JS files added.
|
||||
*/
|
||||
function hook_qrcode_render_footer($data)
|
||||
{
|
||||
if ($data['_PAGE_'] == Router::$PAGE_LINKLIST) {
|
||||
$data['js_files'][] = PluginManager::$PLUGINS_PATH . '/qrcode/shaarli-qrcode.js';
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* When linklist is displayed, include qrcode CSS file.
|
||||
*
|
||||
* @param array $data - header data.
|
||||
*
|
||||
* @return mixed - header data with qrcode CSS file added.
|
||||
*/
|
||||
function hook_qrcode_render_includes($data)
|
||||
{
|
||||
if ($data['_PAGE_'] == Router::$PAGE_LINKLIST) {
|
||||
$data['css_files'][] = PluginManager::$PLUGINS_PATH . '/qrcode/qrcode.css';
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is never called, but contains translation calls for GNU gettext extraction.
|
||||
*/
|
||||
function qrcode_dummy_translation()
|
||||
{
|
||||
// meta
|
||||
t('For each link, add a QRCode icon.');
|
||||
}
|
@ -0,0 +1,90 @@
|
||||
/** @licstart The following is the entire license notice for the
|
||||
* JavaScript code in this page.
|
||||
*
|
||||
* Copyright: (c) 2011-2015 Sébastien SAUVAGE <sebsauvage@sebsauvage.net>
|
||||
* (c) 2011-2017 The Shaarli Community, see AUTHORS
|
||||
*
|
||||
* This software is provided 'as-is', without any express or implied warranty.
|
||||
* In no event will the authors be held liable for any damages arising from
|
||||
* the use of this software.
|
||||
*
|
||||
* Permission is granted to anyone to use this software for any purpose,
|
||||
* including commercial applications, and to alter it and redistribute it
|
||||
* freely, subject to the following restrictions:
|
||||
*
|
||||
* 1. The origin of this software must not be misrepresented; you must not
|
||||
* claim that you wrote the original software. If you use this software
|
||||
* in a product, an acknowledgment in the product documentation would
|
||||
* be appreciated but is not required.
|
||||
*
|
||||
* 2. Altered source versions must be plainly marked as such, and must
|
||||
* not be misrepresented as being the original software.
|
||||
*
|
||||
* 3. This notice may not be removed or altered from any source distribution.
|
||||
*
|
||||
* @licend The above is the entire license notice
|
||||
* for the JavaScript code in this page.
|
||||
*/
|
||||
|
||||
// Show the QR-Code of a permalink (when the QR-Code icon is clicked).
|
||||
function showQrCode(caller,loading)
|
||||
{
|
||||
// Dynamic javascript lib loading: We only load qr.js if the QR code icon is clicked:
|
||||
if (typeof(qr) == 'undefined') // Load qr.js only if not present.
|
||||
{
|
||||
if (!loading) // If javascript lib is still loading, do not append script to body.
|
||||
{
|
||||
var element = document.createElement("script");
|
||||
element.src = "plugins/qrcode/qr-1.1.3.min.js";
|
||||
document.body.appendChild(element);
|
||||
}
|
||||
setTimeout(function() { showQrCode(caller,true);}, 200); // Retry in 200 milliseconds.
|
||||
return false;
|
||||
}
|
||||
|
||||
// Remove previous qrcode if present.
|
||||
removeQrcode();
|
||||
|
||||
// Build the div which contains the QR-Code:
|
||||
var element = document.createElement('div');
|
||||
element.id = 'permalinkQrcode';
|
||||
|
||||
// Make QR-Code div commit sepuku when clicked:
|
||||
if ( element.attachEvent ){
|
||||
element.attachEvent('onclick', 'this.parentNode.removeChild(this);' );
|
||||
|
||||
} else {
|
||||
// Damn IE
|
||||
element.setAttribute('onclick', 'this.parentNode.removeChild(this);' );
|
||||
}
|
||||
|
||||
// Build the QR-Code:
|
||||
var image = qr.image({size: 8,value: caller.dataset.permalink});
|
||||
if (image)
|
||||
{
|
||||
element.appendChild(image);
|
||||
element.innerHTML += "<br>Click to close";
|
||||
caller.parentNode.appendChild(element);
|
||||
|
||||
// Show the QRCode
|
||||
qrcodeImage = document.getElementById('permalinkQrcode');
|
||||
// Workaround to deal with newly created element lag for transition.
|
||||
window.getComputedStyle(qrcodeImage).opacity;
|
||||
qrcodeImage.className = 'show';
|
||||
}
|
||||
else
|
||||
{
|
||||
element.innerHTML = "Your browser does not seem to be HTML5 compatible.";
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// Remove any displayed QR-Code
|
||||
function removeQrcode()
|
||||
{
|
||||
var elem = document.getElementById('permalinkQrcode');
|
||||
if (elem) {
|
||||
elem.parentNode.removeChild(elem);
|
||||
}
|
||||
return false;
|
||||
}
|
@ -1 +1 @@
|
||||
Subproject commit e48b471c0b89d40a165086723aa26491d4472fab
|
||||
Subproject commit 6c8a93ad0c9e0cdd1b2d999833f4ed0d6b3f2035
|
@ -0,0 +1 @@
|
||||
Subproject commit 7c6d5c83db6b89042f81ad10a5c882b7c1459ea0
|
@ -1 +0,0 @@
|
||||
Subproject commit 7ac0f0e56c444ee5796d4d8e4b115afb30b0ea29
|
@ -1 +0,0 @@
|
||||
Subproject commit a3fba6111d6560c3377fbcc9519a85ada9f489df
|
Loading…
Reference in new issue