Commit Graph

693 Commits

Author SHA1 Message Date
Martin Zimmermann
312578457b uwsgi can only cache bytes 2013-11-03 18:55:23 +01:00
Martin Zimmermann
cc2ac11850 inline CSS 2013-11-03 18:55:23 +01:00
Martin Zimmermann
d8a254c304 fix api endpoint detection 2013-11-03 18:55:20 +01:00
Martin Zimmermann
d59fc2ef8e handle OPTIONS request and return CORS headers 2013-11-03 15:18:04 +01:00
Martin Zimmermann
c581e0f05a cache email hash on comment creation 2013-11-03 12:39:51 +01:00
Martin Zimmermann
c567758d81 limit email length to 254 to avoid hash-DDoS 2013-11-03 12:35:33 +01:00
Martin Zimmermann
0473afe2db add profiling option to server configuration 2013-11-03 12:32:38 +01:00
Martin Zimmermann
3c193bef27 request remote_addr only when using the comment form 2013-11-02 18:41:00 +01:00
Martin Zimmermann
7e73986667 remove trailing slash from API endpoint, appendum to 8da9d0b 2013-11-02 18:39:40 +01:00
Martin Zimmermann
375b32a151 Merge branch 'feature/data-attributes' 2013-11-02 18:28:42 +01:00
Martin Zimmermann
8da9d0b13b override API location with data-prefix="..." 2013-11-02 18:26:33 +01:00
Martin Zimmermann
0d07515c18 override HTML title parsing with a data-title="... attribute
If you don't use a <h1> to markup your post's title (but h2), it
is no longer possible to reliable detect the site's title.

E.g. you have a single page with only one <h1> and that's the
*real* title of that page. But on the other hand, it is also
possible, that the <h1> tag is just your website's name and the
actual post title is marked up in <h2>.
2013-11-02 18:21:27 +01:00
Martin Zimmermann
fa496669e2 use lowercase [smtp] as written in the docs 2013-11-02 17:38:01 +01:00
Martin Zimmermann
54413dfcf3 add copyright header to embed.js (and it's MIT not BSD) 2013-11-02 15:31:17 +01:00
Martin Zimmermann
c5d52721c4 use cache.delete a) with an actual key and b) only on delete 2013-11-01 17:02:08 +01:00
Martin Zimmermann
2b7d263735 only create a reply box when needed
Previously this led to unnecessary object creation which impacted the
rendering time (on my machine 200 comments -> 1200ms) just to create
the postbox per comment (just the object initialization)).
2013-11-01 15:25:44 +01:00
Martin Zimmermann
cac4694f43 cache PBKDF2 hash, closes #18
Markdown conversion is not the reason for 2s per 100 comments response,
the hash function is. When using the email/remote_addr from cache, the
response time is pretty fast.

* when uWSGI is available, use their caching framework

* for multi-threaded environment (the default), use a simple cache
  shipped with werkzeug
2013-11-01 15:08:16 +01:00
Martin Zimmermann
74ab58167e replace abort(code) with proper exceptions and refactor request dispatch 2013-11-01 12:46:51 +01:00
Martin Zimmermann
2794734258 remove Jinja2 dependency 2013-11-01 12:26:39 +01:00
Martin Zimmermann
dea4c88162 remove admin interface fragments 2013-10-31 17:14:32 +01:00
Martin Zimmermann
2cac3f0567 detect Isso API endpoint when using *.dev.js script 2013-10-31 12:33:19 +01:00
Martin Zimmermann
e08e7be464 remove stale threads after all comments have been deleted 2013-10-31 11:08:00 +01:00
Martin Zimmermann
a658021f7e fix unittest for 1358fac and extend internal documentation 2013-10-31 10:44:46 +01:00
Martin Zimmermann
1358fac258 fix empty thread title due premature HTTP connection closing 2013-10-30 19:41:41 +01:00
Martin Zimmermann
55b6b283b8 use uWSGIs locking 2013-10-30 10:52:06 +01:00
Martin Zimmermann
9a8e0b524e build notify mail with first hostname 2013-10-30 10:06:28 +01:00
Martin Zimmermann
0c7a4e44f9 disable werkzeug connection log 2013-10-30 10:06:09 +01:00
Martin Zimmermann
1518bae5ba IE10 does not support classList on SVG elements m( 2013-10-30 00:24:32 +01:00
Martin Zimmermann
32f83160d6 config.js is not necessary in post.html 2013-10-29 23:12:44 +01:00
Martin Zimmermann
5689143c4a remove button no longer resets after 1.5s, part of #17 2013-10-29 18:46:08 +01:00
Martin Zimmermann
bbccfe9def include post.html in snapshot release and remove old css 2013-10-29 17:17:52 +01:00
Martin Zimmermann
876dd402a6 remove bootstrap 2013-10-29 17:07:25 +01:00
Martin Zimmermann
84da660ca9 update sample post 2013-10-29 17:06:46 +01:00
Martin Zimmermann
c3b6e0319e use SVG to render identicon so the browser can auto-resize the image
Temporary fix for websites with small width, where the identicon
overlaps with the textarea field.
2013-10-29 16:58:38 +01:00
Martin Zimmermann
b672dae624 allow multiple hosts, e.g. HTTP and HTTPS sites 2013-10-29 12:22:13 +01:00
Martin Zimmermann
cb40c7ca42 improve doctests and refactor title extraction 2013-10-29 12:01:45 +01:00
Martin Zimmermann
89b1ca8846 doctests for utils.anonymize(remote_addr) 2013-10-27 13:58:50 +01:00
Martin Zimmermann
527b349fbe use python's logging module 2013-10-27 13:40:18 +01:00
Martin Zimmermann
11293a504b utils.parse now returns a triple (host, port, ssl) 2013-10-27 12:48:34 +01:00
Martin Zimmermann
acbf42f89d fix SMTP connectivity test, appendum to a8d0670 2013-10-27 12:47:48 +01:00
Martin Zimmermann
94b1fef28e rewrite CONFIGURATION.md in reST and extend document 2013-10-27 12:44:59 +01:00
Martin Zimmermann
2db98d0d34 move http utils in separate module 2013-10-24 14:38:43 +02:00
Martin Zimmermann
48b4c9f9a5 purge comments in moderation queue after given time, closes #13 2013-10-24 14:38:40 +02:00
Martin Zimmermann
a8d0670db7 fix PEP-8 minors 2013-10-24 11:56:48 +02:00
Martin Zimmermann
4f5b247ed1 delete comments via mail 2013-10-21 17:40:03 +02:00
Martin Zimmermann
5b52cbdfa6 skip empty Disqus threads 2013-10-19 12:45:10 +02:00
Martin Zimmermann
66ade6df14 remove semantic article, header and footer tags to avoid CSS collisions 2013-10-19 11:38:16 +02:00
Martin Zimmermann
b691579bad test if #isso-thread exists 2013-10-13 23:33:06 +02:00
Martin Zimmermann
5d0cad4272 use proper email header encoding 2013-10-13 15:52:50 +02:00
Martin Zimmermann
e8d62e5db1 fix import regression from 11246f5 2013-10-13 15:34:26 +02:00
Martin Zimmermann
a2c3ecb131 remove behave.js 2013-10-13 15:06:43 +02:00
Martin Zimmermann
11246f51dc support for moderated comments, part of #13
* add moderated = true to your configuration (defaults to false)
* comment activation via email to the Isso owner
2013-10-13 15:02:42 +02:00
Martin Zimmermann
79f8c1157e show N days ago instead of previous week 2013-10-13 12:58:48 +02:00
Martin Zimmermann
61a486d2ea support for Python 3.3 2013-10-09 16:33:49 +02:00
Martin Zimmermann
f9133b984e use configparser backport to support python2.6 again 2013-10-09 15:49:12 +02:00
Martin Zimmermann
988d2032c5 replace blank identicon with ghosts 2013-10-09 15:33:31 +02:00
Martin Zimmermann
2557c02117 Merge branch 'feature/spam-guard' 2013-10-06 19:55:44 +02:00
Martin Zimmermann
1034d5016e document app/dom.js 2013-10-06 19:55:18 +02:00
Martin Zimmermann
8967fd733e hide reply button when it is not possible to reply 2013-10-06 19:46:04 +02:00
Martin Zimmermann
ab618ad898 add basic spam protection 2013-10-06 18:37:05 +02:00
Martin Zimmermann
6eab8ad5ca support for uWSGI
* naive uWSGI fallback which spawns one thread per request and
  one thread per mail notification
* uWSGI backend which utilize queues and spooling to handle
  simultanous requests and mail notifications

This also fixes a bug where N concurrent POSTs on a new topic
failed for N-1 requests (db integrity error).
2013-10-06 15:36:38 +02:00
Martin Zimmermann
9ce965440a toggle next state, when submit was succesful 2013-10-04 18:00:17 +02:00
Martin Zimmermann
0abb8ed658 remove edit and remove buttons when cookie is gone 2013-10-04 18:00:13 +02:00
Martin Zimmermann
0b8cac7f18 implement comment editing 2013-10-03 18:56:36 +02:00
Martin Zimmermann
6242d243c9 update cookie after editing a comment 2013-10-03 18:12:59 +02:00
Martin Zimmermann
75f172f4ae textarea auto resize 2013-10-03 14:17:09 +02:00
Martin Zimmermann
80e8ce7e25 more i18n 2013-10-03 13:50:30 +02:00
Martin Zimmermann
57a16acff4 use promise lib correctly 2013-10-03 13:50:30 +02:00
Martin Zimmermann
e4f9b53668 minor CSS improvement to input and submit fields 2013-10-03 13:50:27 +02:00
Martin Zimmermann
2f6f4bc338 stylesheet injection 2013-10-02 16:18:55 +02:00
Martin Zimmermann
de25af5467 exclude svgs from count.min.js 2013-10-02 16:18:35 +02:00
Martin Zimmermann
fd18ea9eab split i18n messages 2013-10-02 16:17:25 +02:00
Martin Zimmermann
ef463eb517 API endpoint detection for count.min.js 2013-10-02 16:16:08 +02:00
Martin Zimmermann
a7cc1cdf4d move scss to isso/css/ 2013-10-02 16:15:43 +02:00
Martin Zimmermann
b1e33bdce5 split 3rd-party packages to vendor and components
Then, use bower to fetch components and put libraries not
available as (web) component into vendor/.

Move crypto parts and identicon generation modules into app/lib.
2013-10-02 14:26:06 +02:00
Martin Zimmermann
b36e2fdb28 COMMIT ALL THE THINGS
* refactor JS (a lot)
* use a CSS framework (neat/bourbon), because CSS is hard
* up/downvote comments
* cleaner HTML
* HTML inclusion in JS
* SVG icons for reference, up and downvote
* basic i18n: english and german supported ootb
* lazy (because slow) client-side identicon generation (preview ability)
* removed website input field for no particular reason
* remove HTML.js in favour of a homebrew DOM manipulation tool
2013-10-01 14:47:01 +02:00
Martin Zimmermann
4f03b3faf9 re-license to MIT 2013-09-19 18:44:40 +02:00
Martin Zimmermann
560e73cc0a rewrite db backend 2013-09-19 18:44:37 +02:00
Martin Zimmermann
52f64dd26f improve url exists detection for new comment threads 2013-09-13 19:52:53 +02:00
Martin Zimmermann
30fa254023 connect to SMTP on-demand 2013-09-13 19:51:56 +02:00
Martin Zimmermann
98ab6d205a anonymize IP if passed as ::ffff.1.2.3.4 correctly 2013-09-13 18:30:51 +02:00
Martin Zimmermann
88a7d40bea send null instead of the empty string 2013-09-13 18:24:24 +02:00
Martin Zimmermann
b744e2fe39 use SSL for https:// 2013-09-13 18:12:32 +02:00
Martin Zimmermann
3eeb686d5f update stylesheet link 2013-09-13 16:15:14 +02:00
Martin Zimmermann
2ee47bd902 return 404 when creating a comment for a non-existing URI 2013-09-13 16:14:13 +02:00
Martin Zimmermann
021b672ee2 use only first 3 bytes from an IPv6 address 2013-09-13 16:13:45 +02:00
Martin Zimmermann
7ed5d6461e add ProxyFix WSGI middleware for real IP and remove dead code 2013-09-13 16:13:08 +02:00
Martin Zimmermann
adb3d40c03 send notification for new comments
This commit also introduces a new db which maps path to thread title.
The title is read by parsing the HTML for a related <h1> tag using
`html5lib`.

You can set up SMTP in your configuration (here the defaults):

    [SMTP]
    host = localhost
    port = 465
    ssl = on
    username =
    password =
    recipient =
    sender =

In short, by default Isso uses a local SMTP server using SSL without
any authentication. An email is send on comment creation to "recipient"
from "Ich schrei sonst <sender>".

This commit also uses a simple ANSI colorization module from my static
blog compiler project.

On server startup, Isso will connect to the SMTP server and fall back to
a null mailer. It also tries to connect to your website, so if that
doesn't work, you probably can't comment on your website either.
2013-09-13 15:21:18 +02:00
Martin Zimmermann
9edd34d079 fix typos 2013-09-12 19:20:31 +02:00
Martin Zimmermann
0f7516edb4 always announce CORS, fix 3218e16 2013-09-12 19:10:38 +02:00
Martin Zimmermann
27022af1e6 update README, added docs/API.md draft 2013-09-12 19:10:03 +02:00
Martin Zimmermann
5759513fcd remove old stuff and trim output from utils.heading 2013-09-12 17:28:44 +02:00
Martin Zimmermann
27ba6d795f extend utils.ago to handle dates beyond 31 days 2013-09-12 17:28:13 +02:00
Martin Zimmermann
63f03e1111 disqus import now sets the comment creation date correctly 2013-09-12 17:27:16 +02:00
Martin Zimmermann
3218e16532 add CORS support
Isso can now run on a separate domain such as comments.example.org
and still serve for blog.example.org using CORS.
2013-09-12 17:26:10 +02:00
Martin Zimmermann
45d4e18aef new /count?uri=path and count.js
A separate (minified) JS to load only the comment count for each
`<a href="...#isso-thread">...</a>` link. If there are no comments,
return a 404, otherwise return the number JSON formatted.

To built `count.ks`, run `r.js -o build.count.js`.
2013-09-12 17:22:37 +02:00
Martin Zimmermann
1105e3e016 don't shrink textarea on blur 2013-09-12 12:28:53 +02:00
Martin Zimmermann
10c65561ed mv /client to /js 2013-09-12 11:46:09 +02:00
Martin Zimmermann
83f7c0201f use almond.js for single file output 2013-09-09 14:44:04 +02:00
Martin Zimmermann
88b77ffa2d show markdown by default 2013-09-09 14:14:27 +02:00
Martin Zimmermann
b65b86d664 fix german utils.ago strings 2013-09-09 14:14:10 +02:00
Martin Zimmermann
9484a8fa6f add heading 'Kommentieren' etc. 2013-09-09 14:13:34 +02:00
Martin Zimmermann
18ebf6f95a disable threading, use processes 2013-09-09 14:13:05 +02:00
Martin Zimmermann
3037f5926d clean imports and remove old code 2013-09-09 13:37:57 +02:00
Martin Zimmermann
56ea90d7e0 JavaScript Identicons (awww), closes #8 2013-09-09 13:27:35 +02:00
Martin Zimmermann
bebda530b6 clear comment that still has references 2013-09-09 13:24:47 +02:00
Martin Zimmermann
413fb0c9a6 automatically update time(ago) every minute 2013-09-09 13:24:03 +02:00
Martin Zimmermann
fa277c98c1 disable scrollIntoView 2013-09-09 13:23:18 +02:00
Martin Zimmermann
20f82dcfcd fix disqus import 2013-09-08 17:37:26 +02:00
Martin Zimmermann
aecab5cf01 scoll into view 2013-09-08 17:24:54 +02:00
Martin Zimmermann
f0c1574c15 remove stale comments from DB, closes #9 2013-09-08 17:21:33 +02:00
Martin Zimmermann
f1ffe444bc don't remove root msg box on submit, but clear fields 2013-09-08 14:17:46 +02:00
Martin Zimmermann
449c838be3 REMOTE_ADDR is not unicode 2013-09-08 14:13:17 +02:00
Martin Zimmermann
5cad8fb8b5 clean db interface and comment model 2013-09-08 13:02:25 +02:00
Martin Zimmermann
c7ee35423b implement db backend for votes/likes #5 2013-09-06 17:19:25 +02:00
Martin Zimmermann
11c6e4d720 remove email column 2013-09-06 15:56:43 +02:00
Martin Zimmermann
59706815e7 add comment.hash to recognize user by email or ip fallback
also: fixed test_comment json.dumps(json.loads(json.dumps(...)))
madness.
2013-09-05 23:09:56 +02:00
Martin Zimmermann
35926037a6 fix tests 2013-09-05 21:13:33 +02:00
Martin Zimmermann
f6271e5cf6 commit work in progress
completely revamp JS client because JS sucks^W^W^W to feature AMD,
require.js, promises and HTML.js.

The comment listing is now more like Disqus and for now comment
retrieval, comment creation and deletion works. Form validation is
rudimentary implemented as well.

replaced Mako with Jinja2 (because... I forgot.), admin interface will
use Bootstrap™ but is not functional yet.

features a progress indicator in case you're sqlite db performs *really*
bad
2013-09-05 19:31:18 +02:00
Martin Zimmermann
7e6fa0438b use argparse and configparser 2013-09-03 13:40:40 +02:00
Martin Zimmermann
2d075f867a move code around™ 2013-09-03 12:15:43 +02:00
Martin Zimmermann
cb20f159fb add bootstrap 2.3.2 2013-09-02 14:58:07 +02:00
Martin Zimmermann
dd4ba9263a refactor all the things (use werkzeug instead of NIH to handle WSGI)
Also: use ?uri=%2Fpath%2F as path indicator.
2013-09-02 14:44:53 +02:00
Martin Zimmermann
76d6d46521 add progress bar to migration 2013-09-02 14:22:08 +02:00
Martin Zimmermann
57fa577e54 whatever I made there 2013-09-01 23:40:55 +02:00
posativ
26c74cb521 admin.js now used isso.js as API
JS is a horrible language. The more you try to modularize and DRY
it, the greater the LoC grows...
2012-12-17 00:06:46 +01:00
posativ
261f2fe18e introduce namespaces for JS and trying to escape the pyramid of doom 2012-12-16 23:29:07 +01:00
posativ
525a2828c5 fix Makefile and move utilities to js/utils.js 2012-12-16 20:29:18 +01:00
posativ
a753045f8b some documentation and move login to /admin/ 2012-12-16 19:54:56 +01:00
posativ
588a8c306b approved comments now move to recent comments 2012-12-16 18:13:03 +01:00
posativ
65c2fce636 better admin 'theme', 304 Not Modified support and minor improvements 2012-12-16 17:59:20 +01:00
posativ
eaaf1f4653 moar syntactic sugar 2012-12-16 13:38:24 +01:00
posativ
8e2e90ed4e add threaded WSGI server mixin to check URL existence on same host :> 2012-12-16 00:46:20 +01:00
posativ
63b990838d fix tests 2012-12-16 00:31:55 +01:00
posativ
a4514e1f91 rewrite using NIH 2012-12-16 00:14:30 +01:00
posativ
440787ff67 fix Augenkrebs in dashboard 2012-10-28 00:57:31 +02:00
posativ
28162d7ca9 edit comment works when comment is still pending 2012-10-28 00:50:09 +02:00
posativ
2e1831f609 show pending status, add some css 2012-10-28 00:39:23 +02:00
posativ
1bafe193ad approve comments 2012-10-28 00:39:22 +02:00
posativ
23232d4f0e fix admin.js 2012-10-28 00:39:22 +02:00
posativ
5d15ab0ea3 use highly sophisticated '2 weeks ago' dates including microformats 2012-10-28 00:39:20 +02:00
posativ
c7d4b5a071 use promise.js -> less code, less indentation, 2 kb less framework 2012-10-25 23:26:20 +02:00
posativ
6f4b02ab12 show deleted comments when they are referenced 2012-10-25 20:45:22 +02:00
posativ
35310300ac add 'edit comment' functionality. Use with care. 2012-10-25 20:09:12 +02:00
posativ
b4708fb284 modify can return plain text and marked up content 2012-10-25 20:08:28 +02:00
posativ
db32d1c7f0 refactor JS and add YUI compression. 2012-10-25 16:20:50 +02:00
posativ
66cc7911f5 limit to 20 by default 2012-10-24 23:56:52 +02:00
posativ
6bb7b8c8d9 admin interface can delete comments :> 2012-10-24 23:22:39 +02:00
posativ
15ead12683 I can't still remember what ASC and DESC means 2012-10-24 20:38:39 +02:00
posativ
7420e6a130 add path to comment class 2012-10-24 20:38:07 +02:00
posativ
05b77f99fe add db.recent(mode, limit) method 2012-10-24 20:09:22 +02:00
posativ
2bfbad39ca begin dashboard using mako templates 2012-10-24 19:53:56 +02:00
posativ
39899dda81 /comment/ -> /1.0/ 2012-10-23 21:09:51 +02:00
posativ
ac6d88f61e isso import FILE can import Disqus export 2012-10-23 20:36:43 +02:00
posativ
ecd4c6b120 fix an edge case, where mallory can delete comments by bo 2012-10-23 16:40:30 +02:00
posativ
3459b7b9ee delete comment works for non-referenced comments now 2012-10-22 00:44:22 +02:00
posativ
d9a9eaf8c5 zero-fill date and add cookie recognition 2012-10-22 00:12:05 +02:00
posativ
10b1b1b470 use unique cookie name 2012-10-21 23:40:47 +02:00
posativ
ae96122ea1 fix issues caused by @moschlar 2012-10-21 23:30:40 +02:00
posativ
d2bc2537a1 remove limit, introduced unnecessary complexity 2012-10-21 22:37:39 +02:00
posativ
3b197c4c3c close form after reply 2012-10-21 22:34:48 +02:00
posativ
d6e4312e47 threaded comments :> 2012-10-21 22:26:05 +02:00
posativ
eee2e43588 refactor and re-indentation 2012-10-21 21:57:36 +02:00
posativ
63f3d6ff2f add date formatting and link to website 2012-10-21 21:05:56 +02:00
posativ
a15338209b basic XSS protection m) 2012-10-21 11:47:57 +02:00
posativ
443eb2bbe1 fix tests 2012-10-21 09:51:32 +02:00
posativ
487d76ba61 add API for different markup languages 2012-10-20 18:12:02 +02:00
posativ
9aeed1a47e client-side draft using qwery, bean, bonzo and domReady 2012-10-20 17:57:01 +02:00
posativ
efa334de39 markdown support (using misaka) 2012-10-20 17:55:29 +02:00
posativ
d30c3c059b sort in chronological order 2012-10-19 21:12:56 +02:00
posativ
f2eff22ff7 circumvent CGI 1.1 specs (PATH_INFO is quoted) 2012-10-19 18:58:55 +02:00
posativ
3cb623e7c2 check if url exists before creating a comment 2012-10-18 16:16:36 +02:00
posativ
2c8c97b2a8 add db.activate function and use UNIX-style permission bits for normal/activated/deleted comments 2012-10-18 15:41:12 +02:00
posativ
f1fb80f5ef add license decoration 2012-10-18 15:05:54 +02:00
posativ
05336728f4 use itsdangerous 2012-10-17 22:43:51 +02:00
posativ
759b304cb5 refactor configuration variables 2012-10-17 18:32:53 +02:00
posativ
27801eef26 delete only when not referenced 2012-10-17 12:22:52 +02:00
posativ
af8fcdab19 most database operations now return Comment object 2012-10-17 12:00:11 +02:00
posativ
3d398341a3 update database requirements 2012-10-17 11:42:21 +02:00
posativ
e2198ed74a add update and delete views 2012-10-17 11:06:26 +02:00
posativ
1b2b4da490 fix db update 2012-10-17 10:56:43 +02:00
posativ
27007547bb return 404 if none found 2012-10-16 22:56:21 +02:00
posativ
5d23bff409 clean json fuckup and add create and get views 2012-10-16 22:52:02 +02:00
posativ
8301f0af78 replace db.initialize with db.__init__ 2012-10-16 21:30:30 +02:00
posativ
98c4b6ccb2 move Comment class to isso.models 2012-10-16 21:07:29 +02:00
posativ
36add653a7 change modified timestamp after update 2012-10-16 21:04:20 +02:00
posativ
633b0bee33 add update, get and delete methods to SQLite adapter 2012-10-16 21:00:10 +02:00
posativ
48cff63d4c add Comment.fromjson and update table definitions 2012-10-16 20:20:59 +02:00
posativ
3bb830e86c add mode for comments (normal, pending, deleted) 2012-10-16 19:42:51 +02:00
posativ
54548d4bd5 docs and input sanitization 2012-10-16 19:32:55 +02:00
posativ
1199424a2b add basic SQLite adapter + tests 2012-10-16 19:11:59 +02:00
posativ
0333f7efb0 first tests and general code layout 2012-10-16 16:18:07 +02:00
posativ
7d905ed4ea initial commit 2012-10-16 15:45:02 +02:00