mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2024-08-28 12:02:40 +00:00
91 lines
2.5 KiB
JavaScript
91 lines
2.5 KiB
JavaScript
![]() |
/*\
|
||
|
title: $:/plugins/tiddlywiki/qrcode/barcodereader.js
|
||
|
type: application/javascript
|
||
|
module-type: widget
|
||
|
|
||
|
barcodereader widget for reading barcodes
|
||
|
|
||
|
\*/
|
||
|
(function(){
|
||
|
|
||
|
/*jslint node: true, browser: true */
|
||
|
/*global $tw: false */
|
||
|
"use strict";
|
||
|
|
||
|
var Widget = require("$:/core/modules/widgets/widget.js").widget;
|
||
|
|
||
|
var nextID = 0;
|
||
|
|
||
|
var BarCodeReaderWidget = function(parseTreeNode,options) {
|
||
|
this.initialise(parseTreeNode,options);
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Inherit from the base widget class
|
||
|
*/
|
||
|
BarCodeReaderWidget.prototype = new Widget();
|
||
|
|
||
|
/*
|
||
|
Render this widget into the DOM
|
||
|
*/
|
||
|
BarCodeReaderWidget.prototype.render = function(parent,nextSibling) {
|
||
|
var self = this;
|
||
|
this.parentDomNode = parent;
|
||
|
this.computeAttributes();
|
||
|
// Make the child widgets
|
||
|
this.makeChildWidgets();
|
||
|
// Generate an ID for this element
|
||
|
var id = "capture-widget-internal-" + nextID;
|
||
|
nextID += 1;
|
||
|
// Create the DOM node and render children
|
||
|
var domNode = this.document.createElement("div");
|
||
|
domNode.className = "tc-readcode-widget";
|
||
|
domNode.setAttribute("width","300px");
|
||
|
domNode.setAttribute("height","300px");
|
||
|
domNode.id = id;
|
||
|
parent.insertBefore(domNode,nextSibling);
|
||
|
this.renderChildren(domNode,null);
|
||
|
this.domNodes.push(domNode);
|
||
|
// Setup the qrcode library
|
||
|
if($tw.browser) {
|
||
|
var __Html5QrcodeLibrary__ = require("$:/plugins/tiddlywiki/qrcode/html5-qrcode/html5-qrcode.js").__Html5QrcodeLibrary__;
|
||
|
function onScanSuccess(decodedText, decodedResult) {
|
||
|
self.invokeActionString(self.getAttribute("actionsSuccess",""),self,{},{
|
||
|
format: decodedResult.result.format.formatName,
|
||
|
text: decodedText
|
||
|
});
|
||
|
console.log("Scan result",decodedResult,decodedText);
|
||
|
}
|
||
|
function onScanFailure(errorMessage) {
|
||
|
self.invokeActionString(self.getAttribute("actionsFailure",""),self,{},{
|
||
|
error: errorMessage
|
||
|
});
|
||
|
console.log("Scan error",errorMessage);
|
||
|
}
|
||
|
var html5QrcodeScanner = new __Html5QrcodeLibrary__.Html5QrcodeScanner(
|
||
|
id,
|
||
|
{
|
||
|
fps: 10,
|
||
|
qrbox: 250
|
||
|
}
|
||
|
);
|
||
|
html5QrcodeScanner.render(onScanSuccess,onScanFailure);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/*
|
||
|
Selectively refreshes the widget if needed. Returns true if the widget or any of its children needed re-rendering
|
||
|
*/
|
||
|
BarCodeReaderWidget.prototype.refresh = function(changedTiddlers) {
|
||
|
var changedAttributes = this.computeAttributes(),
|
||
|
hasChangedAttributes = $tw.utils.count(changedAttributes) > 0;
|
||
|
if(hasChangedAttributes) {
|
||
|
return this.refreshSelf();
|
||
|
}
|
||
|
return this.refreshChildren(changedTiddlers) || hasChangedAttributes;
|
||
|
};
|
||
|
|
||
|
exports.barcodereader = BarCodeReaderWidget;
|
||
|
|
||
|
})();
|