PLUGIN QRCode

Add an icon in linklist to display links QRCode
This commit is contained in:
ArthurHoaro 2015-07-15 12:02:56 +02:00
parent a52e843593
commit 14c8efbe31
6 changed files with 1317 additions and 0 deletions

1215
plugins/qrcode/qr-1.1.3.js Normal file

File diff suppressed because it is too large Load Diff

5
plugins/qrcode/qr-1.1.3.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,5 @@
<div class="linkqrcode">
<a href="http://qrfree.kaywa.com/?l=1&amp;s=8&amp;d=%s" onclick="showQrCode(this); return false;" class="qrcode" data-permalink="%s">
<img src="%s/qrcode/qrcode.png" width="13" height="13" title="QR-Code">
</a>
</div>

36
plugins/qrcode/qrcode.php Normal file
View File

@ -0,0 +1,36 @@
<?php
// TODO: Can't be tested in localhost
/**
* Add qrcode icon to link_plugin when rendering linklist.
*
* @param $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'], $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;
}

BIN
plugins/qrcode/qrcode.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 B

View File

@ -0,0 +1,56 @@
// 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);
}
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;
}