diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000000..9fa808eed9 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +**/vendor/* diff --git a/bookwyrm/forms.py b/bookwyrm/forms.py index f152ed4ea0..7cfbe6283f 100644 --- a/bookwyrm/forms.py +++ b/bookwyrm/forms.py @@ -468,7 +468,12 @@ class Meta: fields = ["name", "path"] widgets = { "name": forms.TextInput(attrs={"aria-describedby": "desc_name"}), - "path": forms.Select(attrs={"aria-describedby": "desc_path"}), + "path": forms.TextInput( + attrs={ + "aria-describedby": "desc_path", + "placeholder": "css/themes/theme-name.scss", + } + ), } diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index b8adacc009..ca4003eff4 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -11,7 +11,7 @@ env = Env() env.read_env() DOMAIN = env("DOMAIN") -VERSION = "0.3.2" +VERSION = "0.3.3" RELEASE_API = env( "RELEASE_API", @@ -21,7 +21,7 @@ PAGE_LENGTH = env("PAGE_LENGTH", 15) DEFAULT_LANGUAGE = env("DEFAULT_LANGUAGE", "English") -JS_CACHE = "c7154efb" +JS_CACHE = "bc93172a" # email EMAIL_BACKEND = env("EMAIL_BACKEND", "django.core.mail.backends.smtp.EmailBackend") diff --git a/bookwyrm/static/css/bookwyrm/_all.scss b/bookwyrm/static/css/bookwyrm/_all.scss index f01cec606e..6002785f70 100644 --- a/bookwyrm/static/css/bookwyrm/_all.scss +++ b/bookwyrm/static/css/bookwyrm/_all.scss @@ -1,6 +1,7 @@ /** Imports ******************************************************************************/ @import "components/avatar"; +@import "components/barcode"; @import "components/book_cover"; @import "components/book_grid"; @import "components/book_list"; diff --git a/bookwyrm/static/css/bookwyrm/components/_barcode.scss b/bookwyrm/static/css/bookwyrm/components/_barcode.scss new file mode 100644 index 0000000000..c9c67e8e56 --- /dev/null +++ b/bookwyrm/static/css/bookwyrm/components/_barcode.scss @@ -0,0 +1,26 @@ +/* Barcode scanner CSS */ +#barcode-scanner { + position: relative; + max-width: 100%; + text-align: center; + height: calc(70vh - 200px); + + video { + height: calc(70vh - 200px); + max-width: 100%; + } + + canvas { + position: absolute; + top: 0; + left: 0; + right: 0; + margin: auto; + height: calc(70vh - 200px); + max-width: 100%; + } +} + +#barcode-camera-list { + float: right; +} diff --git a/bookwyrm/static/css/fonts/icomoon.eot b/bookwyrm/static/css/fonts/icomoon.eot index 7b1f2d9d9f..69628662be 100644 Binary files a/bookwyrm/static/css/fonts/icomoon.eot and b/bookwyrm/static/css/fonts/icomoon.eot differ diff --git a/bookwyrm/static/css/fonts/icomoon.svg b/bookwyrm/static/css/fonts/icomoon.svg index 7dbbe0dc59..c67c8b225f 100644 --- a/bookwyrm/static/css/fonts/icomoon.svg +++ b/bookwyrm/static/css/fonts/icomoon.svg @@ -39,6 +39,7 @@ + diff --git a/bookwyrm/static/css/fonts/icomoon.ttf b/bookwyrm/static/css/fonts/icomoon.ttf index 151f2b782e..12c79d5517 100644 Binary files a/bookwyrm/static/css/fonts/icomoon.ttf and b/bookwyrm/static/css/fonts/icomoon.ttf differ diff --git a/bookwyrm/static/css/fonts/icomoon.woff b/bookwyrm/static/css/fonts/icomoon.woff index bc08184133..624b70f337 100644 Binary files a/bookwyrm/static/css/fonts/icomoon.woff and b/bookwyrm/static/css/fonts/icomoon.woff differ diff --git a/bookwyrm/static/css/vendor/icons.css b/bookwyrm/static/css/vendor/icons.css index 4bc7cca556..6477aee5c0 100644 --- a/bookwyrm/static/css/vendor/icons.css +++ b/bookwyrm/static/css/vendor/icons.css @@ -149,3 +149,6 @@ .icon-download:before { content: "\ea36"; } +.icon-barcode:before { + content: "\e937"; +} diff --git a/bookwyrm/static/js/bookwyrm.js b/bookwyrm/static/js/bookwyrm.js index cf3ce30326..100daa0390 100644 --- a/bookwyrm/static/js/bookwyrm.js +++ b/bookwyrm/static/js/bookwyrm.js @@ -1,5 +1,5 @@ /* exported BookWyrm */ -/* globals TabGroup */ +/* globals TabGroup, Quagga */ let BookWyrm = new (class { constructor() { @@ -47,6 +47,10 @@ let BookWyrm = new (class { .forEach((node) => node.addEventListener("toggle", this.handleDetailsDropdown.bind(this)) ); + + document + .querySelector("#barcode-scanner-modal") + .addEventListener("open", this.openBarcodeScanner.bind(this)); } /** @@ -427,9 +431,11 @@ let BookWyrm = new (class { }); modalElement.addEventListener("keydown", handleFocusTrap); + modalElement.dispatchEvent(new Event("open")); } function handleModalClose(modalElement) { + modalElement.dispatchEvent(new Event("close")); modalElement.removeEventListener("keydown", handleFocusTrap); htmlElement.classList.remove("is-clipped"); modalElement.classList.remove("is-active"); @@ -632,4 +638,174 @@ let BookWyrm = new (class { } } } + + openBarcodeScanner(event) { + const scannerNode = document.getElementById("barcode-scanner"); + const statusNode = document.getElementById("barcode-status"); + const cameraListNode = document.querySelector("#barcode-camera-list > select"); + + cameraListNode.addEventListener("change", onChangeCamera); + + function onChangeCamera(event) { + initBarcodes(event.target.value); + } + + function toggleStatus(status) { + for (const child of statusNode.children) { + BookWyrm.toggleContainer(child, !child.classList.contains(status)); + } + } + + function initBarcodes(cameraId = null) { + toggleStatus("grant-access"); + + if (!cameraId) { + cameraId = sessionStorage.getItem("preferredCam"); + } else { + sessionStorage.setItem("preferredCam", cameraId); + } + + scannerNode.replaceChildren(); + Quagga.stop(); + Quagga.init( + { + inputStream: { + name: "Live", + type: "LiveStream", + target: scannerNode, + constraints: { + facingMode: "environment", + deviceId: cameraId, + }, + }, + decoder: { + readers: [ + "ean_reader", + { + format: "ean_reader", + config: { + supplements: ["ean_2_reader", "ean_5_reader"], + }, + }, + ], + multiple: false, + }, + }, + (err) => { + if (err) { + scannerNode.replaceChildren(); + console.log(err); + toggleStatus("access-denied"); + + return; + } + + let activeId = null; + const track = Quagga.CameraAccess.getActiveTrack(); + + if (track) { + activeId = track.getSettings().deviceId; + } + + Quagga.CameraAccess.enumerateVideoDevices().then((devices) => { + cameraListNode.replaceChildren(); + + for (const device of devices) { + const child = document.createElement("option"); + + child.value = device.deviceId; + child.innerText = device.label.slice(0, 30); + + if (activeId === child.value) { + child.selected = true; + } + + cameraListNode.appendChild(child); + } + }); + + toggleStatus("scanning"); + Quagga.start(); + } + ); + } + + function cleanup(clearDrawing = true) { + Quagga.stop(); + cameraListNode.removeEventListener("change", onChangeCamera); + + if (clearDrawing) { + scannerNode.replaceChildren(); + } + } + + Quagga.onProcessed((result) => { + const drawingCtx = Quagga.canvas.ctx.overlay; + const drawingCanvas = Quagga.canvas.dom.overlay; + + if (result) { + if (result.boxes) { + drawingCtx.clearRect( + 0, + 0, + parseInt(drawingCanvas.getAttribute("width")), + parseInt(drawingCanvas.getAttribute("height")) + ); + result.boxes + .filter((box) => box !== result.box) + .forEach((box) => { + Quagga.ImageDebug.drawPath(box, { x: 0, y: 1 }, drawingCtx, { + color: "green", + lineWidth: 2, + }); + }); + } + + if (result.box) { + Quagga.ImageDebug.drawPath(result.box, { x: 0, y: 1 }, drawingCtx, { + color: "#00F", + lineWidth: 2, + }); + } + + if (result.codeResult && result.codeResult.code) { + Quagga.ImageDebug.drawPath(result.line, { x: "x", y: "y" }, drawingCtx, { + color: "red", + lineWidth: 3, + }); + } + } + }); + + let lastDetection = null; + let numDetected = 0; + + Quagga.onDetected((result) => { + // Detect the same code 3 times as an extra check to avoid bogus scans. + if (lastDetection === null || lastDetection !== result.codeResult.code) { + numDetected = 1; + lastDetection = result.codeResult.code; + + return; + } else if (numDetected++ < 3) { + return; + } + + const code = result.codeResult.code; + + statusNode.querySelector(".isbn").innerText = code; + toggleStatus("found"); + + const search = new URL("/search", document.location); + + search.searchParams.set("q", code); + + cleanup(false); + location.assign(search); + }); + + event.target.addEventListener("close", cleanup, { once: true }); + + initBarcodes(); + } })(); diff --git a/bookwyrm/static/js/vendor/quagga.min.js b/bookwyrm/static/js/vendor/quagga.min.js new file mode 100644 index 0000000000..84ccb74fcc --- /dev/null +++ b/bookwyrm/static/js/vendor/quagga.min.js @@ -0,0 +1,3 @@ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Quagga=e():t.Quagga=e()}(window,(function(){return function(t){var e={};function n(r){if(e[r])return e[r].exports;var o=e[r]={i:r,l:!1,exports:{}};return t[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(r,o,function(e){return t[e]}.bind(null,o));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="/",n(n.s=89)}([function(t,e){t.exports=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},t.exports.default=t.exports,t.exports.__esModule=!0},function(t,e){t.exports=function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t},t.exports.default=t.exports,t.exports.__esModule=!0},function(t,e){function n(e){return t.exports=n=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)},t.exports.default=t.exports,t.exports.__esModule=!0,n(e)}t.exports=n,t.exports.default=t.exports,t.exports.__esModule=!0},function(t,e){t.exports=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},t.exports.default=t.exports,t.exports.__esModule=!0},function(t,e){function n(t,e){for(var n=0;n=0;e--){var n=Math.floor(Math.random()*e),r=t[e];t[e]=t[n],t[n]=r}return t},toPointList:function(t){var e=t.reduce((function(t,e){var n="[".concat(e.join(","),"]");return t.push(n),t}),[]);return"[".concat(e.join(",\r\n"),"]")},threshold:function(t,e,n){return t.reduce((function(r,o){return n.apply(t,[o])>=e&&r.push(o),r}),[])},maxIndex:function(t){for(var e=0,n=0;nt[e]&&(e=n);return e},max:function(t){for(var e=0,n=0;ne&&(e=t[n]);return e},sum:function(t){for(var e=t.length,n=0;e--;)n+=t[e];return n}}},function(t,e,n){"use strict";n.d(e,"h",(function(){return l})),n.d(e,"i",(function(){return d})),n.d(e,"b",(function(){return p})),n.d(e,"j",(function(){return v})),n.d(e,"e",(function(){return y})),n.d(e,"c",(function(){return g})),n.d(e,"f",(function(){return x})),n.d(e,"g",(function(){return _})),n.d(e,"a",(function(){return b})),n.d(e,"d",(function(){return O}));var r=n(7),o=n(84),i={clone:r.clone,dot:r.dot},a=function(t,e){var n=[],r={rad:0,vec:i.clone([0,0])},o={};function a(t){o[t.id]=t,n.push(t)}function u(){var t,e=0;for(t=0;te},getPoints:function(){return n},getCenter:function(){return r}}},u=function(t,e,n){return{rad:t[n],point:t,id:e}},c=n(8),s={clone:r.clone},f={clone:o.clone};function l(t,e){return{x:t,y:e,toVec2:function(){return s.clone([this.x,this.y])},toVec3:function(){return f.clone([this.x,this.y,1])},round:function(){return this.x=this.x>0?Math.floor(this.x+.5):Math.floor(this.x-.5),this.y=this.y>0?Math.floor(this.y+.5):Math.floor(this.y-.5),this}}}function h(t,e){e||(e=8);for(var n=t.data,r=n.length,o=8-e,i=new Int32Array(1<>o]++;return i}function d(t,e){var n=function(t){var e,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:8,r=8-n;function o(t,n){for(var r=0,o=t;o<=n;o++)r+=e[o];return r}function i(t,n){for(var r=0,o=t;o<=n;o++)r+=o*e[o];return r}function a(){var r,a,u,s,f=[0],l=(1<c)for((i=s[u]).score=o,i.item=t[r],c=Number.MAX_VALUE,a=0;a1&&void 0!==arguments[1]?arguments[1]:[0,0,0],n=t[0],r=t[1],o=t[2],i=o*r,a=i*(1-Math.abs(n/60%2-1)),u=o-i,c=0,s=0,f=0;return n<60?(c=i,s=a):n<120?(c=a,s=i):n<180?(s=i,f=a):n<240?(s=a,f=i):n<300?(c=a,f=i):n<360&&(c=i,f=a),e[0]=255*(c+u)|0,e[1]=255*(s+u)|0,e[2]=255*(f+u)|0,e}function m(t){for(var e=[],n=[],r=1;re[r]?r++:n++;return o}(r,o),u=[8,10,15,20,32,60,80],c={"x-small":5,small:4,medium:3,large:2,"x-large":1},s=c[t]||c.medium,f=u[s],l=Math.floor(i/f);function h(t){for(var e=0,n=t[Math.floor(t.length/2)];e0&&(n=Math.abs(t[e]-l)>Math.abs(t[e-1]-l)?t[e-1]:t[e]),l/nu[s-1]/u[s]?{x:n,y:n}:null}return(n=h(a))||(n=h(m(i)))||(n=h(m(l*f))),n}var w={top:function(t,e){return"%"===t.unit?Math.floor(e.height*(t.value/100)):null},right:function(t,e){return"%"===t.unit?Math.floor(e.width-e.width*(t.value/100)):null},bottom:function(t,e){return"%"===t.unit?Math.floor(e.height-e.height*(t.value/100)):null},left:function(t,e){return"%"===t.unit?Math.floor(e.width*(t.value/100)):null}};function O(t,e,n){var r={width:t,height:e},o=Object.keys(n).reduce((function(t,e){var o=function(t){return{value:parseFloat(t),unit:(t.indexOf("%"),t.length,"%")}}(n[e]),i=w[e](o,r);return t[e]=i,t}),{});return{sx:o.left,sy:o.top,sw:o.right-o.left,sh:o.bottom-o.top}}},function(t,e,n){"use strict";var r=n(83),o=n.n(r),i=n(3),a=n.n(i),u=n(4),c=n.n(u),s=n(0),f=n.n(s),l=n(7),h=n(9),d=n(8),p={clone:l.clone};function v(t){if(t<0)throw new Error("expected positive number, received ".concat(t))}var y=function(){function t(e,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Uint8Array,o=arguments.length>3?arguments[3]:void 0;a()(this,t),f()(this,"data",void 0),f()(this,"size",void 0),f()(this,"indexMapping",void 0),n?this.data=n:(this.data=new r(e.x*e.y),o&&d.a.init(this.data,0)),this.size=e}return c()(t,[{key:"inImageWithBorder",value:function(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return v(e),t.x>=0&&t.y>=0&&t.x0&&((a=v[r-1]).m00+=1,a.m01+=n,a.m10+=e,a.m11+=e*n,a.m02+=o,a.m20+=e*e);for(i=0;i=0?x:-x)+g,a.theta=(180*f/g+90)%180-90,a.theta<0&&(a.theta+=180),a.rad=f>g?f-g:f,a.vec=p.clone([Math.cos(f),Math.sin(f)]),y.push(a));return y}},{key:"getAsRGBA",value:function(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1,e=new Uint8ClampedArray(4*this.size.x*this.size.y),n=0;n1&&void 0!==arguments[1]?arguments[1]:1,n=t.getContext("2d");if(!n)throw new Error("Unable to get canvas context");var r=n.getImageData(0,0,t.width,t.height),o=this.getAsRGBA(e);t.width=this.size.x,t.height=this.size.y;var i=new ImageData(o,r.width,r.height);n.putImageData(i,0,0)}},{key:"overlay",value:function(t,e,n){var r=e<0||e>360?360:e,i=[0,1,1],a=[0,0,0],u=[255,255,255],c=[0,0,0],s=t.getContext("2d");if(!s)throw new Error("Unable to get canvas context");for(var f=s.getImageData(n.x,n.y,this.size.x,this.size.y),l=f.data,d=this.data.length;d--;){i[0]=this.data[d]*r;var p=4*d,v=i[0]<=0?u:i[0]>=360?c:Object(h.g)(i,a),y=o()(v,3);l[p]=y[0],l[p+1]=y[1],l[p+2]=y[2],l[p+3]=255}s.putImageData(f,n.x,n.y)}}]),t}();e.a=y},function(t,e,n){t.exports=n(228)},function(t,e,n){var r=n(227);function o(e,n,i){return"undefined"!=typeof Reflect&&Reflect.get?(t.exports=o=Reflect.get,t.exports.default=t.exports,t.exports.__esModule=!0):(t.exports=o=function(t,e,n){var o=r(t,e);if(o){var i=Object.getOwnPropertyDescriptor(o,e);return i.get?i.get.call(n):i.value}},t.exports.default=t.exports,t.exports.__esModule=!0),o(e,n,i||e)}t.exports=o,t.exports.default=t.exports,t.exports.__esModule=!0},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e){var n=Array.isArray;t.exports=n},function(t,e,n){"use strict";e.a={drawRect:function(t,e,n,r){n.strokeStyle=r.color,n.fillStyle=r.color,n.lineWidth=r.lineWidth||1,n.beginPath(),n.strokeRect(t.x,t.y,e.x,e.y)},drawPath:function(t,e,n,r){n.strokeStyle=r.color,n.fillStyle=r.color,n.lineWidth=r.lineWidth,n.beginPath(),n.moveTo(t[0][e.x],t[0][e.y]);for(var o=1;oh&&(h=i.box[o][0]),i.box[o][1]d&&(d=i.box[o][1]);for(u=[[s,f],[h,f],[h,d],[s,d]],c=r.halfSample?2:1,a=y.invert(a,a),o=0;o<4;o++)v.transformMat2(u[o],u[o],a);for(o=0;o<4;o++)v.scale(u[o],u[o],c);return u}function E(t,e){l.subImageAsCopy(a,Object(x.h)(t,e)),p.skeletonize()}function M(t,e,n,r){var o,i,u,c,s=[],f=[],l=Math.ceil(h.x/3);if(t.length>=2){for(o=0;ol&&s.push(t[o]);if(s.length>=2){for(u=function(t){var e=Object(x.b)(t,.9),n=Object(x.j)(e,1,(function(t){return t.getPoints().length})),r=[],o=[];if(1===n.length){r=n[0].item.getPoints();for(var i=0;i1&&u.length>=s.length/4*3&&u.length>t.length/4&&(i/=u.length,c={index:e[1]*R.x+e[0],pos:{x:n,y:r},box:[v.clone([n,r]),v.clone([n+a.size.x,r]),v.clone([n+a.size.x,r+a.size.y]),v.clone([n,r+a.size.y])],moments:u,rad:i,vec:v.clone([Math.cos(i),Math.sin(i)])},f.push(c))}}return f}e.a={init:function(e,n){r=n,d=e,function(){o=r.halfSample?new g.a({x:d.size.x/2|0,y:d.size.y/2|0}):d,h=Object(x.a)(r.patchSize,o.size),R.x=o.size.x/h.x|0,R.y=o.size.y/h.y|0,l=new g.a(o.size,void 0,Uint8Array,!1),u=new g.a(h,void 0,Array,!0);var e=new ArrayBuffer(65536);a=new g.a(h,new Uint8Array(e,0,h.x*h.y)),i=new g.a(h,new Uint8Array(e,h.x*h.y*3,h.x*h.y),void 0,!0),p=Object(w.a)("undefined"!=typeof window?window:"undefined"!=typeof self?self:t,{size:h.x},e),f=new g.a({x:o.size.x/a.size.x|0,y:o.size.y/a.size.y|0},void 0,Array,!0),c=new g.a(f.size,void 0,void 0,!0),s=new g.a(f.size,void 0,Int32Array,!0)}(),r.useWorker||"undefined"==typeof document||(O.dom.binary=document.createElement("canvas"),O.dom.binary.className="binaryBuffer",O.ctx.binary=O.dom.binary.getContext("2d"),O.dom.binary.width=l.size.x,O.dom.binary.height=l.size.y)},locate:function(){r.halfSample&&Object(x.f)(d,o),Object(x.i)(o,l),l.zeroBorder();var t=function(){var t,e,n,r,o,c,s=[];for(t=0;t.95&&a(i):s.data[i]=Number.MAX_VALUE}for(_.a.init(c.data,0),_.a.init(s.data,0),_.a.init(f.data,null),e=0;e0&&r[s.data[n]-1]++;return(r=r.map((function(t,e){return{val:t,label:e+1}}))).sort((function(t,e){return e.val-t.val})),r.filter((function(t){return t.val>=5}))}(e);return 0===n.length?null:function(t,e){var n,r,o,i,a=[],u=[];for(n=0;n-1&&t%1==0&&t-1&&t%1==0&&t<=9007199254740991}},function(t,e){function n(e,r){return t.exports=n=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},t.exports.default=t.exports,t.exports.__esModule=!0,n(e,r)}t.exports=n,t.exports.default=t.exports,t.exports.__esModule=!0},function(t,e,n){var r=n(22),o=n(18);t.exports=function(t){return"symbol"==typeof t||o(t)&&"[object Symbol]"==r(t)}},function(t,e,n){var r=n(42);t.exports=function(t){if("string"==typeof t||r(t))return t;var e=t+"";return"0"==e&&1/t==-1/0?"-0":e}},function(t,e,n){var r=n(35)(n(17),"Map");t.exports=r},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(46))},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var r=n(109),o=n(116),i=n(118),a=n(119),u=n(120);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++et.length)&&(e=t.length);for(var n=0,r=new Array(e);n0&&(i=1/Math.sqrt(i),t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i);return t}},function(t,e){t.exports=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}},function(t,e){t.exports=function(t,e,n){return t[0]=e[0]-n[0],t[1]=e[1]-n[1],t[2]=e[2]-n[2],t}},function(t,e){t.exports=function(t,e,n){return t[0]=e[0]*n[0],t[1]=e[1]*n[1],t[2]=e[2]*n[2],t}},function(t,e){t.exports=function(t,e,n){return t[0]=e[0]/n[0],t[1]=e[1]/n[1],t[2]=e[2]/n[2],t}},function(t,e){t.exports=function(t,e){var n=e[0]-t[0],r=e[1]-t[1],o=e[2]-t[2];return Math.sqrt(n*n+r*r+o*o)}},function(t,e){t.exports=function(t,e){var n=e[0]-t[0],r=e[1]-t[1],o=e[2]-t[2];return n*n+r*r+o*o}},function(t,e){t.exports=function(t){var e=t[0],n=t[1],r=t[2];return Math.sqrt(e*e+n*n+r*r)}},function(t,e){t.exports=function(t){var e=t[0],n=t[1],r=t[2];return e*e+n*n+r*r}},function(t,e,n){var r=n(153),o=n(154),i=n(60),a=n(155);t.exports=function(t,e){return r(t)||o(t,e)||i(t,e)||a()},t.exports.default=t.exports,t.exports.__esModule=!0},function(t,e,n){t.exports={EPSILON:n(71),create:n(72),clone:n(191),angle:n(192),fromValues:n(73),copy:n(193),set:n(194),equals:n(195),exactEquals:n(196),add:n(197),subtract:n(76),sub:n(198),multiply:n(77),mul:n(199),divide:n(78),div:n(200),min:n(201),max:n(202),floor:n(203),ceil:n(204),round:n(205),scale:n(206),scaleAndAdd:n(207),distance:n(79),dist:n(208),squaredDistance:n(80),sqrDist:n(209),length:n(81),len:n(210),squaredLength:n(82),sqrLen:n(211),negate:n(212),inverse:n(213),normalize:n(74),dot:n(75),cross:n(214),lerp:n(215),random:n(216),transformMat4:n(217),transformMat3:n(218),transformQuat:n(219),rotateX:n(220),rotateY:n(221),rotateZ:n(222),forEach:n(223)}},function(t,e,n){var r=n(229),o=n(243)((function(t,e){return null==t?{}:r(t,e)}));t.exports=o},function(t,e,n){var r=n(2),o=n(41),i=n(248),a=n(249);function u(e){var n="function"==typeof Map?new Map:void 0;return t.exports=u=function(t){if(null===t||!i(t))return t;if("function"!=typeof t)throw new TypeError("Super expression must either be null or a function");if(void 0!==n){if(n.has(t))return n.get(t);n.set(t,e)}function e(){return a(t,arguments,r(this).constructor)}return e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),o(e,t)},t.exports.default=t.exports,t.exports.__esModule=!0,u(e)}t.exports=u,t.exports.default=t.exports,t.exports.__esModule=!0},function(t,e,n){"use strict";var r=n(21),o={createContour2D:function(){return{dir:null,index:null,firstVertex:null,insideContours:null,nextpeer:null,prevpeer:null}},CONTOUR_DIR:{CW_DIR:0,CCW_DIR:1,UNKNOWN_DIR:2},DIR:{OUTSIDE_EDGE:-32767,INSIDE_EDGE:-32766},create:function(t,e){var n=t.data,i=e.data,a=t.size.x,u=t.size.y,c=r.a.create(t,e);return{rasterize:function(t){var e,r,s,f,l,h,d,p,v,y,g,x,_=[],m=0;for(x=0;x<400;x++)_[x]=0;for(_[0]=n[0],v=null,h=1;h0){a=a-1|0;r[n+a|0]=(r[t+a|0]|0)-(r[e+a|0]|0)|0}}function c(t,e,n){t|=0;e|=0;n|=0;var a=0;a=i(o,o)|0;while((a|0)>0){a=a-1|0;r[n+a|0]=r[t+a|0]|0|(r[e+a|0]|0)|0}}function s(t){t|=0;var e=0;var n=0;n=i(o,o)|0;while((n|0)>0){n=n-1|0;e=(e|0)+(r[t+n|0]|0)|0}return e|0}function f(t,e){t|=0;e|=0;var n=0;n=i(o,o)|0;while((n|0)>0){n=n-1|0;r[t+n|0]=e}}function l(t,e){t|=0;e|=0;var n=0;var i=0;var a=0;var u=0;var c=0;var s=0;var f=0;var l=0;for(n=1;(n|0)<(o-1|0);n=n+1|0){l=l+o|0;for(i=1;(i|0)<(o-1|0);i=i+1|0){u=l-o|0;c=l+o|0;s=i-1|0;f=i+1|0;a=(r[t+u+s|0]|0)+(r[t+u+f|0]|0)+(r[t+l+i|0]|0)+(r[t+c+s|0]|0)+(r[t+c+f|0]|0)|0;if((a|0)>(0|0)){r[e+l+i|0]=1}else{r[e+l+i|0]=0}}}}function h(t,e){t|=0;e|=0;var n=0;n=i(o,o)|0;while((n|0)>0){n=n-1|0;r[e+n|0]=r[t+n|0]|0}}function d(t){t|=0;var e=0;var n=0;for(e=0;(e|0)<(o-1|0);e=e+1|0){r[t+e|0]=0;r[t+n|0]=0;n=n+o-1|0;r[t+n|0]=0;n=n+1|0}for(e=0;(e|0)<(o|0);e=e+1|0){r[t+n|0]=0;n=n+1|0}}function p(){var t=0;var e=0;var n=0;var r=0;var p=0;var v=0;e=i(o,o)|0;n=e+e|0;r=n+e|0;f(r,0);d(t);do{a(t,e);l(e,n);u(t,n,n);c(r,n,r);h(e,t);p=s(t)|0;v=(p|0)==0|0}while(!v)}return{skeletonize:p}}},function(t,e,n){t.exports=n(263)},function(t,e,n){var r=n(91),o=n(48),i=n(121),a=n(123),u=n(13),c=n(56),s=n(54);t.exports=function t(e,n,f,l,h){e!==n&&i(n,(function(i,c){if(h||(h=new r),u(i))a(e,n,c,f,t,l,h);else{var d=l?l(s(e,c),i,c+"",e,n,h):void 0;void 0===d&&(d=i),o(e,c,d)}}),c)}},function(t,e,n){var r=n(24),o=n(97),i=n(98),a=n(99),u=n(100),c=n(101);function s(t){var e=this.__data__=new r(t);this.size=e.size}s.prototype.clear=o,s.prototype.delete=i,s.prototype.get=a,s.prototype.has=u,s.prototype.set=c,t.exports=s},function(t,e){t.exports=function(){this.__data__=[],this.size=0}},function(t,e,n){var r=n(25),o=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0)&&(n==e.length-1?e.pop():o.call(e,n,1),--this.size,!0)}},function(t,e,n){var r=n(25);t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},function(t,e,n){var r=n(25);t.exports=function(t){return r(this.__data__,t)>-1}},function(t,e,n){var r=n(25);t.exports=function(t,e){var n=this.__data__,o=r(n,t);return o<0?(++this.size,n.push([t,e])):n[o][1]=e,this}},function(t,e,n){var r=n(24);t.exports=function(){this.__data__=new r,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var r=n(24),o=n(44),i=n(47);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var a=n.__data__;if(!o||a.length<199)return a.push([t,e]),this.size=++n.size,this;n=this.__data__=new i(a)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var r=n(36),o=n(105),i=n(13),a=n(107),u=/^\[object .+?Constructor\]$/,c=Function.prototype,s=Object.prototype,f=c.toString,l=s.hasOwnProperty,h=RegExp("^"+f.call(l).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!i(t)||o(t))&&(r(t)?h:u).test(a(t))}},function(t,e,n){var r=n(27),o=Object.prototype,i=o.hasOwnProperty,a=o.toString,u=r?r.toStringTag:void 0;t.exports=function(t){var e=i.call(t,u),n=t[u];try{t[u]=void 0;var r=!0}catch(t){}var o=a.call(t);return r&&(e?t[u]=n:delete t[u]),o}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e,n){var r,o=n(106),i=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!i&&i in t}},function(t,e,n){var r=n(17)["__core-js_shared__"];t.exports=r},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var r=n(110),o=n(24),i=n(44);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(i||o),string:new r}}},function(t,e,n){var r=n(111),o=n(112),i=n(113),a=n(114),u=n(115);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e1?n[i-1]:void 0,u=i>2?n[2]:void 0;for(a=t.length>3&&"function"==typeof a?(i--,a):void 0,u&&o(n[0],n[1],u)&&(a=i<3?void 0:a,i=1),e=Object(e);++r0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},function(t,e,n){var r=n(26),o=n(39),i=n(31),a=n(13);t.exports=function(t,e,n){if(!a(n))return!1;var u=typeof e;return!!("number"==u?o(n)&&i(e,n.length):"string"==u&&e in n)&&r(n[e],t)}},function(t,e){"undefined"!=typeof window&&(window.requestAnimationFrame||(window.requestAnimationFrame=window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){window.setTimeout(t,1e3/60)})),"function"!=typeof Math.imul&&(Math.imul=function(t,e){var n=65535&t,r=65535&e;return n*r+((t>>>16&65535)*r+n*(e>>>16&65535)<<16>>>0)|0}),"function"!=typeof Object.assign&&(Object.assign=function(t){"use strict";if(null===t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),n=1;n0&&(o=1/Math.sqrt(o),t[0]=e[0]*o,t[1]=e[1]*o);return t}},function(t,e){t.exports=function(t,e){return t[0]*e[0]+t[1]*e[1]}},function(t,e){t.exports=function(t,e,n){var r=e[0]*n[1]-e[1]*n[0];return t[0]=t[1]=0,t[2]=r,t}},function(t,e){t.exports=function(t,e,n,r){var o=e[0],i=e[1];return t[0]=o+r*(n[0]-o),t[1]=i+r*(n[1]-i),t}},function(t,e){t.exports=function(t,e){e=e||1;var n=2*Math.random()*Math.PI;return t[0]=Math.cos(n)*e,t[1]=Math.sin(n)*e,t}},function(t,e){t.exports=function(t,e,n){var r=e[0],o=e[1];return t[0]=n[0]*r+n[2]*o,t[1]=n[1]*r+n[3]*o,t}},function(t,e){t.exports=function(t,e,n){var r=e[0],o=e[1];return t[0]=n[0]*r+n[2]*o+n[4],t[1]=n[1]*r+n[3]*o+n[5],t}},function(t,e){t.exports=function(t,e,n){var r=e[0],o=e[1];return t[0]=n[0]*r+n[3]*o+n[6],t[1]=n[1]*r+n[4]*o+n[7],t}},function(t,e){t.exports=function(t,e,n){var r=e[0],o=e[1];return t[0]=n[0]*r+n[4]*o+n[12],t[1]=n[1]*r+n[5]*o+n[13],t}},function(t,e,n){t.exports=function(t,e,n,o,i,a){var u,c;e||(e=2);n||(n=0);c=o?Math.min(o*e+n,t.length):t.length;for(u=n;un*n){var o=Math.sqrt(r);t[0]=e[0]/o*n,t[1]=e[1]/o*n}else t[0]=e[0],t[1]=e[1];return t}},function(t,e){t.exports=function(t){var e=new Float32Array(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}},function(t,e,n){t.exports=function(t,e){var n=r(t[0],t[1],t[2]),a=r(e[0],e[1],e[2]);o(n,n),o(a,a);var u=i(n,a);return u>1?0:Math.acos(u)};var r=n(73),o=n(74),i=n(75)},function(t,e){t.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}},function(t,e){t.exports=function(t,e,n,r){return t[0]=e,t[1]=n,t[2]=r,t}},function(t,e,n){t.exports=function(t,e){var n=t[0],o=t[1],i=t[2],a=e[0],u=e[1],c=e[2];return Math.abs(n-a)<=r*Math.max(1,Math.abs(n),Math.abs(a))&&Math.abs(o-u)<=r*Math.max(1,Math.abs(o),Math.abs(u))&&Math.abs(i-c)<=r*Math.max(1,Math.abs(i),Math.abs(c))};var r=n(71)},function(t,e){t.exports=function(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}},function(t,e){t.exports=function(t,e,n){return t[0]=e[0]+n[0],t[1]=e[1]+n[1],t[2]=e[2]+n[2],t}},function(t,e,n){t.exports=n(76)},function(t,e,n){t.exports=n(77)},function(t,e,n){t.exports=n(78)},function(t,e){t.exports=function(t,e,n){return t[0]=Math.min(e[0],n[0]),t[1]=Math.min(e[1],n[1]),t[2]=Math.min(e[2],n[2]),t}},function(t,e){t.exports=function(t,e,n){return t[0]=Math.max(e[0],n[0]),t[1]=Math.max(e[1],n[1]),t[2]=Math.max(e[2],n[2]),t}},function(t,e){t.exports=function(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}},function(t,e){t.exports=function(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}},function(t,e){t.exports=function(t,e){return t[0]=Math.round(e[0]),t[1]=Math.round(e[1]),t[2]=Math.round(e[2]),t}},function(t,e){t.exports=function(t,e,n){return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t}},function(t,e){t.exports=function(t,e,n,r){return t[0]=e[0]+n[0]*r,t[1]=e[1]+n[1]*r,t[2]=e[2]+n[2]*r,t}},function(t,e,n){t.exports=n(79)},function(t,e,n){t.exports=n(80)},function(t,e,n){t.exports=n(81)},function(t,e,n){t.exports=n(82)},function(t,e){t.exports=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}},function(t,e){t.exports=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}},function(t,e){t.exports=function(t,e,n){var r=e[0],o=e[1],i=e[2],a=n[0],u=n[1],c=n[2];return t[0]=o*c-i*u,t[1]=i*a-r*c,t[2]=r*u-o*a,t}},function(t,e){t.exports=function(t,e,n,r){var o=e[0],i=e[1],a=e[2];return t[0]=o+r*(n[0]-o),t[1]=i+r*(n[1]-i),t[2]=a+r*(n[2]-a),t}},function(t,e){t.exports=function(t,e){e=e||1;var n=2*Math.random()*Math.PI,r=2*Math.random()-1,o=Math.sqrt(1-r*r)*e;return t[0]=Math.cos(n)*o,t[1]=Math.sin(n)*o,t[2]=r*e,t}},function(t,e){t.exports=function(t,e,n){var r=e[0],o=e[1],i=e[2],a=n[3]*r+n[7]*o+n[11]*i+n[15];return a=a||1,t[0]=(n[0]*r+n[4]*o+n[8]*i+n[12])/a,t[1]=(n[1]*r+n[5]*o+n[9]*i+n[13])/a,t[2]=(n[2]*r+n[6]*o+n[10]*i+n[14])/a,t}},function(t,e){t.exports=function(t,e,n){var r=e[0],o=e[1],i=e[2];return t[0]=r*n[0]+o*n[3]+i*n[6],t[1]=r*n[1]+o*n[4]+i*n[7],t[2]=r*n[2]+o*n[5]+i*n[8],t}},function(t,e){t.exports=function(t,e,n){var r=e[0],o=e[1],i=e[2],a=n[0],u=n[1],c=n[2],s=n[3],f=s*r+u*i-c*o,l=s*o+c*r-a*i,h=s*i+a*o-u*r,d=-a*r-u*o-c*i;return t[0]=f*s+d*-a+l*-c-h*-u,t[1]=l*s+d*-u+h*-a-f*-c,t[2]=h*s+d*-c+f*-u-l*-a,t}},function(t,e){t.exports=function(t,e,n,r){var o=n[1],i=n[2],a=e[1]-o,u=e[2]-i,c=Math.sin(r),s=Math.cos(r);return t[0]=e[0],t[1]=o+a*s-u*c,t[2]=i+a*c+u*s,t}},function(t,e){t.exports=function(t,e,n,r){var o=n[0],i=n[2],a=e[0]-o,u=e[2]-i,c=Math.sin(r),s=Math.cos(r);return t[0]=o+u*c+a*s,t[1]=e[1],t[2]=i+u*s-a*c,t}},function(t,e){t.exports=function(t,e,n,r){var o=n[0],i=n[1],a=e[0]-o,u=e[1]-i,c=Math.sin(r),s=Math.cos(r);return t[0]=o+a*s-u*c,t[1]=i+a*c+u*s,t[2]=e[2],t}},function(t,e,n){t.exports=function(t,e,n,o,i,a){var u,c;e||(e=3);n||(n=0);c=o?Math.min(o*e+n,t.length):t.length;for(u=n;u=0;--o){var i=this.tryEntries[o],a=i.completion;if("root"===i.tryLoc)return r("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),c=n.call(i,"finallyLoc");if(u&&c){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),b(n),s}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var o=r.arg;b(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:O(t),resultName:e,nextLoc:n},"next"===this.method&&(this.arg=void 0),s}},t}(t.exports);try{regeneratorRuntime=r}catch(t){Function("r","regeneratorRuntime = r")(r)}},function(t,e,n){var r=n(230),o=n(240);t.exports=function(t,e){return r(t,e,(function(e,n){return o(t,n)}))}},function(t,e,n){var r=n(231),o=n(239),i=n(32);t.exports=function(t,e,n){for(var a=-1,u=e.length,c={};++a0&&i(f)?n>1?t(f,n-1,i,a,u):r(u,f):a||(u[u.length]=f)}return u}},function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,o=t.length;++nMath.abs(f-c),d=[],p=t.data,v=t.size.x,y=255,g=0;function x(t,e){u=p[e*v+t],y=ug?u:g,d.push(u)}h&&(i=c,c=s,s=i,i=f,f=l,l=i),c>f&&(i=c,c=f,f=i,i=s,s=l,l=i);var _=f-c,m=Math.abs(l-s);r=_/2|0,o=s;var b=sl?f.UP:f.DOWN,h.push({pos:0,val:s[0]}),i=0;id&&s[i+1]>.5*l?f.UP:r)&&(h.push({pos:i,val:s[i]}),r=o);for(h.push({pos:s.length,val:s[s.length-1]}),a=h[0].pos;al?0:1;for(i=1;ih[i].val?h[i].val+(h[i+1].val-h[i].val)/3*2|0:h[i+1].val+(h[i].val-h[i+1].val)/3|0,a=h[i].pos;ad?0:1;return{line:s,threshold:d}},s.debug={printFrequency:function(t,e){var n,r=e.getContext("2d");for(e.width=t.length,e.height=256,r.beginPath(),r.strokeStyle="blue",n=0;n1&&void 0!==arguments[1]?arguments[1]:0,n=e;nn)return Number.MAX_VALUE;o+=i}return o/u}},{key:"_nextSet",value:function(t){for(var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=e;n1&&(t[n[r]]=o)}},{key:"decodePattern",value:function(t){this._row=t;var e=this.decode();return null===e?(this._row.reverse(),(e=this.decode())&&(e.direction=l.Reverse,e.start=this._row.length-e.start,e.end=this._row.length-e.end)):e.direction=l.Forward,e&&(e.format=this.FORMAT),e}},{key:"_matchRange",value:function(t,e,n){var r;for(r=t=t<0?0:t;r0&&void 0!==arguments[0]?arguments[0]:this._nextUnset(this._row),e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:this._row.length,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],r=[],o=0;r[o]=0;for(var i=t;ithis.AVG_CODE_ERROR?null:(this.CODE_PATTERN[n.code]&&(n.correction.bar=this.calculateCorrection(this.CODE_PATTERN[n.code],r,this.MODULE_INDICES.bar),n.correction.space=this.calculateCorrection(this.CODE_PATTERN[n.code],r,this.MODULE_INDICES.space)),n)}r[++a]=1,i=!i}return null}},{key:"_correct",value:function(t,e){this._correctBars(t,e.bar,this.MODULE_INDICES.bar),this._correctBars(t,e.space,this.MODULE_INDICES.space)}},{key:"_findStart",value:function(){for(var t=[0,0,0,0,0,0],e=this._nextSet(this._row),n={error:Number.MAX_VALUE,code:-1,start:0,end:0,correction:{bar:1,space:1}},r=!1,o=0,i=e;i.48?null:o}n[++a]=1,i=!i}return null}},{key:"_findStart",value:function(){for(var t=this._nextSet(this._row),e=null;!e;){if(!(e=this._findPattern(I,t,!1,!0)))return null;var n=e.start-(e.end-e.start);if(n>=0&&this._matchRange(n,e.start,0))return e;t=e.end,e=null}return null}},{key:"_calculateFirstDigit",value:function(t){for(var e=0;e=10?(r.code-=10,o|=1<<5-i):o|=0<<5-i,e.push(r.code),n.push(r)}var a=this._calculateFirstDigit(o);if(null===a)return null;e.unshift(a);var u=this._findPattern(z,r.end,!0,!1);if(null===u||!u.end)return null;n.push(u);for(var c=0;c<6;c++){if(!(u=this._decodeCode(u.end,10)))return null;n.push(u),e.push(u.code)}return u}},{key:"_verifyTrailingWhitespace",value:function(t){var e=t.end+(t.end-t.start);return e=0;n-=2)e+=t[n];e*=3;for(var r=t.length-1;r>=0;r-=2)e+=t[r];return e%10==0}},{key:"_decodeExtensions",value:function(t){var e=this._nextSet(this._row,t),n=this._findPattern(U,e,!1,!1);if(null===n)return null;for(var r=0;r0){var u=this._decodeExtensions(a.end);if(!u)return null;if(!u.decodedCodes)return null;var c=u.decodedCodes[u.decodedCodes.length-1],s={start:c.start+((c.end-c.start)/2|0),end:c.end};if(!this._verifyTrailingWhitespace(s))return null;o={supplement:u,code:n.join("")+u.code}}return T(T({code:n.join(""),start:i.start,end:a.end,startInfo:i,decodedCodes:r},o),{},{format:this.FORMAT})}}]),n}(A),W=n(33),F=n.n(W);function V(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=C()(t);if(e){var o=C()(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return O()(this,n)}}var q=new Uint16Array(F()("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. *$/+%").map((function(t){return t.charCodeAt(0)}))),G=new Uint16Array([52,289,97,352,49,304,112,37,292,100,265,73,328,25,280,88,13,268,76,28,259,67,322,19,274,82,7,262,70,22,385,193,448,145,400,208,133,388,196,148,168,162,138,42]),H=function(t){b()(n,t);var e=V(n);function n(){var t;v()(this,n);for(var r=arguments.length,o=new Array(r),i=0;i3;){n=this._findNextWidth(t,n),r=0;for(var i=0,a=0;an&&(i|=1<0;u++)if(t[u]>n&&(r--,2*t[u]>=o))return-1;return i}}return-1}},{key:"_findNextWidth",value:function(t,e){for(var n=Number.MAX_VALUE,r=0;re&&(n=t[r]);return n}},{key:"_patternToChar",value:function(t){for(var e=0;e=r}},{key:"decode",value:function(t,e){var n=new Uint16Array([0,0,0,0,0,0,0,0,0]),r=[];if(!(e=this._findStart()))return null;var o,i,a=this._nextSet(this._row,e.end);do{n=this._toCounters(a,n);var u=this._toPattern(n);if(u<0)return null;if(null===(o=this._patternToChar(u)))return null;r.push(o),i=a,a+=S.a.sum(n),a=this._nextSet(this._row,a)}while("*"!==o);return r.pop(),r.length&&this._verifyTrailingWhitespace(i,a,n)?{code:r.join(""),start:e.start,end:a,startInfo:e,decodedCodes:r,format:this.FORMAT}:null}}]),n}(A),X=n(12),Q=n.n(X);function Y(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=C()(t);if(e){var o=C()(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return O()(this,n)}}var $=/[IOQ]/g,Z=/[A-Z0-9]{17}/,K=function(t){b()(n,t);var e=Y(n);function n(){var t;v()(this,n);for(var r=arguments.length,o=new Array(r),i=0;ir&&(r=o),othis._counters.length)return-1;for(var n=this._computeAlternatingThreshold(t,e),r=this._computeAlternatingThreshold(t+1,e),o=64,i=0,a=0,u=0;u<7;u++)i=0==(1&u)?n:r,this._counters[t+u]>i&&(a|=o),o>>=1;return a}},{key:"_isStartEnd",value:function(t){for(var e=0;e=this._calculatePatternLength(t)/2)&&(e+8>=this._counters.length||this._counters[e+7]>=this._calculatePatternLength(e)/2)}},{key:"_charToPattern",value:function(t){for(var e=t.charCodeAt(0),n=0;n=0;a--){var u=2==(1&a)?r.bar:r.space,c=1==(1&n)?u.wide:u.narrow;c.size+=this._counters[o+a],c.counts++,n>>=1}o+=8}return["space","bar"].forEach((function(t){var e=r[t];e.wide.min=Math.floor((e.narrow.size/e.narrow.counts+e.wide.size/e.wide.counts)/2),e.narrow.max=Math.ceil(e.wide.min),e.wide.max=Math.ceil((2*e.wide.size+1.5)/e.wide.counts)})),r}},{key:"_validateResult",value:function(t,e){for(var n,r=this._thresholdResultPattern(t,e),o=e,i=0;i=0;a--){var u=0==(1&a)?r.bar:r.space,c=1==(1&n)?u.wide:u.narrow,s=this._counters[o+a];if(sc.max)return!1;n>>=1}o+=8}return!0}},{key:"decode",value:function(t,e){if(this._counters=this._fillCounters(),!(e=this._findStart()))return null;var n,r=e.startCounter,o=[];do{if((n=this._toPattern(r))<0)return null;var i=this._patternToChar(n);if(null===i)return null;if(o.push(i),r+=8,o.length>1&&this._isStartEnd(n))break}while(rthis._counters.length?this._counters.length:r;var a=e.start+this._sumCounters(e.startCounter,r-8);return{code:o.join(""),start:e.start,end:a,startInfo:e,decodedCodes:o,format:this.FORMAT}}}]),n}(A);function ot(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=C()(t);if(e){var o=C()(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return O()(this,n)}}var it=function(t){b()(n,t);var e=ot(n);function n(){var t;v()(this,n);for(var r=arguments.length,o=new Array(r),i=0;i=10&&(n|=1<<1-c),1!==c&&(r=this._nextSet(this._row,u.end),r=this._nextUnset(this._row,r))}if(2!==i.length||parseInt(i.join(""))%4!==n)return null;var s=this._findStart();return{code:i.join(""),decodedCodes:a,end:u.end,format:this.FORMAT,startInfo:s,start:s.start}}}]),n}(B);function ft(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=C()(t);if(e){var o=C()(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return O()(this,n)}}var lt=[24,20,18,17,12,6,3,10,9,5];var ht=function(t){b()(n,t);var e=ft(n);function n(){var t;v()(this,n);for(var r=arguments.length,o=new Array(r),i=0;i=10&&(n|=1<<4-c),4!==c&&(r=this._nextSet(this._row,i.end),r=this._nextUnset(this._row,r))}if(5!==a.length)return null;if(function(t){for(var e=t.length,n=0,r=e-2;r>=0;r-=2)n+=t[r];n*=3;for(var o=e-1;o>=0;o-=2)n+=t[o];return(n*=3)%10}(a)!==function(t){for(var e=0;e<10;e++)if(t===lt[e])return e;return null}(n))return null;var s=this._findStart();return{code:a.join(""),decodedCodes:u,end:i.end,format:this.FORMAT,startInfo:s,start:s.start}}}]),n}(B);function dt(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function pt(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=C()(t);if(e){var o=C()(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return O()(this,n)}}var vt=function(t){b()(n,t);var e=pt(n);function n(){var t;v()(this,n);for(var r=arguments.length,o=new Array(r),i=0;i=10&&(r.code=r.code-10,o|=1<<5-i),e.push(r.code),n.push(r)}return this._determineParity(o,e)?r:null}},{key:"_determineParity",value:function(t,e){for(var n=0;n2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=new Array(t.length).fill(0),i=0,a={error:Number.MAX_VALUE,start:0,end:0},u=this.AVG_CODE_ERROR;n=n||!1,r=r||!1,e||(e=this._nextSet(this._row));for(var c=e;c=0&&this._matchRange(t,n.start,0))return n;e=n.end,n=null}return null}},{key:"_verifyTrailingWhitespace",value:function(t){var e=t.end+(t.end-t.start)/2;return e2&&void 0!==arguments[2]&&arguments[2],r=arguments.length>3&&void 0!==arguments[3]&&arguments[3],o=[],i=0,a={error:Number.MAX_VALUE,code:-1,start:0,end:0},u=0,c=0,s=this.AVG_CODE_ERROR;e||(e=this._nextSet(this._row));for(var f=0;f=0&&this._matchRange(r,t.start,0))return t;e=t.end,t=null}return t}},{key:"_verifyTrailingWhitespace",value:function(t){var e=t.end+(t.end-t.start)/2;return e4)return-1;if(0==(1&o))for(var a=0;a="a"&&o<="d"){if(r>e-2)return null;var i=t[++r],a=i.charCodeAt(0),u=void 0;switch(o){case"a":if(!(i>="A"&&i<="Z"))return null;u=String.fromCharCode(a-64);break;case"b":if(i>="A"&&i<="E")u=String.fromCharCode(a-38);else if(i>="F"&&i<="J")u=String.fromCharCode(a-11);else if(i>="K"&&i<="O")u=String.fromCharCode(a+16);else if(i>="P"&&i<="S")u=String.fromCharCode(a+43);else{if(!(i>="T"&&i<="Z"))return null;u=String.fromCharCode(127)}break;case"c":if(i>="A"&&i<="O")u=String.fromCharCode(a-32);else{if("Z"!==i)return null;u=":"}break;case"d":if(!(i>="A"&&i<="Z"))return null;u=String.fromCharCode(a+32);break;default:return console.warn("* code_93_reader _decodeExtended hit default case, this may be an error",u),null}n.push(u)}else n.push(o)}return n}},{key:"_matchCheckChar",value:function(t,e,n){var r=t.slice(0,e),o=r.length,i=r.reduce((function(t,e,r){return t+((-1*r+(o-1))%n+1)*Ct.indexOf(e.charCodeAt(0))}),0);return Ct[i%47]===t[e].charCodeAt(0)}},{key:"_verifyChecksums",value:function(t){return this._matchCheckChar(t,t.length-2,20)&&this._matchCheckChar(t,t.length-1,15)}},{key:"decode",value:function(t,e){if(!(e=this._findStart()))return null;var n,r,o=new Uint16Array([0,0,0,0,0,0]),i=[],a=this._nextSet(this._row,e.end);do{o=this._toCounters(a,o);var u=this._toPattern(o);if(u<0)return null;if(null===(r=this._patternToChar(u)))return null;i.push(r),n=a,a+=S.a.sum(o),a=this._nextSet(this._row,a)}while("*"!==r);return i.pop(),i.length&&this._verifyEnd(n,a)&&this._verifyChecksums(i)?(i=i.slice(0,i.length-2),null===(i=this._decodeExtended(i))?null:{code:i.join(""),start:e.start,end:a,startInfo:e,decodedCodes:i,format:this.FORMAT}):null}}]),n}(A);function St(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=C()(t);if(e){var o=C()(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return O()(this,n)}}var At=/[AEIO]/g,kt=function(t){b()(n,t);var e=St(n);function n(){var t;v()(this,n);for(var r=arguments.length,o=new Array(r),i=0;i1&&(!e.inImageWithBorder(t[0])||!e.inImageWithBorder(t[1]));)o(-(r-=Math.ceil(r/2)));return t}(r,u,Math.floor(.1*i)))?null:(null===(o=a(r))&&(o=function(t,e,n){var r,o,i,u=Math.sqrt(Math.pow(t[1][0]-t[0][0],2)+Math.pow(t[1][1]-t[0][1],2)),c=null,s=Math.sin(n),f=Math.cos(n);for(r=1;r<16&&null===c;r++)i={y:(o=u/16*r*(r%2==0?-1:1))*s,x:o*f},e[0].y+=i.x,e[0].x-=i.y,e[1].y+=i.x,e[1].x-=i.y,c=a(e);return c}(t,r,u)),null===o?null:{codeResult:o.codeResult,line:r,angle:u,pattern:o.barcodeLine.line,threshold:o.barcodeLine.threshold})}return o(),{decodeFromBoundingBox:function(t){return u(t)},decodeFromBoundingBoxes:function(e){var n,r,o=[],i=t.multiple;for(n=0;n2&&void 0!==arguments[2]&&arguments[2];r(t,{callback:e,async:n,once:!0})},unsubscribe:function(n,r){if(n){var o=e(n);o.subscribers=o&&r?o.subscribers.filter((function(t){return t.callback!==r})):[]}else t={}}}}(),jt=n(20),It=n.n(jt),zt=n(11),Ut=n.n(zt),Lt=n(85),Nt=n.n(Lt),Bt=n(86);function Wt(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,r=C()(t);if(e){var o=C()(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return O()(this,n)}}var Ft,Vt=function(t){b()(n,t);var e=Wt(n);function n(t,r){var o;return v()(this,n),o=e.call(this,t),M()(_()(o),"code",void 0),o.code=r,Object.setPrototypeOf(_()(o),n.prototype),o}return n}(n.n(Bt)()(Error)),qt="This may mean that the user has declined camera access, or the browser does not support media APIs. If you are running in iOS, you must use Safari.";function Gt(){try{return navigator.mediaDevices.enumerateDevices()}catch(e){var t=new Vt("enumerateDevices is not defined. ".concat(qt),-1);return Promise.reject(t)}}function Ht(t){try{return navigator.mediaDevices.getUserMedia(t)}catch(t){var e=new Vt("getUserMedia is not defined. ".concat(qt),-1);return Promise.reject(e)}}function Xt(t){return new Promise((function(e,n){var r=10;!function o(){r>0?t.videoWidth>10&&t.videoHeight>10?e():window.setTimeout(o,500):n(new Vt("Unable to play video stream. Is webcam working?",-1)),r--}()}))}function Qt(t,e){return Yt.apply(this,arguments)}function Yt(){return(Yt=It()(Ut.a.mark((function t(e,n){var r;return Ut.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Ht(n);case 2:if(r=t.sent,Ft=r,!e){t.next=11;break}return e.setAttribute("autoplay","true"),e.setAttribute("muted","true"),e.setAttribute("playsinline","true"),e.srcObject=r,e.addEventListener("loadedmetadata",(function(){e.play()})),t.abrupt("return",Xt(e));case 11:return t.abrupt("return",Promise.resolve());case 12:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function $t(t){var e=Nt()(t,["width","height","facingMode","aspectRatio","deviceId"]);return void 0!==t.minAspectRatio&&t.minAspectRatio>0&&(e.aspectRatio=t.minAspectRatio,console.log("WARNING: Constraint 'minAspectRatio' is deprecated; Use 'aspectRatio' instead")),void 0!==t.facing&&(e.facingMode=t.facing,console.log("WARNING: Constraint 'facing' is deprecated. Use 'facingMode' instead'")),e}function Zt(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=$t(t);return e&&e.deviceId&&e.facingMode&&delete e.facingMode,Promise.resolve({audio:!1,video:e})}function Kt(){return(Kt=It()(Ut.a.mark((function t(){var e;return Ut.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.next=2,Gt();case 2:return e=t.sent,t.abrupt("return",e.filter((function(t){return"videoinput"===t.kind})));case 4:case"end":return t.stop()}}),t)})))).apply(this,arguments)}function Jt(){if(!Ft)return null;var t=Ft.getVideoTracks();return t&&null!=t&&t.length?t[0]:null}var te={requestedVideoElement:null,request:function(t,e){return It()(Ut.a.mark((function n(){var r;return Ut.a.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return te.requestedVideoElement=t,n.next=3,Zt(e);case 3:return r=n.sent,n.abrupt("return",Qt(t,r));case 5:case"end":return n.stop()}}),n)})))()},release:function(){var t=Ft&&Ft.getVideoTracks();return null!==te.requestedVideoElement&&te.requestedVideoElement.pause(),new Promise((function(e){setTimeout((function(){t&&t.length&&t[0].stop(),Ft=null,te.requestedVideoElement=null,e()}),0)}))},enumerateVideoDevices:function(){return Kt.apply(this,arguments)},getActiveStreamLabel:function(){var t=Jt();return t?t.label:""},getActiveTrack:Jt},ee=te;var ne={create:function(t){var e,n=document.createElement("canvas"),r=n.getContext("2d"),o=[],i=null!==(e=t.capacity)&&void 0!==e?e:20,a=!0===t.capture;function u(e){return!!i&&e&&!function(t,e){return e&&e.some((function(e){return Object.keys(e).every((function(n){return e[n]===t[n]}))}))}(e,t.blacklist)&&function(t,e){return"function"!=typeof e||e(t)}(e,t.filter)}return{addResult:function(t,e,c){var s={};u(c)&&(i--,s.codeResult=c,a&&(n.width=e.x,n.height=e.y,d.a.drawImage(t,e,r),s.frame=n.toDataURL()),o.push(s))},getResults:function(){return o}}}},re={inputStream:{name:"Live",type:"LiveStream",constraints:{width:640,height:480,facingMode:"environment"},area:{top:"0%",right:"0%",left:"0%",bottom:"0%"},singleChannel:!1},locate:!0,numOfWorkers:4,decoder:{readers:["code_128_reader"]},locator:{halfSample:!0,patchSize:"medium"}},oe=n(7),ie=function t(){v()(this,t),M()(this,"config",void 0),M()(this,"inputStream",void 0),M()(this,"framegrabber",void 0),M()(this,"inputImageWrapper",void 0),M()(this,"stopped",!1),M()(this,"boxSize",void 0),M()(this,"resultCollector",void 0),M()(this,"decoder",void 0),M()(this,"workerPool",[]),M()(this,"onUIThread",!0),M()(this,"canvasContainer",new ue)},ae=function t(){v()(this,t),M()(this,"image",void 0),M()(this,"overlay",void 0)},ue=function t(){v()(this,t),M()(this,"ctx",void 0),M()(this,"dom",void 0),this.ctx=new ae,this.dom=new ae},ce=n(23);function se(t){if("undefined"==typeof document)return null;if(t instanceof HTMLElement&&t.nodeName&&1===t.nodeType)return t;var e="string"==typeof t?t:"#interactive.viewport";return document.querySelector(e)}function fe(t,e){var n=function(t,e){var n=document.querySelector(t);return n||((n=document.createElement("canvas")).className=e),n}(t,e),r=n.getContext("2d");return{canvas:n,context:r}}function le(t){var e,n,r,o,i=se(null==t||null===(e=t.config)||void 0===e||null===(n=e.inputStream)||void 0===n?void 0:n.target),a=null==t||null===(r=t.config)||void 0===r||null===(o=r.inputStream)||void 0===o?void 0:o.type;if(!a)return null;var u=function(t){if("undefined"!=typeof document){var e=fe("canvas.imgBuffer","imgBuffer"),n=fe("canvas.drawingBuffer","drawingBuffer");return e.canvas.width=n.canvas.width=t.x,e.canvas.height=n.canvas.height=t.y,{dom:{image:e.canvas,overlay:n.canvas},ctx:{image:e.context,overlay:n.context}}}return null}(t.inputStream.getCanvasSize());if(!u)return{dom:{image:null,overlay:null},ctx:{image:null,overlay:null}};var c=u.dom;return"undefined"!=typeof document&&i&&("ImageStream"!==a||i.contains(c.image)||i.appendChild(c.image),i.contains(c.overlay)||i.appendChild(c.overlay)),u}var he={274:"orientation"},de=Object.keys(he).map((function(t){return he[t]}));function pe(t){return new Promise((function(e){var n=new FileReader;n.onload=function(t){return e(t.target.result)},n.readAsArrayBuffer(t)}))}function ve(t){return new Promise((function(e,n){var r=new XMLHttpRequest;r.open("GET",t,!0),r.responseType="blob",r.onreadystatechange=function(){r.readyState!==XMLHttpRequest.DONE||200!==r.status&&0!==r.status||e(this.response)},r.onerror=n,r.send()}))}function ye(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:de,n=new DataView(t),r=t.byteLength,o=e.reduce((function(t,e){var n=Object.keys(he).filter((function(t){return he[t]===e}))[0];return n&&(t[n]=e),t}),{}),i=2;if(255!==n.getUint8(0)||216!==n.getUint8(1))return!1;for(;i1&&void 0!==arguments[1]?arguments[1]:de;return/^blob:/i.test(t)?ve(t).then(pe).then((function(t){return ye(t,e)})):Promise.resolve(null)}(t,["orientation"]).then((function(t){s[0].tags=t,e(s)})).catch((function(t){console.log(t),e(s)})):e(s))},i=0;i0&&n.forEach((function(n){t.removeEventListener(e,n)}))}))},trigger:function(o,a){var s,f,l,h,d,p=i[o];if("canrecord"===o&&(h=t.videoWidth,d=t.videoHeight,e=null!==(f=r)&&void 0!==f&&f.size?h/d>1?r.size:Math.floor(h/d*r.size):h,n=null!==(l=r)&&void 0!==l&&l.size?h/d>1?Math.floor(d/h*r.size):r.size:d,u.x=e,u.y=n),p&&p.length>0)for(s=0;s0)for(n=0;n1?n.size:Math.floor(r/o*n.size):r,e=null!==(f=n)&&void 0!==f&&f.size?r/o>1?Math.floor(o/r*n.size):n.size:o,v.x=t,v.y=e,u=!0,i=0,setTimeout((function(){y("canrecord",[])}),0)}),1,s,null===(l=n)||void 0===l?void 0:l.sequence)},ended:function(){return l},setAttribute:function(){},getConfig:function(){return n},pause:function(){a=!0},play:function(){a=!1},setCurrentTime:function(t){i=t},addEventListener:function(t,e){-1!==h.indexOf(t)&&(d[t]||(d[t]=[]),d[t].push(e))},clearEventHandlers:function(){Object.keys(d).forEach((function(t){return delete d[t]}))},setTopRight:function(t){p.x=t.x,p.y=t.y},getTopRight:function(){return p},setCanvasSize:function(t){v.x=t.x,v.y=t.y},getCanvasSize:function(){return v},getFrame:function(){var t,e;if(!u)return null;a||(t=null===(e=c)||void 0===e?void 0:e[i],i=t&&r&&r()};if(e)for(var a=0;a0&&void 0!==arguments[0]?arguments[0]:"LiveStream",e=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0;switch(t){case"VideoStream":var r=document.createElement("video");return{video:r,inputStream:n.createVideoStream(r)};case"ImageStream":return{inputStream:n.createImageStream()};case"LiveStream":var o=null;return e&&((o=e.querySelector("video"))||(o=document.createElement("video"),e.appendChild(o))),{video:o,inputStream:n.createLiveStream(o)};default:return console.error("* setupInputStream invalid type ".concat(t)),{video:null,inputStream:null}}}(n,this.getViewPort(),Oe),i=o.video,a=o.inputStream;"LiveStream"===n&&i&&ee.request(i,r).then((function(){return a.trigger("canrecord")})).catch((function(e){return t(e)})),a.setAttribute("preload","auto"),a.setInputStream(this.context.config.inputStream),a.addEventListener("canrecord",this.canRecord.bind(void 0,t)),this.context.inputStream=a}}},{key:"getBoundingBoxes",value:function(){var t;return null!==(t=this.context.config)&&void 0!==t&&t.locate?ce.a.locate():[[Object(oe.clone)(this.context.boxSize[0]),Object(oe.clone)(this.context.boxSize[1]),Object(oe.clone)(this.context.boxSize[2]),Object(oe.clone)(this.context.boxSize[3])]]}},{key:"transformResult",value:function(t){var e=this,n=this.context.inputStream.getTopRight(),r=n.x,o=n.y;if((0!==r||0!==o)&&(t.barcodes&&t.barcodes.forEach((function(t){return e.transformResult(t)})),t.line&&2===t.line.length&&function(t,e,n){t[0].x+=e,t[0].y+=n,t[1].x+=e,t[1].y+=n}(t.line,r,o),t.box&&Ie(t.box,r,o),t.boxes&&t.boxes.length>0))for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:null,e=arguments.length>1?arguments[1]:void 0,n=t;t&&this.context.onUIThread&&(this.transformResult(t),this.addResult(t,e),n=t.barcodes||t),Tt.publish("processed",n),this.hasCodeResult(t)&&Tt.publish("detected",n)}},{key:"locateAndDecode",value:function(){var t=this.getBoundingBoxes();if(t){var e,n=this.context.decoder.decodeFromBoundingBoxes(t)||{};n.boxes=t,this.publishResult(n,null===(e=this.context.inputImageWrapper)||void 0===e?void 0:e.data)}else{var r,o=this.context.decoder.decodeFromImage(this.context.inputImageWrapper);if(o)this.publishResult(o,null===(r=this.context.inputImageWrapper)||void 0===r?void 0:r.data);else this.publishResult()}}},{key:"startContinuousUpdate",value:function(){var t,e=this,n=null,r=1e3/((null===(t=this.context.config)||void 0===t?void 0:t.frequency)||60);this.context.stopped=!1;var o=this.context;!function t(i){n=n||i,o.stopped||(i>=n&&(n+=r,e.update()),window.requestAnimationFrame(t))}(performance.now())}},{key:"start",value:function(){var t,e;this.context.onUIThread&&"LiveStream"===(null===(t=this.context.config)||void 0===t||null===(e=t.inputStream)||void 0===e?void 0:e.type)?this.startContinuousUpdate():this.update()}},{key:"stop",value:(e=It()(Ut.a.mark((function t(){var e;return Ut.a.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:if(this.context.stopped=!0,je(0),null===(e=this.context.config)||void 0===e||!e.inputStream||"LiveStream"!==this.context.config.inputStream.type){t.next=6;break}return t.next=5,ee.release();case 5:this.context.inputStream.clearEventHandlers();case 6:case"end":return t.stop()}}),t,this)}))),function(){return e.apply(this,arguments)})},{key:"setReaders",value:function(t){this.context.decoder&&this.context.decoder.setReaders(t),function(t){ke.forEach((function(e){return e.worker.postMessage({cmd:"setReaders",readers:t})}))}(t)}},{key:"registerReader",value:function(t,e){Dt.registerReader(t,e),this.context.decoder&&this.context.decoder.registerReader(t,e),function(t,e){ke.forEach((function(n){return n.worker.postMessage({cmd:"registerReader",name:t,reader:e})}))}(t,e)}}]),t}(),Ue=new ze,Le=Ue.context,Ne={init:function(t,e,n){var r,o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:Ue;return e||(r=new Promise((function(t,n){e=function(e){e?n(e):t()}}))),o.context.config=u()({},re,t),o.context.config.numOfWorkers>0&&(o.context.config.numOfWorkers=0),n?(o.context.onUIThread=!1,o.initializeData(n),e&&e()):o.initInputStream(e),r},start:function(){return Ue.start()},stop:function(){return Ue.stop()},pause:function(){Le.stopped=!0},onDetected:function(t){t&&("function"==typeof t||"object"===i()(t)&&t.callback)?Tt.subscribe("detected",t):console.trace("* warning: Quagga.onDetected called with invalid callback, ignoring")},offDetected:function(t){Tt.unsubscribe("detected",t)},onProcessed:function(t){t&&("function"==typeof t||"object"===i()(t)&&t.callback)?Tt.subscribe("processed",t):console.trace("* warning: Quagga.onProcessed called with invalid callback, ignoring")},offProcessed:function(t){Tt.unsubscribe("processed",t)},setReaders:function(t){t?Ue.setReaders(t):console.trace("* warning: Quagga.setReaders called with no readers, ignoring")},registerReader:function(t,e){t?e?Ue.registerReader(t,e):console.trace("* warning: Quagga.registerReader called with no reader, ignoring"):console.trace("* warning: Quagga.registerReader called with no name, ignoring")},registerResultCollector:function(t){t&&"function"==typeof t.addResult&&(Le.resultCollector=t)},get canvas(){return Le.canvasContainer},decodeSingle:function(t,e){var n=this,r=new ze;return(t=u()({inputStream:{type:"ImageStream",sequence:!1,size:800,src:t.src},numOfWorkers:1,locator:{halfSample:!1}},t)).numOfWorkers>0&&(t.numOfWorkers=0),t.numOfWorkers>0&&("undefined"==typeof Blob||"undefined"==typeof Worker)&&(console.warn("* no Worker and/or Blob support - forcing numOfWorkers to 0"),t.numOfWorkers=0),new Promise((function(o,i){try{n.init(t,(function(){Tt.once("processed",(function(t){r.stop(),e&&e.call(null,t),o(t)}),!0),r.start()}),null,r)}catch(t){i(t)}}))},get default(){return Ne},Readers:r,CameraAccess:ee,ImageDebug:d.a,ImageWrapper:c.a,ResultCollector:ne};e.default=Ne}]).default})); \ No newline at end of file diff --git a/bookwyrm/templates/book/book.html b/bookwyrm/templates/book/book.html index 0e2fd5d39a..fa098281e5 100644 --- a/bookwyrm/templates/book/book.html +++ b/bookwyrm/templates/book/book.html @@ -12,6 +12,15 @@ {% endblock %} {% block content %} +{% if update_error %} +
+ + + {% trans "Unable to connect to remote source." %} + +
+{% endif %} + {% with user_authenticated=request.user.is_authenticated can_edit_book=perms.bookwyrm.edit_book %}
diff --git a/bookwyrm/templates/layout.html b/bookwyrm/templates/layout.html index 51ba7915e9..e91edeec7a 100644 --- a/bookwyrm/templates/layout.html +++ b/bookwyrm/templates/layout.html @@ -56,8 +56,16 @@
+
+ +
+ {% include "search/barcode_modal.html" with id="barcode-scanner-modal" %} +{% endblock %} + + diff --git a/bookwyrm/templates/settings/themes.html b/bookwyrm/templates/settings/themes.html index 44d0cecec4..3d4d83dec9 100644 --- a/bookwyrm/templates/settings/themes.html +++ b/bookwyrm/templates/settings/themes.html @@ -56,12 +56,7 @@

{% trans "Add theme" %}

class="box" enctype="multipart/form-data" > - {% if not choices %} -
- {% trans "No available theme files detected" %} -
- {% endif %} -
+
{% csrf_token %}
@@ -79,20 +74,7 @@

{% trans "Add theme" %}

{% trans "Theme filename" %}
-
- -
+ {{ theme_form.path }} {% include 'snippets/form_errors.html' with errors_list=theme_form.path.errors id="desc_path" %}
diff --git a/bookwyrm/views/admin/themes.py b/bookwyrm/views/admin/themes.py index 12b449afb0..ae9a748d37 100644 --- a/bookwyrm/views/admin/themes.py +++ b/bookwyrm/views/admin/themes.py @@ -1,7 +1,5 @@ """ manage themes """ from django.contrib.auth.decorators import login_required, permission_required -from django.contrib.staticfiles.utils import get_files -from django.contrib.staticfiles.storage import StaticFilesStorage from django.shortcuts import get_object_or_404, redirect from django.template.response import TemplateResponse from django.utils.decorators import method_decorator @@ -41,11 +39,8 @@ def post(self, request): def get_view_data(): """data for view""" - choices = list(get_files(StaticFilesStorage(), location="css/themes")) - current = models.Theme.objects.values_list("path", flat=True) return { "themes": models.Theme.objects.all(), - "choices": [c for c in choices if c not in current and c[-5:] == ".scss"], "theme_form": forms.ThemeForm(), } diff --git a/bookwyrm/views/books/books.py b/bookwyrm/views/books/books.py index ad7ee94360..a010c300f5 100644 --- a/bookwyrm/views/books/books.py +++ b/bookwyrm/views/books/books.py @@ -12,7 +12,7 @@ from bookwyrm import forms, models from bookwyrm.activitypub import ActivitypubResponse -from bookwyrm.connectors import connector_manager +from bookwyrm.connectors import connector_manager, ConnectorException from bookwyrm.connectors.abstract_connector import get_image from bookwyrm.settings import PAGE_LENGTH from bookwyrm.views.helpers import is_api_request @@ -22,7 +22,7 @@ class Book(View): """a book! this is the stuff""" - def get(self, request, book_id, user_statuses=False): + def get(self, request, book_id, user_statuses=False, update_error=False): """info about a book""" if is_api_request(request): book = get_object_or_404( @@ -80,6 +80,7 @@ def get(self, request, book_id, user_statuses=False): else None, "rating": reviews.aggregate(Avg("rating"))["rating__avg"], "lists": lists, + "update_error": update_error, } if request.user.is_authenticated: @@ -191,6 +192,10 @@ def update_book_from_remote(request, book_id, connector_identifier): ) book = get_object_or_404(models.Book.objects.select_subclasses(), id=book_id) - connector.update_book_from_remote(book) + try: + connector.update_book_from_remote(book) + except ConnectorException: + # the remote source isn't available or doesn't know this book + return Book().get(request, book_id, update_error=True) return redirect("book", book.id) diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po index e458e84b69..f7ed0969de 100644 --- a/locale/de_DE/LC_MESSAGES/django.po +++ b/locale/de_DE/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-01 19:48+0000\n" -"PO-Revision-Date: 2022-03-01 20:16\n" +"POT-Creation-Date: 2022-03-08 19:55+0000\n" +"PO-Revision-Date: 2022-03-08 21:16\n" "Last-Translator: Mouse Reeve \n" "Language-Team: German\n" "Language: de\n" @@ -261,73 +261,73 @@ msgstr "Zitate" msgid "Everything else" msgstr "Alles andere" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home Timeline" msgstr "Start-Zeitleiste" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home" msgstr "Startseite" -#: bookwyrm/settings.py:212 +#: bookwyrm/settings.py:208 msgid "Books Timeline" msgstr "Bücher-Zeitleiste" -#: bookwyrm/settings.py:212 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/settings.py:208 bookwyrm/templates/search/layout.html:21 #: bookwyrm/templates/search/layout.html:42 #: bookwyrm/templates/user/layout.html:91 msgid "Books" msgstr "Bücher" -#: bookwyrm/settings.py:284 +#: bookwyrm/settings.py:280 msgid "English" msgstr "English (Englisch)" -#: bookwyrm/settings.py:285 +#: bookwyrm/settings.py:281 msgid "Deutsch (German)" msgstr "Deutsch" -#: bookwyrm/settings.py:286 +#: bookwyrm/settings.py:282 msgid "Español (Spanish)" msgstr "Español (Spanisch)" -#: bookwyrm/settings.py:287 +#: bookwyrm/settings.py:283 msgid "Galego (Galician)" msgstr "Galego (Galizisch)" -#: bookwyrm/settings.py:288 +#: bookwyrm/settings.py:284 msgid "Italiano (Italian)" msgstr "Italiano (Italienisch)" -#: bookwyrm/settings.py:289 +#: bookwyrm/settings.py:285 msgid "Français (French)" msgstr "Français (Französisch)" -#: bookwyrm/settings.py:290 +#: bookwyrm/settings.py:286 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Litauisch)" -#: bookwyrm/settings.py:291 +#: bookwyrm/settings.py:287 msgid "Norsk (Norwegian)" msgstr "Norsk (Norwegisch)" -#: bookwyrm/settings.py:292 +#: bookwyrm/settings.py:288 msgid "Português do Brasil (Brazilian Portuguese)" msgstr "Português do Brasil (brasilianisches Portugiesisch)" -#: bookwyrm/settings.py:293 +#: bookwyrm/settings.py:289 msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Portugiesisch)" -#: bookwyrm/settings.py:294 +#: bookwyrm/settings.py:290 msgid "Svenska (Swedish)" msgstr "Svenska (Schwedisch)" -#: bookwyrm/settings.py:295 +#: bookwyrm/settings.py:291 msgid "简体中文 (Simplified Chinese)" msgstr "简体中文 (vereinfachtes Chinesisch)" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:292 msgid "繁體中文 (Traditional Chinese)" msgstr "繁體中文 (Chinesisch, traditionell)" @@ -356,54 +356,54 @@ msgstr "Etwas ist schief gelaufen! Tut uns leid." msgid "About" msgstr "Über" -#: bookwyrm/templates/about/about.html:19 +#: bookwyrm/templates/about/about.html:20 #: bookwyrm/templates/get_started/layout.html:20 #, python-format msgid "Welcome to %(site_name)s!" msgstr "Willkommen auf %(site_name)s!" -#: bookwyrm/templates/about/about.html:23 +#: bookwyrm/templates/about/about.html:24 #, python-format msgid "%(site_name)s is part of BookWyrm, a network of independent, self-directed communities for readers. While you can interact seamlessly with users anywhere in the BookWyrm network, this community is unique." msgstr "%(site_name)s ist Teil von BookWyrm, ein Netzwerk unabhängiger, selbstverwalteter Gemeinschaften für Leser*innen. Obwohl du dich nahtlos mit anderen Benutzer*innen überall im BookWyrm-Netzwerk austauschen kannst, ist diese Gemeinschaft einzigartig." -#: bookwyrm/templates/about/about.html:40 +#: bookwyrm/templates/about/about.html:42 #, python-format msgid "%(title)s is %(site_name)s's most beloved book, with an average rating of %(rating)s out of 5." msgstr "%(title)s ist mit einer durchschnittlichen Bewertung von %(rating)s (von 5) das beliebtestes Buch auf %(site_name)s." -#: bookwyrm/templates/about/about.html:59 +#: bookwyrm/templates/about/about.html:61 #, python-format msgid "More %(site_name)s users want to read %(title)s than any other book." msgstr "Das Buch %(title)s wollen mehr Benutzer*innen von %(site_name)s lesen als jedes andere Buch." -#: bookwyrm/templates/about/about.html:78 +#: bookwyrm/templates/about/about.html:80 #, python-format msgid "%(title)s has the most divisive ratings of any book on %(site_name)s." msgstr "%(title)s hat die unterschiedlichsten Bewertungen aller Bücher auf %(site_name)s." -#: bookwyrm/templates/about/about.html:89 +#: bookwyrm/templates/about/about.html:91 msgid "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, reach out and make yourself heard." msgstr "Verfolge deine Lektüre, sprich über Bücher, schreibe Besprechungen und entdecke, was Du als Nächstes lesen könntest. BookWyrm ist eine Software im menschlichen Maßstab, die immer übersichtlich, werbefrei, persönlich, und gemeinschaftsorientiert sein wird. Wenn du Feature-Anfragen, Fehlerberichte oder große Träume hast, wende dich an und verschaffe dir Gehör." -#: bookwyrm/templates/about/about.html:96 +#: bookwyrm/templates/about/about.html:98 msgid "Meet your admins" msgstr "Lerne deinen Admins kennen" -#: bookwyrm/templates/about/about.html:99 +#: bookwyrm/templates/about/about.html:101 #, python-format msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the code of conduct, and respond when users report spam and bad behavior." msgstr "Die Moderator*innen und Administrator*innen von %(site_name)s halten diese Seite am Laufen. Beachte den Verhaltenskodex und melde, wenn andere Benutzer*innen dagegen verstoßen oder Spam verbreiten." -#: bookwyrm/templates/about/about.html:113 +#: bookwyrm/templates/about/about.html:115 msgid "Moderator" msgstr "Moderator*in" -#: bookwyrm/templates/about/about.html:115 bookwyrm/templates/layout.html:132 +#: bookwyrm/templates/about/about.html:117 bookwyrm/templates/layout.html:132 msgid "Admin" msgstr "Administration" -#: bookwyrm/templates/about/about.html:131 +#: bookwyrm/templates/about/about.html:133 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 #: bookwyrm/templates/snippets/user_options.html:14 diff --git a/locale/en_US/LC_MESSAGES/django.po b/locale/en_US/LC_MESSAGES/django.po index a6941e87f3..76cfb32bdf 100644 --- a/locale/en_US/LC_MESSAGES/django.po +++ b/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-08 19:55+0000\n" +"POT-Creation-Date: 2022-03-13 18:56+0000\n" "PO-Revision-Date: 2021-02-28 17:19-0800\n" "Last-Translator: Mouse Reeve \n" "Language-Team: English \n" @@ -221,7 +221,7 @@ msgid "Followers" msgstr "" #: bookwyrm/models/fields.py:208 -#: bookwyrm/templates/snippets/create_status/post_options_block.html:8 +#: bookwyrm/templates/snippets/create_status/post_options_block.html:6 #: bookwyrm/templates/snippets/privacy-icons.html:15 #: bookwyrm/templates/snippets/privacy-icons.html:16 #: bookwyrm/templates/snippets/privacy_select.html:20 @@ -262,73 +262,73 @@ msgstr "" msgid "Everything else" msgstr "" -#: bookwyrm/settings.py:207 +#: bookwyrm/settings.py:208 msgid "Home Timeline" msgstr "" -#: bookwyrm/settings.py:207 +#: bookwyrm/settings.py:208 msgid "Home" msgstr "" -#: bookwyrm/settings.py:208 +#: bookwyrm/settings.py:209 msgid "Books Timeline" msgstr "" -#: bookwyrm/settings.py:208 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/settings.py:209 bookwyrm/templates/search/layout.html:21 #: bookwyrm/templates/search/layout.html:42 #: bookwyrm/templates/user/layout.html:91 msgid "Books" msgstr "" -#: bookwyrm/settings.py:280 +#: bookwyrm/settings.py:281 msgid "English" msgstr "" -#: bookwyrm/settings.py:281 +#: bookwyrm/settings.py:282 msgid "Deutsch (German)" msgstr "" -#: bookwyrm/settings.py:282 +#: bookwyrm/settings.py:283 msgid "Español (Spanish)" msgstr "" -#: bookwyrm/settings.py:283 +#: bookwyrm/settings.py:284 msgid "Galego (Galician)" msgstr "" -#: bookwyrm/settings.py:284 +#: bookwyrm/settings.py:285 msgid "Italiano (Italian)" msgstr "" -#: bookwyrm/settings.py:285 +#: bookwyrm/settings.py:286 msgid "Français (French)" msgstr "" -#: bookwyrm/settings.py:286 +#: bookwyrm/settings.py:287 msgid "Lietuvių (Lithuanian)" msgstr "" -#: bookwyrm/settings.py:287 +#: bookwyrm/settings.py:288 msgid "Norsk (Norwegian)" msgstr "" -#: bookwyrm/settings.py:288 +#: bookwyrm/settings.py:289 msgid "Português do Brasil (Brazilian Portuguese)" msgstr "" -#: bookwyrm/settings.py:289 +#: bookwyrm/settings.py:290 msgid "Português Europeu (European Portuguese)" msgstr "" -#: bookwyrm/settings.py:290 +#: bookwyrm/settings.py:291 msgid "Svenska (Swedish)" msgstr "" -#: bookwyrm/settings.py:291 +#: bookwyrm/settings.py:292 msgid "简体中文 (Simplified Chinese)" msgstr "" -#: bookwyrm/settings.py:292 +#: bookwyrm/settings.py:293 msgid "繁體中文 (Traditional Chinese)" msgstr "" @@ -728,14 +728,14 @@ msgstr "" #: bookwyrm/templates/author/edit_author.html:115 #: bookwyrm/templates/book/book.html:193 #: bookwyrm/templates/book/edit/edit_book.html:121 -#: bookwyrm/templates/book/file_links/add_link_modal.html:58 +#: bookwyrm/templates/book/file_links/add_link_modal.html:60 #: bookwyrm/templates/book/file_links/edit_links.html:82 -#: bookwyrm/templates/groups/form.html:30 +#: bookwyrm/templates/groups/form.html:32 #: bookwyrm/templates/lists/bookmark_button.html:15 #: bookwyrm/templates/lists/edit_item_form.html:15 #: bookwyrm/templates/lists/form.html:130 #: bookwyrm/templates/preferences/edit_user.html:136 -#: bookwyrm/templates/readthrough/readthrough_modal.html:72 +#: bookwyrm/templates/readthrough/readthrough_modal.html:74 #: bookwyrm/templates/settings/announcements/edit_announcement.html:120 #: bookwyrm/templates/settings/federation/edit_instance.html:98 #: bookwyrm/templates/settings/federation/instance.html:105 @@ -749,20 +749,20 @@ msgstr "" #: bookwyrm/templates/author/edit_author.html:116 #: bookwyrm/templates/author/sync_modal.html:23 #: bookwyrm/templates/book/book.html:194 -#: bookwyrm/templates/book/cover_add_modal.html:32 +#: bookwyrm/templates/book/cover_add_modal.html:33 #: bookwyrm/templates/book/edit/edit_book.html:123 #: bookwyrm/templates/book/edit/edit_book.html:126 #: bookwyrm/templates/book/file_links/add_link_modal.html:59 -#: bookwyrm/templates/book/file_links/verification_modal.html:21 +#: bookwyrm/templates/book/file_links/verification_modal.html:25 #: bookwyrm/templates/book/sync_modal.html:23 -#: bookwyrm/templates/groups/delete_group_modal.html:17 -#: bookwyrm/templates/lists/add_item_modal.html:42 -#: bookwyrm/templates/lists/delete_list_modal.html:18 -#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:23 +#: bookwyrm/templates/groups/delete_group_modal.html:15 +#: bookwyrm/templates/lists/add_item_modal.html:36 +#: bookwyrm/templates/lists/delete_list_modal.html:16 +#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:27 #: bookwyrm/templates/readthrough/readthrough_modal.html:73 #: bookwyrm/templates/settings/federation/instance.html:106 #: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:22 -#: bookwyrm/templates/snippets/report_modal.html:53 +#: bookwyrm/templates/snippets/report_modal.html:52 msgid "Cancel" msgstr "" @@ -771,9 +771,9 @@ msgstr "" msgid "Loading data will connect to %(source_name)s and check for any metadata about this author which aren't present here. Existing metadata will not be overwritten." msgstr "" -#: bookwyrm/templates/author/sync_modal.html:22 +#: bookwyrm/templates/author/sync_modal.html:24 #: bookwyrm/templates/book/edit/edit_book.html:108 -#: bookwyrm/templates/book/sync_modal.html:22 +#: bookwyrm/templates/book/sync_modal.html:24 #: bookwyrm/templates/groups/members.html:29 #: bookwyrm/templates/landing/password_reset.html:42 #: bookwyrm/templates/snippets/remove_from_group_button.html:17 @@ -874,8 +874,8 @@ msgid "Add to list" msgstr "" #: bookwyrm/templates/book/book.html:370 -#: bookwyrm/templates/book/cover_add_modal.html:31 -#: bookwyrm/templates/lists/add_item_modal.html:37 +#: bookwyrm/templates/book/cover_add_modal.html:32 +#: bookwyrm/templates/lists/add_item_modal.html:39 #: bookwyrm/templates/lists/list.html:255 #: bookwyrm/templates/settings/email_blocklist/domain_form.html:24 #: bookwyrm/templates/settings/ip_blocklist/ip_address_form.html:31 @@ -1182,7 +1182,7 @@ msgid "Actions" msgstr "" #: bookwyrm/templates/book/file_links/edit_links.html:53 -#: bookwyrm/templates/book/file_links/verification_modal.html:25 +#: bookwyrm/templates/book/file_links/verification_modal.html:22 msgid "Report spam" msgstr "" @@ -1216,7 +1216,7 @@ msgstr "" msgid "This link is taking you to: %(link_url)s.
Is that where you'd like to go?" msgstr "" -#: bookwyrm/templates/book/file_links/verification_modal.html:20 +#: bookwyrm/templates/book/file_links/verification_modal.html:26 #: bookwyrm/templates/setup/config.html:139 msgid "Continue" msgstr "" @@ -1292,7 +1292,7 @@ msgstr "" #: bookwyrm/templates/confirm_email/confirm_email.html:25 #: bookwyrm/templates/landing/layout.html:73 #: bookwyrm/templates/settings/dashboard/dashboard.html:116 -#: bookwyrm/templates/snippets/report_modal.html:52 +#: bookwyrm/templates/snippets/report_modal.html:53 msgid "Submit" msgstr "" @@ -1806,7 +1806,8 @@ msgid "No users found for \"%(query)s\"" msgstr "" #: bookwyrm/templates/groups/create_form.html:5 -msgid "Create Group" +#: bookwyrm/templates/user/groups.html:17 +msgid "Create group" msgstr "" #: bookwyrm/templates/groups/created_text.html:4 @@ -1824,9 +1825,9 @@ msgstr "" msgid "This action cannot be un-done" msgstr "" -#: bookwyrm/templates/groups/delete_group_modal.html:15 -#: bookwyrm/templates/lists/delete_list_modal.html:15 -#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:21 +#: bookwyrm/templates/groups/delete_group_modal.html:17 +#: bookwyrm/templates/lists/delete_list_modal.html:19 +#: bookwyrm/templates/readthrough/delete_readthrough_modal.html:29 #: bookwyrm/templates/settings/announcements/announcement.html:23 #: bookwyrm/templates/settings/announcements/announcements.html:56 #: bookwyrm/templates/settings/email_blocklist/email_blocklist.html:49 @@ -2298,7 +2299,7 @@ msgstr "" msgid "Suggest \"%(title)s\" for this list" msgstr "" -#: bookwyrm/templates/lists/add_item_modal.html:39 +#: bookwyrm/templates/lists/add_item_modal.html:41 #: bookwyrm/templates/lists/list.html:257 msgid "Suggest" msgstr "" @@ -2468,7 +2469,7 @@ msgid "List position" msgstr "" #: bookwyrm/templates/lists/list.html:152 -#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:21 +#: bookwyrm/templates/settings/link_domains/edit_domain_modal.html:23 msgid "Set" msgstr "" @@ -3923,7 +3924,7 @@ msgid "Copy the theme file into the bookwyrm/static/css/themes dire msgstr "" #: bookwyrm/templates/settings/themes.html:32 -msgid "Run ./bw-dev compilescss." +msgid "Run ./bw-dev collectstatic." msgstr "" #: bookwyrm/templates/settings/themes.html:35 @@ -4200,7 +4201,8 @@ msgid "Need help?" msgstr "" #: bookwyrm/templates/shelf/create_shelf_form.html:5 -msgid "Create Shelf" +#: bookwyrm/templates/shelf/shelf.html:72 +msgid "Create shelf" msgstr "" #: bookwyrm/templates/shelf/edit_shelf_form.html:5 @@ -4216,10 +4218,6 @@ msgstr "" msgid "All books" msgstr "" -#: bookwyrm/templates/shelf/shelf.html:72 -msgid "Create shelf" -msgstr "" - #: bookwyrm/templates/shelf/shelf.html:96 #, python-format msgid "%(formatted_count)s book" @@ -4343,24 +4341,24 @@ msgstr "" msgid "Content" msgstr "" -#: bookwyrm/templates/snippets/create_status/content_warning_field.html:10 -msgid "Content warning:" +#: bookwyrm/templates/snippets/create_status/content_warning_field.html:9 +msgid "Include spoiler alert" msgstr "" #: bookwyrm/templates/snippets/create_status/content_warning_field.html:18 -msgid "Spoilers ahead!" +msgid "Spoilers/content warnings:" msgstr "" -#: bookwyrm/templates/snippets/create_status/content_warning_toggle.html:13 -msgid "Include spoiler alert" +#: bookwyrm/templates/snippets/create_status/content_warning_field.html:27 +msgid "Spoilers ahead!" msgstr "" -#: bookwyrm/templates/snippets/create_status/layout.html:47 +#: bookwyrm/templates/snippets/create_status/layout.html:45 #: bookwyrm/templates/snippets/reading_modals/form.html:7 msgid "Comment:" msgstr "" -#: bookwyrm/templates/snippets/create_status/post_options_block.html:21 +#: bookwyrm/templates/snippets/create_status/post_options_block.html:18 msgid "Post" msgstr "" @@ -4851,10 +4849,6 @@ msgstr "" msgid "Groups: %(username)s" msgstr "" -#: bookwyrm/templates/user/groups.html:17 -msgid "Create group" -msgstr "" - #: bookwyrm/templates/user/layout.html:19 bookwyrm/templates/user/user.html:10 msgid "User Profile" msgstr "" diff --git a/locale/es_ES/LC_MESSAGES/django.mo b/locale/es_ES/LC_MESSAGES/django.mo index cdb48a306e..43db15d9d5 100644 Binary files a/locale/es_ES/LC_MESSAGES/django.mo and b/locale/es_ES/LC_MESSAGES/django.mo differ diff --git a/locale/es_ES/LC_MESSAGES/django.po b/locale/es_ES/LC_MESSAGES/django.po index 51f969045e..98d4e124f8 100644 --- a/locale/es_ES/LC_MESSAGES/django.po +++ b/locale/es_ES/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-01 19:48+0000\n" -"PO-Revision-Date: 2022-03-02 19:39\n" +"POT-Creation-Date: 2022-03-08 19:55+0000\n" +"PO-Revision-Date: 2022-03-08 21:16\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Spanish\n" "Language: es\n" @@ -261,73 +261,73 @@ msgstr "Citas" msgid "Everything else" msgstr "Todo lo demás" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home Timeline" msgstr "Línea de tiempo principal" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home" msgstr "Inicio" -#: bookwyrm/settings.py:212 +#: bookwyrm/settings.py:208 msgid "Books Timeline" msgstr "Línea temporal de libros" -#: bookwyrm/settings.py:212 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/settings.py:208 bookwyrm/templates/search/layout.html:21 #: bookwyrm/templates/search/layout.html:42 #: bookwyrm/templates/user/layout.html:91 msgid "Books" msgstr "Libros" -#: bookwyrm/settings.py:284 +#: bookwyrm/settings.py:280 msgid "English" msgstr "English (Inglés)" -#: bookwyrm/settings.py:285 +#: bookwyrm/settings.py:281 msgid "Deutsch (German)" msgstr "Deutsch (Alemán)" -#: bookwyrm/settings.py:286 +#: bookwyrm/settings.py:282 msgid "Español (Spanish)" msgstr "Español" -#: bookwyrm/settings.py:287 +#: bookwyrm/settings.py:283 msgid "Galego (Galician)" msgstr "Galego (Gallego)" -#: bookwyrm/settings.py:288 +#: bookwyrm/settings.py:284 msgid "Italiano (Italian)" msgstr "Italiano" -#: bookwyrm/settings.py:289 +#: bookwyrm/settings.py:285 msgid "Français (French)" msgstr "Français (Francés)" -#: bookwyrm/settings.py:290 +#: bookwyrm/settings.py:286 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Lituano)" -#: bookwyrm/settings.py:291 +#: bookwyrm/settings.py:287 msgid "Norsk (Norwegian)" msgstr "Norsk (Noruego)" -#: bookwyrm/settings.py:292 +#: bookwyrm/settings.py:288 msgid "Português do Brasil (Brazilian Portuguese)" msgstr "Português do Brasil (Portugués brasileño)" -#: bookwyrm/settings.py:293 +#: bookwyrm/settings.py:289 msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Portugués europeo)" -#: bookwyrm/settings.py:294 +#: bookwyrm/settings.py:290 msgid "Svenska (Swedish)" msgstr "Svenska (Sueco)" -#: bookwyrm/settings.py:295 +#: bookwyrm/settings.py:291 msgid "简体中文 (Simplified Chinese)" msgstr "简体中文 (Chino simplificado)" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:292 msgid "繁體中文 (Traditional Chinese)" msgstr "繁體中文 (Chino tradicional)" @@ -356,54 +356,54 @@ msgstr "¡Algo salió mal! Disculpa." msgid "About" msgstr "Acerca de" -#: bookwyrm/templates/about/about.html:19 +#: bookwyrm/templates/about/about.html:20 #: bookwyrm/templates/get_started/layout.html:20 #, python-format msgid "Welcome to %(site_name)s!" msgstr "¡Bienvenido a %(site_name)s!" -#: bookwyrm/templates/about/about.html:23 +#: bookwyrm/templates/about/about.html:24 #, python-format msgid "%(site_name)s is part of BookWyrm, a network of independent, self-directed communities for readers. While you can interact seamlessly with users anywhere in the BookWyrm network, this community is unique." msgstr "%(site_name)s es parte de BookWyrm, una red de comunidades independientes y autogestionadas para lectores. Aunque puedes interactuar sin problemas con los usuarios de cualquier parte de la red BookWyrm, esta comunidad es única." -#: bookwyrm/templates/about/about.html:40 +#: bookwyrm/templates/about/about.html:42 #, python-format msgid "%(title)s is %(site_name)s's most beloved book, with an average rating of %(rating)s out of 5." msgstr "%(title)s es el libro más querido de %(site_name)s, con una valoración promedio de %(rating)s sobre 5." -#: bookwyrm/templates/about/about.html:59 +#: bookwyrm/templates/about/about.html:61 #, python-format msgid "More %(site_name)s users want to read %(title)s than any other book." msgstr "Los usuarios de %(site_name)s quieren leer %(title)s más que cualquier otro libro." -#: bookwyrm/templates/about/about.html:78 +#: bookwyrm/templates/about/about.html:80 #, python-format msgid "%(title)s has the most divisive ratings of any book on %(site_name)s." msgstr "Las valoraciones de %(title)s están más divididas que las de cualquier otro libro en %(site_name)s." -#: bookwyrm/templates/about/about.html:89 +#: bookwyrm/templates/about/about.html:91 msgid "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, reach out and make yourself heard." msgstr "Haz un registro de tu lectura, habla sobre libros, escribe reseñas y descubre qué leer a continuación. BookWyrm es un software de escala humana, siempre sin anuncios, anticorporativo y orientado a la comunidad, diseñado para ser pequeño y personal. Si tienes solicitudes de características, informes de errores o grandes sueños, contacta y hazte oír." -#: bookwyrm/templates/about/about.html:96 +#: bookwyrm/templates/about/about.html:98 msgid "Meet your admins" msgstr "Conoce a tus administradores" -#: bookwyrm/templates/about/about.html:99 +#: bookwyrm/templates/about/about.html:101 #, python-format msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the code of conduct, and respond when users report spam and bad behavior." msgstr "Los moderadores y administradores de %(site_name)s mantienen el sitio en funcionamiento, hacen cumplir el código de conducta y responden cuando los usuarios informan de spam y mal comportamiento." -#: bookwyrm/templates/about/about.html:113 +#: bookwyrm/templates/about/about.html:115 msgid "Moderator" msgstr "Moderador" -#: bookwyrm/templates/about/about.html:115 bookwyrm/templates/layout.html:132 +#: bookwyrm/templates/about/about.html:117 bookwyrm/templates/layout.html:132 msgid "Admin" msgstr "Administrador" -#: bookwyrm/templates/about/about.html:131 +#: bookwyrm/templates/about/about.html:133 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 #: bookwyrm/templates/snippets/user_options.html:14 diff --git a/locale/fr_FR/LC_MESSAGES/django.po b/locale/fr_FR/LC_MESSAGES/django.po index 31ebd43cde..6c5d17c4d6 100644 --- a/locale/fr_FR/LC_MESSAGES/django.po +++ b/locale/fr_FR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-01 19:48+0000\n" -"PO-Revision-Date: 2022-03-02 12:24\n" +"POT-Creation-Date: 2022-03-08 19:55+0000\n" +"PO-Revision-Date: 2022-03-08 21:16\n" "Last-Translator: Mouse Reeve \n" "Language-Team: French\n" "Language: fr\n" @@ -261,73 +261,73 @@ msgstr "Citations" msgid "Everything else" msgstr "Tout le reste" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home Timeline" msgstr "Mon fil d’actualité" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home" msgstr "Accueil" -#: bookwyrm/settings.py:212 +#: bookwyrm/settings.py:208 msgid "Books Timeline" msgstr "Actualité de mes livres" -#: bookwyrm/settings.py:212 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/settings.py:208 bookwyrm/templates/search/layout.html:21 #: bookwyrm/templates/search/layout.html:42 #: bookwyrm/templates/user/layout.html:91 msgid "Books" msgstr "Livres" -#: bookwyrm/settings.py:284 +#: bookwyrm/settings.py:280 msgid "English" msgstr "English" -#: bookwyrm/settings.py:285 +#: bookwyrm/settings.py:281 msgid "Deutsch (German)" msgstr "Deutsch" -#: bookwyrm/settings.py:286 +#: bookwyrm/settings.py:282 msgid "Español (Spanish)" msgstr "Español" -#: bookwyrm/settings.py:287 +#: bookwyrm/settings.py:283 msgid "Galego (Galician)" msgstr "Galego (Galicien)" -#: bookwyrm/settings.py:288 +#: bookwyrm/settings.py:284 msgid "Italiano (Italian)" msgstr "Italiano (italien)" -#: bookwyrm/settings.py:289 +#: bookwyrm/settings.py:285 msgid "Français (French)" msgstr "Français" -#: bookwyrm/settings.py:290 +#: bookwyrm/settings.py:286 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Lituanien)" -#: bookwyrm/settings.py:291 +#: bookwyrm/settings.py:287 msgid "Norsk (Norwegian)" msgstr "Norsk (norvégien)" -#: bookwyrm/settings.py:292 +#: bookwyrm/settings.py:288 msgid "Português do Brasil (Brazilian Portuguese)" msgstr "Português do Brasil (Portugais brésilien)" -#: bookwyrm/settings.py:293 +#: bookwyrm/settings.py:289 msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Portugais européen)" -#: bookwyrm/settings.py:294 +#: bookwyrm/settings.py:290 msgid "Svenska (Swedish)" msgstr "Svenska (Suédois)" -#: bookwyrm/settings.py:295 +#: bookwyrm/settings.py:291 msgid "简体中文 (Simplified Chinese)" msgstr "简化字" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:292 msgid "繁體中文 (Traditional Chinese)" msgstr "Infos supplémentaires :" @@ -356,54 +356,54 @@ msgstr "Une erreur s’est produite ; désolé !" msgid "About" msgstr "À propos" -#: bookwyrm/templates/about/about.html:19 +#: bookwyrm/templates/about/about.html:20 #: bookwyrm/templates/get_started/layout.html:20 #, python-format msgid "Welcome to %(site_name)s!" msgstr "Bienvenue sur %(site_name)s !" -#: bookwyrm/templates/about/about.html:23 +#: bookwyrm/templates/about/about.html:24 #, python-format msgid "%(site_name)s is part of BookWyrm, a network of independent, self-directed communities for readers. While you can interact seamlessly with users anywhere in the BookWyrm network, this community is unique." msgstr "%(site_name)s fait partie de BookWyrm, un réseau de communautés indépendantes et autogérées, à destination des lecteurs. Bien que vous puissiez interagir apparemment avec les comptes n'importe où dans le réseau BookWyrm, cette communauté est unique." -#: bookwyrm/templates/about/about.html:40 +#: bookwyrm/templates/about/about.html:42 #, python-format msgid "%(title)s is %(site_name)s's most beloved book, with an average rating of %(rating)s out of 5." msgstr "%(title)s est le livre le plus aimé de %(site_name)s, avec une note moyenne de %(rating)s sur 5." -#: bookwyrm/templates/about/about.html:59 +#: bookwyrm/templates/about/about.html:61 #, python-format msgid "More %(site_name)s users want to read %(title)s than any other book." msgstr "Sur %(site_name)s, c’est %(title)s que tout le monde veut lire plus que n’importe quel autre livre." -#: bookwyrm/templates/about/about.html:78 +#: bookwyrm/templates/about/about.html:80 #, python-format msgid "%(title)s has the most divisive ratings of any book on %(site_name)s." msgstr "%(title)s divise les critiques plus que n’importe quel autre livre sur %(site_name)s." -#: bookwyrm/templates/about/about.html:89 +#: bookwyrm/templates/about/about.html:91 msgid "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, reach out and make yourself heard." msgstr "Gardez trace de vos lectures, parlez de livres, écrivez des commentaires et découvrez quoi lire ensuite. BookWyrm est un logiciel à échelle humaine, sans publicité, anti-capitaliste et axé sur la communauté, conçu pour rester petit et personnel. Si vous avez des demandes de fonctionnalités, des rapports de bogue ou des rêves grandioses, rejoignez-nous et faites-vous entendre." -#: bookwyrm/templates/about/about.html:96 +#: bookwyrm/templates/about/about.html:98 msgid "Meet your admins" msgstr "Rencontrez vos admins" -#: bookwyrm/templates/about/about.html:99 +#: bookwyrm/templates/about/about.html:101 #, python-format msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the code of conduct, and respond when users report spam and bad behavior." msgstr "L’administration et la modération de %(site_name)s maintiennent le site opérationnel, font respecter le code de conduite, et répondent lorsque les utilisateurs signalent le spam et les mauvais comportements." -#: bookwyrm/templates/about/about.html:113 +#: bookwyrm/templates/about/about.html:115 msgid "Moderator" msgstr "Modérateur/modératrice" -#: bookwyrm/templates/about/about.html:115 bookwyrm/templates/layout.html:132 +#: bookwyrm/templates/about/about.html:117 bookwyrm/templates/layout.html:132 msgid "Admin" msgstr "Admin" -#: bookwyrm/templates/about/about.html:131 +#: bookwyrm/templates/about/about.html:133 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 #: bookwyrm/templates/snippets/user_options.html:14 diff --git a/locale/gl_ES/LC_MESSAGES/django.mo b/locale/gl_ES/LC_MESSAGES/django.mo index dbe430ba55..691d4246e0 100644 Binary files a/locale/gl_ES/LC_MESSAGES/django.mo and b/locale/gl_ES/LC_MESSAGES/django.mo differ diff --git a/locale/gl_ES/LC_MESSAGES/django.po b/locale/gl_ES/LC_MESSAGES/django.po index b76edace65..1f45a6890d 100644 --- a/locale/gl_ES/LC_MESSAGES/django.po +++ b/locale/gl_ES/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-01 19:48+0000\n" -"PO-Revision-Date: 2022-03-02 07:34\n" +"POT-Creation-Date: 2022-03-08 19:55+0000\n" +"PO-Revision-Date: 2022-03-08 21:16\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Galician\n" "Language: gl\n" @@ -261,73 +261,73 @@ msgstr "Citas" msgid "Everything else" msgstr "As outras cousas" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home Timeline" msgstr "Cronoloxía de Inicio" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home" msgstr "Inicio" -#: bookwyrm/settings.py:212 +#: bookwyrm/settings.py:208 msgid "Books Timeline" msgstr "Cronoloxía de libros" -#: bookwyrm/settings.py:212 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/settings.py:208 bookwyrm/templates/search/layout.html:21 #: bookwyrm/templates/search/layout.html:42 #: bookwyrm/templates/user/layout.html:91 msgid "Books" msgstr "Libros" -#: bookwyrm/settings.py:284 +#: bookwyrm/settings.py:280 msgid "English" msgstr "English (Inglés)" -#: bookwyrm/settings.py:285 +#: bookwyrm/settings.py:281 msgid "Deutsch (German)" msgstr "Alemán (Alemaña)" -#: bookwyrm/settings.py:286 +#: bookwyrm/settings.py:282 msgid "Español (Spanish)" msgstr "Español (España)" -#: bookwyrm/settings.py:287 +#: bookwyrm/settings.py:283 msgid "Galego (Galician)" msgstr "Galego (Galician)" -#: bookwyrm/settings.py:288 +#: bookwyrm/settings.py:284 msgid "Italiano (Italian)" msgstr "Italiano (Italian)" -#: bookwyrm/settings.py:289 +#: bookwyrm/settings.py:285 msgid "Français (French)" msgstr "Francés (Francia)" -#: bookwyrm/settings.py:290 +#: bookwyrm/settings.py:286 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Lithuanian)" -#: bookwyrm/settings.py:291 +#: bookwyrm/settings.py:287 msgid "Norsk (Norwegian)" msgstr "Noruegués (Norwegian)" -#: bookwyrm/settings.py:292 +#: bookwyrm/settings.py:288 msgid "Português do Brasil (Brazilian Portuguese)" msgstr "Português do Brasil (Portugués brasileiro)" -#: bookwyrm/settings.py:293 +#: bookwyrm/settings.py:289 msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Portugués europeo)" -#: bookwyrm/settings.py:294 +#: bookwyrm/settings.py:290 msgid "Svenska (Swedish)" msgstr "Sueco (Swedish)" -#: bookwyrm/settings.py:295 +#: bookwyrm/settings.py:291 msgid "简体中文 (Simplified Chinese)" msgstr "简体中文 (Chinés simplificado)" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:292 msgid "繁體中文 (Traditional Chinese)" msgstr "繁體中文 (Chinés tradicional)" @@ -356,54 +356,54 @@ msgstr "Algo fallou! Lamentámolo." msgid "About" msgstr "Acerca de" -#: bookwyrm/templates/about/about.html:19 +#: bookwyrm/templates/about/about.html:20 #: bookwyrm/templates/get_started/layout.html:20 #, python-format msgid "Welcome to %(site_name)s!" msgstr "Sexas ben vida a %(site_name)s!" -#: bookwyrm/templates/about/about.html:23 +#: bookwyrm/templates/about/about.html:24 #, python-format msgid "%(site_name)s is part of BookWyrm, a network of independent, self-directed communities for readers. While you can interact seamlessly with users anywhere in the BookWyrm network, this community is unique." msgstr "%(site_name)s é parte de BookWyrm, unha rede independente, auto-xestionada por comunidades de persoas lectoras. Aínda que podes interactuar con outras usuarias da rede BookWyrm, esta comunidade é única." -#: bookwyrm/templates/about/about.html:40 +#: bookwyrm/templates/about/about.html:42 #, python-format msgid "%(title)s is %(site_name)s's most beloved book, with an average rating of %(rating)s out of 5." msgstr "%(title)s é o libro máis querido de %(site_name)s, cunha valoración media de %(rating)s sobre 5." -#: bookwyrm/templates/about/about.html:59 +#: bookwyrm/templates/about/about.html:61 #, python-format msgid "More %(site_name)s users want to read %(title)s than any other book." msgstr "%(title)s é o libro que máis queren ler as usuarias de %(site_name)s." -#: bookwyrm/templates/about/about.html:78 +#: bookwyrm/templates/about/about.html:80 #, python-format msgid "%(title)s has the most divisive ratings of any book on %(site_name)s." msgstr "%(title)s é o libro con valoracións máis diverxentes en %(site_name)s." -#: bookwyrm/templates/about/about.html:89 +#: bookwyrm/templates/about/about.html:91 msgid "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, reach out and make yourself heard." msgstr "Rexistra as túas lecturas, conversa acerca dos libros, escribe recensións e descubre próximas lecturas. Sempre sen publicidade, anti-corporacións e orientado á comunidade, BookWyrm é software a escala humana, deseñado para ser pequeno e persoal. Se queres propoñer novas ferramentas, informar de fallos, ou colaborar, contacta con nós e deixa oír a túa voz." -#: bookwyrm/templates/about/about.html:96 +#: bookwyrm/templates/about/about.html:98 msgid "Meet your admins" msgstr "Contacta coa administración" -#: bookwyrm/templates/about/about.html:99 +#: bookwyrm/templates/about/about.html:101 #, python-format msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the code of conduct, and respond when users report spam and bad behavior." msgstr "A moderación e administración de %(site_name)s coidan e xestionan o sitio web, fan cumprir co código de conduta e responden ás denuncias das usuarias sobre spam e mal comportamento." -#: bookwyrm/templates/about/about.html:113 +#: bookwyrm/templates/about/about.html:115 msgid "Moderator" msgstr "Moderación" -#: bookwyrm/templates/about/about.html:115 bookwyrm/templates/layout.html:132 +#: bookwyrm/templates/about/about.html:117 bookwyrm/templates/layout.html:132 msgid "Admin" msgstr "Admin" -#: bookwyrm/templates/about/about.html:131 +#: bookwyrm/templates/about/about.html:133 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 #: bookwyrm/templates/snippets/user_options.html:14 diff --git a/locale/it_IT/LC_MESSAGES/django.mo b/locale/it_IT/LC_MESSAGES/django.mo index cddc0a5404..2be0c3ac01 100644 Binary files a/locale/it_IT/LC_MESSAGES/django.mo and b/locale/it_IT/LC_MESSAGES/django.mo differ diff --git a/locale/it_IT/LC_MESSAGES/django.po b/locale/it_IT/LC_MESSAGES/django.po index 143539d9eb..2453873518 100644 --- a/locale/it_IT/LC_MESSAGES/django.po +++ b/locale/it_IT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-01 19:48+0000\n" -"PO-Revision-Date: 2022-03-01 21:14\n" +"POT-Creation-Date: 2022-03-08 19:55+0000\n" +"PO-Revision-Date: 2022-03-08 21:16\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Italian\n" "Language: it\n" @@ -261,73 +261,73 @@ msgstr "Citazioni" msgid "Everything else" msgstr "Tutto il resto" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home Timeline" msgstr "La tua timeline" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home" msgstr "Home" -#: bookwyrm/settings.py:212 +#: bookwyrm/settings.py:208 msgid "Books Timeline" msgstr "Timeline dei libri" -#: bookwyrm/settings.py:212 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/settings.py:208 bookwyrm/templates/search/layout.html:21 #: bookwyrm/templates/search/layout.html:42 #: bookwyrm/templates/user/layout.html:91 msgid "Books" msgstr "Libri" -#: bookwyrm/settings.py:284 +#: bookwyrm/settings.py:280 msgid "English" msgstr "English (Inglese)" -#: bookwyrm/settings.py:285 +#: bookwyrm/settings.py:281 msgid "Deutsch (German)" msgstr "Deutsch (Tedesco)" -#: bookwyrm/settings.py:286 +#: bookwyrm/settings.py:282 msgid "Español (Spanish)" msgstr "Español (Spagnolo)" -#: bookwyrm/settings.py:287 +#: bookwyrm/settings.py:283 msgid "Galego (Galician)" msgstr "Galego (Galiziano)" -#: bookwyrm/settings.py:288 +#: bookwyrm/settings.py:284 msgid "Italiano (Italian)" msgstr "Italiano (Italiano)" -#: bookwyrm/settings.py:289 +#: bookwyrm/settings.py:285 msgid "Français (French)" msgstr "Français (Francese)" -#: bookwyrm/settings.py:290 +#: bookwyrm/settings.py:286 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Lituano)" -#: bookwyrm/settings.py:291 +#: bookwyrm/settings.py:287 msgid "Norsk (Norwegian)" msgstr "Norsk (Norvegese)" -#: bookwyrm/settings.py:292 +#: bookwyrm/settings.py:288 msgid "Português do Brasil (Brazilian Portuguese)" msgstr "Português do Brasil (Portoghese Brasiliano)" -#: bookwyrm/settings.py:293 +#: bookwyrm/settings.py:289 msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Portoghese europeo)" -#: bookwyrm/settings.py:294 +#: bookwyrm/settings.py:290 msgid "Svenska (Swedish)" msgstr "Svenska (Svedese)" -#: bookwyrm/settings.py:295 +#: bookwyrm/settings.py:291 msgid "简体中文 (Simplified Chinese)" msgstr "简体中文 (Cinese Semplificato)" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:292 msgid "繁體中文 (Traditional Chinese)" msgstr "繁體中文 (Cinese Tradizionale)" @@ -356,54 +356,54 @@ msgstr "Qualcosa è andato storto! Ci dispiace." msgid "About" msgstr "Informazioni su" -#: bookwyrm/templates/about/about.html:19 +#: bookwyrm/templates/about/about.html:20 #: bookwyrm/templates/get_started/layout.html:20 #, python-format msgid "Welcome to %(site_name)s!" msgstr "Benvenuto su %(site_name)s!" -#: bookwyrm/templates/about/about.html:23 +#: bookwyrm/templates/about/about.html:24 #, python-format msgid "%(site_name)s is part of BookWyrm, a network of independent, self-directed communities for readers. While you can interact seamlessly with users anywhere in the BookWyrm network, this community is unique." msgstr "%(site_name)s fa parte di BookWyrm, una rete di comunità indipendenti e autogestite per i lettori. Mentre puoi interagire apparentemente con gli utenti ovunque nella rete di BookWyrm, questa comunità è unica." -#: bookwyrm/templates/about/about.html:40 +#: bookwyrm/templates/about/about.html:42 #, python-format msgid "%(title)s is %(site_name)s's most beloved book, with an average rating of %(rating)s out of 5." msgstr "%(title)s è il libro più amato di %(site_name)s, con un punteggio medio di %(rating)s su 5." -#: bookwyrm/templates/about/about.html:59 +#: bookwyrm/templates/about/about.html:61 #, python-format msgid "More %(site_name)s users want to read %(title)s than any other book." msgstr "Più %(site_name)s utenti vogliono leggere %(title)s rispetto a qualsiasi altro libro." -#: bookwyrm/templates/about/about.html:78 +#: bookwyrm/templates/about/about.html:80 #, python-format msgid "%(title)s has the most divisive ratings of any book on %(site_name)s." msgstr "%(title)s ha le valutazioni più divisive di ogni libro su %(site_name)s." -#: bookwyrm/templates/about/about.html:89 +#: bookwyrm/templates/about/about.html:91 msgid "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, reach out and make yourself heard." msgstr "Traccia la tue letture, parla di libri, scrivi recensioni, e scopri cosa leggere dopo. BookWyrm, sempre libero, anti-corporate, orientato alla comunità, è un software a misura d'uomo, progettato per rimanere piccolo e personale. Se hai richieste di funzionalità, segnalazioni di bug o grandi sogni, contatta e fai sentire la tua voce." -#: bookwyrm/templates/about/about.html:96 +#: bookwyrm/templates/about/about.html:98 msgid "Meet your admins" msgstr "Incontra gli amministratori" -#: bookwyrm/templates/about/about.html:99 +#: bookwyrm/templates/about/about.html:101 #, python-format msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the code of conduct, and respond when users report spam and bad behavior." msgstr "I moderatori e gli amministratori di %(site_name)s mantengono il sito attivo e funzionante, applicano il codice di condotta, e rispondono quando gli utenti segnalano spam o comportamenti non adeguati." -#: bookwyrm/templates/about/about.html:113 +#: bookwyrm/templates/about/about.html:115 msgid "Moderator" msgstr "Moderatori" -#: bookwyrm/templates/about/about.html:115 bookwyrm/templates/layout.html:132 +#: bookwyrm/templates/about/about.html:117 bookwyrm/templates/layout.html:132 msgid "Admin" msgstr "Admin" -#: bookwyrm/templates/about/about.html:131 +#: bookwyrm/templates/about/about.html:133 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 #: bookwyrm/templates/snippets/user_options.html:14 diff --git a/locale/lt_LT/LC_MESSAGES/django.mo b/locale/lt_LT/LC_MESSAGES/django.mo index d05ea5af18..b4885e93b6 100644 Binary files a/locale/lt_LT/LC_MESSAGES/django.mo and b/locale/lt_LT/LC_MESSAGES/django.mo differ diff --git a/locale/lt_LT/LC_MESSAGES/django.po b/locale/lt_LT/LC_MESSAGES/django.po index ca506d5836..b272ecf098 100644 --- a/locale/lt_LT/LC_MESSAGES/django.po +++ b/locale/lt_LT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-01 19:48+0000\n" -"PO-Revision-Date: 2022-03-01 20:15\n" +"POT-Creation-Date: 2022-03-08 19:55+0000\n" +"PO-Revision-Date: 2022-03-08 21:15\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Lithuanian\n" "Language: lt\n" @@ -261,73 +261,73 @@ msgstr "Citatos" msgid "Everything else" msgstr "Visa kita" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home Timeline" msgstr "Pagrindinė siena" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home" msgstr "Pagrindinis" -#: bookwyrm/settings.py:212 +#: bookwyrm/settings.py:208 msgid "Books Timeline" msgstr "Knygų siena" -#: bookwyrm/settings.py:212 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/settings.py:208 bookwyrm/templates/search/layout.html:21 #: bookwyrm/templates/search/layout.html:42 #: bookwyrm/templates/user/layout.html:91 msgid "Books" msgstr "Knygos" -#: bookwyrm/settings.py:284 +#: bookwyrm/settings.py:280 msgid "English" msgstr "English (Anglų)" -#: bookwyrm/settings.py:285 +#: bookwyrm/settings.py:281 msgid "Deutsch (German)" msgstr "Deutsch (Vokiečių)" -#: bookwyrm/settings.py:286 +#: bookwyrm/settings.py:282 msgid "Español (Spanish)" msgstr "Español (Ispanų)" -#: bookwyrm/settings.py:287 +#: bookwyrm/settings.py:283 msgid "Galego (Galician)" msgstr "Galego (galisų)" -#: bookwyrm/settings.py:288 +#: bookwyrm/settings.py:284 msgid "Italiano (Italian)" msgstr "Italų (Italian)" -#: bookwyrm/settings.py:289 +#: bookwyrm/settings.py:285 msgid "Français (French)" msgstr "Français (Prancūzų)" -#: bookwyrm/settings.py:290 +#: bookwyrm/settings.py:286 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių" -#: bookwyrm/settings.py:291 +#: bookwyrm/settings.py:287 msgid "Norsk (Norwegian)" msgstr "Norvegų (Norwegian)" -#: bookwyrm/settings.py:292 +#: bookwyrm/settings.py:288 msgid "Português do Brasil (Brazilian Portuguese)" msgstr "Português brasileiro (Brazilijos portugalų)" -#: bookwyrm/settings.py:293 +#: bookwyrm/settings.py:289 msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Europos portugalų)" -#: bookwyrm/settings.py:294 +#: bookwyrm/settings.py:290 msgid "Svenska (Swedish)" msgstr "Svenska (Švedų)" -#: bookwyrm/settings.py:295 +#: bookwyrm/settings.py:291 msgid "简体中文 (Simplified Chinese)" msgstr "简体中文 (Supaprastinta kinų)" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:292 msgid "繁體中文 (Traditional Chinese)" msgstr "繁體中文 (Tradicinė kinų)" @@ -356,54 +356,54 @@ msgstr "Kažkas nepavyko. Atsiprašome." msgid "About" msgstr "Apie" -#: bookwyrm/templates/about/about.html:19 +#: bookwyrm/templates/about/about.html:20 #: bookwyrm/templates/get_started/layout.html:20 #, python-format msgid "Welcome to %(site_name)s!" msgstr "Sveiki atvykę į %(site_name)s!" -#: bookwyrm/templates/about/about.html:23 +#: bookwyrm/templates/about/about.html:24 #, python-format msgid "%(site_name)s is part of BookWyrm, a network of independent, self-directed communities for readers. While you can interact seamlessly with users anywhere in the BookWyrm network, this community is unique." msgstr "%(site_name)s yra BookWyrmdalis, tinklo nepriklausomų skaitytojų bendruomenių. Jūs galite bendrauti su nariais iš šio BookWyrm tinklo, tačiau ši bendruomenė yra unikali." -#: bookwyrm/templates/about/about.html:40 +#: bookwyrm/templates/about/about.html:42 #, python-format msgid "%(title)s is %(site_name)s's most beloved book, with an average rating of %(rating)s out of 5." msgstr "%(title)s yra %(site_name)s's mėgstamiausia knyga, kurios vidutinis įvertinimas yra %(rating)s iš 5." -#: bookwyrm/templates/about/about.html:59 +#: bookwyrm/templates/about/about.html:61 #, python-format msgid "More %(site_name)s users want to read %(title)s than any other book." msgstr "Daugiau %(site_name)s narių nori perskaityti %(title)s negu bet kurią kitą knygą." -#: bookwyrm/templates/about/about.html:78 +#: bookwyrm/templates/about/about.html:80 #, python-format msgid "%(title)s has the most divisive ratings of any book on %(site_name)s." msgstr "%(title)s labiausiai kontroversiškai reitinguota %(site_name)s." -#: bookwyrm/templates/about/about.html:89 +#: bookwyrm/templates/about/about.html:91 msgid "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, reach out and make yourself heard." msgstr "Sekite savo skaitymus, kalbėkite apie knygas, rašykite atsiliepimus ir atraskite, ką dar perskaityti. „BookWyrm“ – tai programinė įranga, kurioje nėra reklamų, biurokratijos. Tai bendruomenei orientuota, nedidelė ir asmeninė įranga, kurią lengva plėsti. Jei norite papildomų funkcijų, įgyvendinti savo svajones ar tiesiog pranešti apie klaidą, susisiekite ir jus išgirsime." -#: bookwyrm/templates/about/about.html:96 +#: bookwyrm/templates/about/about.html:98 msgid "Meet your admins" msgstr "Šio serverio administratoriai" -#: bookwyrm/templates/about/about.html:99 +#: bookwyrm/templates/about/about.html:101 #, python-format msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the code of conduct, and respond when users report spam and bad behavior." msgstr "Svetainės %(site_name)s moderatoriai ir administratoriai nuolat atnaujina puslapį, laikosi elgsenos susitarimo ir atsako, kai naudotojai praneša apie brukalą ir blogą elgesį." -#: bookwyrm/templates/about/about.html:113 +#: bookwyrm/templates/about/about.html:115 msgid "Moderator" msgstr "Moderatorius" -#: bookwyrm/templates/about/about.html:115 bookwyrm/templates/layout.html:132 +#: bookwyrm/templates/about/about.html:117 bookwyrm/templates/layout.html:132 msgid "Admin" msgstr "Administravimas" -#: bookwyrm/templates/about/about.html:131 +#: bookwyrm/templates/about/about.html:133 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 #: bookwyrm/templates/snippets/user_options.html:14 diff --git a/locale/no_NO/LC_MESSAGES/django.mo b/locale/no_NO/LC_MESSAGES/django.mo index 97e81d11d4..dbfe5ea07b 100644 Binary files a/locale/no_NO/LC_MESSAGES/django.mo and b/locale/no_NO/LC_MESSAGES/django.mo differ diff --git a/locale/no_NO/LC_MESSAGES/django.po b/locale/no_NO/LC_MESSAGES/django.po index 473c4a71e6..a7626b2846 100644 --- a/locale/no_NO/LC_MESSAGES/django.po +++ b/locale/no_NO/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-01 19:48+0000\n" -"PO-Revision-Date: 2022-03-01 20:15\n" +"POT-Creation-Date: 2022-03-08 19:55+0000\n" +"PO-Revision-Date: 2022-03-08 21:16\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Norwegian\n" "Language: no\n" @@ -261,73 +261,73 @@ msgstr "Sitater" msgid "Everything else" msgstr "Andre ting" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home Timeline" msgstr "Lokal tidslinje" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home" msgstr "Hjem" -#: bookwyrm/settings.py:212 +#: bookwyrm/settings.py:208 msgid "Books Timeline" msgstr "Boktidslinja" -#: bookwyrm/settings.py:212 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/settings.py:208 bookwyrm/templates/search/layout.html:21 #: bookwyrm/templates/search/layout.html:42 #: bookwyrm/templates/user/layout.html:91 msgid "Books" msgstr "Bøker" -#: bookwyrm/settings.py:284 +#: bookwyrm/settings.py:280 msgid "English" msgstr "English (Engelsk)" -#: bookwyrm/settings.py:285 +#: bookwyrm/settings.py:281 msgid "Deutsch (German)" msgstr "Deutsch (Tysk)" -#: bookwyrm/settings.py:286 +#: bookwyrm/settings.py:282 msgid "Español (Spanish)" msgstr "Español (Spansk)" -#: bookwyrm/settings.py:287 +#: bookwyrm/settings.py:283 msgid "Galego (Galician)" msgstr "Galego (Gallisk)" -#: bookwyrm/settings.py:288 +#: bookwyrm/settings.py:284 msgid "Italiano (Italian)" msgstr "Italiano (Italiensk)" -#: bookwyrm/settings.py:289 +#: bookwyrm/settings.py:285 msgid "Français (French)" msgstr "Français (Fransk)" -#: bookwyrm/settings.py:290 +#: bookwyrm/settings.py:286 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Litauisk)" -#: bookwyrm/settings.py:291 +#: bookwyrm/settings.py:287 msgid "Norsk (Norwegian)" msgstr "Norsk (Norsk)" -#: bookwyrm/settings.py:292 +#: bookwyrm/settings.py:288 msgid "Português do Brasil (Brazilian Portuguese)" msgstr "Português - Brasil (Brasiliansk portugisisk)" -#: bookwyrm/settings.py:293 +#: bookwyrm/settings.py:289 msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Europeisk Portugisisk)" -#: bookwyrm/settings.py:294 +#: bookwyrm/settings.py:290 msgid "Svenska (Swedish)" msgstr "Svenska (Svensk)" -#: bookwyrm/settings.py:295 +#: bookwyrm/settings.py:291 msgid "简体中文 (Simplified Chinese)" msgstr "简体中文 (Forenklet kinesisk)" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:292 msgid "繁體中文 (Traditional Chinese)" msgstr "繁體中文 (Tradisjonelt kinesisk)" @@ -356,54 +356,54 @@ msgstr "Beklager, noe gikk galt! Leit, det der." msgid "About" msgstr "Om" -#: bookwyrm/templates/about/about.html:19 +#: bookwyrm/templates/about/about.html:20 #: bookwyrm/templates/get_started/layout.html:20 #, python-format msgid "Welcome to %(site_name)s!" msgstr "Velkommen til %(site_name)s!" -#: bookwyrm/templates/about/about.html:23 +#: bookwyrm/templates/about/about.html:24 #, python-format msgid "%(site_name)s is part of BookWyrm, a network of independent, self-directed communities for readers. While you can interact seamlessly with users anywhere in the BookWyrm network, this community is unique." msgstr "%(site_name)s er en del av BookWyrm, et nettverk av selvstendige, selvstyrte samfunn for lesere. Du kan kommunisere sømløst med brukere hvor som helst i BookWyrm nettverket, men hvert samfunn er unikt." -#: bookwyrm/templates/about/about.html:40 +#: bookwyrm/templates/about/about.html:42 #, python-format msgid "%(title)s is %(site_name)s's most beloved book, with an average rating of %(rating)s out of 5." msgstr "%(title)s er %(site_name)s sin favorittbok, med en gjennomsnittlig vurdering på %(rating)s av 5." -#: bookwyrm/templates/about/about.html:59 +#: bookwyrm/templates/about/about.html:61 #, python-format msgid "More %(site_name)s users want to read %(title)s than any other book." msgstr "Flere av %(site_name)s sine medlemmer ønsker å lese %(title)s enn noen annen bok." -#: bookwyrm/templates/about/about.html:78 +#: bookwyrm/templates/about/about.html:80 #, python-format msgid "%(title)s has the most divisive ratings of any book on %(site_name)s." msgstr "%(title)s er den boka på %(site_name)s med de mest polariserte vurderingene." -#: bookwyrm/templates/about/about.html:89 +#: bookwyrm/templates/about/about.html:91 msgid "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, reach out and make yourself heard." msgstr "Journalfør lesingen din, snakk om bøker, skriv anmeldelser, og oppdag din neste bok. BookWyrm er reklamefri, ukommers og fellesskapsorientert, programvare for mennesker, designet for å forbli liten og nær. Hvis du har ønsker, feilrapporter eller store vyer, ta kontakt og bli hørt." -#: bookwyrm/templates/about/about.html:96 +#: bookwyrm/templates/about/about.html:98 msgid "Meet your admins" msgstr "Møt administratorene" -#: bookwyrm/templates/about/about.html:99 +#: bookwyrm/templates/about/about.html:101 #, python-format msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the code of conduct, and respond when users report spam and bad behavior." msgstr "%(site_name)s sine moderatorer og administratorer holder nettsida oppe og tilgjengelig, håndhever adferdskoden, og svarer på brukernes rapporterer om spam og dårlig atferd." -#: bookwyrm/templates/about/about.html:113 +#: bookwyrm/templates/about/about.html:115 msgid "Moderator" msgstr "Moderator" -#: bookwyrm/templates/about/about.html:115 bookwyrm/templates/layout.html:132 +#: bookwyrm/templates/about/about.html:117 bookwyrm/templates/layout.html:132 msgid "Admin" msgstr "Admin" -#: bookwyrm/templates/about/about.html:131 +#: bookwyrm/templates/about/about.html:133 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 #: bookwyrm/templates/snippets/user_options.html:14 diff --git a/locale/pt_BR/LC_MESSAGES/django.mo b/locale/pt_BR/LC_MESSAGES/django.mo index ef4929f88c..064c6caeba 100644 Binary files a/locale/pt_BR/LC_MESSAGES/django.mo and b/locale/pt_BR/LC_MESSAGES/django.mo differ diff --git a/locale/pt_BR/LC_MESSAGES/django.po b/locale/pt_BR/LC_MESSAGES/django.po index c2432bbba7..60b192c6af 100644 --- a/locale/pt_BR/LC_MESSAGES/django.po +++ b/locale/pt_BR/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-01 19:48+0000\n" -"PO-Revision-Date: 2022-03-01 23:21\n" +"POT-Creation-Date: 2022-03-08 19:55+0000\n" +"PO-Revision-Date: 2022-03-08 21:16\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt\n" @@ -261,73 +261,73 @@ msgstr "Citações" msgid "Everything else" msgstr "Todo o resto" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home Timeline" msgstr "Linha do tempo" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home" msgstr "Página inicial" -#: bookwyrm/settings.py:212 +#: bookwyrm/settings.py:208 msgid "Books Timeline" msgstr "Linha do tempo dos livros" -#: bookwyrm/settings.py:212 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/settings.py:208 bookwyrm/templates/search/layout.html:21 #: bookwyrm/templates/search/layout.html:42 #: bookwyrm/templates/user/layout.html:91 msgid "Books" msgstr "Livros" -#: bookwyrm/settings.py:284 +#: bookwyrm/settings.py:280 msgid "English" msgstr "English (Inglês)" -#: bookwyrm/settings.py:285 +#: bookwyrm/settings.py:281 msgid "Deutsch (German)" msgstr "Deutsch (Alemão)" -#: bookwyrm/settings.py:286 +#: bookwyrm/settings.py:282 msgid "Español (Spanish)" msgstr "Español (Espanhol)" -#: bookwyrm/settings.py:287 +#: bookwyrm/settings.py:283 msgid "Galego (Galician)" msgstr "Galego (Galego)" -#: bookwyrm/settings.py:288 +#: bookwyrm/settings.py:284 msgid "Italiano (Italian)" msgstr "Italiano (Italiano)" -#: bookwyrm/settings.py:289 +#: bookwyrm/settings.py:285 msgid "Français (French)" msgstr "Français (Francês)" -#: bookwyrm/settings.py:290 +#: bookwyrm/settings.py:286 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (Lituano)" -#: bookwyrm/settings.py:291 +#: bookwyrm/settings.py:287 msgid "Norsk (Norwegian)" msgstr "Norsk (Norueguês)" -#: bookwyrm/settings.py:292 +#: bookwyrm/settings.py:288 msgid "Português do Brasil (Brazilian Portuguese)" msgstr "Português do Brasil (Português do Brasil)" -#: bookwyrm/settings.py:293 +#: bookwyrm/settings.py:289 msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Português Europeu)" -#: bookwyrm/settings.py:294 +#: bookwyrm/settings.py:290 msgid "Svenska (Swedish)" msgstr "Svenska (Sueco)" -#: bookwyrm/settings.py:295 +#: bookwyrm/settings.py:291 msgid "简体中文 (Simplified Chinese)" msgstr "简体中文 (Chinês simplificado)" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:292 msgid "繁體中文 (Traditional Chinese)" msgstr "繁體中文 (Chinês tradicional)" @@ -356,54 +356,54 @@ msgstr "Algo deu errado! Foi mal." msgid "About" msgstr "Sobre" -#: bookwyrm/templates/about/about.html:19 +#: bookwyrm/templates/about/about.html:20 #: bookwyrm/templates/get_started/layout.html:20 #, python-format msgid "Welcome to %(site_name)s!" msgstr "Bem-vindol(a) a %(site_name)s!" -#: bookwyrm/templates/about/about.html:23 +#: bookwyrm/templates/about/about.html:24 #, python-format msgid "%(site_name)s is part of BookWyrm, a network of independent, self-directed communities for readers. While you can interact seamlessly with users anywhere in the BookWyrm network, this community is unique." msgstr "%(site_name)s é parte da BookWyrm, uma rede independente e autogestionada para leitores. Apesar de você poder interagir diretamente com usuários de toda a rede BookWyrm, esta comunidade é única." -#: bookwyrm/templates/about/about.html:40 +#: bookwyrm/templates/about/about.html:42 #, python-format msgid "%(title)s is %(site_name)s's most beloved book, with an average rating of %(rating)s out of 5." msgstr "%(title)s é o livro favorito da instância %(site_name)s, com uma avaliação média de %(rating)s em 5." -#: bookwyrm/templates/about/about.html:59 +#: bookwyrm/templates/about/about.html:61 #, python-format msgid "More %(site_name)s users want to read %(title)s than any other book." msgstr "O livro mais desejado de toda a instância %(site_name)s é %(title)s." -#: bookwyrm/templates/about/about.html:78 +#: bookwyrm/templates/about/about.html:80 #, python-format msgid "%(title)s has the most divisive ratings of any book on %(site_name)s." msgstr "%(title)s tem a avaliação mais polêmica de toda a instância %(site_name)s." -#: bookwyrm/templates/about/about.html:89 +#: bookwyrm/templates/about/about.html:91 msgid "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, reach out and make yourself heard." msgstr "Registre o andamento de suas leituras, fale sobre livros, escreva resenhas e ache o que ler em seguida. Sempre sem propagandas, anticorporativa e voltada à comunidade, a BookWyrm é um software em escala humana desenvolvido para permanecer pequeno e pessoal. Se você tem sugestões de funções, avisos sobre bugs ou grandes sonhos para o projeto, fale conosco e faça sua voz ser ouvida." -#: bookwyrm/templates/about/about.html:96 +#: bookwyrm/templates/about/about.html:98 msgid "Meet your admins" msgstr "Conheça a administração" -#: bookwyrm/templates/about/about.html:99 +#: bookwyrm/templates/about/about.html:101 #, python-format msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the code of conduct, and respond when users report spam and bad behavior." msgstr "Moderadores/as e administradores/as de %(site_name)s mantêm o site funcionando, aplicam o código de conduta e respondem quando usuários denunciam spam e mau comportamento." -#: bookwyrm/templates/about/about.html:113 +#: bookwyrm/templates/about/about.html:115 msgid "Moderator" msgstr "Moderador/a" -#: bookwyrm/templates/about/about.html:115 bookwyrm/templates/layout.html:132 +#: bookwyrm/templates/about/about.html:117 bookwyrm/templates/layout.html:132 msgid "Admin" msgstr "Admin" -#: bookwyrm/templates/about/about.html:131 +#: bookwyrm/templates/about/about.html:133 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 #: bookwyrm/templates/snippets/user_options.html:14 diff --git a/locale/pt_PT/LC_MESSAGES/django.mo b/locale/pt_PT/LC_MESSAGES/django.mo index 9c144cf8a1..85e167660b 100644 Binary files a/locale/pt_PT/LC_MESSAGES/django.mo and b/locale/pt_PT/LC_MESSAGES/django.mo differ diff --git a/locale/pt_PT/LC_MESSAGES/django.po b/locale/pt_PT/LC_MESSAGES/django.po index ff508e117a..32acf05c36 100644 --- a/locale/pt_PT/LC_MESSAGES/django.po +++ b/locale/pt_PT/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-01 19:48+0000\n" -"PO-Revision-Date: 2022-03-01 20:15\n" +"POT-Creation-Date: 2022-03-08 19:55+0000\n" +"PO-Revision-Date: 2022-03-08 21:16\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Portuguese\n" "Language: pt\n" @@ -261,73 +261,73 @@ msgstr "Citações" msgid "Everything else" msgstr "Tudo o resto" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home Timeline" msgstr "Cronograma Inicial" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home" msgstr "Início" -#: bookwyrm/settings.py:212 +#: bookwyrm/settings.py:208 msgid "Books Timeline" msgstr "Cronograma de Livros" -#: bookwyrm/settings.py:212 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/settings.py:208 bookwyrm/templates/search/layout.html:21 #: bookwyrm/templates/search/layout.html:42 #: bookwyrm/templates/user/layout.html:91 msgid "Books" msgstr "Livros" -#: bookwyrm/settings.py:284 +#: bookwyrm/settings.py:280 msgid "English" msgstr "Inglês" -#: bookwyrm/settings.py:285 +#: bookwyrm/settings.py:281 msgid "Deutsch (German)" msgstr "Deutsch (Alemão)" -#: bookwyrm/settings.py:286 +#: bookwyrm/settings.py:282 msgid "Español (Spanish)" msgstr "Español (Espanhol)" -#: bookwyrm/settings.py:287 +#: bookwyrm/settings.py:283 msgid "Galego (Galician)" msgstr "Galego (Galician)" -#: bookwyrm/settings.py:288 +#: bookwyrm/settings.py:284 msgid "Italiano (Italian)" msgstr "Italiano (Italiano)" -#: bookwyrm/settings.py:289 +#: bookwyrm/settings.py:285 msgid "Français (French)" msgstr "Français (Francês)" -#: bookwyrm/settings.py:290 +#: bookwyrm/settings.py:286 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių (lituano)" -#: bookwyrm/settings.py:291 +#: bookwyrm/settings.py:287 msgid "Norsk (Norwegian)" msgstr "Norsk (Norueguês)" -#: bookwyrm/settings.py:292 +#: bookwyrm/settings.py:288 msgid "Português do Brasil (Brazilian Portuguese)" msgstr "Português do Brasil (Português brasileiro)" -#: bookwyrm/settings.py:293 +#: bookwyrm/settings.py:289 msgid "Português Europeu (European Portuguese)" msgstr "Português (Português Europeu)" -#: bookwyrm/settings.py:294 +#: bookwyrm/settings.py:290 msgid "Svenska (Swedish)" msgstr "" -#: bookwyrm/settings.py:295 +#: bookwyrm/settings.py:291 msgid "简体中文 (Simplified Chinese)" msgstr "简体中文 (Chinês simplificado)" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:292 msgid "繁體中文 (Traditional Chinese)" msgstr "繁體中文 (Chinês tradicional)" @@ -356,54 +356,54 @@ msgstr "Ocorreu um erro! Pedimos desculpa por isto." msgid "About" msgstr "Sobre" -#: bookwyrm/templates/about/about.html:19 +#: bookwyrm/templates/about/about.html:20 #: bookwyrm/templates/get_started/layout.html:20 #, python-format msgid "Welcome to %(site_name)s!" msgstr "Bem-vindo(a) ao %(site_name)s!" -#: bookwyrm/templates/about/about.html:23 +#: bookwyrm/templates/about/about.html:24 #, python-format msgid "%(site_name)s is part of BookWyrm, a network of independent, self-directed communities for readers. While you can interact seamlessly with users anywhere in the BookWyrm network, this community is unique." msgstr "%(site_name)s faz parte do BookWyrm, uma rede de comunidades independentes, focada nos leitores. Enquanto podes interagir continuamente com utilizadores por todo o lado na Rede Boomwyrm, esta comunidade é única." -#: bookwyrm/templates/about/about.html:40 +#: bookwyrm/templates/about/about.html:42 #, python-format msgid "%(title)s is %(site_name)s's most beloved book, with an average rating of %(rating)s out of 5." msgstr "" -#: bookwyrm/templates/about/about.html:59 +#: bookwyrm/templates/about/about.html:61 #, python-format msgid "More %(site_name)s users want to read %(title)s than any other book." msgstr "" -#: bookwyrm/templates/about/about.html:78 +#: bookwyrm/templates/about/about.html:80 #, python-format msgid "%(title)s has the most divisive ratings of any book on %(site_name)s." msgstr "" -#: bookwyrm/templates/about/about.html:89 +#: bookwyrm/templates/about/about.html:91 msgid "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, reach out and make yourself heard." msgstr "" -#: bookwyrm/templates/about/about.html:96 +#: bookwyrm/templates/about/about.html:98 msgid "Meet your admins" msgstr "Conheça os nossos administradores" -#: bookwyrm/templates/about/about.html:99 +#: bookwyrm/templates/about/about.html:101 #, python-format msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the code of conduct, and respond when users report spam and bad behavior." msgstr "" -#: bookwyrm/templates/about/about.html:113 +#: bookwyrm/templates/about/about.html:115 msgid "Moderator" msgstr "Moderador" -#: bookwyrm/templates/about/about.html:115 bookwyrm/templates/layout.html:132 +#: bookwyrm/templates/about/about.html:117 bookwyrm/templates/layout.html:132 msgid "Admin" msgstr "Admin" -#: bookwyrm/templates/about/about.html:131 +#: bookwyrm/templates/about/about.html:133 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 #: bookwyrm/templates/snippets/user_options.html:14 diff --git a/locale/sv_SE/LC_MESSAGES/django.mo b/locale/sv_SE/LC_MESSAGES/django.mo index 4f1348791d..eb44d9bf95 100644 Binary files a/locale/sv_SE/LC_MESSAGES/django.mo and b/locale/sv_SE/LC_MESSAGES/django.mo differ diff --git a/locale/sv_SE/LC_MESSAGES/django.po b/locale/sv_SE/LC_MESSAGES/django.po index f98510e335..303495c60c 100644 --- a/locale/sv_SE/LC_MESSAGES/django.po +++ b/locale/sv_SE/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-01 19:48+0000\n" -"PO-Revision-Date: 2022-03-04 04:45\n" +"POT-Creation-Date: 2022-03-08 19:55+0000\n" +"PO-Revision-Date: 2022-03-08 21:15\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Swedish\n" "Language: sv\n" @@ -261,73 +261,73 @@ msgstr "Citationer" msgid "Everything else" msgstr "Allt annat" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home Timeline" msgstr "Tidslinje för Hem" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home" msgstr "Hem" -#: bookwyrm/settings.py:212 +#: bookwyrm/settings.py:208 msgid "Books Timeline" msgstr "Tidslinjer för böcker" -#: bookwyrm/settings.py:212 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/settings.py:208 bookwyrm/templates/search/layout.html:21 #: bookwyrm/templates/search/layout.html:42 #: bookwyrm/templates/user/layout.html:91 msgid "Books" msgstr "Böcker" -#: bookwyrm/settings.py:284 +#: bookwyrm/settings.py:280 msgid "English" msgstr "Engelska" -#: bookwyrm/settings.py:285 +#: bookwyrm/settings.py:281 msgid "Deutsch (German)" msgstr "Tyska (Tysk)" -#: bookwyrm/settings.py:286 +#: bookwyrm/settings.py:282 msgid "Español (Spanish)" msgstr "Spanska (Spansk)" -#: bookwyrm/settings.py:287 +#: bookwyrm/settings.py:283 msgid "Galego (Galician)" msgstr "Galego (Gallisk)" -#: bookwyrm/settings.py:288 +#: bookwyrm/settings.py:284 msgid "Italiano (Italian)" msgstr "Italienska (Italiensk)" -#: bookwyrm/settings.py:289 +#: bookwyrm/settings.py:285 msgid "Français (French)" msgstr "Franska (Fransk)" -#: bookwyrm/settings.py:290 +#: bookwyrm/settings.py:286 msgid "Lietuvių (Lithuanian)" msgstr "Litauiska (Litauisk)" -#: bookwyrm/settings.py:291 +#: bookwyrm/settings.py:287 msgid "Norsk (Norwegian)" msgstr "Norska (Norska)" -#: bookwyrm/settings.py:292 +#: bookwyrm/settings.py:288 msgid "Português do Brasil (Brazilian Portuguese)" msgstr "Português d Brasil (Brasiliansk Portugisiska)" -#: bookwyrm/settings.py:293 +#: bookwyrm/settings.py:289 msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu (Europeisk Portugisiska)" -#: bookwyrm/settings.py:294 +#: bookwyrm/settings.py:290 msgid "Svenska (Swedish)" msgstr "Svenska (Svenska)" -#: bookwyrm/settings.py:295 +#: bookwyrm/settings.py:291 msgid "简体中文 (Simplified Chinese)" msgstr "简体中文 (Förenklad Kinesiska)" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:292 msgid "繁體中文 (Traditional Chinese)" msgstr "繁體中文 (Traditionell Kinesiska)" @@ -356,54 +356,54 @@ msgstr "Något gick fel! Förlåt för det." msgid "About" msgstr "Om" -#: bookwyrm/templates/about/about.html:19 +#: bookwyrm/templates/about/about.html:20 #: bookwyrm/templates/get_started/layout.html:20 #, python-format msgid "Welcome to %(site_name)s!" msgstr "Välkommen till %(site_name)s!" -#: bookwyrm/templates/about/about.html:23 +#: bookwyrm/templates/about/about.html:24 #, python-format msgid "%(site_name)s is part of BookWyrm, a network of independent, self-directed communities for readers. While you can interact seamlessly with users anywhere in the BookWyrm network, this community is unique." msgstr "%(site_name)s är en del av BookWyrm, ett nätverk av oberoende, självstyrda gemenskaper för läsare. Medan du kan interagera sömlöst med användare var som helst i BookWyrm-nätverketså är den här gemenskapen unik." -#: bookwyrm/templates/about/about.html:40 +#: bookwyrm/templates/about/about.html:42 #, python-format msgid "%(title)s is %(site_name)s's most beloved book, with an average rating of %(rating)s out of 5." msgstr "%(title)s är %(site_name)s's mest omtyckta bok med ett genomsnittligt betyg på %(rating)s utav 5." -#: bookwyrm/templates/about/about.html:59 +#: bookwyrm/templates/about/about.html:61 #, python-format msgid "More %(site_name)s users want to read %(title)s than any other book." msgstr "Flera %(site_name)s användare vill läsa %(title)s än någon annan bok." -#: bookwyrm/templates/about/about.html:78 +#: bookwyrm/templates/about/about.html:80 #, python-format msgid "%(title)s has the most divisive ratings of any book on %(site_name)s." msgstr "%(title)s har de mest splittrade betygen av alla böcker på %(site_name)s." -#: bookwyrm/templates/about/about.html:89 +#: bookwyrm/templates/about/about.html:91 msgid "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, reach out and make yourself heard." msgstr "Följ din läsning, prata om böcker, skriv recensioner och upptäck vad som ska läsas härnäst. BookWyrm är alltid annonsfri, företagsfientlig och gemenskapsorienterad, och är en mänsklig programvara som är utformad för att förbli liten och personlig. Om du har förfrågningar om funktioner, felrapporter eller storslagna drömmar, ta kontakt och gör dig själv hörd." -#: bookwyrm/templates/about/about.html:96 +#: bookwyrm/templates/about/about.html:98 msgid "Meet your admins" msgstr "Träffa dina administratörer" -#: bookwyrm/templates/about/about.html:99 +#: bookwyrm/templates/about/about.html:101 #, python-format msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the code of conduct, and respond when users report spam and bad behavior." msgstr "%(site_name)s's moderatorer och administratörer håller hemsidan uppe och fungerande, upprätthåller uppförandekoden och svarar när användarna rapporterar skräppost och dåligt uppförande." -#: bookwyrm/templates/about/about.html:113 +#: bookwyrm/templates/about/about.html:115 msgid "Moderator" msgstr "Moderator" -#: bookwyrm/templates/about/about.html:115 bookwyrm/templates/layout.html:132 +#: bookwyrm/templates/about/about.html:117 bookwyrm/templates/layout.html:132 msgid "Admin" msgstr "Administratör" -#: bookwyrm/templates/about/about.html:131 +#: bookwyrm/templates/about/about.html:133 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 #: bookwyrm/templates/snippets/user_options.html:14 diff --git a/locale/zh_Hans/LC_MESSAGES/django.po b/locale/zh_Hans/LC_MESSAGES/django.po index ec1edda739..4acf1dce30 100644 --- a/locale/zh_Hans/LC_MESSAGES/django.po +++ b/locale/zh_Hans/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-01 19:48+0000\n" -"PO-Revision-Date: 2022-03-04 15:46\n" +"POT-Creation-Date: 2022-03-08 19:55+0000\n" +"PO-Revision-Date: 2022-03-08 21:16\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Chinese Simplified\n" "Language: zh\n" @@ -261,73 +261,73 @@ msgstr "引用" msgid "Everything else" msgstr "所有其它内容" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home Timeline" msgstr "主页时间线" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home" msgstr "主页" -#: bookwyrm/settings.py:212 +#: bookwyrm/settings.py:208 msgid "Books Timeline" msgstr "书目时间线" -#: bookwyrm/settings.py:212 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/settings.py:208 bookwyrm/templates/search/layout.html:21 #: bookwyrm/templates/search/layout.html:42 #: bookwyrm/templates/user/layout.html:91 msgid "Books" msgstr "书目" -#: bookwyrm/settings.py:284 +#: bookwyrm/settings.py:280 msgid "English" msgstr "English(英语)" -#: bookwyrm/settings.py:285 +#: bookwyrm/settings.py:281 msgid "Deutsch (German)" msgstr "Deutsch(德语)" -#: bookwyrm/settings.py:286 +#: bookwyrm/settings.py:282 msgid "Español (Spanish)" msgstr "Español(西班牙语)" -#: bookwyrm/settings.py:287 +#: bookwyrm/settings.py:283 msgid "Galego (Galician)" msgstr "Galego(加利西亚语)" -#: bookwyrm/settings.py:288 +#: bookwyrm/settings.py:284 msgid "Italiano (Italian)" msgstr "Italiano(意大利语)" -#: bookwyrm/settings.py:289 +#: bookwyrm/settings.py:285 msgid "Français (French)" msgstr "Français(法语)" -#: bookwyrm/settings.py:290 +#: bookwyrm/settings.py:286 msgid "Lietuvių (Lithuanian)" msgstr "Lietuvių(立陶宛语)" -#: bookwyrm/settings.py:291 +#: bookwyrm/settings.py:287 msgid "Norsk (Norwegian)" msgstr "Norsk(挪威语)" -#: bookwyrm/settings.py:292 +#: bookwyrm/settings.py:288 msgid "Português do Brasil (Brazilian Portuguese)" msgstr "Português do Brasil(巴西葡萄牙语)" -#: bookwyrm/settings.py:293 +#: bookwyrm/settings.py:289 msgid "Português Europeu (European Portuguese)" msgstr "Português Europeu(欧洲葡萄牙语)" -#: bookwyrm/settings.py:294 +#: bookwyrm/settings.py:290 msgid "Svenska (Swedish)" msgstr "Svenska(瑞典语)" -#: bookwyrm/settings.py:295 +#: bookwyrm/settings.py:291 msgid "简体中文 (Simplified Chinese)" msgstr "简体中文" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:292 msgid "繁體中文 (Traditional Chinese)" msgstr "繁體中文(繁体中文)" @@ -356,54 +356,54 @@ msgstr "某些东西出错了!对不起啦。" msgid "About" msgstr "关于" -#: bookwyrm/templates/about/about.html:19 +#: bookwyrm/templates/about/about.html:20 #: bookwyrm/templates/get_started/layout.html:20 #, python-format msgid "Welcome to %(site_name)s!" msgstr "欢迎来到 %(site_name)s!" -#: bookwyrm/templates/about/about.html:23 +#: bookwyrm/templates/about/about.html:24 #, python-format msgid "%(site_name)s is part of BookWyrm, a network of independent, self-directed communities for readers. While you can interact seamlessly with users anywhere in the BookWyrm network, this community is unique." msgstr "%(site_name)s 是 BookWyrm 的一部分,这是一个为读者建立的独立、自我导向的社区网络。 虽然您可以在 BookWyrm 网络中与任何地方的用户无缝互动,但这个社区是独一无二的。" -#: bookwyrm/templates/about/about.html:40 +#: bookwyrm/templates/about/about.html:42 #, python-format msgid "%(title)s is %(site_name)s's most beloved book, with an average rating of %(rating)s out of 5." msgstr "%(title)s 是 %(site_name)s 最受欢迎的书,平均得分为 %(rating)s(满分五分)。" -#: bookwyrm/templates/about/about.html:59 +#: bookwyrm/templates/about/about.html:61 #, python-format msgid "More %(site_name)s users want to read %(title)s than any other book." msgstr "%(site_name)s 上的最用户想读的书籍是 %(title)s。" -#: bookwyrm/templates/about/about.html:78 +#: bookwyrm/templates/about/about.html:80 #, python-format msgid "%(title)s has the most divisive ratings of any book on %(site_name)s." msgstr "在 %(site_name)s 上,对 %(title)s 这本书的评分争议较大。" -#: bookwyrm/templates/about/about.html:89 +#: bookwyrm/templates/about/about.html:91 msgid "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, reach out and make yourself heard." msgstr "记录您的阅读、谈论书籍、撰写评论、发现下一本书。 BookWyrm 永远是无广告、反公司化和面向社区的为人设计的软件,其目的是保持小规模和个人性。 如果您有特性请求、错误报告或大梦想, 联系我们,为自己发声。" -#: bookwyrm/templates/about/about.html:96 +#: bookwyrm/templates/about/about.html:98 msgid "Meet your admins" msgstr "遇见您的管理员" -#: bookwyrm/templates/about/about.html:99 +#: bookwyrm/templates/about/about.html:101 #, python-format msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the code of conduct, and respond when users report spam and bad behavior." msgstr "%(site_name)s 的仲裁员和管理员负责维持站点运行, 执行行为守则,并在用户报告垃圾邮件和不良行为时做出回应。" -#: bookwyrm/templates/about/about.html:113 +#: bookwyrm/templates/about/about.html:115 msgid "Moderator" msgstr "仲裁员" -#: bookwyrm/templates/about/about.html:115 bookwyrm/templates/layout.html:132 +#: bookwyrm/templates/about/about.html:117 bookwyrm/templates/layout.html:132 msgid "Admin" msgstr "管理员" -#: bookwyrm/templates/about/about.html:131 +#: bookwyrm/templates/about/about.html:133 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 #: bookwyrm/templates/snippets/user_options.html:14 diff --git a/locale/zh_Hant/LC_MESSAGES/django.po b/locale/zh_Hant/LC_MESSAGES/django.po index 4222d26358..a410c4fed0 100644 --- a/locale/zh_Hant/LC_MESSAGES/django.po +++ b/locale/zh_Hant/LC_MESSAGES/django.po @@ -2,8 +2,8 @@ msgid "" msgstr "" "Project-Id-Version: bookwyrm\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-03-01 19:48+0000\n" -"PO-Revision-Date: 2022-03-01 20:15\n" +"POT-Creation-Date: 2022-03-08 19:55+0000\n" +"PO-Revision-Date: 2022-03-08 21:16\n" "Last-Translator: Mouse Reeve \n" "Language-Team: Chinese Traditional\n" "Language: zh\n" @@ -261,73 +261,73 @@ msgstr "" msgid "Everything else" msgstr "" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home Timeline" msgstr "主頁時間線" -#: bookwyrm/settings.py:211 +#: bookwyrm/settings.py:207 msgid "Home" msgstr "主頁" -#: bookwyrm/settings.py:212 +#: bookwyrm/settings.py:208 msgid "Books Timeline" msgstr "" -#: bookwyrm/settings.py:212 bookwyrm/templates/search/layout.html:21 +#: bookwyrm/settings.py:208 bookwyrm/templates/search/layout.html:21 #: bookwyrm/templates/search/layout.html:42 #: bookwyrm/templates/user/layout.html:91 msgid "Books" msgstr "書目" -#: bookwyrm/settings.py:284 +#: bookwyrm/settings.py:280 msgid "English" msgstr "English(英語)" -#: bookwyrm/settings.py:285 +#: bookwyrm/settings.py:281 msgid "Deutsch (German)" msgstr "Deutsch(德語)" -#: bookwyrm/settings.py:286 +#: bookwyrm/settings.py:282 msgid "Español (Spanish)" msgstr "Español(西班牙語)" -#: bookwyrm/settings.py:287 +#: bookwyrm/settings.py:283 msgid "Galego (Galician)" msgstr "" -#: bookwyrm/settings.py:288 +#: bookwyrm/settings.py:284 msgid "Italiano (Italian)" msgstr "" -#: bookwyrm/settings.py:289 +#: bookwyrm/settings.py:285 msgid "Français (French)" msgstr "Français(法語)" -#: bookwyrm/settings.py:290 +#: bookwyrm/settings.py:286 msgid "Lietuvių (Lithuanian)" msgstr "" -#: bookwyrm/settings.py:291 +#: bookwyrm/settings.py:287 msgid "Norsk (Norwegian)" msgstr "" -#: bookwyrm/settings.py:292 +#: bookwyrm/settings.py:288 msgid "Português do Brasil (Brazilian Portuguese)" msgstr "" -#: bookwyrm/settings.py:293 +#: bookwyrm/settings.py:289 msgid "Português Europeu (European Portuguese)" msgstr "" -#: bookwyrm/settings.py:294 +#: bookwyrm/settings.py:290 msgid "Svenska (Swedish)" msgstr "" -#: bookwyrm/settings.py:295 +#: bookwyrm/settings.py:291 msgid "简体中文 (Simplified Chinese)" msgstr "簡體中文" -#: bookwyrm/settings.py:296 +#: bookwyrm/settings.py:292 msgid "繁體中文 (Traditional Chinese)" msgstr "繁體中文" @@ -356,54 +356,54 @@ msgstr "某些東西出錯了!抱歉。" msgid "About" msgstr "" -#: bookwyrm/templates/about/about.html:19 +#: bookwyrm/templates/about/about.html:20 #: bookwyrm/templates/get_started/layout.html:20 #, python-format msgid "Welcome to %(site_name)s!" msgstr "歡迎來到 %(site_name)s!" -#: bookwyrm/templates/about/about.html:23 +#: bookwyrm/templates/about/about.html:24 #, python-format msgid "%(site_name)s is part of BookWyrm, a network of independent, self-directed communities for readers. While you can interact seamlessly with users anywhere in the BookWyrm network, this community is unique." msgstr "" -#: bookwyrm/templates/about/about.html:40 +#: bookwyrm/templates/about/about.html:42 #, python-format msgid "%(title)s is %(site_name)s's most beloved book, with an average rating of %(rating)s out of 5." msgstr "" -#: bookwyrm/templates/about/about.html:59 +#: bookwyrm/templates/about/about.html:61 #, python-format msgid "More %(site_name)s users want to read %(title)s than any other book." msgstr "" -#: bookwyrm/templates/about/about.html:78 +#: bookwyrm/templates/about/about.html:80 #, python-format msgid "%(title)s has the most divisive ratings of any book on %(site_name)s." msgstr "" -#: bookwyrm/templates/about/about.html:89 +#: bookwyrm/templates/about/about.html:91 msgid "Track your reading, talk about books, write reviews, and discover what to read next. Always ad-free, anti-corporate, and community-oriented, BookWyrm is human-scale software, designed to stay small and personal. If you have feature requests, bug reports, or grand dreams, reach out and make yourself heard." msgstr "" -#: bookwyrm/templates/about/about.html:96 +#: bookwyrm/templates/about/about.html:98 msgid "Meet your admins" msgstr "" -#: bookwyrm/templates/about/about.html:99 +#: bookwyrm/templates/about/about.html:101 #, python-format msgid "%(site_name)s's moderators and administrators keep the site up and running, enforce the code of conduct, and respond when users report spam and bad behavior." msgstr "" -#: bookwyrm/templates/about/about.html:113 +#: bookwyrm/templates/about/about.html:115 msgid "Moderator" msgstr "" -#: bookwyrm/templates/about/about.html:115 bookwyrm/templates/layout.html:132 +#: bookwyrm/templates/about/about.html:117 bookwyrm/templates/layout.html:132 msgid "Admin" msgstr "管理員" -#: bookwyrm/templates/about/about.html:131 +#: bookwyrm/templates/about/about.html:133 #: bookwyrm/templates/settings/users/user_moderation_actions.html:14 #: bookwyrm/templates/snippets/status/status_options.html:35 #: bookwyrm/templates/snippets/user_options.html:14