Compare commits
255 Commits
Author | SHA1 | Date |
---|---|---|
Samuel FORESTIER | 06c3d6ac11 | 4 years ago |
Samuel FORESTIER | cd49dce78f | 4 years ago |
Andy | c2cd06da52 | 4 years ago |
ix5 | d7eefbc072 | 4 years ago |
frenchvandal | 2ba7217900 | 4 years ago |
Lucas Cimon | bdaa5240d1 | 4 years ago |
Lucas Cimon | 080ee36371 | 4 years ago |
Lucas Cimon | a548fbf45b | 4 years ago |
Lucas Cimon | f70eaf315a | 4 years ago |
Lucas Cimon | 04d138dc77 | 4 years ago |
Lucas Cimon | c4373186f9 | 4 years ago |
Jelmer Vernooij | 54f8fb7a7f | 4 years ago |
Benoit Latinier | bb9d947c76 | 4 years ago |
frenchvandal | de8867a9d2 | 4 years ago |
Jelmer Vernooij | 86b65f817e | 4 years ago |
Jelmer Vernooij | 2a4e8c231e | 4 years ago |
Jelmer Vernooij | 3e3ee8b641 | 4 years ago |
Facundo Batista | 1633d9261e | 4 years ago |
Benjamin Pereto | 1de758887a | 4 years ago |
jasdeepgill | 5655f194b3 | 4 years ago |
Shimmy Xu | 7eed747e7a | 4 years ago |
Charl P. Botha (X1E) | 2e8cb81179 | 5 years ago |
Marcin Kurczewski | 9eaaad4775 | 5 years ago |
Jonathan Watt | 4944d595f6 | 5 years ago |
Michiel Scholten | 472c9ed3de | 5 years ago |
jasdeepgill | 95b05bd3fe | 5 years ago |
Jonathan Watt | 3be36fd8b0 | 5 years ago |
JocelynDelalande | 0f4e72c0e0 | 5 years ago |
Alberto Mardegan | c24ee69a1e | 5 years ago |
tdro | f4b0376f1a | 5 years ago |
Andy | 1f77ecc25e | 5 years ago |
Quentí | b9e31bf6fe | 5 years ago |
Jelmer Vernooij | 78997f4910 | 5 years ago |
Jelmer Vernooij | b3ae160cff | 5 years ago |
Jelmer Vernooij | 0df8000144 | 5 years ago |
Jelmer Vernooij | e2cfd6c08c | 5 years ago |
Jelmer Vernooij | bd39dd6788 | 5 years ago |
Jelmer Vernooij | f51d9cc4f5 | 5 years ago |
Jelmer Vernooij | e08c378900 | 5 years ago |
Chris Warrick | 1b13458e6a | 5 years ago |
Jelmer Vernooij | 77871a8bab | 5 years ago |
krtcom | 0d721f9ebe | 5 years ago |
Jelmer Vernooij | 3eb7f349e6 | 5 years ago |
Michal Krnáč | 9161983a05 | 5 years ago |
Michal Krnáč | 0d4d758099 | 5 years ago |
Jelmer Vernooij | 31db6b61e7 | 5 years ago |
Jelmer Vernooij | 8c82ffde9f | 5 years ago |
Chris Warrick | 22abbcdbb4 | 5 years ago |
Jelmer Vernooij | c2136ce10a | 5 years ago |
Chris Warrick | f1dcd17e37 | 5 years ago |
Chris Warrick | bcff21f06f | 5 years ago |
Chris Warrick | 86a88b5ea5 | 5 years ago |
Jelmer Vernooij | 6092881bb2 | 5 years ago |
Alberto Mardegan | 02bf0a0759 | 5 years ago |
Jelmer Vernooij | b0d385b6b5 | 5 years ago |
Jelmer Vernooij | 7be6a756a3 | 5 years ago |
Jelmer Vernooij | 0748eedd30 | 5 years ago |
Jelmer Vernooij | 8aeff4acb2 | 5 years ago |
Jelmer Vernooij | 1d5d356237 | 5 years ago |
Lioman | 771f6b7c95 | 5 years ago |
Jelmer Vernooij | 4fe24296a2 | 5 years ago |
Jelmer Vernooij | 534d35e3c6 | 5 years ago |
Jelmer Vernooij | 12766c1e88 | 5 years ago |
Jelmer Vernooij | a0b637eb5a | 5 years ago |
Jelmer Vernooij | 161f2dfa20 | 5 years ago |
Jelmer Vernooij | 2f54c9236b | 5 years ago |
Jelmer Vernooij | 434d0341f6 | 5 years ago |
Jelmer Vernooij | bd22b0017f | 5 years ago |
Jelmer Vernooij | abba561a1d | 5 years ago |
Jelmer Vernooij | 24aeb9e567 | 5 years ago |
Matthieu Olivier | b1ea9b2fb3 | 5 years ago |
root | e3d5741c51 | 5 years ago |
Jelmer Vernooij | 57af7a782d | 5 years ago |
Benoit Latinier | 5cfbb3274c | 5 years ago |
kartoffelsalat | b2251e9201 | 5 years ago |
Matthieu Olivier | acb1e25193 | 5 years ago |
Matthieu Olivier | 97ceaa1748 | 5 years ago |
Matthieu Olivier | c47f705907 | 5 years ago |
Jelmer Vernooij | 5d15728eb0 | 5 years ago |
Jelmer Vernooij | 06d49292a6 | 5 years ago |
fliiiix | d2ced12f80 | 5 years ago |
Jelmer Vernooij | 5b44ca8fb2 | 5 years ago |
Samuel FORESTIER | 1a3f803b96 | 5 years ago |
Benoit Latinier | 784e08170a | 5 years ago |
Jelmer Vernooij | 2ca39dee82 | 5 years ago |
Sim | ad2b7b6233 | 5 years ago |
Jelmer Vernooij | 915c74dc1b | 5 years ago |
Brad Pitcher | ebefbe6a4a | 5 years ago |
Brad Pitcher | 423d73664b | 5 years ago |
Brad Pitcher | 47a5b2c84b | 5 years ago |
Brad Pitcher | dfbb7fa413 | 5 years ago |
fliiiix | a3ac7b9081 | 6 years ago |
fliiiix | 1f4ced626c | 6 years ago |
Jelmer Vernooij | 40d011e6bb | 6 years ago |
Jelmer Vernooij | a45ef339e6 | 6 years ago |
Jelmer Vernooij | adc4f839fc | 6 years ago |
Max Roeleveld | 8a46e13028 | 6 years ago |
Jelmer Vernooij | 966d403ebb | 6 years ago |
Jelmer Vernooij | afc90a05cc | 6 years ago |
Jelmer Vernooij | 5d811e3a51 | 6 years ago |
Jelmer Vernooij | 77813de8f9 | 6 years ago |
Jelmer Vernooij | e6132580a9 | 6 years ago |
Vincent Bernat | fd46a7d86e | 6 years ago |
Jelmer Vernooij | 1d16db53da | 6 years ago |
Florian Latifi | c5311e1d7d | 6 years ago |
Jelmer Vernooij | b88e6e870d | 6 years ago |
Jelmer Vernooij | 8ad5496585 | 6 years ago |
Jelmer Vernooij | 1e9465e3fe | 6 years ago |
Jelmer Vernooij | 1957ae517e | 6 years ago |
Vincent Bernat | 80257353ba | 6 years ago |
Vincent Bernat | 527f287826 | 6 years ago |
Jelmer Vernooij | 5dc07b29e4 | 6 years ago |
Jelmer Vernooij | e648bee33d | 6 years ago |
Jelmer Vernooij | 54c72f379a | 6 years ago |
Jelmer Vernooij | cc07f0b22f | 6 years ago |
Jelmer Vernooij | 20f2f2a1f5 | 6 years ago |
Jelmer Vernooij | 63cc15a962 | 6 years ago |
Jelmer Vernooij | 62ddcba701 | 6 years ago |
Jelmer Vernooij | eb0052c53f | 6 years ago |
Jelmer Vernooij | 0456d68f29 | 6 years ago |
Jelmer Vernooij | 8801c6eec8 | 6 years ago |
Jelmer Vernooij | f2333d716d | 6 years ago |
Antonio Guillen | 9619f56269 | 6 years ago |
Benoît Latinier | dfbc80d5b6 | 6 years ago |
Vincent Bernat | 463f76cb0b | 6 years ago |
Jelmer Vernooij | f6271a04a2 | 6 years ago |
gloomy-ghost | 13426ca43c | 6 years ago |
Jelmer Vernooij | f1a4478272 | 6 years ago |
Jelmer Vernooij | 8e37a88d6d | 6 years ago |
gloomy-ghost | c27e3d9838 | 6 years ago |
Benoît Latinier | d214e53bb6 | 6 years ago |
Benoît Latinier | 14303d0377 | 6 years ago |
Philippe | e993b498a0 | 6 years ago |
Javier López | 32f98ce3f2 | 6 years ago |
Benoît Latinier | 5bc176d85b | 6 years ago |
Jeremy Tan | faaff1d4ac | 6 years ago |
Benoît Latinier | 4c9692264f | 6 years ago |
Benoît Latinier | e680c91f4a | 6 years ago |
Benoît Latinier | c9230d5a52 | 6 years ago |
Rocka | 2f45f3f82e | 6 years ago |
Benoît Latinier | 9c57ac22e5 | 6 years ago |
Sergey Lisakov | 20ba003791 | 6 years ago |
Benoît Latinier | dc4b0a7baf | 6 years ago |
Benoît Latinier | 263305f718 | 6 years ago |
Sergey Lisakov | be1e81b109 | 6 years ago |
Rocka | 6d62e91a77 | 6 years ago |
Sergey Lisakov | fe3088df2b | 6 years ago |
Benoît Latinier | 0a7b8ae7df | 6 years ago |
Benoît Latinier | 5dad7bd353 | 6 years ago |
Sergey Lisakov | b1bbf70fd8 | 6 years ago |
Benoît Latinier | b93e055677 | 6 years ago |
Benoît Latinier | c801d18bd9 | 6 years ago |
Rocka | 7f2b4eec8c | 6 years ago |
Rocka | 858d64d092 | 6 years ago |
Benoît Latinier | 1d9cea8831 | 6 years ago |
Benoît Latinier | 53d5ad441c | 6 years ago |
Pelle Nilsson | d80f7c4224 | 6 years ago |
Pelle Nilsson | 18b1d11007 | 6 years ago |
Pelle Nilsson | 1dd95d5aad | 6 years ago |
Pelle Nilsson | 171fcfab72 | 6 years ago |
Craig P Hicks | 96575323cd | 6 years ago |
Craig P Hicks | af023741d9 | 6 years ago |
root | b7e1666dd4 | 6 years ago |
Benoît Latinier | 9c3a209850 | 6 years ago |
Farooq Karimi Zadeh | 70f9aab7cb | 6 years ago |
Rocka | 795035ff6c | 6 years ago |
Rocka | 61b3b69557 | 6 years ago |
Rocka | a87815fcba | 6 years ago |
Pelle Nilsson | 3e45ccb7e5 | 6 years ago |
Pelle Nilsson | 9b2a56e467 | 6 years ago |
Felix Eckhofer | 8360dacbb1 | 6 years ago |
Pelle Nilsson | 717837b35a | 6 years ago |
Pelle Nilsson | 0063fd6e88 | 6 years ago |
Vincent Bernat | 8e4f2ab1c7 | 6 years ago |
Benoît Latinier | 3d0fdffcb7 | 6 years ago |
Benoît Latinier | 2135743ea7 | 6 years ago |
Benoît Latinier | 893f35a4e4 | 6 years ago |
JuliusPC | 729a65f177 | 6 years ago |
Benoît Latinier | 9d92f59aac | 6 years ago |
Benoît Latinier | 2b7c6629ea | 6 years ago |
Lucas Cimon | b73255ec2e | 6 years ago |
Lucas Cimon | 575c433fda | 6 years ago |
Benoît Latinier | 97721c7eef | 6 years ago |
Benoît Latinier | 5e65e46b59 | 6 years ago |
Benoît Latinier | e745f326db | 6 years ago |
Benoît Latinier | 2064f3a29b | 6 years ago |
Sergey Lisakov | 530b541f68 | 6 years ago |
Rocka | dda616eef3 | 6 years ago |
Pelle Nilsson | f6f61c547a | 6 years ago |
Vincent Bernat | 311f65d52b | 6 years ago |
Vincent Bernat | 9b911f3257 | 6 years ago |
Benoît Latinier | c26d59de08 | 6 years ago |
Steffen Prince | 7cdb47d875 | 6 years ago |
Steffen Prince | eef7ea261d | 6 years ago |
Steffen Prince | c38851a6cd | 6 years ago |
Benoît Latinier | ce98f93934 | 6 years ago |
Benoît Latinier | 94d031444d | 6 years ago |
Benoît Latinier | b21f2e4aaa | 6 years ago |
Benoît Latinier | 6da91d4ace | 6 years ago |
Benoît Latinier | 3754ba7596 | 6 years ago |
Benoît Latinier | 3d1cded70f | 6 years ago |
Benoît Latinier | 466654b50d | 6 years ago |
Benoît Latinier | 514c5d42b6 | 6 years ago |
Benoît Latinier | c14f639e75 | 6 years ago |
Benoît Latinier | ad6e868ba5 | 6 years ago |
Benoît Latinier | dc6157897f | 6 years ago |
Benoît Latinier | 3d648c2d29 | 6 years ago |
Lucas Cimon | 501bdc59bf | 6 years ago |
Vincent Bernat | b0264bc807 | 6 years ago |
Benoît Latinier | 55dac39bdd | 6 years ago |
Benoît Latinier | b5c40bedf7 | 6 years ago |
Vincent Bernat | 01cf96eeb7 | 6 years ago |
Benoît Latinier | 502747cb75 | 6 years ago |
Benoît Latinier | bb924ead86 | 6 years ago |
Vincent Bernat | 45f6b1eda3 | 6 years ago |
Vincent Bernat | bceb69518b | 6 years ago |
Vincent Bernat | a89debbc9c | 6 years ago |
Vincent Bernat | 5c6e78b9c1 | 6 years ago |
Vincent Bernat | ebca06059a | 6 years ago |
Vincent Bernat | 8d8f9c8c59 | 6 years ago |
Vincent Bernat | fcf576dd08 | 6 years ago |
Pelle Nilsson | 36d4ceb2d9 | 6 years ago |
Facundo Batista | 14195d3711 | 6 years ago |
Facundo Batista | 3ee13ab9fc | 6 years ago |
Facundo Batista | be5792cb79 | 6 years ago |
Facundo Batista | 04b6d70b01 | 6 years ago |
Benoît Latinier | 07ce742b77 | 6 years ago |
Benoît Latinier | 93ea722992 | 6 years ago |
Benoît Latinier | e285c91112 | 6 years ago |
Vincent Bernat | 9618c0f3a3 | 6 years ago |
Benoît Latinier | 47b14ab0c8 | 6 years ago |
Vincent Bernat | 30f0c7eeb8 | 6 years ago |
Vincent Bernat | 2b7c17a361 | 6 years ago |
Pelle Nilsson | 22a36bdb7c | 6 years ago |
Pelle Nilsson | da6bb0cec7 | 6 years ago |
Rocka | 30fef390f5 | 6 years ago |
Benoît Latinier | d854ce8347 | 6 years ago |
Rocka | 4e2d2dfb20 | 6 years ago |
Yuchen Pei | 73c7933548 | 6 years ago |
Cimon Lucas (LCM) | 361c596bf2 | 6 years ago |
Jelmer Vernooij | af3903e462 | 6 years ago |
Facundo Batista | 28e154acfc | 6 years ago |
Pelle Nilsson | c9045f5b1f | 6 years ago |
Pelle Nilsson | bc4bc55025 | 6 years ago |
Pelle Nilsson | 2e85ec653f | 6 years ago |
Pelle Nilsson | 107b9be003 | 6 years ago |
Pelle Nilsson | c30873e8a2 | 6 years ago |
Benoît Latinier | 450291440f | 6 years ago |
Max Chadwick | be26948fff | 7 years ago |
benjhess | e9eebf58e3 | 7 years ago |
benjhess | 48a3bd72c8 | 7 years ago |
benjhess | cbd4d90cb7 | 7 years ago |
Thomas Sileo | a322cf673a | 11 years ago |
Thomas Sileo | e50ecc7811 | 11 years ago |
Thomas Sileo | 08313c191c | 11 years ago |
@ -0,0 +1,47 @@
|
||||
---
|
||||
kind: pipeline
|
||||
name: default
|
||||
|
||||
platform:
|
||||
os: linux
|
||||
arch: amd64
|
||||
|
||||
steps:
|
||||
- name: publish
|
||||
pull: default
|
||||
image: plugins/docker:18.09
|
||||
settings:
|
||||
registry: https://registry.nixaid.com
|
||||
repo: "registry.nixaid.com/${DRONE_REPO_NAMESPACE}/${DRONE_REPO_NAME}"
|
||||
tags:
|
||||
- latest
|
||||
username:
|
||||
from_secret: docker_username
|
||||
password:
|
||||
from_secret: docker_password
|
||||
# storage_path: /drone/docker
|
||||
# storage_driver: aufs
|
||||
# ipv6: false
|
||||
# debug: true
|
||||
when:
|
||||
branch:
|
||||
- master
|
||||
event:
|
||||
- push
|
||||
- tag
|
||||
|
||||
- name: notify
|
||||
pull: default
|
||||
image: drillster/drone-email:latest
|
||||
settings:
|
||||
from: "Drone CI <noreply@nixaid.com>"
|
||||
host: mx.nixaid.com
|
||||
port: 587
|
||||
subject: "NIXAID Drone Pipeline {{#success build.status}}SUCCESS{{else}}FAILURE{{/success}} Notification"
|
||||
when:
|
||||
event:
|
||||
- push
|
||||
- tag
|
||||
status:
|
||||
- success
|
||||
- failure
|
@ -0,0 +1,85 @@
|
||||
# workspace:
|
||||
# base: /workspace
|
||||
# path: src/git.nixaid.com/arno/myapp/
|
||||
#
|
||||
# branches:
|
||||
# - master
|
||||
|
||||
pipeline:
|
||||
restore_cache:
|
||||
image: drillster/drone-volume-cache:latest
|
||||
restore: true
|
||||
mount:
|
||||
- /drone/docker
|
||||
# Set the ``DRONE_VOLUME=/tmp/drone-cache:/cache`` drone-server variable,
|
||||
# so you can benefit from the caching.
|
||||
# Otherwise you will have to make this repository trusted in Drone and use
|
||||
# the volumes as follows.
|
||||
# volumes:
|
||||
# - /tmp/drone-cache:/cache
|
||||
|
||||
# drone repo add arno/isso
|
||||
# drone secret add/update --name docker_username --value arno --event push --event tag --event deployment arno/isso
|
||||
# drone secret add/update --name docker_password --value "$(pass show vps/registry.nixaid.com | head -1)" --event push --event tag --event deployment arno/isso
|
||||
publish:
|
||||
image: plugins/docker:17.12
|
||||
# repo: andrey01/${DRONE_REPO_NAME}
|
||||
registry: registry.nixaid.com
|
||||
repo: registry.nixaid.com/arno/${DRONE_REPO_NAME}
|
||||
tags:
|
||||
- latest
|
||||
# - ${DRONE_COMMIT_SHA:0:7}
|
||||
# group: docker
|
||||
# dockerfile: Dockerfile
|
||||
secrets: [docker_username, docker_password]
|
||||
# Since we restore the docker image cache to /drone/docker
|
||||
storage_path: /drone/docker
|
||||
use_cache: true
|
||||
when:
|
||||
event: [push, tag]
|
||||
branch: master
|
||||
|
||||
rebuild_cache:
|
||||
image: drillster/drone-volume-cache:latest
|
||||
rebuild: true
|
||||
mount:
|
||||
- /drone/docker
|
||||
# Set the ``DRONE_VOLUME=/tmp/drone-cache:/cache`` drone-server variable,
|
||||
# so you can benefit from the caching.
|
||||
# Otherwise you will have to make this repository trusted in Drone and use
|
||||
# the volumes as follows.
|
||||
# volumes:
|
||||
# - /tmp/drone-cache:/cache
|
||||
|
||||
# # ca_cert comes from /srv/data/registry/certs/ca.crt
|
||||
# claircheck:
|
||||
# # image: jmccann/drone-clair:1
|
||||
# image: andrey01/drone-clair
|
||||
# url: http://clair:6060
|
||||
# secrets: [ docker_username, docker_password ]
|
||||
# # ignore errors for now. This will work only in drone 0.9 https://github.com/drone/drone-runtime/commit/3e8bd99f60f4032226523320cd2b2321f9525159
|
||||
# err_ignore: true
|
||||
# scan_image: registry.nixaid.com/arno/${DRONE_REPO_NAME}:latest
|
||||
# ca_cert: |
|
||||
# -----BEGIN CERTIFICATE-----
|
||||
# MIIBOjCB4KADAgECAgkAzhpbLWXa4H0wCgYIKoZIzj0EAwIwEDEOMAwGA1UEAwwF
|
||||
# bXktQ0EwHhcNMTgwNzA5MjIzMTAzWhcNMjgwNzA2MjIzMTAzWjAQMQ4wDAYDVQQD
|
||||
# DAVteS1DQTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABFIE8bTfQ76U5qG/Xgjw
|
||||
# BbQU0oRJLYlRxBIWF9MTNSJr2LoaoyrU8jrcWQGRrfKPoVuwUJWp2tp5SJy0AHH7
|
||||
# 4fijIzAhMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgKkMAoGCCqGSM49
|
||||
# BAMCA0kAMEYCIQCYbTbxRD2yX4LzGjh84fKPWPQM9ps8RE2nfwZjqdRUGgIhAOHb
|
||||
# USigh6FzqEPk2jiaV3t1wNtChRWRfupTKG6CD345
|
||||
# -----END CERTIFICATE-----
|
||||
|
||||
notify:
|
||||
image: drillster/drone-email:latest
|
||||
from: Drone CI <noreply@nixaid.com>
|
||||
subject: NIXAID Drone Pipeline {{#success build.status}}SUCCESS{{else}}FAILURE{{/success}} Notification
|
||||
host: mx.nixaid.com
|
||||
port: 587
|
||||
# username: arno
|
||||
# secrets: [ email_username, email_password ]
|
||||
# recipients: [ andrey.arapov@nixaid.com ]
|
||||
when:
|
||||
status: [success, failure] # changed
|
||||
event: [push, tag]
|
@ -0,0 +1,34 @@
|
||||
# First, compile JS stuff
|
||||
FROM node:dubnium-buster
|
||||
WORKDIR /src/
|
||||
COPY . .
|
||||
RUN npm install -g requirejs uglify-js jade bower \
|
||||
&& make init js
|
||||
|
||||
# Second, create virtualenv
|
||||
FROM python:3.8-buster
|
||||
WORKDIR /src/
|
||||
COPY --from=0 /src .
|
||||
RUN python3 -m venv /isso \
|
||||
&& . /isso/bin/activate \
|
||||
&& pip3 install --no-cache-dir --upgrade pip \
|
||||
&& pip3 install --no-cache-dir gunicorn cffi flask \
|
||||
&& python setup.py install \
|
||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||
|
||||
# Third, create final repository
|
||||
FROM python:3.8-slim-buster
|
||||
WORKDIR /isso/
|
||||
COPY --from=1 /isso .
|
||||
|
||||
# Configuration
|
||||
VOLUME /db /config
|
||||
EXPOSE 8080
|
||||
ENV ISSO_SETTINGS /config/isso.cfg
|
||||
CMD ["/isso/bin/gunicorn", "-b", "0.0.0.0:8080", "-w", "4", "--preload", "isso.run", "--worker-tmp-dir", "/dev/shm"]
|
||||
|
||||
# Example of use:
|
||||
#
|
||||
# docker build -t isso .
|
||||
# docker run -it --rm -v /opt/isso:/config -v /opt/isso:/db -v $PWD:$PWD isso /isso/bin/isso -c \$ISSO_SETTINGS import disqus.xml
|
||||
# docker run -d --rm --name isso -p 8080:8080 -v /opt/isso:/config -v /opt/isso:/db isso
|
@ -0,0 +1,128 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- encoding: utf-8 -*-
|
||||
#
|
||||
# The MIT License (MIT)
|
||||
#
|
||||
# Copyright (c) 2020 Lucas Cimon.
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
# THE SOFTWARE.
|
||||
|
||||
"""Dump isso comments as text
|
||||
|
||||
The script can be run like this:
|
||||
|
||||
contrib/dump_comments.py .../path/to/isso.db --sort-by-last-reply
|
||||
|
||||
To get a list of all available options:
|
||||
|
||||
contrib/dump_comments.py --help
|
||||
|
||||
By installing the optional colorama dependency, you'll get a colored output.
|
||||
An example of output can be found at https://github.com/posativ/isso/issues/634
|
||||
"""
|
||||
|
||||
import argparse
|
||||
import sqlite3
|
||||
from collections import defaultdict, namedtuple
|
||||
from datetime import date
|
||||
from textwrap import indent
|
||||
|
||||
|
||||
class ColorFallback():
|
||||
__getattr__ = lambda self, name: '' # noqa: E731
|
||||
|
||||
|
||||
try:
|
||||
from colorama import Fore, Style, init
|
||||
init() # needed for Windows
|
||||
except ImportError: # fallback so that the imported classes always exist
|
||||
Fore = Style = ColorFallback()
|
||||
|
||||
|
||||
Comment = namedtuple('Comment', ('uri', 'id', 'parent', 'created', 'text', 'author', 'email', 'website', 'likes', 'dislikes', 'replies'))
|
||||
|
||||
INDENT = ' '
|
||||
QUERY = 'SELECT uri, comments.id, parent, created, text, author, email, website, likes, dislikes FROM comments INNER JOIN threads on comments.tid = threads.id'
|
||||
|
||||
|
||||
def main():
|
||||
args = parse_args()
|
||||
if not args.colors:
|
||||
global Fore, Style
|
||||
Fore = Style = ColorFallback()
|
||||
db = sqlite3.connect(args.db_path)
|
||||
comments_per_uri = defaultdict(list)
|
||||
for result in db.execute(QUERY).fetchall():
|
||||
comment = Comment(*result, replies=[])
|
||||
comments_per_uri[comment.uri].append(comment)
|
||||
root_comments_per_sort_date = {}
|
||||
for comments in comments_per_uri.values():
|
||||
comments_per_id = {comment.id: comment for comment in comments}
|
||||
root_comments, sort_date = [], None
|
||||
for comment in comments:
|
||||
if comment.parent: # == this is a "reply" comment
|
||||
comments_per_id[comment.parent].replies.append(comment)
|
||||
if args.sort_by_last_reply and (sort_date is None or comment.created > sort_date):
|
||||
sort_date = comment.created
|
||||
else:
|
||||
root_comments.append(comment)
|
||||
if sort_date is None or comment.created > sort_date:
|
||||
sort_date = comment.created
|
||||
root_comments_per_sort_date[sort_date] = root_comments
|
||||
for _, root_comments in sorted(root_comments_per_sort_date.items(), key=lambda pair: pair[0]):
|
||||
print(Fore.MAGENTA + args.url_prefix + root_comments[0].uri + Fore.RESET)
|
||||
for comment in root_comments:
|
||||
print_comment(INDENT, comment)
|
||||
for comment in comment.replies:
|
||||
print_comment(INDENT * 2, comment)
|
||||
print()
|
||||
|
||||
|
||||
def print_comment(prefix, comment):
|
||||
author = comment.author or 'Anonymous'
|
||||
email = comment.email or ''
|
||||
website = comment.website or ''
|
||||
when = date.fromtimestamp(comment.created)
|
||||
popularity = ''
|
||||
if comment.likes:
|
||||
popularity = '+{.likes}'.format(comment)
|
||||
if comment.dislikes:
|
||||
if popularity:
|
||||
popularity += '/'
|
||||
popularity = '-{.dislikes}'.format(comment)
|
||||
print(prefix + '{Style.BRIGHT}{author}{Style.RESET_ALL} {Style.DIM}- {email} {website}{Style.RESET_ALL} {when} {Style.DIM}{popularity}{Style.RESET_ALL}'.format(Style=Style, **locals()))
|
||||
print(indent(comment.text, prefix))
|
||||
|
||||
|
||||
def parse_args():
|
||||
parser = argparse.ArgumentParser(description='Dump all Isso comments in chronological order, grouped by replies',
|
||||
formatter_class=ArgparseHelpFormatter)
|
||||
parser.add_argument('db_path', help='File path to Isso Sqlite DB')
|
||||
parser.add_argument('--sort-by-last-reply', action='store_true', help='By default comments are sorted by "parent" comment date, this sort comments based on the last replies')
|
||||
parser.add_argument('--url-prefix', default='', help='Optional domain name to prefix to pages URLs')
|
||||
parser.add_argument('--no-colors', action='store_false', dest='colors', default=True, help='Disabled colored output')
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
class ArgparseHelpFormatter(argparse.RawTextHelpFormatter, argparse.ArgumentDefaultsHelpFormatter):
|
||||
pass
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
@ -0,0 +1,123 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- encoding: utf-8 -*-
|
||||
|
||||
"""Comment importer from Blogger
|
||||
|
||||
This python script can convert comments posted to a Blogger-powered blog to a
|
||||
JSON file with can then be imported into Isso (by following the procedure
|
||||
explained in docs/docs/extras/advanced-migration.rst.
|
||||
|
||||
The script can be run like this:
|
||||
|
||||
python import_blogger.py -p 'http://myblog.com/' blogger.xml out.json
|
||||
|
||||
where `blogger.xml` is a dump of the blog produced by the Blogger platform, and
|
||||
the URL following the `-p` option is a prefix that will be applied to all post
|
||||
URLs: the original host will be stripped and the path will be appended to the
|
||||
string you specify here (this can be useful in the case that your blog moved to
|
||||
a different domain, subdomain, or just into a new directory).
|
||||
The `out.json` file is the file which will be generated by this tool, and which
|
||||
can then be fed into isso:
|
||||
|
||||
isso -c /path/to/isso.cfg import -t generic out.json
|
||||
"""
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import json
|
||||
|
||||
import feedparser
|
||||
import time
|
||||
from urllib.parse import urlparse
|
||||
|
||||
|
||||
class Post:
|
||||
def __init__(self, url):
|
||||
self.url = url
|
||||
self.title = None
|
||||
self.comments = []
|
||||
|
||||
def add_comment(self, comment):
|
||||
comment['id'] = len(self.comments) + 1
|
||||
self.comments.append(comment)
|
||||
|
||||
|
||||
def encode_post(post):
|
||||
ret = {}
|
||||
ret['id'] = post.url
|
||||
ret['title'] = post.title
|
||||
ret['comments'] = post.comments
|
||||
return ret
|
||||
|
||||
|
||||
class ImportBlogger:
|
||||
TYPE_COMMENT = 'http://schemas.google.com/blogger/2008/kind#comment'
|
||||
TYPE_POST = 'http://schemas.google.com/blogger/2008/kind#post'
|
||||
|
||||
def __init__(self, filename_in, filename_out, prefix):
|
||||
self.channel = feedparser.parse(filename_in)
|
||||
self.filename_out = filename_out
|
||||
self.prefix = prefix
|
||||
|
||||
def run(self):
|
||||
self.posts = {}
|
||||
for item in self.channel.entries:
|
||||
terms = [tag.term for tag in item.tags]
|
||||
if not terms:
|
||||
continue
|
||||
if terms[0] == self.TYPE_COMMENT:
|
||||
post = self.ensure_post(item)
|
||||
post.add_comment(self.process_comment(item))
|
||||
elif terms[0] == self.TYPE_POST:
|
||||
self.process_post(item)
|
||||
|
||||
data = [encode_post(p) for p in self.posts.values() if p.comments]
|
||||
with open(self.filename_out, 'w') as fp:
|
||||
json.dump(data, fp, indent=2)
|
||||
|
||||
def process_post(self, item):
|
||||
pid = self.post_id(item)
|
||||
if pid in self.posts:
|
||||
post = self.posts[pid]
|
||||
else:
|
||||
post = Post(pid)
|
||||
self.posts[pid] = post
|
||||
post.title = item.title
|
||||
|
||||
def ensure_post(self, item):
|
||||
pid = self.post_id(item)
|
||||
post = self.posts.get(pid, None)
|
||||
if not post:
|
||||
post = Post(pid)
|
||||
self.posts[pid] = post
|
||||
return post
|
||||
|
||||
def process_comment(self, item):
|
||||
comment = {}
|
||||
comment['author'] = item.author_detail.name
|
||||
comment['email'] = item.author_detail.email
|
||||
comment['website'] = item.author_detail.get('href', '')
|
||||
t = time.strftime('%Y-%m-%d %H:%M:%S', item.published_parsed)
|
||||
comment['created'] = t
|
||||
comment['text'] = item.content[0].value
|
||||
comment['remote_addr'] = '127.0.0.1'
|
||||
return comment
|
||||
|
||||
def post_id(self, item):
|
||||
u = urlparse(item.link)
|
||||
return self.prefix + u.path
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import argparse
|
||||
parser = argparse.ArgumentParser(
|
||||
description='Convert comments from blogger.com')
|
||||
parser.add_argument('input', help='input file')
|
||||
parser.add_argument('output', help='output file')
|
||||
parser.add_argument('-p', dest='prefix',
|
||||
help='prefix to be added to paths (ID)',
|
||||
type=str, default='')
|
||||
args = parser.parse_args()
|
||||
|
||||
importer = ImportBlogger(args.input, args.output, args.prefix)
|
||||
importer.run()
|
@ -0,0 +1,70 @@
|
||||
Advanced Migration
|
||||
==================
|
||||
|
||||
In quickstart we saw you can import comments from Disqus or WordPress. But there
|
||||
are a many other comments system and you could be using one of them.
|
||||
|
||||
Isso provides a way to import such comments, however it's up to you to to:
|
||||
|
||||
- dump comments
|
||||
- fit the data to the following JSON format::
|
||||
|
||||
A list of threads, each item being a dict with the following data:
|
||||
|
||||
- id: a text representing the unique thread id (note: by default isso
|
||||
associates this ID to the article URL, but it can be changed on
|
||||
client side with "data-isso-id" - see :doc:`client configuration <../configuration/client>` )
|
||||
- title: the title of the thread
|
||||
- comments: the list of comments
|
||||
|
||||
Each item in that list of comments is a dict with the following data:
|
||||
|
||||
- id: an integer with the unique id of the comment inside the thread
|
||||
(it can be repeated among different threads); this will be used to
|
||||
order the comment inside the thread
|
||||
- author: the author's name
|
||||
- email: the author's email
|
||||
- website: the author's website
|
||||
- remote_addr: the author's IP
|
||||
- created: a timestamp, in the format "%Y-%m-%d %H:%M:%S"
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: json
|
||||
|
||||
[
|
||||
{
|
||||
"id": "/blog/article1",
|
||||
"title": "First article!",
|
||||
"comments": [
|
||||
{
|
||||
"author": "James",
|
||||
"created": "2018-11-28 17:24:23",
|
||||
"email": "email@mail.com",
|
||||
"id": "1",
|
||||
"remote_addr": "127.0.0.1",
|
||||
"text": "Great article!",
|
||||
"website": "http://fefzfzef.frzr"
|
||||
},
|
||||
{
|
||||
"author": "Harold",
|
||||
"created": "2018-11-28 17:58:03",
|
||||
"email": "email2@mail.com",
|
||||
"id": "2",
|
||||
"remote_addr": "",
|
||||
"text": "I hated it...",
|
||||
"website": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
Keep in mind that isso expects to have an array, so keep the opening and ending square bracket even if you have only one article thread!
|
||||
|
||||
Next you can import you json dump:
|
||||
|
||||
.. code-block:: sh
|
||||
|
||||
~> isso -c /path/to/isso.cfg import -t generic comment-dump.json
|
||||
[100%] 53 threads, 192 comments
|
||||
|
@ -0,0 +1,20 @@
|
||||
Community tools
|
||||
===============
|
||||
|
||||
Utility scripts
|
||||
---------------
|
||||
|
||||
Some utility scripts have been developed by isso users.
|
||||
They are stored in the `GitHub contrib/ directory
|
||||
<https://github.com/posativ/isso/tree/master/contrib>`_ :
|
||||
|
||||
* `dump_comments.py` : dump isso comments as text, optionally with color
|
||||
* `import_blogger.py` : comment importer from Blogger
|
||||
|
||||
|
||||
Related projects
|
||||
----------------
|
||||
|
||||
* `wonderfall/isso Docker image <https://github.com/Wonderfall/docker-isso>`
|
||||
* `a grav plugin to integrate isso comments <https://github.com/Sommerregen/grav-plugin-jscomments>`
|
||||
* `a Pelican theme supporting isso comments <https://github.com/Lucas-C/pelican-mg>`
|
@ -1,32 +1,17 @@
|
||||
Frequently asked question
|
||||
=========================
|
||||
|
||||
Why not use Gravatar/Libravatar/... ?
|
||||
-------------------------------------
|
||||
|
||||
Various people asked or complained about the generated icons next to their
|
||||
comments. First, it is not an avatar, it is an identicon used to
|
||||
*identify* an author of multiple comments without leaking personal
|
||||
informations (unlike Gravatar).
|
||||
|
||||
If you are in need of Gravatar_, then use Disqus. If you run your own
|
||||
Libravatar_ server, you can work on a patch for Isso which adds *optional*
|
||||
support for avatars.
|
||||
|
||||
.. _Gravatar: https://secure.gravatar.com/
|
||||
.. _Libravatar: http://libravatar.org/
|
||||
|
||||
Why SQLite3?
|
||||
------------
|
||||
|
||||
Although partially answered on the index page, here a more complete answer: If
|
||||
Although partially answered on the index page, here is a more complete answer: If
|
||||
you manage massive amounts of comments, Isso is a really bad choice. Isso is
|
||||
designed to be simple and easy to setup, not optimizied for high-traffic
|
||||
designed to be simple and easy to setup, it is not optimized for high-traffic
|
||||
websites (use a `dedicated Disqus`_ instance then).
|
||||
|
||||
comments are not big data
|
||||
Comments are not big data.
|
||||
|
||||
For example, 209 threads and 778 comments in total only need 620K (kilobyte)
|
||||
memory. Excellent use case for SQLite.
|
||||
For example, if you have 209 threads and 778 comments in total this only needs 620 kilobytes
|
||||
of memory. This is an excellent use case for SQLite.
|
||||
|
||||
.. _dedicated Disqus:
|
||||
|
@ -0,0 +1,10 @@
|
||||
Releasing steps
|
||||
===============
|
||||
|
||||
* Run ``python3 setup.py nosetests``, ``python2 setup.py nosetests``
|
||||
* Update version number in ``setup.py`` and ``CHANGES.rst``
|
||||
* ``git commit -m "Preparing ${VERSION}" setup.py CHANGES.rst``
|
||||
* ``git tag -as ${VERSION}``
|
||||
* ``make init all``
|
||||
* ``python3 setup.py sdist``
|
||||
* ``twine upload --sign dist/isso-${VERSION}.tar.gz``
|
@ -0,0 +1,100 @@
|
||||
function ajax(req) {
|
||||
var r = new XMLHttpRequest();
|
||||
r.open(req.method, req.url, true);
|
||||
r.onreadystatechange = function () {
|
||||
if (r.readyState != 4 || r.status != 200) {
|
||||
if (req.failure) {
|
||||
req.failure();
|
||||
}
|
||||
return;
|
||||
}
|
||||
req.success(r.responseText);
|
||||
};
|
||||
r.send(req.data);
|
||||
}
|
||||
function fade(element) {
|
||||
var op = 1; // initial opacity
|
||||
var timer = setInterval(function () {
|
||||
if (op <= 0.1){
|
||||
clearInterval(timer);
|
||||
element.style.display = 'none';
|
||||
}
|
||||
element.style.opacity = op;
|
||||
element.style.filter = 'alpha(opacity=' + op * 100 + ")";
|
||||
op -= op * 0.1;
|
||||
}, 10);
|
||||
}
|
||||
function moderate(com_id, hash, action, isso_host_script) {
|
||||
ajax({method: "POST",
|
||||
url: isso_host_script + "/id/" + com_id + "/" + action + "/" + hash,
|
||||
success: function(){
|
||||
fade(document.getElementById("isso-" + com_id));
|
||||
}});
|
||||
}
|
||||
function edit(com_id, hash, author, email, website, comment, isso_host_script) {
|
||||
ajax({method: "POST",
|
||||
url: isso_host_script + "/id/" + com_id + "/edit/" + hash,
|
||||
data: JSON.stringify({text: comment,
|
||||
author: author,
|
||||
email: email,
|
||||
website: website}),
|
||||
success: function(ret){
|
||||
console.log("edit successed: ", ret);// TODO display some pretty stuff & update msg
|
||||
},
|
||||
error: function(ret){
|
||||
console.log("Error: ", ret); // TODO flash msg/notif
|
||||
}});
|
||||
}
|
||||
function validate_com(com_id, hash, isso_host_script) {
|
||||
moderate(com_id, hash, "activate", isso_host_script);
|
||||
}
|
||||
function delete_com(com_id, hash, isso_host_script) {
|
||||
moderate(com_id, hash, "delete", isso_host_script);
|
||||
}
|
||||
function unset_editable(elt_id) {
|
||||
var elt = document.getElementById(elt_id);
|
||||
if (elt) {
|
||||
elt.contentEditable = false;
|
||||
elt.classList.remove("editable");
|
||||
}
|
||||
}
|
||||
function set_editable(elt_id) {
|
||||
var elt = document.getElementById(elt_id);
|
||||
if (elt) {
|
||||
elt.contentEditable = true;
|
||||
elt.classList.add("editable");
|
||||
}
|
||||
}
|
||||
function start_edit(com_id) {
|
||||
var editable_elements = ['isso-author-' + com_id,
|
||||
'isso-email-' + com_id,
|
||||
'isso-website-' + com_id,
|
||||
'isso-text-' + com_id];
|
||||
for (var idx=0; idx <= editable_elements.length; idx++) {
|
||||
set_editable(editable_elements[idx]);
|
||||
}
|
||||
document.getElementById('edit-btn-' + com_id).classList.toggle('hidden');
|
||||
document.getElementById('stop-edit-btn-' + com_id).classList.toggle('hidden');
|
||||
document.getElementById('send-edit-btn-' + com_id).classList.toggle('hidden');
|
||||
}
|
||||
function stop_edit(com_id) {
|
||||
var editable_elements = ['isso-author-' + com_id,
|
||||
'isso-email-' + com_id,
|
||||
'isso-website-' + com_id,
|
||||
'isso-text-' + com_id];
|
||||
for (var idx=0; idx <= editable_elements.length; idx++) {
|
||||
unset_editable(editable_elements[idx]);
|
||||
}
|
||||
document.getElementById('edit-btn-' + com_id).classList.toggle('hidden');
|
||||
document.getElementById('stop-edit-btn-' + com_id).classList.toggle('hidden');
|
||||
document.getElementById('send-edit-btn-' + com_id).classList.toggle('hidden');
|
||||
}
|
||||
function send_edit(com_id, hash, isso_host_script) {
|
||||
var author = document.getElementById('isso-author-' + com_id).textContent;
|
||||
var email = document.getElementById('isso-email-' + com_id).textContent;
|
||||
var website = document.getElementById('isso-website-' + com_id).textContent;
|
||||
var comment = document.getElementById('isso-text-' + com_id).textContent;
|
||||
edit(com_id, hash, author, email, website, comment, isso_host_script);
|
||||
stop_edit(com_id);
|
||||
}
|
||||
|
@ -0,0 +1,34 @@
|
||||
define({
|
||||
"postbox-text": "Escriure lo comentari aquí (almens 3 caractèrs)",
|
||||
"postbox-author": "Nom (opcional)",
|
||||
"postbox-email": "Corrièl (opcional)",
|
||||
"postbox-website": "Site web (opcional)",
|
||||
"postbox-preview": "Apercebut",
|
||||
"postbox-edit": "Modificar",
|
||||
"postbox-submit": "Enviar",
|
||||
"postbox-notification": "S'abonar per corrièl a las notificacions de responsas",
|
||||
|
||||
"num-comments": "Un comentari\n{{ n }} comentaris",
|
||||
"no-comments": "Cap de comentari pel moment",
|
||||
"atom-feed": "Flux Atom",
|
||||
|
||||
"comment-reply": "Respondre",
|
||||
"comment-edit": "Modificar",
|
||||
"comment-save": "Salvar",
|
||||
"comment-delete": "Suprimir",
|
||||
"comment-confirm": "Confirmar",
|
||||
"comment-close": "Tampar",
|
||||
"comment-cancel": "Anullar",
|
||||
"comment-deleted": "Comentari suprimit.",
|
||||
"comment-queued": "Comentari en espèra de moderacion.",
|
||||
"comment-anonymous": "Anonim",
|
||||
"comment-hidden": "1 rescondut\n{{ n }} resconduts",
|
||||
|
||||
"date-now": "ara meteis",
|
||||
"date-minute": "fa una minuta \nfa {{ n }} minutas",
|
||||
"date-hour": "fa una ora\nfa {{ n }} oras",
|
||||
"date-day": "Ièr\nfa {{ n }} jorns",
|
||||
"date-week": "la setmana passada\nfa {{ n }} setmanas",
|
||||
"date-month": "lo mes passat\nfa {{ n }} meses",
|
||||
"date-year": "l'an passat\nfa {{ n }} ans"
|
||||
});
|
@ -0,0 +1,34 @@
|
||||
define({
|
||||
"postbox-text": "Digite seu comentário aqui (pelo menos 3 letras)",
|
||||
"postbox-author": "Nome (opcional)",
|
||||
"postbox-email": "E-mail (opcional)",
|
||||
"postbox-website": "Website (opcional)",
|
||||
"postbox-preview": "Prévia",
|
||||
"postbox-edit": "Editar",
|
||||
"postbox-submit": "Enviar",
|
||||
"postbox-notification": "Receber emails de notificação de respostas",
|
||||
|
||||
"num-comments": "Um Comentário\n{{ n }} Comentários",
|
||||
"no-comments": "Nenhum comentário ainda",
|
||||
"atom-feed": "Feed Atom",
|
||||
|
||||
"comment-reply": "Responder",
|
||||
"comment-edit": "Editar",
|
||||
"comment-save": "Salvar",
|
||||
"comment-delete": "Excluir",
|
||||
"comment-confirm": "Confirmar",
|
||||
"comment-close": "Fechar",
|
||||
"comment-cancel": "Cancelar",
|
||||
"comment-deleted": "Comentário apagado.",
|
||||
"comment-queued": "Comentário na fila de moderação.",
|
||||
"comment-anonymous": "Anônimo",
|
||||
"comment-hidden": "{{ n }} Oculto(s)",
|
||||
|
||||
"date-now": "agora mesmo",
|
||||
"date-minute": "um minuto atrás\n{{ n }} minutos atrás",
|
||||
"date-hour": "uma hora atrás\n{{ n }} horas atrás",
|
||||
"date-day": "ontem\n{{ n }} dias",
|
||||
"date-week": "semana passada\n{{ n }} semanas atrás",
|
||||
"date-month": "mês passado\n{{ n }} meses atrás",
|
||||
"date-year": "ano passado\n{{ n }} anos atrás"
|
||||
});
|
@ -0,0 +1,29 @@
|
||||
define({
|
||||
"postbox-text": "Sem napíšte svoj komentár (minimálne 3 znaky)",
|
||||
"postbox-author": "Meno (nepovinné)",
|
||||
"postbox-email": "E-mail (nepovinný)",
|
||||
"postbox-website": "Web (nepovinný)",
|
||||
"postbox-preview": "Náhľad",
|
||||
"postbox-edit": "Upraviť",
|
||||
"postbox-submit": "Publikovať",
|
||||
"num-comments": "Jeden komentár\n{{ n }} komentáre\n{{ n }} komentárov",
|
||||
"no-comments": "Zatiaľ bez komentárov",
|
||||
"comment-reply": "Odpovedať",
|
||||
"comment-edit": "Upraviť",
|
||||
"comment-save": "Uložiť",
|
||||
"comment-delete": "Zmazať",
|
||||
"comment-confirm": "Potvrdit",
|
||||
"comment-close": "Zavrieť",
|
||||
"comment-cancel": "Zrušiť",
|
||||
"comment-deleted": "Komentár bol vymazaný",
|
||||
"comment-queued": "Komentár zaradený na schválenie",
|
||||
"comment-anonymous": "Anonym",
|
||||
"comment-hidden": "{{ n }} skrytý\n{{ n }} skryté\n{{ n }} skrytých",
|
||||
"date-now": "práve teraz",
|
||||
"date-minute": "pred minútou\npred {{ n }} minútami",
|
||||
"date-hour": "pred hodinou\npred {{ n }} hodinami",
|
||||
"date-day": "včera\npred {{ n }} dňami",
|
||||
"date-week": "minulý týždeň\npred {{ n }} týždňami",
|
||||
"date-month": "minulý mesiac\npred {{ n }} mesiacmi",
|
||||
"date-year": "minulý rok\npred {{ n }} rokmi"
|
||||
});
|
@ -0,0 +1,28 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Isso admin</title>
|
||||
<link type="text/css" href="{{isso_host_script}}/css/isso.css" rel="stylesheet">
|
||||
<link type="text/css" href="{{isso_host_script}}/css/admin.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrapper">
|
||||
<div class="header">
|
||||
<header>
|
||||
<img class="logo" src="{{isso_host_script}}/img/isso.svg" alt="Wynaut by @veekun"/>
|
||||
<div class="title">
|
||||
<a href="./">
|
||||
<h1>Isso</h1>
|
||||
<h2>Administration</h2>
|
||||
</a>
|
||||
</div>
|
||||
</header>
|
||||
</div>
|
||||
<main>
|
||||
<div id="disabled">
|
||||
Administration is disabled on this instance of isso. Set enabled=true
|
||||
in the admin section of your isso configuration to enable it.
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
@ -0,0 +1 @@
|
||||
[{"comments": [{"email": "", "remote_addr": "0.0.0.0", "website": "http://www.tigerspice.com", "created": "2005-02-24 04:03:37", "author": "texas holdem", "id": 0, "text": "Great men can't be ruled. by free online poker"}], "id": "/posts/0001/", "title": "Test+post"}, {"comments": [{"email": "105421439@87750645.com", "remote_addr": "0.0.0.0", "website": "", "created": "2005-05-08 06:50:26", "author": "Richard Crinshaw", "id": 0, "text": "Ja-make-a me crazzy mon :)\n"}], "id": "/posts/0007/", "title": "Nat+%26+Miguel"}]
|
Loading…
Reference in new issue