diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..20efa43
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.token
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 3852f23..dc5cff3 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,7 +3,7 @@ image: alpine:latest
pages:
stage: deploy
script:
- - echo 'Nothing to do...'
+ - echo 'Deploying...'
artifacts:
paths:
- public
diff --git a/public/css/styles.css b/public/css/styles.css
new file mode 100644
index 0000000..dcfa164
--- /dev/null
+++ b/public/css/styles.css
@@ -0,0 +1,264 @@
+/**************************************************/
+/******************* RESETEADOR *******************/
+/**************************************************/
+
+/* http://meyerweb.com/eric/tools/css/reset/ v2.0 */
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+
+/* Old browsers / Para viejos exploradores */
+
+article, aside, details, figcaption, figure,
+footer, header, hgroup, menu, nav, section {
+ display: block;
+}
+
+body {
+ line-height: 1.5;
+}
+
+ol, ul {
+ list-style: none;
+}
+
+blockquote, q {
+ quotes: none;
+}
+
+blockquote:before, blockquote:after,
+q:before, q:after {
+ content: '';
+ content: none;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+/**************************************************/
+
+body * {
+ font-family: AlegreyaSansRegular, sans-serif;
+ line-height: 1.15;
+ font-weight: normal;
+ font-style: normal;
+}
+
+body b {
+ font-family: "AlegreyaSansBold", sans-serif;
+ font-weight: bold;
+ font-style: normal;
+}
+
+body i {
+ font-family: "AlegreyaSansItalic", sans-serif;
+ font-weight: normal;
+ font-style: italic;
+}
+
+body a {
+ text-decoration: none;
+}
+
+body span.icon {
+ padding-right: .25rem;
+}
+
+header {
+ width: 100%;
+ height: 20rem;
+ background-image: url('../img/banner_color.jpg');
+ background-position: bottom;
+ background-repeat: no-repeat;
+ background-size: cover;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+header > img {
+ display: block;
+ height: 200px;
+ width: auto;
+ margin: auto;
+}
+
+nav, footer {
+ position: -webkit-sticky; /* Safari */
+ position: sticky;
+ top: 0;
+ background-color: #e5582d;
+ color: white;
+ padding: 1rem;
+}
+
+nav {
+ margin-bottom: 2rem;
+ font-size: 1.25rem;
+}
+
+nav a, footer a {
+ color: white;
+}
+
+nav li {
+ display: inline;
+}
+
+nav li:not(:first-of-type) {
+ margin-left: 1rem;
+}
+
+nav input#search-bar {
+ display: inline-block;
+ border-radius: 1rem;
+ padding: .15rem .5rem;
+ border: none;
+ width: 200px;
+ box-sizing: border-box;
+ color: #2e2e2e;
+}
+
+nav input#search-bar:focus {
+ outline: none;
+}
+
+section {
+ max-width: 40rem;
+ margin: auto;
+ padding: 0 1rem;
+ font-size: 1.15rem;
+}
+
+section > h1 {
+ font-size: 2rem;
+ margin-top: 2rem;
+}
+
+section > h1 + p {
+ margin-top: 1rem;
+}
+
+li.link {
+ scroll-margin-top: 5rem;
+ padding-top: 1rem;
+}
+
+li.link:not(:first-of-type) {
+ margin-top: 1rem;
+}
+
+li.link + li.link {
+ border-top: 1px dashed black;
+}
+
+li.link h1 {
+ font-size: 1.5rem;
+}
+
+li.link a.anchor {
+ font-size: 1rem;
+ padding-right: .5rem;
+}
+
+li.link summary {
+ color: #e5582d;
+ margin-left: -1rem;
+}
+
+li.link p.description,
+li.link p.tags,
+li.link p.dates {
+ color: gray;
+}
+
+li.link p.description:before,
+li.link p.tags:before,
+li.link p.dates:before,
+li.link summary:before {
+ padding-right: .5rem;
+}
+
+li.link p.description:before {
+ content: "📝";
+}
+
+li.link p.tags:before {
+ content: "🏷️";
+}
+
+li.link p.dates:before {
+ content: "📅";
+}
+
+li.link span.created:before {
+ content: "Creado: ";
+}
+
+li.link span.updated:before {
+ content: "Actualizado: ";
+ padding-left: 1rem;
+}
+
+li.link div.info {
+ margin-top: 1rem;
+}
+
+li.link a.link {
+ display: table-cell;
+ padding-right: .5em;
+}
+
+details {
+ padding-left: 1rem;
+}
+
+details h1, details h2 {
+ margin: 1rem auto;
+}
+
+details h1:before, details h2:before {
+ color: #e5582d;
+}
+
+details h1:before {
+ content: "# ";
+}
+
+details h2:before {
+ content: "## ";
+}
+
+details h3:before {
+ content: "### ";
+}
+
+details p + p {
+ text-indent: 1rem;
+}
+
+footer {
+ margin-top: 2rem;
+ padding: 1em 25%;
+ text-align: center;
+}
diff --git a/public/img/banner_color.jpg b/public/img/banner_color.jpg
new file mode 100644
index 0000000..c8d686b
Binary files /dev/null and b/public/img/banner_color.jpg differ
diff --git a/public/img/favicon.png b/public/img/favicon.png
new file mode 100644
index 0000000..6f7a6b6
Binary files /dev/null and b/public/img/favicon.png differ
diff --git a/public/img/logo.png b/public/img/logo.png
new file mode 100644
index 0000000..7630f47
Binary files /dev/null and b/public/img/logo.png differ
diff --git a/public/index.html b/public/index.html
new file mode 100644
index 0000000..cfa3b6c
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,76 @@
+
+
+
+ Blog del perro
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Acerca
+Hola, soy perro tuerto. Mi formación académica es en Filosofía, mi profesión es la edición de publicaciones (libros, fanzines, revistas, etc.) y mi programación se enfoca en el desarrollo de metodologías libres para la publicación. Soy fan de las humanidades, la paleoantropología y las ciencias de la computación, así como soy voluntario en organizaciones sobre edición, software y cultura libres, como Miau, Cuates o Wikipedia. Doy soporte técnico a la Academia Mexicana de la Lengua y puedo ayudarte en tus proyectos. En este espacio comparto enlaces que me parecen chéveres.
+
+
+
+
+
+
diff --git a/public/js/list.min.js b/public/js/list.min.js
new file mode 100644
index 0000000..8131881
--- /dev/null
+++ b/public/js/list.min.js
@@ -0,0 +1,2 @@
+var List;List=function(){var t={"./src/add-async.js":function(t){t.exports=function(t){return function e(r,n,s){var i=r.splice(0,50);s=(s=s||[]).concat(t.add(i)),r.length>0?setTimeout((function(){e(r,n,s)}),1):(t.update(),n(s))}}},"./src/filter.js":function(t){t.exports=function(t){return t.handlers.filterStart=t.handlers.filterStart||[],t.handlers.filterComplete=t.handlers.filterComplete||[],function(e){if(t.trigger("filterStart"),t.i=1,t.reset.filter(),void 0===e)t.filtered=!1;else{t.filtered=!0;for(var r=t.items,n=0,s=r.length;nv.page,a=new g(t[s],void 0,n),v.items.push(a),r.push(a)}return v.update(),r}m(t.slice(0),e)}},this.show=function(t,e){return this.i=t,this.page=e,v.update(),v},this.remove=function(t,e,r){for(var n=0,s=0,i=v.items.length;s-1&&r.splice(n,1),v},this.trigger=function(t){for(var e=v.handlers[t].length;e--;)v.handlers[t][e](v);return v},this.reset={filter:function(){for(var t=v.items,e=t.length;e--;)t[e].filtered=!1;return v},search:function(){for(var t=v.items,e=t.length;e--;)t[e].found=!1;return v}},this.update=function(){var t=v.items,e=t.length;v.visibleItems=[],v.matchingItems=[],v.templater.clear();for(var r=0;r=v.i&&v.visibleItems.lengthe},innerWindow:function(t,e,r){return t>=e-r&&t<=e+r},dotted:function(t,e,r,n,s,i,a){return this.dottedLeft(t,e,r,n,s,i)||this.dottedRight(t,e,r,n,s,i,a)},dottedLeft:function(t,e,r,n,s,i){return e==r+1&&!this.innerWindow(e,s,i)&&!this.right(e,n)},dottedRight:function(t,e,r,n,s,i,a){return!t.items[a-1].values().dotted&&(e==n&&!this.innerWindow(e,s,i)&&!this.right(e,n))}};return function(e){var n=new i(t.listContainer.id,{listClass:e.paginationClass||"pagination",item:e.item||" ",valueNames:["page","dotted"],searchClass:"pagination-search-that-is-not-supposed-to-exist",sortClass:"pagination-sort-that-is-not-supposed-to-exist"});s.bind(n.listContainer,"click",(function(e){var r=e.target||e.srcElement,n=t.utils.getAttribute(r,"data-page"),s=t.utils.getAttribute(r,"data-i");s&&t.show((s-1)*n+1,n)})),t.on("updated",(function(){r(n,e)})),r(n,e)}}},"./src/parse.js":function(t,e,r){t.exports=function(t){var e=r("./src/item.js")(t),n=function(r,n){for(var s=0,i=r.length;s0?setTimeout((function(){e(r,s)}),1):(t.update(),t.trigger("parseComplete"))};return t.handlers.parseComplete=t.handlers.parseComplete||[],function(){var e=function(t){for(var e=t.childNodes,r=[],n=0,s=e.length;n]/g.exec(t)){var e=document.createElement("tbody");return e.innerHTML=t,e.firstElementChild}if(-1!==t.indexOf("<")){var r=document.createElement("div");return r.innerHTML=t,r.firstElementChild}}},a=function(e,r,n){var s=void 0,i=function(e){for(var r=0,n=t.valueNames.length;r=1;)t.list.removeChild(t.list.firstChild)},function(){var r;if("function"!=typeof t.item){if(!(r="string"==typeof t.item?-1===t.item.indexOf("<")?document.getElementById(t.item):i(t.item):s()))throw new Error("The list needs to have at least one item on init otherwise you'll have to add a template.");r=n(r,t.valueNames),e=function(){return r.cloneNode(!0)}}else e=function(e){var r=t.item(e);return i(r)}}()};t.exports=function(t){return new e(t)}},"./src/utils/classes.js":function(t,e,r){var n=r("./src/utils/index-of.js"),s=/\s+/;Object.prototype.toString;function i(t){if(!t||!t.nodeType)throw new Error("A DOM element reference is required");this.el=t,this.list=t.classList}t.exports=function(t){return new i(t)},i.prototype.add=function(t){if(this.list)return this.list.add(t),this;var e=this.array();return~n(e,t)||e.push(t),this.el.className=e.join(" "),this},i.prototype.remove=function(t){if(this.list)return this.list.remove(t),this;var e=this.array(),r=n(e,t);return~r&&e.splice(r,1),this.el.className=e.join(" "),this},i.prototype.toggle=function(t,e){return this.list?(void 0!==e?e!==this.list.toggle(t,e)&&this.list.toggle(t):this.list.toggle(t),this):(void 0!==e?e?this.add(t):this.remove(t):this.has(t)?this.remove(t):this.add(t),this)},i.prototype.array=function(){var t=(this.el.getAttribute("class")||"").replace(/^\s+|\s+$/g,"").split(s);return""===t[0]&&t.shift(),t},i.prototype.has=i.prototype.contains=function(t){return this.list?this.list.contains(t):!!~n(this.array(),t)}},"./src/utils/events.js":function(t,e,r){var n=window.addEventListener?"addEventListener":"attachEvent",s=window.removeEventListener?"removeEventListener":"detachEvent",i="addEventListener"!==n?"on":"",a=r("./src/utils/to-array.js");e.bind=function(t,e,r,s){for(var o=0,l=(t=a(t)).length;o32)return!1;var a=n,o=function(){var t,r={};for(t=0;t=p;b--){var j=o[t.charAt(b-1)];if(C[b]=0===m?(C[b+1]<<1|1)&j:(C[b+1]<<1|1)&j|(v[b+1]|v[b])<<1|1|v[b+1],C[b]&d){var x=l(m,b-1);if(x<=u){if(u=x,!((c=b-1)>a))break;p=Math.max(1,2*a-c)}}}if(l(m+1,a)>u)break;v=C}return!(c<0)}},"./src/utils/get-attribute.js":function(t){t.exports=function(t,e){var r=t.getAttribute&&t.getAttribute(e)||null;if(!r)for(var n=t.attributes,s=n.length,i=0;i=48&&t<=57}function i(t,e){for(var i=(t+="").length,a=(e+="").length,o=0,l=0;o=i&&l=a?-1:l>=a&&o=i?1:i-a}i.caseInsensitive=i.i=function(t,e){return i((""+t).toLowerCase(),(""+e).toLowerCase())},Object.defineProperties(i,{alphabet:{get:function(){return e},set:function(t){r=[];var s=0;if(e=t)for(;s \r\n Obras\r\n ›\r\n Libros electrónicos","website_description":"","is_archived":false,"unread":false,"shared":true,"tag_names":["esteticas","historia","ideas","blog"],"date_added":"2023-06-24T23:31:04.671856Z","date_modified":"2023-06-25T21:59:05.406668Z"}]}
\ No newline at end of file
diff --git a/scripts/make.py b/scripts/make.py
new file mode 100644
index 0000000..c995de5
--- /dev/null
+++ b/scripts/make.py
@@ -0,0 +1,85 @@
+import re
+import sys
+import json
+from datetime import datetime
+from pathlib import Path
+
+root = Path(__file__).parent.parent
+about = re.sub(r'\s+', ' ', """
+ Hola, soy perro tuerto. Mi formación académica es en Filosofía, mi
+ profesión es la edición de publicaciones (libros, fanzines, revistas, etc.)
+ y mi programación se enfoca en el desarrollo de metodologías libres para la
+ publicación. Soy fan de las humanidades, la paleoantropología y las
+ ciencias de la computación, así como soy voluntario en organizaciones sobre
+ edición, software y cultura libres, como Miau, Cuates o Wikipedia.
+ Doy soporte técnico a la Academia Mexicana de la Lengua y puedo ayudarte
+ en tus proyectos. En este espacio comparto enlaces que me parecen
+ chéveres.
+""").strip()
+contact = {
+ "site": "https://perrotuerto.blog",
+ "gitlab": "https://gitlab.com/perrotuerto",
+ "cuates": "https://git.cuates.net/perro",
+ "wikipedia": "https://es.wikipedia.org/wiki/Usuario:Perrotuerto",
+ "github": "https://github.com/perrotuerto",
+ "email": "hi@perrotuerto.blog",
+}
+links = json.loads(Path(sys.argv[1]).read_text())
+data = {"acerca": about, "contacto": contact, "links": links["results"]}
+index = root / "public" / "index.html"
+template = (root / "src" / "template.html").read_text()
+body = ""
+
+for key, val in data.items():
+ if key == "contacto":
+ for name, url in val.items():
+ template = re.sub(f'#{name.upper()}#', url, template)
+ continue
+ body += f'\n'
+ body += f'\n{key.capitalize()} '
+ if isinstance(val, str):
+ body += f'\n{val}'
+ else:
+ body += '"
+ body += '\n '
+
+index.write_text(re.sub('#LINKS#', body, template))
diff --git a/scripts/update.sh b/scripts/update.sh
new file mode 100644
index 0000000..85e8d7a
--- /dev/null
+++ b/scripts/update.sh
@@ -0,0 +1,26 @@
+JSON=public/perro.json
+
+# Va a la raíz del repo
+cd $(dirname $0)/..
+
+# Limpia sitio
+rm -rf public
+mkdir public
+cp -r src/* public
+rm public/*.*
+
+# Descarga info de GitLab
+curl --request GET \
+ -s -o $JSON \
+ -H "Authorization: Token $(<.token)" \
+ "https://linkding.cuates.net/api/bookmarks/?q=%23blog"
+
+# Rehace sitio y JSON
+python3 ./scripts/make.py $JSON
+
+# Hace commit al repo si hubo cambios
+if [ -n "$(git status --porcelain)" ]; then
+ git add .
+ git commit -m "Actualización"
+ git push
+fi
diff --git a/src/css/styles.css b/src/css/styles.css
new file mode 100644
index 0000000..dcfa164
--- /dev/null
+++ b/src/css/styles.css
@@ -0,0 +1,264 @@
+/**************************************************/
+/******************* RESETEADOR *******************/
+/**************************************************/
+
+/* http://meyerweb.com/eric/tools/css/reset/ v2.0 */
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font-size: 100%;
+ font: inherit;
+ vertical-align: baseline;
+}
+
+/* Old browsers / Para viejos exploradores */
+
+article, aside, details, figcaption, figure,
+footer, header, hgroup, menu, nav, section {
+ display: block;
+}
+
+body {
+ line-height: 1.5;
+}
+
+ol, ul {
+ list-style: none;
+}
+
+blockquote, q {
+ quotes: none;
+}
+
+blockquote:before, blockquote:after,
+q:before, q:after {
+ content: '';
+ content: none;
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+/**************************************************/
+
+body * {
+ font-family: AlegreyaSansRegular, sans-serif;
+ line-height: 1.15;
+ font-weight: normal;
+ font-style: normal;
+}
+
+body b {
+ font-family: "AlegreyaSansBold", sans-serif;
+ font-weight: bold;
+ font-style: normal;
+}
+
+body i {
+ font-family: "AlegreyaSansItalic", sans-serif;
+ font-weight: normal;
+ font-style: italic;
+}
+
+body a {
+ text-decoration: none;
+}
+
+body span.icon {
+ padding-right: .25rem;
+}
+
+header {
+ width: 100%;
+ height: 20rem;
+ background-image: url('../img/banner_color.jpg');
+ background-position: bottom;
+ background-repeat: no-repeat;
+ background-size: cover;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+}
+
+header > img {
+ display: block;
+ height: 200px;
+ width: auto;
+ margin: auto;
+}
+
+nav, footer {
+ position: -webkit-sticky; /* Safari */
+ position: sticky;
+ top: 0;
+ background-color: #e5582d;
+ color: white;
+ padding: 1rem;
+}
+
+nav {
+ margin-bottom: 2rem;
+ font-size: 1.25rem;
+}
+
+nav a, footer a {
+ color: white;
+}
+
+nav li {
+ display: inline;
+}
+
+nav li:not(:first-of-type) {
+ margin-left: 1rem;
+}
+
+nav input#search-bar {
+ display: inline-block;
+ border-radius: 1rem;
+ padding: .15rem .5rem;
+ border: none;
+ width: 200px;
+ box-sizing: border-box;
+ color: #2e2e2e;
+}
+
+nav input#search-bar:focus {
+ outline: none;
+}
+
+section {
+ max-width: 40rem;
+ margin: auto;
+ padding: 0 1rem;
+ font-size: 1.15rem;
+}
+
+section > h1 {
+ font-size: 2rem;
+ margin-top: 2rem;
+}
+
+section > h1 + p {
+ margin-top: 1rem;
+}
+
+li.link {
+ scroll-margin-top: 5rem;
+ padding-top: 1rem;
+}
+
+li.link:not(:first-of-type) {
+ margin-top: 1rem;
+}
+
+li.link + li.link {
+ border-top: 1px dashed black;
+}
+
+li.link h1 {
+ font-size: 1.5rem;
+}
+
+li.link a.anchor {
+ font-size: 1rem;
+ padding-right: .5rem;
+}
+
+li.link summary {
+ color: #e5582d;
+ margin-left: -1rem;
+}
+
+li.link p.description,
+li.link p.tags,
+li.link p.dates {
+ color: gray;
+}
+
+li.link p.description:before,
+li.link p.tags:before,
+li.link p.dates:before,
+li.link summary:before {
+ padding-right: .5rem;
+}
+
+li.link p.description:before {
+ content: "📝";
+}
+
+li.link p.tags:before {
+ content: "🏷️";
+}
+
+li.link p.dates:before {
+ content: "📅";
+}
+
+li.link span.created:before {
+ content: "Creado: ";
+}
+
+li.link span.updated:before {
+ content: "Actualizado: ";
+ padding-left: 1rem;
+}
+
+li.link div.info {
+ margin-top: 1rem;
+}
+
+li.link a.link {
+ display: table-cell;
+ padding-right: .5em;
+}
+
+details {
+ padding-left: 1rem;
+}
+
+details h1, details h2 {
+ margin: 1rem auto;
+}
+
+details h1:before, details h2:before {
+ color: #e5582d;
+}
+
+details h1:before {
+ content: "# ";
+}
+
+details h2:before {
+ content: "## ";
+}
+
+details h3:before {
+ content: "### ";
+}
+
+details p + p {
+ text-indent: 1rem;
+}
+
+footer {
+ margin-top: 2rem;
+ padding: 1em 25%;
+ text-align: center;
+}
diff --git a/src/img/banner_color.jpg b/src/img/banner_color.jpg
new file mode 100644
index 0000000..c8d686b
Binary files /dev/null and b/src/img/banner_color.jpg differ
diff --git a/src/img/favicon.png b/src/img/favicon.png
new file mode 100644
index 0000000..6f7a6b6
Binary files /dev/null and b/src/img/favicon.png differ
diff --git a/src/img/logo.png b/src/img/logo.png
new file mode 100644
index 0000000..7630f47
Binary files /dev/null and b/src/img/logo.png differ
diff --git a/src/js/list.min.js b/src/js/list.min.js
new file mode 100644
index 0000000..8131881
--- /dev/null
+++ b/src/js/list.min.js
@@ -0,0 +1,2 @@
+var List;List=function(){var t={"./src/add-async.js":function(t){t.exports=function(t){return function e(r,n,s){var i=r.splice(0,50);s=(s=s||[]).concat(t.add(i)),r.length>0?setTimeout((function(){e(r,n,s)}),1):(t.update(),n(s))}}},"./src/filter.js":function(t){t.exports=function(t){return t.handlers.filterStart=t.handlers.filterStart||[],t.handlers.filterComplete=t.handlers.filterComplete||[],function(e){if(t.trigger("filterStart"),t.i=1,t.reset.filter(),void 0===e)t.filtered=!1;else{t.filtered=!0;for(var r=t.items,n=0,s=r.length;nv.page,a=new g(t[s],void 0,n),v.items.push(a),r.push(a)}return v.update(),r}m(t.slice(0),e)}},this.show=function(t,e){return this.i=t,this.page=e,v.update(),v},this.remove=function(t,e,r){for(var n=0,s=0,i=v.items.length;s-1&&r.splice(n,1),v},this.trigger=function(t){for(var e=v.handlers[t].length;e--;)v.handlers[t][e](v);return v},this.reset={filter:function(){for(var t=v.items,e=t.length;e--;)t[e].filtered=!1;return v},search:function(){for(var t=v.items,e=t.length;e--;)t[e].found=!1;return v}},this.update=function(){var t=v.items,e=t.length;v.visibleItems=[],v.matchingItems=[],v.templater.clear();for(var r=0;r=v.i&&v.visibleItems.lengthe},innerWindow:function(t,e,r){return t>=e-r&&t<=e+r},dotted:function(t,e,r,n,s,i,a){return this.dottedLeft(t,e,r,n,s,i)||this.dottedRight(t,e,r,n,s,i,a)},dottedLeft:function(t,e,r,n,s,i){return e==r+1&&!this.innerWindow(e,s,i)&&!this.right(e,n)},dottedRight:function(t,e,r,n,s,i,a){return!t.items[a-1].values().dotted&&(e==n&&!this.innerWindow(e,s,i)&&!this.right(e,n))}};return function(e){var n=new i(t.listContainer.id,{listClass:e.paginationClass||"pagination",item:e.item||" ",valueNames:["page","dotted"],searchClass:"pagination-search-that-is-not-supposed-to-exist",sortClass:"pagination-sort-that-is-not-supposed-to-exist"});s.bind(n.listContainer,"click",(function(e){var r=e.target||e.srcElement,n=t.utils.getAttribute(r,"data-page"),s=t.utils.getAttribute(r,"data-i");s&&t.show((s-1)*n+1,n)})),t.on("updated",(function(){r(n,e)})),r(n,e)}}},"./src/parse.js":function(t,e,r){t.exports=function(t){var e=r("./src/item.js")(t),n=function(r,n){for(var s=0,i=r.length;s0?setTimeout((function(){e(r,s)}),1):(t.update(),t.trigger("parseComplete"))};return t.handlers.parseComplete=t.handlers.parseComplete||[],function(){var e=function(t){for(var e=t.childNodes,r=[],n=0,s=e.length;n]/g.exec(t)){var e=document.createElement("tbody");return e.innerHTML=t,e.firstElementChild}if(-1!==t.indexOf("<")){var r=document.createElement("div");return r.innerHTML=t,r.firstElementChild}}},a=function(e,r,n){var s=void 0,i=function(e){for(var r=0,n=t.valueNames.length;r=1;)t.list.removeChild(t.list.firstChild)},function(){var r;if("function"!=typeof t.item){if(!(r="string"==typeof t.item?-1===t.item.indexOf("<")?document.getElementById(t.item):i(t.item):s()))throw new Error("The list needs to have at least one item on init otherwise you'll have to add a template.");r=n(r,t.valueNames),e=function(){return r.cloneNode(!0)}}else e=function(e){var r=t.item(e);return i(r)}}()};t.exports=function(t){return new e(t)}},"./src/utils/classes.js":function(t,e,r){var n=r("./src/utils/index-of.js"),s=/\s+/;Object.prototype.toString;function i(t){if(!t||!t.nodeType)throw new Error("A DOM element reference is required");this.el=t,this.list=t.classList}t.exports=function(t){return new i(t)},i.prototype.add=function(t){if(this.list)return this.list.add(t),this;var e=this.array();return~n(e,t)||e.push(t),this.el.className=e.join(" "),this},i.prototype.remove=function(t){if(this.list)return this.list.remove(t),this;var e=this.array(),r=n(e,t);return~r&&e.splice(r,1),this.el.className=e.join(" "),this},i.prototype.toggle=function(t,e){return this.list?(void 0!==e?e!==this.list.toggle(t,e)&&this.list.toggle(t):this.list.toggle(t),this):(void 0!==e?e?this.add(t):this.remove(t):this.has(t)?this.remove(t):this.add(t),this)},i.prototype.array=function(){var t=(this.el.getAttribute("class")||"").replace(/^\s+|\s+$/g,"").split(s);return""===t[0]&&t.shift(),t},i.prototype.has=i.prototype.contains=function(t){return this.list?this.list.contains(t):!!~n(this.array(),t)}},"./src/utils/events.js":function(t,e,r){var n=window.addEventListener?"addEventListener":"attachEvent",s=window.removeEventListener?"removeEventListener":"detachEvent",i="addEventListener"!==n?"on":"",a=r("./src/utils/to-array.js");e.bind=function(t,e,r,s){for(var o=0,l=(t=a(t)).length;o32)return!1;var a=n,o=function(){var t,r={};for(t=0;t=p;b--){var j=o[t.charAt(b-1)];if(C[b]=0===m?(C[b+1]<<1|1)&j:(C[b+1]<<1|1)&j|(v[b+1]|v[b])<<1|1|v[b+1],C[b]&d){var x=l(m,b-1);if(x<=u){if(u=x,!((c=b-1)>a))break;p=Math.max(1,2*a-c)}}}if(l(m+1,a)>u)break;v=C}return!(c<0)}},"./src/utils/get-attribute.js":function(t){t.exports=function(t,e){var r=t.getAttribute&&t.getAttribute(e)||null;if(!r)for(var n=t.attributes,s=n.length,i=0;i=48&&t<=57}function i(t,e){for(var i=(t+="").length,a=(e+="").length,o=0,l=0;o=i&&l=a?-1:l>=a&&o=i?1:i-a}i.caseInsensitive=i.i=function(t,e){return i((""+t).toLowerCase(),(""+e).toLowerCase())},Object.defineProperties(i,{alphabet:{get:function(){return e},set:function(t){r=[];var s=0;if(e=t)for(;s
+
+
+ Blog del perro
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ #LINKS#
+
+
+
+