diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..9fa808ee --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +**/vendor/* diff --git a/bookwyrm/forms.py b/bookwyrm/forms.py index 983d84ba..3a465813 100644 --- a/bookwyrm/forms.py +++ b/bookwyrm/forms.py @@ -468,7 +468,12 @@ class ThemeForm(CustomForm): 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/management/commands/compilethemes.py b/bookwyrm/management/commands/compilethemes.py deleted file mode 100644 index e3fba632..00000000 --- a/bookwyrm/management/commands/compilethemes.py +++ /dev/null @@ -1,32 +0,0 @@ -""" Compile themes """ -import os -from django.contrib.staticfiles.utils import get_files -from django.contrib.staticfiles.storage import StaticFilesStorage -from django.core.files.base import ContentFile -from django.core.management.base import BaseCommand - -import sass -from sass_processor.processor import SassProcessor - -# pylint: disable=line-too-long -class Command(BaseCommand): - """Compile themes""" - - help = "Compile theme scss files" - - # pylint: disable=no-self-use,unused-argument - def handle(self, *args, **options): - """compile themes""" - storage = StaticFilesStorage() - theme_files = list(get_files(storage, location="css/themes")) - theme_files = [t for t in theme_files if t[-5:] == ".scss"] - for filename in theme_files: - path = storage.path(filename) - content = sass.compile( - filename=path, - include_paths=SassProcessor.include_paths, - ) - basename, _ = os.path.splitext(path) - destination_filename = basename + ".css" - print(f"saving f{destination_filename}") - storage.save(destination_filename, ContentFile(content)) diff --git a/bookwyrm/settings.py b/bookwyrm/settings.py index 7d04a046..5ab3c7a1 100644 --- a/bookwyrm/settings.py +++ b/bookwyrm/settings.py @@ -11,7 +11,7 @@ from django.utils.translation import gettext_lazy as _ 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 @@ RELEASE_API = env( 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") @@ -188,6 +188,7 @@ STATICFILES_FINDERS = [ ] SASS_PROCESSOR_INCLUDE_FILE_PATTERN = r"^.+\.[s]{0,1}(?:a|c)ss$" +SASS_PROCESSOR_ENABLED = True # minify css is production but not dev if not DEBUG: diff --git a/bookwyrm/static/css/bookwyrm/_all.scss b/bookwyrm/static/css/bookwyrm/_all.scss index f01cec60..6002785f 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 00000000..c9c67e8e --- /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 7b1f2d9d..69628662 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 7dbbe0dc..c67c8b22 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 151f2b78..12c79d55 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 bc081841..624b70f3 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 4bc7cca5..6477aee5 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 cf3ce303..100daa03 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 00000000..84ccb74f --- /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 0e2fd5d3..fa098281 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 dc18643a..dadf42ab 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 d3dac804..3d4d83de 100644 --- a/bookwyrm/templates/settings/themes.html +++ b/bookwyrm/templates/settings/themes.html @@ -29,7 +29,7 @@ {% trans "Copy the theme file into the bookwyrm/static/css/themes directory on your server from the command line." %}
  • - {% trans "Run ./bw-dev compilescss." %} + {% trans "Run ./bw-dev collectstatic." %}
  • {% trans "Add the file name using the form below to make it available in the application interface." %} @@ -56,12 +56,7 @@ class="box" enctype="multipart/form-data" > - {% if not choices %} -
    - {% trans "No available theme files detected" %} -
    - {% endif %} -
    +
    {% csrf_token %}
    @@ -79,20 +74,7 @@ {% 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 12b449af..ae9a748d 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 @@ class Themes(View): 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 ad7ee943..a010c300 100644 --- a/bookwyrm/views/books/books.py +++ b/bookwyrm/views/books/books.py @@ -12,7 +12,7 @@ from django.views.decorators.http import require_POST 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 @@ from bookwyrm.views.helpers import is_api_request 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 @@ class Book(View): 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/bw-dev b/bw-dev index 1cc93026..b4b8cc0d 100755 --- a/bw-dev +++ b/bw-dev @@ -154,7 +154,7 @@ case "$CMD" in --config dev-tools/.stylelintrc.js ;; compilescss) - runweb python manage.py compilethemes + runweb python manage.py compilescss runweb python manage.py collectstatic --no-input ;; collectstatic_watch) diff --git a/locale/de_DE/LC_MESSAGES/django.po b/locale/de_DE/LC_MESSAGES/django.po index e458e84b..f7ed0969 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 a6941e87..76cfb32b 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:" -msgstr "" - -#: bookwyrm/templates/snippets/create_status/content_warning_field.html:18 -msgid "Spoilers ahead!" -msgstr "" - -#: bookwyrm/templates/snippets/create_status/content_warning_toggle.html:13 +#: bookwyrm/templates/snippets/create_status/content_warning_field.html:9 msgid "Include spoiler alert" msgstr "" -#: bookwyrm/templates/snippets/create_status/layout.html:47 +#: bookwyrm/templates/snippets/create_status/content_warning_field.html:18 +msgid "Spoilers/content warnings:" +msgstr "" + +#: bookwyrm/templates/snippets/create_status/content_warning_field.html:27 +msgid "Spoilers ahead!" +msgstr "" + +#: 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 cdb48a30..43db15d9 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 51f96904..98d4e124 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 31ebd43c..6c5d17c4 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 dbe430ba..691d4246 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 b76edace..1f45a689 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 cddc0a54..2be0c3ac 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 143539d9..24538735 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 d05ea5af..b4885e93 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 ca506d58..b272ecf0 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 97e81d11..dbfe5ea0 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 473c4a71..a7626b28 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 ef4929f8..064c6cae 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 c2432bbb..60b192c6 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 9c144cf8..85e16766 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 ff508e11..32acf05c 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 4f134879..eb44d9bf 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 f98510e3..303495c6 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 ec1edda7..4acf1dce 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 4222d263..a410c4fe 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