rename Gittip to Gratipay
@ -1,5 +1,5 @@
|
|||||||
[extractors]
|
[extractors]
|
||||||
spt = gittip.utils.i18n:extract_spt
|
spt = gratipay.utils.i18n:extract_spt
|
||||||
|
|
||||||
[jinja2: **.html]
|
[jinja2: **.html]
|
||||||
[spt: **.spt]
|
[spt: **.spt]
|
||||||
|
8
.gitignore
vendored
@ -1,5 +1,5 @@
|
|||||||
env/
|
env/
|
||||||
gittip.egg-info/
|
gratipay.egg-info/
|
||||||
*~
|
*~
|
||||||
*.pyc
|
*.pyc
|
||||||
local.env
|
local.env
|
||||||
@ -12,11 +12,11 @@ nosetests.xml
|
|||||||
.noseids
|
.noseids
|
||||||
.deps
|
.deps
|
||||||
.sass-cache/
|
.sass-cache/
|
||||||
gittip.css
|
gratipay.css
|
||||||
.vagrant
|
.vagrant
|
||||||
node_modules/
|
node_modules/
|
||||||
.DS_Store
|
.DS_Store
|
||||||
docs/_build
|
docs/_build
|
||||||
docs/gittip
|
docs/gratipay
|
||||||
docs/gittip.rst
|
docs/gratipay.rst
|
||||||
_vimrc_local.vim
|
_vimrc_local.vim
|
||||||
|
@ -7,8 +7,8 @@ install:
|
|||||||
- make env node_modules
|
- make env node_modules
|
||||||
- pip install coveralls
|
- pip install coveralls
|
||||||
before_script:
|
before_script:
|
||||||
- echo "DATABASE_URL=dbname=gittip" | tee -a tests/local.env local.env
|
- echo "DATABASE_URL=dbname=gratipay" | tee -a tests/local.env local.env
|
||||||
- psql -U postgres -c 'CREATE DATABASE "gittip";'
|
- psql -U postgres -c 'CREATE DATABASE "gratipay";'
|
||||||
- if [ "`git rev-parse --abbrev-ref HEAD`" = "master" ]; then rm -rf tests/fixtures; fi
|
- if [ "`git rev-parse --abbrev-ref HEAD`" = "master" ]; then rm -rf tests/fixtures; fi
|
||||||
script: make test
|
script: make test
|
||||||
after_success:
|
after_success:
|
||||||
@ -17,7 +17,7 @@ notifications:
|
|||||||
email: false
|
email: false
|
||||||
irc:
|
irc:
|
||||||
channels:
|
channels:
|
||||||
- "irc.freenode.org#gittip"
|
- "irc.freenode.org#gratipay"
|
||||||
on_success: change
|
on_success: change
|
||||||
on_failure: always
|
on_failure: always
|
||||||
template:
|
template:
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
## Contributing to Gittip
|
## Contributing to Gratipay
|
||||||
|
|
||||||
If you are opening a new issue or submitting a pull request, **go for it!**
|
If you are opening a new issue or submitting a pull request, **go for it!**
|
||||||
Don't be afraid that it's a dumb idea or a duplicate of another issue or an
|
Don't be afraid that it's a dumb idea or a duplicate of another issue or an
|
||||||
unwanted change or whatever. Maybe it is! We're still glad to have you! :^)
|
unwanted change or whatever. Maybe it is! We're still glad to have you! :^)
|
||||||
|
|
||||||
**License.** Gittip is [licensed under
|
**License.** Gratipay is [licensed under
|
||||||
CC0](https://github.com/gittip/www.gittip.com/tree/master/COPYING), i.e.,
|
CC0](https://github.com/gratipay/www.gratipay.com/tree/master/COPYING), i.e.,
|
||||||
it's public domain.
|
it's public domain.
|
||||||
|
|
||||||
**More info.** If you want to really get involved, then check out our full
|
**More info.** If you want to really get involved, then check out our full
|
||||||
documentation for contributors:
|
documentation for contributors:
|
||||||
|
|
||||||
http://building.gittip.com/
|
http://building.gratipay.com/
|
||||||
|
2
COPYING
@ -1,4 +1,4 @@
|
|||||||
Gittip is in the public domain, via the "CC0 1.0 Universal - Public Domain
|
Gratipay is in the public domain, via the "CC0 1.0 Universal - Public Domain
|
||||||
Dedication" from the Creative Commons.
|
Dedication" from the Creative Commons.
|
||||||
|
|
||||||
|
|
||||||
|
20
Dockerfile
@ -1,4 +1,4 @@
|
|||||||
# Dockerfile to build and run Gittip
|
# Dockerfile to build and run Gratipay
|
||||||
# Version 0.1 (April 15, 2014)
|
# Version 0.1 (April 15, 2014)
|
||||||
|
|
||||||
################################################## General Information ##################################################
|
################################################## General Information ##################################################
|
||||||
@ -34,21 +34,21 @@ RUN apt-get -y install \
|
|||||||
|
|
||||||
################################################## Configure Postgres #################################################
|
################################################## Configure Postgres #################################################
|
||||||
|
|
||||||
RUN /etc/init.d/postgresql start && su postgres -c "createuser --superuser root" && su postgres -c "createdb gittip"
|
RUN /etc/init.d/postgresql start && su postgres -c "createuser --superuser root" && su postgres -c "createdb gratipay"
|
||||||
|
|
||||||
################################################# Clone + Setup Gittip ################################################
|
################################################# Clone + Setup Gratipay ################################################
|
||||||
|
|
||||||
RUN cd /srv && wget --quiet https://github.com/gittip/www.gittip.com/archive/master.zip && unzip master.zip
|
RUN cd /srv && wget --quiet https://github.com/gratipay/www.gratipay.com/archive/master.zip && unzip master.zip
|
||||||
RUN cd /srv/www.gittip.com-master && make env && /etc/init.d/postgresql start && make schema && make schema data
|
RUN cd /srv/www.gratipay.com-master && make env && /etc/init.d/postgresql start && make schema && make schema data
|
||||||
|
|
||||||
################################################ Create a Launch Script ###############################################
|
################################################ Create a Launch Script ###############################################
|
||||||
|
|
||||||
RUN echo "#!/bin/bash" >> /usr/bin/gittip
|
RUN echo "#!/bin/bash" >> /usr/bin/gratipay
|
||||||
RUN echo "/etc/init.d/postgresql start" >> /usr/bin/gittip
|
RUN echo "/etc/init.d/postgresql start" >> /usr/bin/gratipay
|
||||||
RUN echo "cd /srv/www.gittip.com-master && make run" >> /usr/bin/gittip
|
RUN echo "cd /srv/www.gratipay.com-master && make run" >> /usr/bin/gratipay
|
||||||
RUN chmod +x /usr/bin/gittip
|
RUN chmod +x /usr/bin/gratipay
|
||||||
|
|
||||||
################################################### Set an Entrypoint #################################################
|
################################################### Set an Entrypoint #################################################
|
||||||
|
|
||||||
ENTRYPOINT ["/usr/bin/gittip"]
|
ENTRYPOINT ["/usr/bin/gratipay"]
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ module.exports = function(grunt) {
|
|||||||
jshintrc: '.jshintrc',
|
jshintrc: '.jshintrc',
|
||||||
|
|
||||||
globals: {
|
globals: {
|
||||||
Gittip: true,
|
Gratipay: true,
|
||||||
_gttp: true,
|
_gttp: true,
|
||||||
gttpURI: true,
|
gttpURI: true,
|
||||||
alert: true
|
alert: true
|
||||||
|
10
Makefile
@ -14,7 +14,7 @@ py_test := $(honcho) -e $(test_env_files) run $(env_bin)/py.test
|
|||||||
env: requirements.txt requirements_tests.txt setup.py
|
env: requirements.txt requirements_tests.txt setup.py
|
||||||
$(python) $(venv) \
|
$(python) $(venv) \
|
||||||
--unzip-setuptools \
|
--unzip-setuptools \
|
||||||
--prompt="[gittip] " \
|
--prompt="[gratipay] " \
|
||||||
--never-download \
|
--never-download \
|
||||||
--extra-search-dir=./vendor/ \
|
--extra-search-dir=./vendor/ \
|
||||||
--distribute \
|
--distribute \
|
||||||
@ -37,18 +37,18 @@ run: env
|
|||||||
PATH=$(env_bin):$(PATH) $(honcho_run) web
|
PATH=$(env_bin):$(PATH) $(honcho_run) web
|
||||||
|
|
||||||
py: env
|
py: env
|
||||||
$(honcho_run) $(env_bin)/python -i -c 'from gittip.wireup import env, db; db = db(env())'
|
$(honcho_run) $(env_bin)/python -i -c 'from gratipay.wireup import env, db; db = db(env())'
|
||||||
|
|
||||||
test-schema: env
|
test-schema: env
|
||||||
$(honcho) -e $(test_env_files) run ./recreate-schema.sh
|
$(honcho) -e $(test_env_files) run ./recreate-schema.sh
|
||||||
|
|
||||||
pyflakes: env
|
pyflakes: env
|
||||||
$(env_bin)/pyflakes bin gittip tests
|
$(env_bin)/pyflakes bin gratipay tests
|
||||||
|
|
||||||
test: test-schema pytest jstest
|
test: test-schema pytest jstest
|
||||||
|
|
||||||
pytest: env
|
pytest: env
|
||||||
$(py_test) --cov gittip ./tests/py/
|
$(py_test) --cov gratipay ./tests/py/
|
||||||
@$(MAKE) --no-print-directory pyflakes
|
@$(MAKE) --no-print-directory pyflakes
|
||||||
|
|
||||||
retest: env
|
retest: env
|
||||||
@ -56,7 +56,7 @@ retest: env
|
|||||||
@$(MAKE) --no-print-directory pyflakes
|
@$(MAKE) --no-print-directory pyflakes
|
||||||
|
|
||||||
test-cov: env
|
test-cov: env
|
||||||
$(py_test) --cov-report html --cov gittip ./tests/py/
|
$(py_test) --cov-report html --cov gratipay ./tests/py/
|
||||||
|
|
||||||
tests: test
|
tests: test
|
||||||
|
|
||||||
|
172
README.md
@ -1,13 +1,13 @@
|
|||||||
# Welcome to Gittip [<img height="26px" src="https://raw.githubusercontent.com/gittip/www.gittip.com/master/www/assets/%25version/gittip.opengraph.png"/>](https://www.gittip.com/)
|
# Welcome to Gratipay [<img height="26px" src="https://raw.githubusercontent.com/gratipay/www.gratipay.com/master/www/assets/%25version/gratipay.opengraph.png"/>](https://www.gratipay.com/)
|
||||||
|
|
||||||
[](https://travis-ci.org/gittip/www.gittip.com)
|
[](https://travis-ci.org/gratipay/www.gratipay.com)
|
||||||
[](https://coveralls.io/r/gittip/www.gittip.com?branch=master)
|
[](https://coveralls.io/r/gratipay/www.gratipay.com?branch=master)
|
||||||
[](https://huboard.com/gittip/www.gittip.com)
|
[](https://huboard.com/gratipay/www.gratipay.com)
|
||||||
[](https://www.bountysource.com/teams/gittip/issues)
|
[](https://www.bountysource.com/teams/gratipay/issues)
|
||||||
|
|
||||||
Gittip is a weekly gift exchange, helping to create a culture of generosity.
|
Gratipay is a weekly gift exchange, helping to create a culture of generosity.
|
||||||
If you'd like to learn more, check out <https://gittip.com/about>.
|
If you'd like to learn more, check out <https://gratipay.com/about>.
|
||||||
If you'd like to contribute to Gittip, check out <http://building.gittip.com>.
|
If you'd like to contribute to Gratipay, check out <http://building.gratipay.com>.
|
||||||
|
|
||||||
Quick Start
|
Quick Start
|
||||||
===========
|
===========
|
||||||
@ -18,10 +18,10 @@ Local
|
|||||||
Given Python 2.7, Postgres 9.3, and a C/make toolchain:
|
Given Python 2.7, Postgres 9.3, and a C/make toolchain:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ git clone git@github.com:gittip/www.gittip.com.git
|
$ git clone git@github.com:gratipay/www.gratipay.com.git
|
||||||
$ cd www.gittip.com
|
$ cd www.gratipay.com
|
||||||
$ sudo -u postgres createuser --superuser $USER
|
$ sudo -u postgres createuser --superuser $USER
|
||||||
$ createdb gittip
|
$ createdb gratipay
|
||||||
$ make schema data
|
$ make schema data
|
||||||
$ make run
|
$ make run
|
||||||
```
|
```
|
||||||
@ -53,8 +53,8 @@ Docker
|
|||||||
Given some version(?) of Docker:
|
Given some version(?) of Docker:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ docker build -t gittip .
|
$ docker build -t gratipay .
|
||||||
$ docker run -p 8537:8537 gittip
|
$ docker run -p 8537:8537 gratipay
|
||||||
```
|
```
|
||||||
|
|
||||||
[Read more](#docker-1).
|
[Read more](#docker-1).
|
||||||
@ -70,7 +70,7 @@ Table of Contents
|
|||||||
- [Vagrant](#vagrant)
|
- [Vagrant](#vagrant)
|
||||||
- [Docker](#docker)
|
- [Docker](#docker)
|
||||||
- [Help!](#help)
|
- [Help!](#help)
|
||||||
- [Configuration](https://github.com/gittip/www.gittip.com/wiki/Configuration)
|
- [Configuration](https://github.com/gratipay/www.gratipay.com/wiki/Configuration)
|
||||||
- [Modifying CSS](#modifying-css)
|
- [Modifying CSS](#modifying-css)
|
||||||
- [Testing](#testing-)
|
- [Testing](#testing-)
|
||||||
- [Setting up a Database](#local-database-setup)
|
- [Setting up a Database](#local-database-setup)
|
||||||
@ -82,15 +82,15 @@ Table of Contents
|
|||||||
Installation
|
Installation
|
||||||
============
|
============
|
||||||
|
|
||||||
Thanks for hacking on Gittip! Be sure to review
|
Thanks for hacking on Gratipay! Be sure to review
|
||||||
[CONTRIBUTING](https://github.com/gittip/www.gittip.com/blob/master/CONTRIBUTING.md#readme)
|
[CONTRIBUTING](https://github.com/gratipay/www.gratipay.com/blob/master/CONTRIBUTING.md#readme)
|
||||||
as well if that's what you're planning to do.
|
as well if that's what you're planning to do.
|
||||||
|
|
||||||
|
|
||||||
Dependencies
|
Dependencies
|
||||||
------------
|
------------
|
||||||
|
|
||||||
Building `www.gittip.com` requires [Python
|
Building `www.gratipay.com` requires [Python
|
||||||
2.7](http://python.org/download/releases/2.7.4/), and a gcc/make toolchain.
|
2.7](http://python.org/download/releases/2.7.4/), and a gcc/make toolchain.
|
||||||
|
|
||||||
All Python library dependencies are bundled in the repo (under `vendor/`). If
|
All Python library dependencies are bundled in the repo (under `vendor/`). If
|
||||||
@ -104,7 +104,7 @@ On Debian or Ubuntu you will need the following packages:
|
|||||||
To configure local Postgres create default role and database:
|
To configure local Postgres create default role and database:
|
||||||
|
|
||||||
$ sudo -u postgres createuser --superuser $USER
|
$ sudo -u postgres createuser --superuser $USER
|
||||||
$ createdb gittip
|
$ createdb gratipay
|
||||||
|
|
||||||
If you are getting an error about `unknown argument: '-mno-fused-madd'` when
|
If you are getting an error about `unknown argument: '-mno-fused-madd'` when
|
||||||
running `make`, then add
|
running `make`, then add
|
||||||
@ -118,8 +118,8 @@ for more information](http://stackoverflow.com/a/22355874/347246)):
|
|||||||
Building
|
Building
|
||||||
--------
|
--------
|
||||||
|
|
||||||
All Python dependencies (including virtualenv) are bundled with Gittip in the
|
All Python dependencies (including virtualenv) are bundled with Gratipay in the
|
||||||
vendor/ directory. Gittip is designed so that you don't manage its
|
vendor/ directory. Gratipay is designed so that you don't manage its
|
||||||
virtualenv directly and you don't download its dependencies at build
|
virtualenv directly and you don't download its dependencies at build
|
||||||
time.
|
time.
|
||||||
|
|
||||||
@ -131,7 +131,7 @@ in a sandbox:
|
|||||||
|
|
||||||
$ make env
|
$ make env
|
||||||
|
|
||||||
If you haven't run Gittip for a while, you can reinstall the dependencies:
|
If you haven't run Gratipay for a while, you can reinstall the dependencies:
|
||||||
|
|
||||||
$ make clean env
|
$ make clean env
|
||||||
|
|
||||||
@ -145,15 +145,15 @@ Launching
|
|||||||
---------
|
---------
|
||||||
|
|
||||||
Once you've installed Python and Postgres and set up a database, you can use
|
Once you've installed Python and Postgres and set up a database, you can use
|
||||||
make to build and launch Gittip:
|
make to build and launch Gratipay:
|
||||||
|
|
||||||
$ make run
|
$ make run
|
||||||
|
|
||||||
If you don't have make, look at the Makefile to see what steps you need
|
If you don't have make, look at the Makefile to see what steps you need
|
||||||
to perform to build and launch Gittip. The Makefile is pretty simple and
|
to perform to build and launch Gratipay. The Makefile is pretty simple and
|
||||||
straightforward.
|
straightforward.
|
||||||
|
|
||||||
If Gittip launches successfully it will look like this:
|
If Gratipay launches successfully it will look like this:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ make run
|
$ make run
|
||||||
@ -181,7 +181,7 @@ pid-1261 thread-140735191843600 (MainThread) show_tracebacks True
|
|||||||
pid-1261 thread-140735191843600 (MainThread) www_root None default
|
pid-1261 thread-140735191843600 (MainThread) www_root None default
|
||||||
pid-1261 thread-140735191843600 (MainThread) www_root www/ environment variable ASPEN_WWW_ROOT=www/
|
pid-1261 thread-140735191843600 (MainThread) www_root www/ environment variable ASPEN_WWW_ROOT=www/
|
||||||
pid-1261 thread-140735191843600 (MainThread) project_root is relative to CWD: '.'.
|
pid-1261 thread-140735191843600 (MainThread) project_root is relative to CWD: '.'.
|
||||||
pid-1261 thread-140735191843600 (MainThread) project_root set to /Users/whit537/personal/gittip/www.gittip.com.
|
pid-1261 thread-140735191843600 (MainThread) project_root set to /Users/whit537/personal/gratipay/www.gratipay.com.
|
||||||
pid-1261 thread-140735191843600 (MainThread) Found plugin for renderer 'jinja2'
|
pid-1261 thread-140735191843600 (MainThread) Found plugin for renderer 'jinja2'
|
||||||
pid-1261 thread-140735191843600 (MainThread) Won't log to Sentry (SENTRY_DSN is empty).
|
pid-1261 thread-140735191843600 (MainThread) Won't log to Sentry (SENTRY_DSN is empty).
|
||||||
pid-1261 thread-140735191843600 (MainThread) Renderers (*ed are unavailable, CAPS is default):
|
pid-1261 thread-140735191843600 (MainThread) Renderers (*ed are unavailable, CAPS is default):
|
||||||
@ -195,45 +195,45 @@ pid-1261 thread-140735191843600 (MainThread) stdlib_template
|
|||||||
You should then find this in your browser at
|
You should then find this in your browser at
|
||||||
[http://localhost:8537/](http://localhost:8537/):
|
[http://localhost:8537/](http://localhost:8537/):
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Congratulations! Sign in using Twitter or GitHub and you're off and
|
Congratulations! Sign in using Twitter or GitHub and you're off and
|
||||||
running. At some point, try [running the test suite](#testing-).
|
running. At some point, try [running the test suite](#testing-).
|
||||||
|
|
||||||
Vagrant
|
Vagrant
|
||||||
-------
|
-------
|
||||||
If you have vagrant installed, you can run gittip by running `vagrant up` from the project directory. Please note that if you ever switch between running gittip on your own machine to vagrant or vice versa, you will need to run `make clean`.
|
If you have vagrant installed, you can run gratipay by running `vagrant up` from the project directory. Please note that if you ever switch between running gratipay on your own machine to vagrant or vice versa, you will need to run `make clean`.
|
||||||
|
|
||||||
If you're using Vagrant for the first time you'll need [Vagrant](http://www.vagrantup.com/) and [VirtualBox](https://www.virtualbox.org/) installed. If you're on Linux you'll need to install `nfs-kernel-server`.
|
If you're using Vagrant for the first time you'll need [Vagrant](http://www.vagrantup.com/) and [VirtualBox](https://www.virtualbox.org/) installed. If you're on Linux you'll need to install `nfs-kernel-server`.
|
||||||
|
|
||||||
The Vagrantfile will download a custom made image from the internet. If you have a slow internet connection, you can download a local copy of this file, by running:
|
The Vagrantfile will download a custom made image from the internet. If you have a slow internet connection, you can download a local copy of this file, by running:
|
||||||
|
|
||||||
`curl http://downloads.gittipllc.netdna-cdn.com/gittip.box`
|
`curl http://downloads.gratipayllc.netdna-cdn.com/gratipay.box`
|
||||||
|
|
||||||
Once downloaded, vagrant will use this local file automatically when you run `vagrant up`. Vagrant is setup to use key based SSH authentication, if you're prompted for a password please use `vagrant`.
|
Once downloaded, vagrant will use this local file automatically when you run `vagrant up`. Vagrant is setup to use key based SSH authentication, if you're prompted for a password please use `vagrant`.
|
||||||
|
|
||||||
**Ubuntu users:** If you experience problems, please see [this
|
**Ubuntu users:** If you experience problems, please see [this
|
||||||
issue](https://github.com/gittip/www.gittip.com/pull/2321#issuecomment-41455169).
|
issue](https://github.com/gratipay/www.gratipay.com/pull/2321#issuecomment-41455169).
|
||||||
As mentioned, you will also need to be wary of projects that are nested
|
As mentioned, you will also need to be wary of projects that are nested
|
||||||
in encrypted directories.
|
in encrypted directories.
|
||||||
|
|
||||||
Docker
|
Docker
|
||||||
------------
|
------------
|
||||||
|
|
||||||
You can also install/run Gittip with Docker.
|
You can also install/run Gratipay with Docker.
|
||||||
|
|
||||||
Either pull the image from the Docker Index:
|
Either pull the image from the Docker Index:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ docker pull citruspi/gittip
|
$ docker pull citruspi/gratipay
|
||||||
```
|
```
|
||||||
|
|
||||||
or build it with the included Dockerfile:
|
or build it with the included Dockerfile:
|
||||||
|
|
||||||
```
|
```
|
||||||
$ git clone git@github.com:gittip/www.gittip.com.git
|
$ git clone git@github.com:gratipay/www.gratipay.com.git
|
||||||
$ cd www.gittip.com
|
$ cd www.gratipay.com
|
||||||
$ docker build -t gittip .
|
$ docker build -t gratipay .
|
||||||
```
|
```
|
||||||
|
|
||||||
Once you have the image, get the Image ID with
|
Once you have the image, get the Image ID with
|
||||||
@ -279,24 +279,24 @@ $ docker kill [container_id]
|
|||||||
Help!
|
Help!
|
||||||
-----
|
-----
|
||||||
|
|
||||||
If you get stuck somewhere along the way, you can find help in the #gittip
|
If you get stuck somewhere along the way, you can find help in the #gratipay
|
||||||
channel on [Freenode](http://webchat.freenode.net/) or in the [issue
|
channel on [Freenode](http://webchat.freenode.net/) or in the [issue
|
||||||
tracker](/gittip/www.gittip.com/issues/new) here on GitHub.
|
tracker](/gratipay/www.gratipay.com/issues/new) here on GitHub.
|
||||||
|
|
||||||
Thanks for installing Gittip! :smiley:
|
Thanks for installing Gratipay! :smiley:
|
||||||
|
|
||||||
|
|
||||||
Modifying CSS
|
Modifying CSS
|
||||||
=============
|
=============
|
||||||
|
|
||||||
We use SCSS, with files stored in `scss/`. All of the individual files are
|
We use SCSS, with files stored in `scss/`. All of the individual files are
|
||||||
combined in `scss/gittip.scss` which itself is compiled by `libsass` in
|
combined in `scss/gratipay.scss` which itself is compiled by `libsass` in
|
||||||
`www/assets/%version/gittip.css.spt` on each request.
|
`www/assets/%version/gratipay.css.spt` on each request.
|
||||||
|
|
||||||
Testing [](https://travis-ci.org/gittip/www.gittip.com)
|
Testing [](https://travis-ci.org/gratipay/www.gratipay.com)
|
||||||
=======
|
=======
|
||||||
|
|
||||||
Please write unit tests for all new code and all code you change. Gittip's
|
Please write unit tests for all new code and all code you change. Gratipay's
|
||||||
test suite uses the py.test test runner, which will be installed into the
|
test suite uses the py.test test runner, which will be installed into the
|
||||||
virtualenv you get by running `make env`. As a rule of thumb, each test case
|
virtualenv you get by running `make env`. As a rule of thumb, each test case
|
||||||
should perform one assertion.
|
should perform one assertion.
|
||||||
@ -311,8 +311,8 @@ database configured in your testing environment.
|
|||||||
To invoke py.test directly you should use the `honcho` utility that comes
|
To invoke py.test directly you should use the `honcho` utility that comes
|
||||||
with the install. First `make tests/env`, activate the virtualenv and then:
|
with the install. First `make tests/env`, activate the virtualenv and then:
|
||||||
|
|
||||||
[gittip] $ cd tests/
|
[gratipay] $ cd tests/
|
||||||
[gittip] $ honcho -e defaults.env,local.env run py.test
|
[gratipay] $ honcho -e defaults.env,local.env run py.test
|
||||||
|
|
||||||
Local Database Setup
|
Local Database Setup
|
||||||
--------------------
|
--------------------
|
||||||
@ -326,15 +326,15 @@ specify a URI to `psql`, and that was added in 9.2.
|
|||||||
+ Mac: use Homerew: `brew install postgres`
|
+ Mac: use Homerew: `brew install postgres`
|
||||||
+ Ubuntu: use Apt: `apt-get install postgresql postgresql-contrib libpq-dev`
|
+ Ubuntu: use Apt: `apt-get install postgresql postgresql-contrib libpq-dev`
|
||||||
|
|
||||||
To setup the instance for gittip's needs run:
|
To setup the instance for gratipay's needs run:
|
||||||
|
|
||||||
$ sudo -u postgres createuser --superuser $USER
|
$ sudo -u postgres createuser --superuser $USER
|
||||||
$ createdb gittip
|
$ createdb gratipay
|
||||||
$ createdb gittip-test
|
$ createdb gratipay-test
|
||||||
|
|
||||||
You can speed up the test suite when using a regular HDD by running:
|
You can speed up the test suite when using a regular HDD by running:
|
||||||
|
|
||||||
$ psql -q gittip-test -c 'alter database "gittip-test" set synchronous_commit to off'
|
$ psql -q gratipay-test -c 'alter database "gratipay-test" set synchronous_commit to off'
|
||||||
|
|
||||||
### Schema
|
### Schema
|
||||||
|
|
||||||
@ -352,7 +352,7 @@ production database as part of deployment.
|
|||||||
|
|
||||||
### Example data
|
### Example data
|
||||||
|
|
||||||
The gittip database created in the last step is empty. To populate it with
|
The gratipay database created in the last step is empty. To populate it with
|
||||||
some fake data, so that more of the site is functional, run this command:
|
some fake data, so that more of the site is functional, run this command:
|
||||||
|
|
||||||
$ make data
|
$ make data
|
||||||
@ -361,37 +361,37 @@ some fake data, so that more of the site is functional, run this command:
|
|||||||
API
|
API
|
||||||
===
|
===
|
||||||
|
|
||||||
The Gittip API is comprised of these six endpoints:
|
The Gratipay API is comprised of these six endpoints:
|
||||||
|
|
||||||
**[/about/charts.json](https://www.gittip.com/about/charts.json)**
|
**[/about/charts.json](https://www.gratipay.com/about/charts.json)**
|
||||||
([source](https://github.com/gittip/www.gittip.com/tree/master/www/about/charts.json.spt))—<i>public</i>—Returns
|
([source](https://github.com/gratipay/www.gratipay.com/tree/master/www/about/charts.json.spt))—<i>public</i>—Returns
|
||||||
an array of objects, one per week, showing aggregate numbers over time. The
|
an array of objects, one per week, showing aggregate numbers over time. The
|
||||||
[charts](https://www.gittip.com/about/charts.html) page uses this.
|
[charts](https://www.gratipay.com/about/charts.html) page uses this.
|
||||||
|
|
||||||
**[/about/paydays.json](https://www.gittip.com/about/paydays.json)**
|
**[/about/paydays.json](https://www.gratipay.com/about/paydays.json)**
|
||||||
([source](https://github.com/gittip/www.gittip.com/tree/master/www/about/paydays.json.spt))—<i>public</i>—Returns
|
([source](https://github.com/gratipay/www.gratipay.com/tree/master/www/about/paydays.json.spt))—<i>public</i>—Returns
|
||||||
an array of objects, one per week, showing aggregate numbers over time. The
|
an array of objects, one per week, showing aggregate numbers over time. The
|
||||||
[charts](https://www.gittip.com/about/charts.html) page used to use this.
|
[charts](https://www.gratipay.com/about/charts.html) page used to use this.
|
||||||
|
|
||||||
**[/about/stats.json](https://www.gittip.com/about/stats.json)**
|
**[/about/stats.json](https://www.gratipay.com/about/stats.json)**
|
||||||
([source](https://github.com/gittip/www.gittip.com/tree/master/www/about/stats.spt))—<i>public</i>—Returns
|
([source](https://github.com/gratipay/www.gratipay.com/tree/master/www/about/stats.spt))—<i>public</i>—Returns
|
||||||
an object giving a point-in-time snapshot of Gittip. The
|
an object giving a point-in-time snapshot of Gratipay. The
|
||||||
[stats](https://www.gittip.com/about/stats.html) page displays the same info.
|
[stats](https://www.gratipay.com/about/stats.html) page displays the same info.
|
||||||
|
|
||||||
**/`%username`/charts.json**
|
**/`%username`/charts.json**
|
||||||
([example](https://www.gittip.com/Gittip/charts.json),
|
([example](https://www.gratipay.com/Gratipay/charts.json),
|
||||||
[source](https://github.com/gittip/www.gittip.com/tree/master/www/%25username/charts.json.spt))—<i>public</i>—Returns
|
[source](https://github.com/gratipay/www.gratipay.com/tree/master/www/%25username/charts.json.spt))—<i>public</i>—Returns
|
||||||
an array of objects, one per week, showing aggregate numbers over time for the
|
an array of objects, one per week, showing aggregate numbers over time for the
|
||||||
given user.
|
given user.
|
||||||
|
|
||||||
**/`%username`/public.json**
|
**/`%username`/public.json**
|
||||||
([example](https://www.gittip.com/Gittip/public.json),
|
([example](https://www.gratipay.com/Gratipay/public.json),
|
||||||
[source](https://github.com/gittip/www.gittip.com/tree/master/www/%25username/public.json.spt))—<i>public</i>—Returns an object with these keys:
|
[source](https://github.com/gratipay/www.gratipay.com/tree/master/www/%25username/public.json.spt))—<i>public</i>—Returns an object with these keys:
|
||||||
|
|
||||||
- "receiving"—an estimate of the amount the given participant will
|
- "receiving"—an estimate of the amount the given participant will
|
||||||
receive this week
|
receive this week
|
||||||
|
|
||||||
- "my_tip"—logged-in user's tip to the Gittip participant in
|
- "my_tip"—logged-in user's tip to the Gratipay participant in
|
||||||
question; possible values are:
|
question; possible values are:
|
||||||
|
|
||||||
- `undefined` (key not present)—there is no logged-in user
|
- `undefined` (key not present)—there is no logged-in user
|
||||||
@ -425,7 +425,7 @@ given user.
|
|||||||
|
|
||||||
|
|
||||||
**/`%username`/tips.json**
|
**/`%username`/tips.json**
|
||||||
([source](https://github.com/gittip/www.gittip.com/tree/master/www/%25username/tips.json.spt))—<i>private</i>—Responds
|
([source](https://github.com/gratipay/www.gratipay.com/tree/master/www/%25username/tips.json.spt))—<i>private</i>—Responds
|
||||||
to `GET` with an array of objects representing your current tips. `POST` the
|
to `GET` with an array of objects representing your current tips. `POST` the
|
||||||
same structure back in order to update tips in bulk (be sure to set
|
same structure back in order to update tips in bulk (be sure to set
|
||||||
`Content-Type` to `application/json` instead of
|
`Content-Type` to `application/json` instead of
|
||||||
@ -437,50 +437,50 @@ querystring (not the body!) with a value of `yes`, `true`, or `1`, then any
|
|||||||
tips not in the array you `POST` will be zeroed out.
|
tips not in the array you `POST` will be zeroed out.
|
||||||
|
|
||||||
NOTE: The amounts must be encoded as a string (rather than a number).
|
NOTE: The amounts must be encoded as a string (rather than a number).
|
||||||
Additionally, currently, the only supported platform is 'gittip'.
|
Additionally, currently, the only supported platform is 'gratipay'.
|
||||||
|
|
||||||
This endpoint requires authentication. Look for your API key on your [profile
|
This endpoint requires authentication. Look for your API key on your [profile
|
||||||
page](https://www.gittip.com/about/me/account), and pass it as the basic auth
|
page](https://www.gratipay.com/about/me/account), and pass it as the basic auth
|
||||||
username. E.g.:
|
username. E.g.:
|
||||||
|
|
||||||
```
|
```
|
||||||
curl https://www.gittip.com/foobar/tips.json \
|
curl https://www.gratipay.com/foobar/tips.json \
|
||||||
-u API_KEY: \
|
-u API_KEY: \
|
||||||
-X POST \
|
-X POST \
|
||||||
-d'[{"username":"bazbuz", "platform":"gittip", "amount": "1.00"}]' \
|
-d'[{"username":"bazbuz", "platform":"gratipay", "amount": "1.00"}]' \
|
||||||
-H"Content-Type: application/json"
|
-H"Content-Type: application/json"
|
||||||
```
|
```
|
||||||
|
|
||||||
API Implementations
|
API Implementations
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
Below are some projects that use the Gittip APIs, that can serve as inspiration
|
Below are some projects that use the Gratipay APIs, that can serve as inspiration
|
||||||
for your project!
|
for your project!
|
||||||
|
|
||||||
- [Drupal: Gittip](https://drupal.org/project/gittip): Includes a Gittip
|
- [Drupal: Gratipay](https://drupal.org/project/gratipay): Includes a Gratipay
|
||||||
giving field type to let you implement the Khan academy model for users on
|
giving field type to let you implement the Khan academy model for users on
|
||||||
your Drupal site.
|
your Drupal site.
|
||||||
|
|
||||||
- [Node.js: Node-Gittip](https://npmjs.org/package/gittip) (also see [Khan
|
- [Node.js: Node-Gratipay](https://npmjs.org/package/gratipay) (also see [Khan
|
||||||
Academy's setup](http://ejohn.org/blog/gittip-at-khan-academy/))
|
Academy's setup](http://ejohn.org/blog/gratipay-at-khan-academy/))
|
||||||
|
|
||||||
- [Ruby: gratitude](https://github.com/JohnKellyFerguson/gratitude): A ruby
|
- [Ruby: gratitude](https://github.com/JohnKellyFerguson/gratitude): A ruby
|
||||||
gem that wraps the Gittip API.
|
gem that wraps the Gratipay API.
|
||||||
|
|
||||||
- [WordPress: WP-Gittip](https://github.com/daankortenbach/WP-Gittip)
|
- [WordPress: WP-Gratipay](https://github.com/daankortenbach/WP-Gratipay)
|
||||||
|
|
||||||
- [hubot-gittip](https://github.com/myplanetdigital/hubot-gittip): A Hubot
|
- [hubot-gratipay](https://github.com/myplanetdigital/hubot-gratipay): A Hubot
|
||||||
script for interacting with a shared Gittip account.
|
script for interacting with a shared Gratipay account.
|
||||||
|
|
||||||
- [gittip-collab](https://github.com/engineyard/gittip-collab): A Khan-style
|
- [gratipay-collab](https://github.com/engineyard/gratipay-collab): A Khan-style
|
||||||
tool for managing a Gittip account as a team.
|
tool for managing a Gratipay account as a team.
|
||||||
|
|
||||||
- [WWW::Gittip](https://metacpan.org/pod/WWW::Gittip): A Perl module
|
- [WWW::Gratipay](https://metacpan.org/pod/WWW::Gratipay): A Perl module
|
||||||
implementing the Gittip API more or less
|
implementing the Gratipay API more or less
|
||||||
|
|
||||||
- [php-curl-class](https://github.com/php-curl-class/php-curl-class/blob/master/examples/gittip_send_tip.php): A php class to tip using the Gittip API.
|
- [php-curl-class](https://github.com/php-curl-class/php-curl-class/blob/master/examples/gratipay_send_tip.php): A php class to tip using the Gratipay API.
|
||||||
|
|
||||||
- [gittip-twisted](https://github.com/TigerND/gittip-twisted): Gittip client
|
- [gratipay-twisted](https://github.com/TigerND/gratipay-twisted): Gratipay client
|
||||||
for the Twisted framework
|
for the Twisted framework
|
||||||
|
|
||||||
|
|
||||||
@ -488,11 +488,11 @@ Glossary
|
|||||||
========
|
========
|
||||||
|
|
||||||
**Account Elsewhere** - An entity's registration on a platform other than
|
**Account Elsewhere** - An entity's registration on a platform other than
|
||||||
Gittip (e.g., Twitter).
|
Gratipay (e.g., Twitter).
|
||||||
|
|
||||||
**Entity** - An entity.
|
**Entity** - An entity.
|
||||||
|
|
||||||
**Participant** - An entity registered with Gittip.
|
**Participant** - An entity registered with Gratipay.
|
||||||
|
|
||||||
**User** - A person using the Gittip website. Can be authenticated or
|
**User** - A person using the Gratipay website. Can be authenticated or
|
||||||
anonymous. If authenticated, the user is guaranteed to also be a participant.
|
anonymous. If authenticated, the user is guaranteed to also be a participant.
|
||||||
|
10
Vagrantfile
vendored
@ -11,11 +11,11 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
|||||||
|
|
||||||
#For now we have a custom built vagrant image. It was built in the following manner:
|
#For now we have a custom built vagrant image. It was built in the following manner:
|
||||||
#-Use 'precise64' as a base.
|
#-Use 'precise64' as a base.
|
||||||
#-perform a 'vagrant up' using this vagrantfile: https://github.com/gittip/www.gittip.com/blob/83312e60c6b31c298ffca61036baa9849044c75e/Vagrantfile
|
#-perform a 'vagrant up' using this vagrantfile: https://github.com/gratipay/www.gratipay.com/blob/83312e60c6b31c298ffca61036baa9849044c75e/Vagrantfile
|
||||||
#-drop database gittip
|
#-drop database gratipay
|
||||||
#-drop role gittip
|
#-drop role gratipay
|
||||||
config.vm.box = "gittip"
|
config.vm.box = "gratipay"
|
||||||
config.vm.box_url = File.exist?("gittip.box") ? "file://gittip.box" : "http://downloads.gittipllc.netdna-cdn.com/gittip.box"
|
config.vm.box_url = File.exist?("gratipay.box") ? "file://gratipay.box" : "http://downloads.gratipayllc.netdna-cdn.com/gratipay.box"
|
||||||
|
|
||||||
# Sync the project directory and expose the app
|
# Sync the project directory and expose the app
|
||||||
config.vm.network "private_network", ip: "172.27.36.119"
|
config.vm.network "private_network", ip: "172.27.36.119"
|
||||||
|
@ -76,8 +76,8 @@ then
|
|||||||
exit "Too many backups!"
|
exit "Too many backups!"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
confirm "Backup the Gittip database to $FILEPATH?"
|
confirm "Backup the Gratipay database to $FILEPATH?"
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
export PGSSLMODE=require
|
export PGSSLMODE=require
|
||||||
pg_dump `heroku config:get DATABASE_URL -a gittip` > $FILEPATH
|
pg_dump `heroku config:get DATABASE_URL -a gratipay` > $FILEPATH
|
||||||
fi
|
fi
|
||||||
|
@ -42,15 +42,15 @@ db_exists() {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ! db_exists gittip-test;
|
if ! db_exists gratipay-test;
|
||||||
then
|
then
|
||||||
createdb gittip-test
|
createdb gratipay-test
|
||||||
psql -q gittip-test -c 'alter database "gittip-test" set synchronous_commit to off'
|
psql -q gratipay-test -c 'alter database "gratipay-test" set synchronous_commit to off'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ! db_exists gittip;
|
if ! db_exists gratipay;
|
||||||
then
|
then
|
||||||
createdb gittip
|
createdb gratipay
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "done"
|
echo "done"
|
||||||
|
@ -9,10 +9,10 @@ interfacing with PayPal's MassPay feature.
|
|||||||
|
|
||||||
This script provides for:
|
This script provides for:
|
||||||
|
|
||||||
1. Computing an input CSV by hitting the Gittip database directly.
|
1. Computing an input CSV by hitting the Gratipay database directly.
|
||||||
2. Computing two output CSVs (one to upload to PayPal, the second to use for POSTing
|
2. Computing two output CSVs (one to upload to PayPal, the second to use for POSTing
|
||||||
the exchanges back to Gittip)
|
the exchanges back to Gratipay)
|
||||||
3. POSTing the exchanges back to Gittip via the HTTP API.
|
3. POSTing the exchanges back to Gratipay via the HTTP API.
|
||||||
|
|
||||||
The idea is that you run steps 1 and 2, then run through the MassPay UI on the
|
The idea is that you run steps 1 and 2, then run through the MassPay UI on the
|
||||||
PayPal website using the appropriate CSV from step 2, then run step 3.
|
PayPal website using the appropriate CSV from step 2, then run step 3.
|
||||||
@ -35,7 +35,7 @@ os.chdir('../masspay')
|
|||||||
ts = datetime.datetime.now().strftime('%Y-%m-%d')
|
ts = datetime.datetime.now().strftime('%Y-%m-%d')
|
||||||
INPUT_CSV = '{}.input.csv'.format(ts)
|
INPUT_CSV = '{}.input.csv'.format(ts)
|
||||||
PAYPAL_CSV = '{}.output.paypal.csv'.format(ts)
|
PAYPAL_CSV = '{}.output.paypal.csv'.format(ts)
|
||||||
GITTIP_CSV = '{}.output.gittip.csv'.format(ts)
|
GITTIP_CSV = '{}.output.gratipay.csv'.format(ts)
|
||||||
|
|
||||||
|
|
||||||
def round_(d):
|
def round_(d):
|
||||||
@ -85,17 +85,17 @@ class Payee(object):
|
|||||||
#
|
#
|
||||||
# 9. We can't.
|
# 9. We can't.
|
||||||
#
|
#
|
||||||
# 10. Our solution is to leave a penny behind in Gittip for
|
# 10. Our solution is to leave a penny behind in Gratipay for
|
||||||
# affected payees.
|
# affected payees.
|
||||||
#
|
#
|
||||||
# 11. BUT ... if we upload 1.25, PayPal upcharges to 1.28. Think about
|
# 11. BUT ... if we upload 1.25, PayPal upcharges to 1.28. Think about
|
||||||
# it.
|
# it.
|
||||||
#
|
#
|
||||||
# See also: https://github.com/gittip/www.gittip.com/issues/1673
|
# See also: https://github.com/gratipay/www.gratipay.com/issues/1673
|
||||||
# https://github.com/gittip/www.gittip.com/issues/2029
|
# https://github.com/gratipay/www.gratipay.com/issues/2029
|
||||||
# https://github.com/gittip/www.gittip.com/issues/2198
|
# https://github.com/gratipay/www.gratipay.com/issues/2198
|
||||||
# https://github.com/gittip/www.gittip.com/pull/2209
|
# https://github.com/gratipay/www.gratipay.com/pull/2209
|
||||||
# https://github.com/gittip/www.gittip.com/issues/2296
|
# https://github.com/gratipay/www.gratipay.com/issues/2296
|
||||||
|
|
||||||
target = net = self.gross
|
target = net = self.gross
|
||||||
while 1:
|
while 1:
|
||||||
@ -118,7 +118,7 @@ class Payee(object):
|
|||||||
|
|
||||||
|
|
||||||
def compute_input_csv():
|
def compute_input_csv():
|
||||||
from gittip import wireup
|
from gratipay import wireup
|
||||||
db = wireup.db(wireup.env())
|
db = wireup.db(wireup.env())
|
||||||
participants = db.all("""
|
participants = db.all("""
|
||||||
|
|
||||||
@ -140,7 +140,7 @@ def compute_input_csv():
|
|||||||
amount = participant.balance - total
|
amount = participant.balance - total
|
||||||
if amount < 0.50:
|
if amount < 0.50:
|
||||||
# Minimum payout of 50 cents. I think that otherwise PayPal upcharges to a penny.
|
# Minimum payout of 50 cents. I think that otherwise PayPal upcharges to a penny.
|
||||||
# See https://github.com/gittip/www.gittip.com/issues/1958.
|
# See https://github.com/gratipay/www.gratipay.com/issues/1958.
|
||||||
continue
|
continue
|
||||||
total_gross += amount
|
total_gross += amount
|
||||||
print("{:<24}{:<32} {:>7} {:>7} {:>7} {:>7}".format( participant.username
|
print("{:<24}{:<32} {:>7} {:>7} {:>7} {:>7}".format( participant.username
|
||||||
@ -166,13 +166,13 @@ def compute_output_csvs():
|
|||||||
assert total_fees + total_net == total_gross
|
assert total_fees + total_net == total_gross
|
||||||
|
|
||||||
paypal_csv = csv.writer(open(PAYPAL_CSV, 'w+'))
|
paypal_csv = csv.writer(open(PAYPAL_CSV, 'w+'))
|
||||||
gittip_csv = csv.writer(open(GITTIP_CSV, 'w+'))
|
gratipay_csv = csv.writer(open(GITTIP_CSV, 'w+'))
|
||||||
print_rule()
|
print_rule()
|
||||||
print("{:<24}{:<32} {:^7} {:^7} {:^7}".format("username", "email", "gross", "fee", "net"))
|
print("{:<24}{:<32} {:^7} {:^7} {:^7}".format("username", "email", "gross", "fee", "net"))
|
||||||
print_rule()
|
print_rule()
|
||||||
for payee in payees:
|
for payee in payees:
|
||||||
paypal_csv.writerow((payee.email, payee.net, "usd"))
|
paypal_csv.writerow((payee.email, payee.net, "usd"))
|
||||||
gittip_csv.writerow(( payee.username
|
gratipay_csv.writerow(( payee.username
|
||||||
, payee.email
|
, payee.email
|
||||||
, payee.gross
|
, payee.gross
|
||||||
, payee.fee
|
, payee.fee
|
||||||
@ -185,21 +185,21 @@ def compute_output_csvs():
|
|||||||
print("{:>64} {:>7} {:>7}".format(total_gross, total_fees, total_net))
|
print("{:>64} {:>7} {:>7}".format(total_gross, total_fees, total_net))
|
||||||
|
|
||||||
|
|
||||||
def post_back_to_gittip():
|
def post_back_to_gratipay():
|
||||||
|
|
||||||
try:
|
try:
|
||||||
gittip_api_key = os.environ['GITTIP_API_KEY']
|
gratipay_api_key = os.environ['GITTIP_API_KEY']
|
||||||
except KeyError:
|
except KeyError:
|
||||||
gittip_api_key = getpass.getpass("Gittip API key: ")
|
gratipay_api_key = getpass.getpass("Gratipay API key: ")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
gittip_base_url = os.environ['GITTIP_BASE_URL']
|
gratipay_base_url = os.environ['GITTIP_BASE_URL']
|
||||||
except KeyError:
|
except KeyError:
|
||||||
gittip_base_url = 'https://www.gittip.com'
|
gratipay_base_url = 'https://www.gratipay.com'
|
||||||
|
|
||||||
nposts = 0
|
nposts = 0
|
||||||
for username, email, gross, fee, net, additional_note in csv.reader(open(GITTIP_CSV)):
|
for username, email, gross, fee, net, additional_note in csv.reader(open(GITTIP_CSV)):
|
||||||
url = '{}/{}/history/record-an-exchange'.format(gittip_base_url, username)
|
url = '{}/{}/history/record-an-exchange'.format(gratipay_base_url, username)
|
||||||
note = 'PayPal MassPay to {}.'.format(email)
|
note = 'PayPal MassPay to {}.'.format(email)
|
||||||
if additional_note:
|
if additional_note:
|
||||||
note += " " + additional_note
|
note += " " + additional_note
|
||||||
@ -207,7 +207,7 @@ def post_back_to_gittip():
|
|||||||
|
|
||||||
data = {'amount': '-' + net, 'fee': fee, 'note': note}
|
data = {'amount': '-' + net, 'fee': fee, 'note': note}
|
||||||
try:
|
try:
|
||||||
response = requests.post(url, auth=(gittip_api_key, ''), data=data)
|
response = requests.post(url, auth=(gratipay_api_key, ''), data=data)
|
||||||
except IncompleteRead:
|
except IncompleteRead:
|
||||||
print('IncompleteRead, proceeding (but double-check!)')
|
print('IncompleteRead, proceeding (but double-check!)')
|
||||||
else:
|
else:
|
||||||
@ -215,12 +215,12 @@ def post_back_to_gittip():
|
|||||||
nposts += 1
|
nposts += 1
|
||||||
else:
|
else:
|
||||||
if response.status_code == 404:
|
if response.status_code == 404:
|
||||||
print('Got 404, is your API key good? {}'.format(gittip_api_key))
|
print('Got 404, is your API key good? {}'.format(gratipay_api_key))
|
||||||
else:
|
else:
|
||||||
print('... resulted in a {} response:'.format(response.status_code))
|
print('... resulted in a {} response:'.format(response.status_code))
|
||||||
print(response.text)
|
print(response.text)
|
||||||
raise SystemExit
|
raise SystemExit
|
||||||
print("POSTed MassPay back to Gittip for {} users.".format(nposts))
|
print("POSTed MassPay back to Gratipay for {} users.".format(nposts))
|
||||||
|
|
||||||
|
|
||||||
def run_report():
|
def run_report():
|
||||||
@ -261,13 +261,13 @@ def main():
|
|||||||
print("Rerun with one of these options:")
|
print("Rerun with one of these options:")
|
||||||
print(" -i - hits db to generate input CSV (needs envvars via heroku + honcho)")
|
print(" -i - hits db to generate input CSV (needs envvars via heroku + honcho)")
|
||||||
print(" -o - computes output CSVs (doesn't need anything but input CSV)")
|
print(" -o - computes output CSVs (doesn't need anything but input CSV)")
|
||||||
print(" -p - posts back to Gittip (prompts for API key)")
|
print(" -p - posts back to Gratipay (prompts for API key)")
|
||||||
elif '-i' in sys.argv:
|
elif '-i' in sys.argv:
|
||||||
compute_input_csv()
|
compute_input_csv()
|
||||||
elif '-o' in sys.argv:
|
elif '-o' in sys.argv:
|
||||||
compute_output_csvs()
|
compute_output_csvs()
|
||||||
elif '-p' in sys.argv:
|
elif '-p' in sys.argv:
|
||||||
post_back_to_gittip()
|
post_back_to_gratipay()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# see https://github.com/gittip/www.gittip.com/issues/1771
|
# see https://github.com/gratipay/www.gratipay.com/issues/1771
|
||||||
|
|
||||||
dump=${1-`ls -r ~/gittip-dumps/????-??-??.dump | head -1`}
|
dump=${1-`ls -r ~/gratipay-dumps/????-??-??.dump | head -1`}
|
||||||
cores=`grep -c ^processor /proc/cpuinfo`
|
cores=`grep -c ^processor /proc/cpuinfo`
|
||||||
echo "Clearing '$USER' database..."
|
echo "Clearing '$USER' database..."
|
||||||
psql -q -c "drop schema public cascade; create schema public;" 2> /dev/null
|
psql -q -c "drop schema public cascade; create schema public;" 2> /dev/null
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
"""This is a command line utility for managing Gittip backups.
|
"""This is a command line utility for managing Gratipay backups.
|
||||||
|
|
||||||
Running this script gets you a `snapper> ` prompt with commands to take backups
|
Running this script gets you a `snapper> ` prompt with commands to take backups
|
||||||
and load them locally. Backups are managed as *.psql files in ../backups/, and
|
and load them locally. Backups are managed as *.psql files in ../backups/, and
|
||||||
they're loaded into a local gittip-bak database. Type 'help' or '?' at the
|
they're loaded into a local gratipay-bak database. Type 'help' or '?' at the
|
||||||
prompt for help.
|
prompt for help.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@ -18,7 +18,7 @@ class Snapper(cmd.Cmd):
|
|||||||
|
|
||||||
prompt = 'snapper> '
|
prompt = 'snapper> '
|
||||||
root = '../backups'
|
root = '../backups'
|
||||||
dbname = 'gittip-bak'
|
dbname = 'gratipay-bak'
|
||||||
|
|
||||||
def do_EOF(self, line):
|
def do_EOF(self, line):
|
||||||
raise KeyboardInterrupt
|
raise KeyboardInterrupt
|
||||||
|
@ -10,7 +10,7 @@ import time
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
from gittip import wireup
|
from gratipay import wireup
|
||||||
from requests_oauthlib import OAuth1
|
from requests_oauthlib import OAuth1
|
||||||
|
|
||||||
db = wireup.db(wireup.env())
|
db = wireup.db(wireup.env())
|
||||||
@ -59,7 +59,7 @@ def update_twitter():
|
|||||||
|
|
||||||
for user_info in users:
|
for user_info in users:
|
||||||
|
|
||||||
# flatten per upsert method in gittip/elsewhere/__init__.py
|
# flatten per upsert method in gratipay/elsewhere/__init__.py
|
||||||
for k, v in user_info.items():
|
for k, v in user_info.items():
|
||||||
user_info[k] = unicode(v)
|
user_info[k] = unicode(v)
|
||||||
|
|
||||||
@ -131,7 +131,7 @@ def update_github():
|
|||||||
|
|
||||||
user_info = response.json()
|
user_info = response.json()
|
||||||
|
|
||||||
# flatten per upsert method in gittip/elsewhere/__init__.py
|
# flatten per upsert method in gratipay/elsewhere/__init__.py
|
||||||
for k, v in user_info.items():
|
for k, v in user_info.items():
|
||||||
user_info[k] = unicode(v)
|
user_info[k] = unicode(v)
|
||||||
|
|
||||||
|
@ -7,11 +7,11 @@ import threading
|
|||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
|
|
||||||
import gittip
|
import gratipay
|
||||||
import gittip.wireup
|
import gratipay.wireup
|
||||||
from gittip import canonize, utils
|
from gratipay import canonize, utils
|
||||||
from gittip.security import authentication, csrf, x_frame_options
|
from gratipay.security import authentication, csrf, x_frame_options
|
||||||
from gittip.utils import cache_static, i18n, set_cookie, timer
|
from gratipay.utils import cache_static, i18n, set_cookie, timer
|
||||||
|
|
||||||
|
|
||||||
import aspen
|
import aspen
|
||||||
@ -56,16 +56,16 @@ website.renderer_factories['jinja2'].Renderer.global_context = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
env = website.env = gittip.wireup.env()
|
env = website.env = gratipay.wireup.env()
|
||||||
gittip.wireup.canonical(env)
|
gratipay.wireup.canonical(env)
|
||||||
website.db = gittip.wireup.db(env)
|
website.db = gratipay.wireup.db(env)
|
||||||
website.mail = gittip.wireup.mail(env)
|
website.mail = gratipay.wireup.mail(env)
|
||||||
gittip.wireup.billing(env)
|
gratipay.wireup.billing(env)
|
||||||
gittip.wireup.username_restrictions(website)
|
gratipay.wireup.username_restrictions(website)
|
||||||
gittip.wireup.nanswers(env)
|
gratipay.wireup.nanswers(env)
|
||||||
gittip.wireup.other_stuff(website, env)
|
gratipay.wireup.other_stuff(website, env)
|
||||||
gittip.wireup.accounts_elsewhere(website, env)
|
gratipay.wireup.accounts_elsewhere(website, env)
|
||||||
tell_sentry = website.tell_sentry = gittip.wireup.make_sentry_teller(env)
|
tell_sentry = website.tell_sentry = gratipay.wireup.make_sentry_teller(env)
|
||||||
|
|
||||||
# The homepage wants expensive queries. Let's periodically select into an
|
# The homepage wants expensive queries. Let's periodically select into an
|
||||||
# intermediate table.
|
# intermediate table.
|
||||||
@ -96,7 +96,7 @@ cron(env.check_db_every, website.db.self_check)
|
|||||||
def add_stuff_to_context(request):
|
def add_stuff_to_context(request):
|
||||||
request.context['username'] = None
|
request.context['username'] = None
|
||||||
|
|
||||||
# Helpers for global call to action to support Gittip itself.
|
# Helpers for global call to action to support Gratipay itself.
|
||||||
user = request.context.get('user')
|
user = request.context.get('user')
|
||||||
p = user.participant if user else None
|
p = user.participant if user else None
|
||||||
if p and p.is_free_rider is None:
|
if p and p.is_free_rider is None:
|
||||||
@ -153,7 +153,7 @@ algorithm.functions = [ timer.start
|
|||||||
, tell_sentry
|
, tell_sentry
|
||||||
, algorithm['get_response_for_exception']
|
, algorithm['get_response_for_exception']
|
||||||
|
|
||||||
, gittip.outbound
|
, gratipay.outbound
|
||||||
, authentication.outbound
|
, authentication.outbound
|
||||||
, csrf.outbound
|
, csrf.outbound
|
||||||
, cache_static.outbound
|
, cache_static.outbound
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
DATABASE_URL="dbname=gittip"
|
DATABASE_URL="dbname=gratipay"
|
||||||
|
|
||||||
PYTHONDONTWRITEBYTECODE=true
|
PYTHONDONTWRITEBYTECODE=true
|
||||||
PORT=8537
|
PORT=8537
|
||||||
|
@ -27,10 +27,10 @@ help:
|
|||||||
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf gittip* $(BUILDDIR)/*
|
rm -rf gratipay* $(BUILDDIR)/*
|
||||||
|
|
||||||
rst:
|
rst:
|
||||||
AUTOLIB_LIBRARY_ROOT=../gittip ./autolib.py
|
AUTOLIB_LIBRARY_ROOT=../gratipay ./autolib.py
|
||||||
|
|
||||||
html:
|
html:
|
||||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||||
|
22
docs/conf.py
@ -1,6 +1,6 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
#
|
#
|
||||||
# Gittip documentation build configuration file, created by
|
# Gratipay documentation build configuration file, created by
|
||||||
# sphinx-quickstart on Thu Aug 8 23:20:15 2013.
|
# sphinx-quickstart on Thu Aug 8 23:20:15 2013.
|
||||||
#
|
#
|
||||||
# This file is execfile()d with the current directory set to its containing dir.
|
# This file is execfile()d with the current directory set to its containing dir.
|
||||||
@ -40,8 +40,8 @@ source_suffix = '.rst'
|
|||||||
master_doc = 'index'
|
master_doc = 'index'
|
||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = u'Gittip'
|
project = u'Gratipay'
|
||||||
copyright = u'2013, Gittip, LLC'
|
copyright = u'2013, Gratipay, LLC'
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
# |version| and |release|, also used in various other places throughout the
|
# |version| and |release|, also used in various other places throughout the
|
||||||
@ -93,7 +93,7 @@ pygments_style = 'sphinx'
|
|||||||
# -- Generate RST files -------------------------------------------------------
|
# -- Generate RST files -------------------------------------------------------
|
||||||
|
|
||||||
# We do this in here instead of in the Makefile so that RTD picks this up.
|
# We do this in here instead of in the Makefile so that RTD picks this up.
|
||||||
os.environ['AUTOLIB_LIBRARY_ROOT'] = '../gittip'
|
os.environ['AUTOLIB_LIBRARY_ROOT'] = '../gratipay'
|
||||||
os.system("./autolib.py")
|
os.system("./autolib.py")
|
||||||
|
|
||||||
|
|
||||||
@ -174,7 +174,7 @@ html_static_path = ['_static']
|
|||||||
#html_file_suffix = None
|
#html_file_suffix = None
|
||||||
|
|
||||||
# Output file base name for HTML help builder.
|
# Output file base name for HTML help builder.
|
||||||
htmlhelp_basename = 'Gittipdoc'
|
htmlhelp_basename = 'Gratipaydoc'
|
||||||
|
|
||||||
|
|
||||||
# -- Options for LaTeX output --------------------------------------------------
|
# -- Options for LaTeX output --------------------------------------------------
|
||||||
@ -193,8 +193,8 @@ latex_elements = {
|
|||||||
# Grouping the document tree into LaTeX files. List of tuples
|
# Grouping the document tree into LaTeX files. List of tuples
|
||||||
# (source start file, target name, title, author, documentclass [howto/manual]).
|
# (source start file, target name, title, author, documentclass [howto/manual]).
|
||||||
latex_documents = [
|
latex_documents = [
|
||||||
('index', 'Gittip.tex', u'Gittip Documentation',
|
('index', 'Gratipay.tex', u'Gratipay Documentation',
|
||||||
u'Gittip, LLC', 'manual'),
|
u'Gratipay, LLC', 'manual'),
|
||||||
]
|
]
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top of
|
# The name of an image file (relative to this directory) to place at the top of
|
||||||
@ -223,8 +223,8 @@ latex_documents = [
|
|||||||
# One entry per manual page. List of tuples
|
# One entry per manual page. List of tuples
|
||||||
# (source start file, name, description, authors, manual section).
|
# (source start file, name, description, authors, manual section).
|
||||||
man_pages = [
|
man_pages = [
|
||||||
('index', 'gittip', u'Gittip Documentation',
|
('index', 'gratipay', u'Gratipay Documentation',
|
||||||
[u'Gittip, LLC'], 1)
|
[u'Gratipay, LLC'], 1)
|
||||||
]
|
]
|
||||||
|
|
||||||
# If true, show URL addresses after external links.
|
# If true, show URL addresses after external links.
|
||||||
@ -237,8 +237,8 @@ man_pages = [
|
|||||||
# (source start file, target name, title, author,
|
# (source start file, target name, title, author,
|
||||||
# dir menu entry, description, category)
|
# dir menu entry, description, category)
|
||||||
texinfo_documents = [
|
texinfo_documents = [
|
||||||
('index', 'Gittip', u'Gittip Documentation',
|
('index', 'Gratipay', u'Gratipay Documentation',
|
||||||
u'Gittip, LLC', 'Gittip', 'One line description of project.',
|
u'Gratipay, LLC', 'Gratipay', 'One line description of project.',
|
||||||
'Miscellaneous'),
|
'Miscellaneous'),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
www.gittip.com
|
www.gratipay.com
|
||||||
==============
|
==============
|
||||||
|
|
||||||
Welcome! This is the documentation for programmers working on `www.gittip.com`_
|
Welcome! This is the documentation for programmers working on `www.gratipay.com`_
|
||||||
(not to be confused with programmers working with Gittip's `web API`_).
|
(not to be confused with programmers working with Gratipay's `web API`_).
|
||||||
|
|
||||||
.. _www.gittip.com: https://github.com/gittip/www.gittip.com
|
.. _www.gratipay.com: https://github.com/gratipay/www.gratipay.com
|
||||||
.. _web API: https://github.com/gittip/www.gittip.com#api
|
.. _web API: https://github.com/gratipay/www.gratipay.com#api
|
||||||
|
|
||||||
|
|
||||||
DB Schema
|
DB Schema
|
||||||
@ -14,12 +14,12 @@ DB Schema
|
|||||||
is_suspipicous on participant can be None, True or False. It represents unknown,
|
is_suspipicous on participant can be None, True or False. It represents unknown,
|
||||||
blacklisted or whitelisted user.
|
blacklisted or whitelisted user.
|
||||||
|
|
||||||
* whitelisted can transfer money out of gittip
|
* whitelisted can transfer money out of gratipay
|
||||||
* unknown can move money within gittip
|
* unknown can move money within gratipay
|
||||||
* blacklisted cannot do anything
|
* blacklisted cannot do anything
|
||||||
|
|
||||||
|
|
||||||
The exchanges table records movements of money into and out of Gittip. The
|
The exchanges table records movements of money into and out of Gratipay. The
|
||||||
``amount`` column shows a positive amount for payins and a negative amount for
|
``amount`` column shows a positive amount for payins and a negative amount for
|
||||||
payouts. The ``fee`` column is always positive. For both payins and payouts,
|
payouts. The ``fee`` column is always positive. For both payins and payouts,
|
||||||
the ``amount`` does not include the ``fee`` (e.g., a $10 payin would result in
|
the ``amount`` does not include the ``fee`` (e.g., a $10 payin would result in
|
||||||
@ -33,4 +33,4 @@ Contents
|
|||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
||||||
gittip Python library <gittip>
|
gratipay Python library <gratipay>
|
||||||
|
@ -115,9 +115,9 @@ if "%1" == "qthelp" (
|
|||||||
echo.
|
echo.
|
||||||
echo.Build finished; now you can run "qcollectiongenerator" with the ^
|
echo.Build finished; now you can run "qcollectiongenerator" with the ^
|
||||||
.qhcp project file in %BUILDDIR%/qthelp, like this:
|
.qhcp project file in %BUILDDIR%/qthelp, like this:
|
||||||
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Gittip.qhcp
|
echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Gratipay.qhcp
|
||||||
echo.To view the help file:
|
echo.To view the help file:
|
||||||
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Gittip.ghc
|
echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Gratipay.ghc
|
||||||
goto end
|
goto end
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
"""\
|
"""\
|
||||||
Gittip
|
Gratipay
|
||||||
~~~~~~
|
~~~~~~
|
||||||
|
|
||||||
A personal funding platform.
|
A personal funding platform.
|
||||||
@ -10,7 +10,7 @@ Dependencies:
|
|||||||
- Postgresql 9.2
|
- Postgresql 9.2
|
||||||
|
|
||||||
To run:
|
To run:
|
||||||
$ gittip.py
|
$ gratipay.py
|
||||||
|
|
||||||
This will also initialize a local environment on the first run.
|
This will also initialize a local environment on the first run.
|
||||||
"""
|
"""
|
||||||
@ -88,7 +88,7 @@ def init_virtualenv():
|
|||||||
|
|
||||||
shell('python', virtualenv_path,
|
shell('python', virtualenv_path,
|
||||||
'--unzip-setuptools',
|
'--unzip-setuptools',
|
||||||
'--prompt="[gittip] "',
|
'--prompt="[gratipay] "',
|
||||||
'--never-download',
|
'--never-download',
|
||||||
'--extra-search-dir=' + vendor_path,
|
'--extra-search-dir=' + vendor_path,
|
||||||
'--distribute',
|
'--distribute',
|
@ -1,4 +1,4 @@
|
|||||||
"""This is the Python library behind www.gittip.com.
|
"""This is the Python library behind www.gratipay.com.
|
||||||
"""
|
"""
|
||||||
import datetime
|
import datetime
|
||||||
import locale
|
import locale
|
||||||
@ -45,7 +45,7 @@ class NotSane(Exception):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
db = None # This global is wired in wireup. It's an instance of
|
db = None # This global is wired in wireup. It's an instance of
|
||||||
# gittip.postgres.PostgresManager.
|
# gratipay.postgres.PostgresManager.
|
||||||
|
|
||||||
|
|
||||||
MAX_TIP_SINGULAR = Decimal('100.00')
|
MAX_TIP_SINGULAR = Decimal('100.00')
|
||||||
@ -89,5 +89,5 @@ def outbound(request, response, website):
|
|||||||
version = website.version
|
version = website.version
|
||||||
|
|
||||||
# Set misc headers for the website
|
# Set misc headers for the website
|
||||||
response.headers['X-Gittip-Version'] = version
|
response.headers['X-Gratipay-Version'] = version
|
||||||
response.headers['Content-Language'] = 'en'
|
response.headers['Content-Language'] = 'en'
|
@ -197,7 +197,7 @@ class BalancedThing(object):
|
|||||||
break
|
break
|
||||||
|
|
||||||
if out is None:
|
if out is None:
|
||||||
# Default to ''; see https://github.com/gittip/www.gittip.com/issues/2161.
|
# Default to ''; see https://github.com/gratipay/www.gratipay.com/issues/2161.
|
||||||
out = ''
|
out = ''
|
||||||
|
|
||||||
return out
|
return out
|
||||||
@ -244,7 +244,7 @@ class BalancedCard(BalancedThing):
|
|||||||
'country': 'meta.country',
|
'country': 'meta.country',
|
||||||
'city_town': 'meta.city_town',
|
'city_town': 'meta.city_town',
|
||||||
'zip': 'address.postal_code',
|
'zip': 'address.postal_code',
|
||||||
# gittip is saving the state in the meta field
|
# gratipay is saving the state in the meta field
|
||||||
# for compatibility with legacy customers
|
# for compatibility with legacy customers
|
||||||
'state': 'meta.region',
|
'state': 'meta.region',
|
||||||
'last4': 'number',
|
'last4': 'number',
|
@ -1,4 +1,4 @@
|
|||||||
"""Functions for moving money between Gittip and the outside world.
|
"""Functions for moving money between Gratipay and the outside world.
|
||||||
"""
|
"""
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
@ -8,9 +8,9 @@ import balanced
|
|||||||
|
|
||||||
from aspen import log
|
from aspen import log
|
||||||
from aspen.utils import typecheck
|
from aspen.utils import typecheck
|
||||||
from gittip.exceptions import NegativeBalance, NoBalancedCustomerHref, NotWhitelisted
|
from gratipay.exceptions import NegativeBalance, NoBalancedCustomerHref, NotWhitelisted
|
||||||
from gittip.models import check_db
|
from gratipay.models import check_db
|
||||||
from gittip.models.participant import Participant
|
from gratipay.models.participant import Participant
|
||||||
|
|
||||||
|
|
||||||
# https://docs.balancedpayments.com/1.1/api/customers/
|
# https://docs.balancedpayments.com/1.1/api/customers/
|
||||||
@ -41,7 +41,7 @@ def customer_from_href(href):
|
|||||||
|
|
||||||
# Balanced has a $0.50 minimum. We go even higher to avoid onerous
|
# Balanced has a $0.50 minimum. We go even higher to avoid onerous
|
||||||
# per-transaction fees. See:
|
# per-transaction fees. See:
|
||||||
# https://github.com/gittip/www.gittip.com/issues/167
|
# https://github.com/gratipay/www.gratipay.com/issues/167
|
||||||
|
|
||||||
MINIMUM_CHARGE = Decimal("9.41")
|
MINIMUM_CHARGE = Decimal("9.41")
|
||||||
MINIMUM_CREDIT = Decimal("10.00")
|
MINIMUM_CREDIT = Decimal("10.00")
|
||||||
@ -82,7 +82,7 @@ def ach_credit(db, participant, withhold, minimum_credit=MINIMUM_CREDIT):
|
|||||||
|
|
||||||
# Compute the amount to credit them.
|
# Compute the amount to credit them.
|
||||||
# ==================================
|
# ==================================
|
||||||
# Leave money in Gittip to cover their obligations next week (as these
|
# Leave money in Gratipay to cover their obligations next week (as these
|
||||||
# currently stand).
|
# currently stand).
|
||||||
|
|
||||||
balance = participant.balance
|
balance = participant.balance
|
||||||
@ -152,7 +152,7 @@ def ach_credit(db, participant, withhold, minimum_credit=MINIMUM_CREDIT):
|
|||||||
def create_card_hold(db, participant, amount):
|
def create_card_hold(db, participant, amount):
|
||||||
"""Create a hold on the participant's credit card.
|
"""Create a hold on the participant's credit card.
|
||||||
|
|
||||||
Amount should be the nominal amount. We'll compute Gittip's fee below
|
Amount should be the nominal amount. We'll compute Gratipay's fee below
|
||||||
this function and add it to amount to end up with charge_amount.
|
this function and add it to amount to end up with charge_amount.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@ -270,7 +270,7 @@ def record_exchange(db, kind, amount, fee, participant, status):
|
|||||||
Records in the exchanges table have these characteristics:
|
Records in the exchanges table have these characteristics:
|
||||||
|
|
||||||
amount It's negative for credits (representing an outflow from
|
amount It's negative for credits (representing an outflow from
|
||||||
Gittip to you) and positive for charges.
|
Gratipay to you) and positive for charges.
|
||||||
The sign is how we differentiate the two in, e.g., the
|
The sign is how we differentiate the two in, e.g., the
|
||||||
history page.
|
history page.
|
||||||
|
|
@ -1,7 +1,7 @@
|
|||||||
"""This is Gittip's payday algorithm.
|
"""This is Gratipay's payday algorithm.
|
||||||
|
|
||||||
Exchanges (moving money between Gittip and the outside world) and transfers
|
Exchanges (moving money between Gratipay and the outside world) and transfers
|
||||||
(moving money amongst Gittip users) happen within an isolated event called
|
(moving money amongst Gratipay users) happen within an isolated event called
|
||||||
payday. This event has duration (it's not punctiliar).
|
payday. This event has duration (it's not punctiliar).
|
||||||
|
|
||||||
Payday is designed to be crash-resistant. Everything that can be rolled back
|
Payday is designed to be crash-resistant. Everything that can be rolled back
|
||||||
@ -17,11 +17,11 @@ from balanced import CardHold
|
|||||||
|
|
||||||
import aspen.utils
|
import aspen.utils
|
||||||
from aspen import log
|
from aspen import log
|
||||||
from gittip.billing.exchanges import (
|
from gratipay.billing.exchanges import (
|
||||||
ach_credit, cancel_card_hold, capture_card_hold, create_card_hold, upcharge
|
ach_credit, cancel_card_hold, capture_card_hold, create_card_hold, upcharge
|
||||||
)
|
)
|
||||||
from gittip.exceptions import NegativeBalance
|
from gratipay.exceptions import NegativeBalance
|
||||||
from gittip.models import check_db
|
from gratipay.models import check_db
|
||||||
from psycopg2 import IntegrityError
|
from psycopg2 import IntegrityError
|
||||||
|
|
||||||
|
|
||||||
@ -32,7 +32,7 @@ class NoPayday(Exception):
|
|||||||
class Payday(object):
|
class Payday(object):
|
||||||
"""Represent an abstract event during which money is moved.
|
"""Represent an abstract event during which money is moved.
|
||||||
|
|
||||||
On Payday, we want to use a participant's Gittip balance to settle their
|
On Payday, we want to use a participant's Gratipay balance to settle their
|
||||||
tips due (pulling in more money via credit card as needed), but we only
|
tips due (pulling in more money via credit card as needed), but we only
|
||||||
want to use their balance at the start of Payday. Balance changes should be
|
want to use their balance at the start of Payday. Balance changes should be
|
||||||
atomic globally per-Payday.
|
atomic globally per-Payday.
|
@ -1,6 +1,6 @@
|
|||||||
"""This is installed as `payday`.
|
"""This is installed as `payday`.
|
||||||
"""
|
"""
|
||||||
from gittip import wireup
|
from gratipay import wireup
|
||||||
|
|
||||||
|
|
||||||
def payday():
|
def payday():
|
||||||
@ -18,10 +18,10 @@ def payday():
|
|||||||
# Lazily import the billing module.
|
# Lazily import the billing module.
|
||||||
# =================================
|
# =================================
|
||||||
# This dodges a problem where db in billing is None if we import it from
|
# This dodges a problem where db in billing is None if we import it from
|
||||||
# gittip before calling wireup.billing.
|
# gratipay before calling wireup.billing.
|
||||||
|
|
||||||
from gittip.billing.exchanges import sync_with_balanced
|
from gratipay.billing.exchanges import sync_with_balanced
|
||||||
from gittip.billing.payday import Payday
|
from gratipay.billing.payday import Payday
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with db.get_cursor() as cursor:
|
with db.get_cursor() as cursor:
|
@ -13,7 +13,7 @@ from aspen import log, Response
|
|||||||
from aspen.utils import to_age, utc
|
from aspen.utils import to_age, utc
|
||||||
from requests_oauthlib import OAuth1Session, OAuth2Session
|
from requests_oauthlib import OAuth1Session, OAuth2Session
|
||||||
|
|
||||||
from gittip.elsewhere._extractors import not_available
|
from gratipay.elsewhere._extractors import not_available
|
||||||
|
|
||||||
|
|
||||||
ACTIONS = {'opt-in', 'connect', 'lock', 'unlock'}
|
ACTIONS = {'opt-in', 'connect', 'lock', 'unlock'}
|
||||||
@ -24,7 +24,7 @@ class UnknownAccountElsewhere(Exception): pass
|
|||||||
|
|
||||||
|
|
||||||
class PlatformRegistry(object):
|
class PlatformRegistry(object):
|
||||||
"""Registry of platforms we support connecting to Gittip accounts.
|
"""Registry of platforms we support connecting to Gratipay accounts.
|
||||||
"""
|
"""
|
||||||
def __init__(self, platforms):
|
def __init__(self, platforms):
|
||||||
self.__dict__ = OrderedDict((p.name, p) for p in platforms)
|
self.__dict__ = OrderedDict((p.name, p) for p in platforms)
|
@ -1,8 +1,8 @@
|
|||||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
|
||||||
from gittip.elsewhere import PlatformOAuth1
|
from gratipay.elsewhere import PlatformOAuth1
|
||||||
from gittip.elsewhere._extractors import any_key, key, not_available
|
from gratipay.elsewhere._extractors import any_key, key, not_available
|
||||||
from gittip.elsewhere._paginators import keys_paginator
|
from gratipay.elsewhere._paginators import keys_paginator
|
||||||
|
|
||||||
|
|
||||||
class Bitbucket(PlatformOAuth1):
|
class Bitbucket(PlatformOAuth1):
|
@ -10,8 +10,8 @@ from urlparse import parse_qs, urlparse
|
|||||||
import requests
|
import requests
|
||||||
|
|
||||||
from aspen import Response
|
from aspen import Response
|
||||||
from gittip.elsewhere import Platform
|
from gratipay.elsewhere import Platform
|
||||||
from gittip.elsewhere._extractors import key, not_available
|
from gratipay.elsewhere._extractors import key, not_available
|
||||||
|
|
||||||
|
|
||||||
class Bountysource(Platform):
|
class Bountysource(Platform):
|
||||||
@ -48,7 +48,7 @@ class Bountysource(Platform):
|
|||||||
redirect_url=self.callback_url+'?query_id='+query_id,
|
redirect_url=self.callback_url+'?query_id='+query_id,
|
||||||
external_access_token=token
|
external_access_token=token
|
||||||
)
|
)
|
||||||
url = self.auth_url+'/auth/gittip/confirm?'+urlencode(params)
|
url = self.auth_url+'/auth/gratipay/confirm?'+urlencode(params)
|
||||||
return url, query_id, ''
|
return url, query_id, ''
|
||||||
|
|
||||||
def get_query_id(self, querystring):
|
def get_query_id(self, querystring):
|
@ -1,8 +1,8 @@
|
|||||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
|
||||||
from gittip.elsewhere import PlatformOAuth2
|
from gratipay.elsewhere import PlatformOAuth2
|
||||||
from gittip.elsewhere._extractors import key
|
from gratipay.elsewhere._extractors import key
|
||||||
from gittip.elsewhere._paginators import header_links_paginator
|
from gratipay.elsewhere._paginators import header_links_paginator
|
||||||
|
|
||||||
|
|
||||||
class GitHub(PlatformOAuth2):
|
class GitHub(PlatformOAuth2):
|
@ -1,7 +1,7 @@
|
|||||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
|
||||||
from gittip.elsewhere import PlatformOAuth1
|
from gratipay.elsewhere import PlatformOAuth1
|
||||||
from gittip.elsewhere._extractors import not_available, xpath
|
from gratipay.elsewhere._extractors import not_available, xpath
|
||||||
|
|
||||||
|
|
||||||
class OpenStreetMap(PlatformOAuth1):
|
class OpenStreetMap(PlatformOAuth1):
|
@ -1,7 +1,7 @@
|
|||||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
|
||||||
from gittip.elsewhere import PlatformOAuth1
|
from gratipay.elsewhere import PlatformOAuth1
|
||||||
from gittip.elsewhere._extractors import key, not_available
|
from gratipay.elsewhere._extractors import key, not_available
|
||||||
|
|
||||||
|
|
||||||
class Twitter(PlatformOAuth1):
|
class Twitter(PlatformOAuth1):
|
@ -1,7 +1,7 @@
|
|||||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
|
||||||
from gittip.elsewhere import PlatformOAuth2
|
from gratipay.elsewhere import PlatformOAuth2
|
||||||
from gittip.elsewhere._extractors import key
|
from gratipay.elsewhere._extractors import key
|
||||||
|
|
||||||
|
|
||||||
class Venmo(PlatformOAuth2):
|
class Venmo(PlatformOAuth2):
|
@ -30,7 +30,7 @@ class ProblemChangingNumber(Exception):
|
|||||||
return self.msg
|
return self.msg
|
||||||
|
|
||||||
class HasBigTips(ProblemChangingNumber):
|
class HasBigTips(ProblemChangingNumber):
|
||||||
msg = "You receive tips too large for an individual. Please contact support@gittip.com."
|
msg = "You receive tips too large for an individual. Please contact support@gratipay.com."
|
||||||
|
|
||||||
|
|
||||||
class TooGreedy(Exception): pass
|
class TooGreedy(Exception): pass
|
@ -1,16 +1,16 @@
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
The most important object in the Gittip object model is Participant, and the
|
The most important object in the Gratipay object model is Participant, and the
|
||||||
second most important one is Ccommunity. There are a few others, but those are
|
second most important one is Ccommunity. There are a few others, but those are
|
||||||
the most important two. Participant, in particular, is at the center of
|
the most important two. Participant, in particular, is at the center of
|
||||||
everything on Gittip.
|
everything on Gratipay.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from postgres import Postgres
|
from postgres import Postgres
|
||||||
import psycopg2.extras
|
import psycopg2.extras
|
||||||
|
|
||||||
|
|
||||||
class GittipDB(Postgres):
|
class GratipayDB(Postgres):
|
||||||
|
|
||||||
def self_check(self):
|
def self_check(self):
|
||||||
with self.get_cursor() as cursor:
|
with self.get_cursor() as cursor:
|
||||||
@ -32,7 +32,7 @@ def _check_tips(cursor):
|
|||||||
"""
|
"""
|
||||||
Checks that there are no rows in tips with duplicate (tipper, tippee, mtime).
|
Checks that there are no rows in tips with duplicate (tipper, tippee, mtime).
|
||||||
|
|
||||||
https://github.com/gittip/www.gittip.com/issues/1704
|
https://github.com/gratipay/www.gratipay.com/issues/1704
|
||||||
"""
|
"""
|
||||||
conflicting_tips = cursor.one("""
|
conflicting_tips = cursor.one("""
|
||||||
SELECT count(*)
|
SELECT count(*)
|
||||||
@ -52,7 +52,7 @@ def _check_balances(cursor):
|
|||||||
"""
|
"""
|
||||||
Recalculates balances for all participants from transfers and exchanges.
|
Recalculates balances for all participants from transfers and exchanges.
|
||||||
|
|
||||||
https://github.com/gittip/www.gittip.com/issues/1118
|
https://github.com/gratipay/www.gratipay.com/issues/1118
|
||||||
"""
|
"""
|
||||||
b = cursor.all("""
|
b = cursor.all("""
|
||||||
select p.username, expected, balance as actual
|
select p.username, expected, balance as actual
|
||||||
@ -106,7 +106,7 @@ def _check_orphans(cursor):
|
|||||||
Especially bad case is when also claimed_time is set because
|
Especially bad case is when also claimed_time is set because
|
||||||
there must have been elsewhere account attached and used to sign in.
|
there must have been elsewhere account attached and used to sign in.
|
||||||
|
|
||||||
https://github.com/gittip/www.gittip.com/issues/617
|
https://github.com/gratipay/www.gratipay.com/issues/617
|
||||||
"""
|
"""
|
||||||
orphans = cursor.all("""
|
orphans = cursor.all("""
|
||||||
select username
|
select username
|
@ -1,4 +1,4 @@
|
|||||||
"""Teams on Gittip are plural participants with members.
|
"""Teams on Gratipay are plural participants with members.
|
||||||
"""
|
"""
|
||||||
from collections import OrderedDict
|
from collections import OrderedDict
|
||||||
from decimal import Decimal
|
from decimal import Decimal
|
||||||
@ -13,7 +13,7 @@ class StubParticipantAdded(Exception): pass
|
|||||||
class MixinTeam(object):
|
class MixinTeam(object):
|
||||||
"""This class provides methods for working with a Participant as a Team.
|
"""This class provides methods for working with a Participant as a Team.
|
||||||
|
|
||||||
:param Participant participant: the underlying :py:class:`~gittip.participant.Participant` object for this team
|
:param Participant participant: the underlying :py:class:`~gratipay.participant.Participant` object for this team
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -112,8 +112,8 @@ class MixinTeam(object):
|
|||||||
assert self.IS_PLURAL
|
assert self.IS_PLURAL
|
||||||
|
|
||||||
# lazy import to avoid circular import
|
# lazy import to avoid circular import
|
||||||
from gittip.security.user import User
|
from gratipay.security.user import User
|
||||||
from gittip.models.participant import Participant
|
from gratipay.models.participant import Participant
|
||||||
|
|
||||||
typecheck( member, Participant
|
typecheck( member, Participant
|
||||||
, take, Decimal
|
, take, Decimal
|
@ -8,8 +8,8 @@ import xml.etree.ElementTree as ET
|
|||||||
import xmltodict
|
import xmltodict
|
||||||
|
|
||||||
from aspen import Response
|
from aspen import Response
|
||||||
from gittip.exceptions import ProblemChangingUsername
|
from gratipay.exceptions import ProblemChangingUsername
|
||||||
from gittip.utils.username import safely_reserve_a_username
|
from gratipay.utils.username import safely_reserve_a_username
|
||||||
|
|
||||||
|
|
||||||
class UnknownAccountElsewhere(Exception): pass
|
class UnknownAccountElsewhere(Exception): pass
|
||||||
@ -140,7 +140,7 @@ class AccountElsewhere(Model):
|
|||||||
def opt_in(self, desired_username):
|
def opt_in(self, desired_username):
|
||||||
"""Given a desired username, return a User object.
|
"""Given a desired username, return a User object.
|
||||||
"""
|
"""
|
||||||
from gittip.security.user import User
|
from gratipay.security.user import User
|
||||||
self.set_is_locked(False)
|
self.set_is_locked(False)
|
||||||
user = User.from_username(self.participant.username)
|
user = User.from_username(self.participant.username)
|
||||||
assert not user.ANON, self.participant # sanity check
|
assert not user.ANON, self.participant # sanity check
|
@ -46,7 +46,7 @@ def get_list_for(db, username):
|
|||||||
""".format(member_test, sort_order), params)
|
""".format(member_test, sort_order), params)
|
||||||
|
|
||||||
class Community(Model):
|
class Community(Model):
|
||||||
"""Model a community on Gittip.
|
"""Model a community on Gratipay.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
typname = "community_summary"
|
typname = "community_summary"
|
@ -1,5 +1,5 @@
|
|||||||
"""*Participant* is the name Gittip gives to people and groups that are known
|
"""*Participant* is the name Gratipay gives to people and groups that are known
|
||||||
to Gittip. We've got a ``participants`` table in the database, and a
|
to Gratipay. We've got a ``participants`` table in the database, and a
|
||||||
:py:class:`Participant` class that we define here. We distinguish several kinds
|
:py:class:`Participant` class that we define here. We distinguish several kinds
|
||||||
of participant, based on certain properties.
|
of participant, based on certain properties.
|
||||||
|
|
||||||
@ -18,9 +18,9 @@ from aspen.utils import typecheck, utcnow
|
|||||||
from postgres.orm import Model
|
from postgres.orm import Model
|
||||||
from psycopg2 import IntegrityError
|
from psycopg2 import IntegrityError
|
||||||
|
|
||||||
import gittip
|
import gratipay
|
||||||
from gittip import NotSane
|
from gratipay import NotSane
|
||||||
from gittip.exceptions import (
|
from gratipay.exceptions import (
|
||||||
HasBigTips,
|
HasBigTips,
|
||||||
UsernameIsEmpty,
|
UsernameIsEmpty,
|
||||||
UsernameTooLong,
|
UsernameTooLong,
|
||||||
@ -33,12 +33,12 @@ from gittip.exceptions import (
|
|||||||
UserDoesntAcceptTips,
|
UserDoesntAcceptTips,
|
||||||
)
|
)
|
||||||
|
|
||||||
from gittip.models import add_event
|
from gratipay.models import add_event
|
||||||
from gittip.models._mixin_team import MixinTeam
|
from gratipay.models._mixin_team import MixinTeam
|
||||||
from gittip.models.account_elsewhere import AccountElsewhere
|
from gratipay.models.account_elsewhere import AccountElsewhere
|
||||||
from gittip.utils.username import safely_reserve_a_username
|
from gratipay.utils.username import safely_reserve_a_username
|
||||||
from gittip import billing
|
from gratipay import billing
|
||||||
from gittip.utils import is_card_expiring
|
from gratipay.utils import is_card_expiring
|
||||||
|
|
||||||
|
|
||||||
ASCII_ALLOWED_IN_USERNAME = set("0123456789"
|
ASCII_ALLOWED_IN_USERNAME = set("0123456789"
|
||||||
@ -52,7 +52,7 @@ NANSWERS_THRESHOLD = 0 # configured in wireup.py
|
|||||||
NOTIFIED_ABOUT_EXPIRATION = b'notifiedAboutExpiration'
|
NOTIFIED_ABOUT_EXPIRATION = b'notifiedAboutExpiration'
|
||||||
|
|
||||||
class Participant(Model, MixinTeam):
|
class Participant(Model, MixinTeam):
|
||||||
"""Represent a Gittip participant.
|
"""Represent a Gratipay participant.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
typname = 'participants'
|
typname = 'participants'
|
||||||
@ -182,7 +182,7 @@ class Participant(Model, MixinTeam):
|
|||||||
if number == 'singular':
|
if number == 'singular':
|
||||||
nbigtips = self.db.one("""\
|
nbigtips = self.db.one("""\
|
||||||
SELECT count(*) FROM current_tips WHERE tippee=%s AND amount > %s
|
SELECT count(*) FROM current_tips WHERE tippee=%s AND amount > %s
|
||||||
""", (self.username, gittip.MAX_TIP_SINGULAR))
|
""", (self.username, gratipay.MAX_TIP_SINGULAR))
|
||||||
if nbigtips > 0:
|
if nbigtips > 0:
|
||||||
raise HasBigTips
|
raise HasBigTips
|
||||||
with self.db.get_cursor() as c:
|
with self.db.get_cursor() as c:
|
||||||
@ -252,7 +252,7 @@ class Participant(Model, MixinTeam):
|
|||||||
# Claiming
|
# Claiming
|
||||||
# ========
|
# ========
|
||||||
# An unclaimed Participant is a stub that's created when someone pledges to
|
# An unclaimed Participant is a stub that's created when someone pledges to
|
||||||
# give to an AccountElsewhere that's not been connected on Gittip yet.
|
# give to an AccountElsewhere that's not been connected on Gratipay yet.
|
||||||
|
|
||||||
def resolve_unclaimed(self):
|
def resolve_unclaimed(self):
|
||||||
"""Given a username, return an URL path.
|
"""Given a username, return an URL path.
|
||||||
@ -308,7 +308,7 @@ class Participant(Model, MixinTeam):
|
|||||||
|
|
||||||
|
|
||||||
def withdraw_balance_to_bank_account(self, cursor):
|
def withdraw_balance_to_bank_account(self, cursor):
|
||||||
from gittip.billing.exchanges import ach_credit
|
from gratipay.billing.exchanges import ach_credit
|
||||||
ach_credit( self.db
|
ach_credit( self.db
|
||||||
, self
|
, self
|
||||||
, Decimal('0.00') # don't withhold anything
|
, Decimal('0.00') # don't withhold anything
|
||||||
@ -506,7 +506,7 @@ class Participant(Model, MixinTeam):
|
|||||||
|
|
||||||
lowercased = suggested.lower()
|
lowercased = suggested.lower()
|
||||||
|
|
||||||
if lowercased in gittip.RESTRICTED_USERNAMES:
|
if lowercased in gratipay.RESTRICTED_USERNAMES:
|
||||||
raise UsernameIsRestricted(suggested)
|
raise UsernameIsRestricted(suggested)
|
||||||
|
|
||||||
if suggested != self.username:
|
if suggested != self.username:
|
||||||
@ -692,8 +692,8 @@ class Participant(Model, MixinTeam):
|
|||||||
raise NoSelfTipping
|
raise NoSelfTipping
|
||||||
|
|
||||||
amount = Decimal(amount) # May raise InvalidOperation
|
amount = Decimal(amount) # May raise InvalidOperation
|
||||||
max_tip = gittip.MAX_TIP_PLURAL if tippee.IS_PLURAL else gittip.MAX_TIP_SINGULAR
|
max_tip = gratipay.MAX_TIP_PLURAL if tippee.IS_PLURAL else gratipay.MAX_TIP_SINGULAR
|
||||||
if (amount < gittip.MIN_TIP) or (amount > max_tip):
|
if (amount < gratipay.MIN_TIP) or (amount > max_tip):
|
||||||
raise BadAmount
|
raise BadAmount
|
||||||
|
|
||||||
if not tippee.accepts_tips and amount != 0:
|
if not tippee.accepts_tips and amount != 0:
|
||||||
@ -727,8 +727,8 @@ class Participant(Model, MixinTeam):
|
|||||||
if update_tippee:
|
if update_tippee:
|
||||||
# Update receiving amount of tippee
|
# Update receiving amount of tippee
|
||||||
tippee.update_receiving(cursor)
|
tippee.update_receiving(cursor)
|
||||||
if tippee.username == 'Gittip':
|
if tippee.username == 'Gratipay':
|
||||||
# Update whether the tipper is using Gittip for free
|
# Update whether the tipper is using Gratipay for free
|
||||||
self.update_is_free_rider(None if amount == 0 else False, cursor)
|
self.update_is_free_rider(None if amount == 0 else False, cursor)
|
||||||
|
|
||||||
return amount, first_time_tipper
|
return amount, first_time_tipper
|
||||||
@ -871,7 +871,7 @@ class Participant(Model, MixinTeam):
|
|||||||
# Compute the total.
|
# Compute the total.
|
||||||
# ==================
|
# ==================
|
||||||
# For payday we only want to process payments to tippees who have
|
# For payday we only want to process payments to tippees who have
|
||||||
# themselves opted into Gittip. For the tipper's profile page we want
|
# themselves opted into Gratipay. For the tipper's profile page we want
|
||||||
# to show the total amount they've pledged (so they're not surprised
|
# to show the total amount they've pledged (so they're not surprised
|
||||||
# when someone *does* start accepting tips and all of a sudden they're
|
# when someone *does* start accepting tips and all of a sudden they're
|
||||||
# hit with bigger charges.
|
# hit with bigger charges.
|
||||||
@ -921,7 +921,7 @@ class Participant(Model, MixinTeam):
|
|||||||
out += " receives $%.2f/wk" % receiving
|
out += " receives $%.2f/wk" % receiving
|
||||||
else:
|
else:
|
||||||
out += " is"
|
out += " is"
|
||||||
return out + " on Gittip"
|
return out + " on Gratipay"
|
||||||
|
|
||||||
|
|
||||||
def get_age_in_seconds(self):
|
def get_age_in_seconds(self):
|
||||||
@ -1016,16 +1016,16 @@ class Participant(Model, MixinTeam):
|
|||||||
Returns None or raises NeedConfirmation.
|
Returns None or raises NeedConfirmation.
|
||||||
|
|
||||||
This method associates an account on another platform (GitHub, Twitter,
|
This method associates an account on another platform (GitHub, Twitter,
|
||||||
etc.) with the given Gittip participant. Every account elsewhere has an
|
etc.) with the given Gratipay participant. Every account elsewhere has an
|
||||||
associated Gittip participant account, even if its only a stub
|
associated Gratipay participant account, even if its only a stub
|
||||||
participant (it allows us to track pledges to that account should they
|
participant (it allows us to track pledges to that account should they
|
||||||
ever decide to join Gittip).
|
ever decide to join Gratipay).
|
||||||
|
|
||||||
In certain circumstances, we want to present the user with a
|
In certain circumstances, we want to present the user with a
|
||||||
confirmation before proceeding to transfer the account elsewhere to
|
confirmation before proceeding to transfer the account elsewhere to
|
||||||
the new Gittip account; NeedConfirmation is the signal to request
|
the new Gratipay account; NeedConfirmation is the signal to request
|
||||||
confirmation. If it was the last account elsewhere connected to the old
|
confirmation. If it was the last account elsewhere connected to the old
|
||||||
Gittip account, then we absorb the old Gittip account into the new one,
|
Gratipay account, then we absorb the old Gratipay account into the new one,
|
||||||
effectively archiving the old account.
|
effectively archiving the old account.
|
||||||
|
|
||||||
Here's what absorbing means:
|
Here's what absorbing means:
|
||||||
@ -1167,7 +1167,7 @@ class Participant(Model, MixinTeam):
|
|||||||
# Load the existing connection.
|
# Load the existing connection.
|
||||||
# =============================
|
# =============================
|
||||||
# Every account elsewhere has at least a stub participant account
|
# Every account elsewhere has at least a stub participant account
|
||||||
# on Gittip.
|
# on Gratipay.
|
||||||
|
|
||||||
elsewhere = cursor.one("""
|
elsewhere = cursor.one("""
|
||||||
|
|
||||||
@ -1191,11 +1191,11 @@ class Participant(Model, MixinTeam):
|
|||||||
# three cases:
|
# three cases:
|
||||||
#
|
#
|
||||||
# - the other participant is not a stub; we are taking the
|
# - the other participant is not a stub; we are taking the
|
||||||
# account elsewhere away from another viable Gittip
|
# account elsewhere away from another viable Gratipay
|
||||||
# participant
|
# participant
|
||||||
#
|
#
|
||||||
# - the other participant has no other accounts elsewhere; taking
|
# - the other participant has no other accounts elsewhere; taking
|
||||||
# away the account elsewhere will leave the other Gittip
|
# away the account elsewhere will leave the other Gratipay
|
||||||
# participant without any means of logging in, and it will be
|
# participant without any means of logging in, and it will be
|
||||||
# archived and its tips absorbed by us
|
# archived and its tips absorbed by us
|
||||||
#
|
#
|
||||||
@ -1368,7 +1368,7 @@ class Participant(Model, MixinTeam):
|
|||||||
, 'username': self.username
|
, 'username': self.username
|
||||||
, 'avatar': self.avatar_url
|
, 'avatar': self.avatar_url
|
||||||
, 'number': self.number
|
, 'number': self.number
|
||||||
, 'on': 'gittip'
|
, 'on': 'gratipay'
|
||||||
}
|
}
|
||||||
|
|
||||||
if not details:
|
if not details:
|
@ -3,8 +3,8 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from aspen.utils import to_rfc822
|
from aspen.utils import to_rfc822
|
||||||
from gittip.security import csrf
|
from gratipay.security import csrf
|
||||||
from gittip.security.user import User, SESSION
|
from gratipay.security.user import User, SESSION
|
||||||
|
|
||||||
BEGINNING_OF_EPOCH = to_rfc822(datetime(1970, 1, 1))
|
BEGINNING_OF_EPOCH = to_rfc822(datetime(1970, 1, 1))
|
||||||
|
|
@ -4,7 +4,7 @@ See also:
|
|||||||
|
|
||||||
https://github.com/django/django/blob/master/django/middleware/csrf.py
|
https://github.com/django/django/blob/master/django/middleware/csrf.py
|
||||||
https://docs.djangoproject.com/en/dev/ref/contrib/csrf/
|
https://docs.djangoproject.com/en/dev/ref/contrib/csrf/
|
||||||
https://github.com/gittip/www.gittip.com/issues/88
|
https://github.com/gratipay/www.gratipay.com/issues/88
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -73,8 +73,8 @@ def _sanitize_token(token):
|
|||||||
return token
|
return token
|
||||||
|
|
||||||
def _is_secure(request):
|
def _is_secure(request):
|
||||||
import gittip
|
import gratipay
|
||||||
return gittip.canonical_scheme == 'https'
|
return gratipay.canonical_scheme == 'https'
|
||||||
|
|
||||||
def _get_host(request):
|
def _get_host(request):
|
||||||
"""Returns the HTTP host using the request headers.
|
"""Returns the HTTP host using the request headers.
|
@ -3,8 +3,8 @@ from datetime import timedelta
|
|||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from aspen.utils import utcnow
|
from aspen.utils import utcnow
|
||||||
from gittip.models.participant import Participant
|
from gratipay.models.participant import Participant
|
||||||
from gittip.utils import set_cookie
|
from gratipay.utils import set_cookie
|
||||||
|
|
||||||
|
|
||||||
SESSION = b'session'
|
SESSION = b'session'
|
@ -1,4 +1,4 @@
|
|||||||
"""Helpers for testing Gittip.
|
"""Helpers for testing Gratipay.
|
||||||
"""
|
"""
|
||||||
from __future__ import absolute_import, division, print_function, unicode_literals
|
from __future__ import absolute_import, division, print_function, unicode_literals
|
||||||
|
|
||||||
@ -9,12 +9,12 @@ from os.path import join, dirname, realpath
|
|||||||
from aspen import resources
|
from aspen import resources
|
||||||
from aspen.utils import utcnow
|
from aspen.utils import utcnow
|
||||||
from aspen.testing.client import Client
|
from aspen.testing.client import Client
|
||||||
from gittip.billing.exchanges import record_exchange, record_exchange_result
|
from gratipay.billing.exchanges import record_exchange, record_exchange_result
|
||||||
from gittip.elsewhere import UserInfo
|
from gratipay.elsewhere import UserInfo
|
||||||
from gittip.models.account_elsewhere import AccountElsewhere
|
from gratipay.models.account_elsewhere import AccountElsewhere
|
||||||
from gittip.security.user import User, SESSION
|
from gratipay.security.user import User, SESSION
|
||||||
from gittip.testing.vcr import use_cassette
|
from gratipay.testing.vcr import use_cassette
|
||||||
from gittip import wireup
|
from gratipay import wireup
|
||||||
from psycopg2 import IntegrityError, InternalError
|
from psycopg2 import IntegrityError, InternalError
|
||||||
|
|
||||||
|
|
@ -2,8 +2,8 @@ from __future__ import absolute_import, division, print_function, unicode_litera
|
|||||||
|
|
||||||
import balanced
|
import balanced
|
||||||
|
|
||||||
from gittip.testing import Harness
|
from gratipay.testing import Harness
|
||||||
from gittip.testing.vcr import use_cassette
|
from gratipay.testing.vcr import use_cassette
|
||||||
|
|
||||||
|
|
||||||
class BalancedHarness(Harness):
|
class BalancedHarness(Harness):
|
||||||
@ -42,7 +42,7 @@ with use_cassette('BalancedHarness'):
|
|||||||
'state': 'Confusion',
|
'state': 'Confusion',
|
||||||
'postal_code': '90210',
|
'postal_code': '90210',
|
||||||
},
|
},
|
||||||
# gittip stores some of the address data in the meta fields,
|
# gratipay stores some of the address data in the meta fields,
|
||||||
# continue using them to support backwards compatibility
|
# continue using them to support backwards compatibility
|
||||||
meta={
|
meta={
|
||||||
'address_2': 'Box 2',
|
'address_2': 'Box 2',
|
@ -130,7 +130,7 @@ bountysource = lambda: {
|
|||||||
"login": "corytheboyd",
|
"login": "corytheboyd",
|
||||||
"id": 2103
|
"id": 2103
|
||||||
},
|
},
|
||||||
"gittip_account": {
|
"gratipay_account": {
|
||||||
"uid": 17306,
|
"uid": 17306,
|
||||||
"followers": 0,
|
"followers": 0,
|
||||||
"following": 0,
|
"following": 0,
|
||||||
@ -175,7 +175,7 @@ github = lambda: {
|
|||||||
"email": "chad@zetaweb.com",
|
"email": "chad@zetaweb.com",
|
||||||
"public_repos": 25,
|
"public_repos": 25,
|
||||||
"events_url": "https://api.github.com/users/whit537/events{/privacy}",
|
"events_url": "https://api.github.com/users/whit537/events{/privacy}",
|
||||||
"company": "Gittip",
|
"company": "Gratipay",
|
||||||
"gists_url": "https://api.github.com/users/whit537/gists{/gist_id}",
|
"gists_url": "https://api.github.com/users/whit537/gists{/gist_id}",
|
||||||
"html_url": "https://github.com/whit537",
|
"html_url": "https://github.com/whit537",
|
||||||
"subscriptions_url": "https://api.github.com/users/whit537/subscriptions",
|
"subscriptions_url": "https://api.github.com/users/whit537/subscriptions",
|
@ -5,7 +5,7 @@ import re
|
|||||||
|
|
||||||
from aspen import Response
|
from aspen import Response
|
||||||
from aspen.utils import typecheck, to_rfc822, utcnow
|
from aspen.utils import typecheck, to_rfc822, utcnow
|
||||||
import gittip
|
import gratipay
|
||||||
from postgres.cursors import SimpleCursorBase
|
from postgres.cursors import SimpleCursorBase
|
||||||
from jinja2 import escape
|
from jinja2 import escape
|
||||||
|
|
||||||
@ -358,7 +358,7 @@ def get_participant(request, restrict=True):
|
|||||||
if participant.claimed_time is None:
|
if participant.claimed_time is None:
|
||||||
|
|
||||||
# This is a stub participant record for someone on another platform who
|
# This is a stub participant record for someone on another platform who
|
||||||
# hasn't actually registered with Gittip yet. Let's bounce the viewer
|
# hasn't actually registered with Gratipay yet. Let's bounce the viewer
|
||||||
# over to the appropriate platform page.
|
# over to the appropriate platform page.
|
||||||
|
|
||||||
to = participant.resolve_unclaimed()
|
to = participant.resolve_unclaimed()
|
||||||
@ -386,7 +386,7 @@ def update_global_stats(website):
|
|||||||
nbackers = website.db.one("""
|
nbackers = website.db.one("""
|
||||||
SELECT npatrons
|
SELECT npatrons
|
||||||
FROM participants
|
FROM participants
|
||||||
WHERE username = 'Gittip'
|
WHERE username = 'Gratipay'
|
||||||
""", default=0)
|
""", default=0)
|
||||||
website.support_current = cur = int(round(nbackers / stats[0] * 100)) if stats[0] else 0
|
website.support_current = cur = int(round(nbackers / stats[0] * 100)) if stats[0] else 0
|
||||||
if cur < 10: goal = 20
|
if cur < 10: goal = 20
|
||||||
@ -472,5 +472,5 @@ def set_cookie(cookies, key, value, expires=None, httponly=True, path='/'):
|
|||||||
cookie['httponly'] = True
|
cookie['httponly'] = True
|
||||||
if path:
|
if path:
|
||||||
cookie['path'] = path
|
cookie['path'] = path
|
||||||
if gittip.canonical_scheme == 'https':
|
if gratipay.canonical_scheme == 'https':
|
||||||
cookie['secure'] = True
|
cookie['secure'] = True
|
@ -1,7 +1,7 @@
|
|||||||
from faker import Factory
|
from faker import Factory
|
||||||
from gittip import wireup, MAX_TIP_SINGULAR, MIN_TIP
|
from gratipay import wireup, MAX_TIP_SINGULAR, MIN_TIP
|
||||||
from gittip.elsewhere import PLATFORMS
|
from gratipay.elsewhere import PLATFORMS
|
||||||
from gittip.models.participant import Participant
|
from gratipay.models.participant import Participant
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
import decimal
|
import decimal
|
@ -17,7 +17,7 @@ from babel.numbers import (
|
|||||||
)
|
)
|
||||||
import jinja2.ext
|
import jinja2.ext
|
||||||
|
|
||||||
from gittip.utils import COUNTRIES, COUNTRIES_MAP
|
from gratipay.utils import COUNTRIES, COUNTRIES_MAP
|
||||||
|
|
||||||
|
|
||||||
ternary_re = re.compile(r'^\(? *(.+?) *\? *(.+?) *: *(.+?) *\)?$')
|
ternary_re = re.compile(r'^\(? *(.+?) *\? *(.+?) *: *(.+?) *\)?$')
|
@ -5,40 +5,40 @@ import os
|
|||||||
|
|
||||||
import aspen
|
import aspen
|
||||||
import balanced
|
import balanced
|
||||||
import gittip
|
import gratipay
|
||||||
import gittip.billing.payday
|
import gratipay.billing.payday
|
||||||
import raven
|
import raven
|
||||||
import mandrill
|
import mandrill
|
||||||
from environment import Environment, is_yesish
|
from environment import Environment, is_yesish
|
||||||
from gittip.elsewhere import PlatformRegistry
|
from gratipay.elsewhere import PlatformRegistry
|
||||||
from gittip.elsewhere.bitbucket import Bitbucket
|
from gratipay.elsewhere.bitbucket import Bitbucket
|
||||||
from gittip.elsewhere.bountysource import Bountysource
|
from gratipay.elsewhere.bountysource import Bountysource
|
||||||
from gittip.elsewhere.github import GitHub
|
from gratipay.elsewhere.github import GitHub
|
||||||
from gittip.elsewhere.openstreetmap import OpenStreetMap
|
from gratipay.elsewhere.openstreetmap import OpenStreetMap
|
||||||
from gittip.elsewhere.twitter import Twitter
|
from gratipay.elsewhere.twitter import Twitter
|
||||||
from gittip.elsewhere.venmo import Venmo
|
from gratipay.elsewhere.venmo import Venmo
|
||||||
from gittip.models.account_elsewhere import AccountElsewhere
|
from gratipay.models.account_elsewhere import AccountElsewhere
|
||||||
from gittip.models.community import Community
|
from gratipay.models.community import Community
|
||||||
from gittip.models.participant import Participant
|
from gratipay.models.participant import Participant
|
||||||
from gittip.models.email_address_with_confirmation import EmailAddressWithConfirmation
|
from gratipay.models.email_address_with_confirmation import EmailAddressWithConfirmation
|
||||||
from gittip.models import GittipDB
|
from gratipay.models import GratipayDB
|
||||||
|
|
||||||
|
|
||||||
def canonical(env):
|
def canonical(env):
|
||||||
gittip.canonical_scheme = env.canonical_scheme
|
gratipay.canonical_scheme = env.canonical_scheme
|
||||||
gittip.canonical_host = env.canonical_host
|
gratipay.canonical_host = env.canonical_host
|
||||||
|
|
||||||
|
|
||||||
def db(env):
|
def db(env):
|
||||||
dburl = env.database_url
|
dburl = env.database_url
|
||||||
maxconn = env.database_maxconn
|
maxconn = env.database_maxconn
|
||||||
db = GittipDB(dburl, maxconn=maxconn)
|
db = GratipayDB(dburl, maxconn=maxconn)
|
||||||
|
|
||||||
db.register_model(Community)
|
db.register_model(Community)
|
||||||
db.register_model(AccountElsewhere)
|
db.register_model(AccountElsewhere)
|
||||||
db.register_model(Participant)
|
db.register_model(Participant)
|
||||||
db.register_model(EmailAddressWithConfirmation)
|
db.register_model(EmailAddressWithConfirmation)
|
||||||
gittip.billing.payday.Payday.db = db
|
gratipay.billing.payday.Payday.db = db
|
||||||
|
|
||||||
return db
|
return db
|
||||||
|
|
||||||
@ -52,8 +52,8 @@ def billing(env):
|
|||||||
|
|
||||||
|
|
||||||
def username_restrictions(website):
|
def username_restrictions(website):
|
||||||
if not hasattr(gittip, 'RESTRICTED_USERNAMES'):
|
if not hasattr(gratipay, 'RESTRICTED_USERNAMES'):
|
||||||
gittip.RESTRICTED_USERNAMES = os.listdir(website.www_root)
|
gratipay.RESTRICTED_USERNAMES = os.listdir(website.www_root)
|
||||||
|
|
||||||
|
|
||||||
def make_sentry_teller(env):
|
def make_sentry_teller(env):
|
||||||
@ -77,7 +77,7 @@ def make_sentry_teller(env):
|
|||||||
# Only log server errors to Sentry. For responses < 500 we use
|
# Only log server errors to Sentry. For responses < 500 we use
|
||||||
# stream-/line-based access logging. See discussion on:
|
# stream-/line-based access logging. See discussion on:
|
||||||
|
|
||||||
# https://github.com/gittip/www.gittip.com/pull/1560.
|
# https://github.com/gratipay/www.gratipay.com/pull/1560.
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -117,7 +117,7 @@ def make_sentry_teller(env):
|
|||||||
, 'is_admin': user.participant.is_admin
|
, 'is_admin': user.participant.is_admin
|
||||||
, 'is_suspicious': user.participant.is_suspicious
|
, 'is_suspicious': user.participant.is_suspicious
|
||||||
, 'claimed_time': user.participant.claimed_time.isoformat()
|
, 'claimed_time': user.participant.claimed_time.isoformat()
|
||||||
, 'url': 'https://www.gittip.com/{}/'.format(username)
|
, 'url': 'https://www.gratipay.com/{}/'.format(username)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -144,7 +144,7 @@ def make_sentry_teller(env):
|
|||||||
|
|
||||||
|
|
||||||
def nanswers(env):
|
def nanswers(env):
|
||||||
from gittip.models import participant
|
from gratipay.models import participant
|
||||||
participant.NANSWERS_THRESHOLD = env.nanswers_threshold
|
participant.NANSWERS_THRESHOLD = env.nanswers_threshold
|
||||||
|
|
||||||
|
|
||||||
@ -207,9 +207,9 @@ def accounts_elsewhere(website, env):
|
|||||||
|
|
||||||
|
|
||||||
def other_stuff(website, env):
|
def other_stuff(website, env):
|
||||||
website.asset_url = env.gittip_asset_url.replace('%version', website.version)
|
website.asset_url = env.gratipay_asset_url.replace('%version', website.version)
|
||||||
website.cache_static = env.gittip_cache_static
|
website.cache_static = env.gratipay_cache_static
|
||||||
website.compress_assets = env.gittip_compress_assets
|
website.compress_assets = env.gratipay_compress_assets
|
||||||
|
|
||||||
website.segment_key = env.segment_key
|
website.segment_key = env.segment_key
|
||||||
website.sentry_dsn = env.sentry_dsn
|
website.sentry_dsn = env.sentry_dsn
|
||||||
@ -271,7 +271,7 @@ def env():
|
|||||||
these = len(env.malformed) != 1 and 'these' or 'this'
|
these = len(env.malformed) != 1 and 'these' or 'this'
|
||||||
plural = len(env.malformed) != 1 and 's' or ''
|
plural = len(env.malformed) != 1 and 's' or ''
|
||||||
aspen.log_dammit("=" * 42)
|
aspen.log_dammit("=" * 42)
|
||||||
aspen.log_dammit( "Oh no! Gittip.com couldn't understand %s " % these
|
aspen.log_dammit( "Oh no! Gratipay.com couldn't understand %s " % these
|
||||||
, "environment variable%s:" % plural
|
, "environment variable%s:" % plural
|
||||||
)
|
)
|
||||||
aspen.log_dammit(" ")
|
aspen.log_dammit(" ")
|
||||||
@ -288,7 +288,7 @@ def env():
|
|||||||
these = len(env.missing) != 1 and 'these' or 'this'
|
these = len(env.missing) != 1 and 'these' or 'this'
|
||||||
plural = len(env.missing) != 1 and 's' or ''
|
plural = len(env.missing) != 1 and 's' or ''
|
||||||
aspen.log_dammit("=" * 42)
|
aspen.log_dammit("=" * 42)
|
||||||
aspen.log_dammit( "Oh no! Gittip.com needs %s missing " % these
|
aspen.log_dammit( "Oh no! Gratipay.com needs %s missing " % these
|
||||||
, "environment variable%s:" % plural
|
, "environment variable%s:" % plural
|
||||||
)
|
)
|
||||||
aspen.log_dammit(" ")
|
aspen.log_dammit(" ")
|
||||||
@ -296,10 +296,10 @@ def env():
|
|||||||
aspen.log_dammit(" " + key)
|
aspen.log_dammit(" " + key)
|
||||||
aspen.log_dammit(" ")
|
aspen.log_dammit(" ")
|
||||||
aspen.log_dammit( "(Sorry, we must've started looking for "
|
aspen.log_dammit( "(Sorry, we must've started looking for "
|
||||||
, "%s since you last updated Gittip!)" % these
|
, "%s since you last updated Gratipay!)" % these
|
||||||
)
|
)
|
||||||
aspen.log_dammit(" ")
|
aspen.log_dammit(" ")
|
||||||
aspen.log_dammit("Running Gittip locally? Edit ./local.env.")
|
aspen.log_dammit("Running Gratipay locally? Edit ./local.env.")
|
||||||
aspen.log_dammit("Running the test suite? Edit ./tests/env.")
|
aspen.log_dammit("Running the test suite? Edit ./tests/env.")
|
||||||
aspen.log_dammit(" ")
|
aspen.log_dammit(" ")
|
||||||
aspen.log_dammit("See ./default_local.env for hints.")
|
aspen.log_dammit("See ./default_local.env for hints.")
|
102
i18n/eo.po
@ -1,6 +1,6 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Gittip\n"
|
"Project-Id-Version: Gratipay\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2014-08-21 15:17+0200\n"
|
"POT-Creation-Date: 2014-08-21 15:17+0200\n"
|
||||||
"PO-Revision-Date: 2014-08-25 23:46-0500\n"
|
"PO-Revision-Date: 2014-08-25 23:46-0500\n"
|
||||||
@ -237,16 +237,16 @@ msgstr ""
|
|||||||
"{bottomstart}por semajno{bottomend}"
|
"{bottomstart}por semajno{bottomend}"
|
||||||
|
|
||||||
#: templates/participant.html:53
|
#: templates/participant.html:53
|
||||||
msgid "{0} just joined Gittip! :D"
|
msgid "{0} just joined Gratipay! :D"
|
||||||
msgstr "{0} ĵus membriĝis Gittip! :D"
|
msgstr "{0} ĵus membriĝis Gratipay! :D"
|
||||||
|
|
||||||
#: templates/participant.html:55
|
#: templates/participant.html:55
|
||||||
msgid "{0} joined recently"
|
msgid "{0} joined recently"
|
||||||
msgstr "{0} membriĝis lastatempe"
|
msgstr "{0} membriĝis lastatempe"
|
||||||
|
|
||||||
#: templates/participant.html:57
|
#: templates/participant.html:57
|
||||||
msgid "{0} is quietly watching the Gittip world"
|
msgid "{0} is quietly watching the Gratipay world"
|
||||||
msgstr "{0} rigardas trankvile la Gittip mondo"
|
msgstr "{0} rigardas trankvile la Gratipay mondo"
|
||||||
|
|
||||||
#: templates/participant.tip.html:5
|
#: templates/participant.tip.html:5
|
||||||
msgid "This account has been locked by its owner."
|
msgid "This account has been locked by its owner."
|
||||||
@ -334,37 +334,37 @@ msgstr "{0} doni al {1}"
|
|||||||
msgid "Sign in"
|
msgid "Sign in"
|
||||||
msgstr "Ensaluti"
|
msgstr "Ensaluti"
|
||||||
|
|
||||||
#: templates/support-gittip.html:5
|
#: templates/support-gratipay.html:5
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Only {0}% of active users also {1}support Gittip{2}."
|
msgid "Only {0}% of active users also {1}support Gratipay{2}."
|
||||||
msgstr "Sole {0}% de aktivaj uzantoj ankaŭ {1}subtenas Gittip{2}."
|
msgstr "Sole {0}% de aktivaj uzantoj ankaŭ {1}subtenas Gratipay{2}."
|
||||||
|
|
||||||
#: templates/support-gittip.html:7
|
#: templates/support-gratipay.html:7
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "{0}% of active users also {1}support Gittip{2}."
|
msgid "{0}% of active users also {1}support Gratipay{2}."
|
||||||
msgstr "{0}% de aktivaj uzantoj ankaŭ {1}subtenas Gittip{2}."
|
msgstr "{0}% de aktivaj uzantoj ankaŭ {1}subtenas Gratipay{2}."
|
||||||
|
|
||||||
#: templates/support-gittip.html:11
|
#: templates/support-gratipay.html:11
|
||||||
msgid "Will you help us reach {0}%?"
|
msgid "Will you help us reach {0}%?"
|
||||||
msgstr "Ĉu vi helpos nin atingi {0}%?"
|
msgstr "Ĉu vi helpos nin atingi {0}%?"
|
||||||
|
|
||||||
#: templates/support-gittip.html:13
|
#: templates/support-gratipay.html:13
|
||||||
msgid "Will you join them?"
|
msgid "Will you join them?"
|
||||||
msgstr "Ĉu vi aliĝos ilin?"
|
msgstr "Ĉu vi aliĝos ilin?"
|
||||||
|
|
||||||
#: templates/support-gittip.html:19
|
#: templates/support-gratipay.html:19
|
||||||
msgid "Other"
|
msgid "Other"
|
||||||
msgstr "Alia"
|
msgstr "Alia"
|
||||||
|
|
||||||
#: templates/support-gittip.html:19
|
#: templates/support-gratipay.html:19
|
||||||
msgid "No thanks"
|
msgid "No thanks"
|
||||||
msgstr "Ne dankon"
|
msgstr "Ne dankon"
|
||||||
|
|
||||||
#: templates/support-gittip.html:22
|
#: templates/support-gratipay.html:22
|
||||||
msgid "We fund Gittip solely through your voluntary payments!"
|
msgid "We fund Gratipay solely through your voluntary payments!"
|
||||||
msgstr "Ni fondusas Gittip sole tra via libervolaj pagoj!"
|
msgstr "Ni fondusas Gratipay sole tra via libervolaj pagoj!"
|
||||||
|
|
||||||
#: templates/support-gittip.html:23 www/index.html.spt:56
|
#: templates/support-gratipay.html:23 www/index.html.spt:56
|
||||||
msgid "Learn more"
|
msgid "Learn more"
|
||||||
msgstr "Lernu pli"
|
msgstr "Lernu pli"
|
||||||
|
|
||||||
@ -382,18 +382,18 @@ msgstr "Bankokonto"
|
|||||||
|
|
||||||
#: www/bank-account.html.spt:37
|
#: www/bank-account.html.spt:37
|
||||||
msgid ""
|
msgid ""
|
||||||
"When you receive money on Gittip we'll automatically deposit it into your "
|
"When you receive money on Gratipay we'll automatically deposit it into your "
|
||||||
"bank account."
|
"bank account."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Kiam vi ricevas monon tra Gittip, ni deponas ĝin aŭtomate en via konekita "
|
"Kiam vi ricevas monon tra Gratipay, ni deponas ĝin aŭtomate en via konekita "
|
||||||
"bankokonto."
|
"bankokonto."
|
||||||
|
|
||||||
#: www/bank-account.html.spt:38
|
#: www/bank-account.html.spt:38
|
||||||
msgid ""
|
msgid ""
|
||||||
"If you don't connect a bank account then your money will accumulate within "
|
"If you don't connect a bank account then your money will accumulate within "
|
||||||
"Gittip unless you regift it to others."
|
"Gratipay unless you regift it to others."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Se vi ne konektas bankokonton, tiam via mono amasigos ene Gittip krom se vi "
|
"Se vi ne konektas bankokonton, tiam via mono amasigos ene Gratipay krom se vi "
|
||||||
"donas ĝin laŭvice al aliaj."
|
"donas ĝin laŭvice al aliaj."
|
||||||
|
|
||||||
#: www/bank-account.html.spt:61
|
#: www/bank-account.html.spt:61
|
||||||
@ -494,10 +494,10 @@ msgstr "Kreditkarto"
|
|||||||
|
|
||||||
#: www/credit-card.html.spt:42
|
#: www/credit-card.html.spt:42
|
||||||
msgid ""
|
msgid ""
|
||||||
"When you don't have enough money in your Gittip account to cover your gifts, "
|
"When you don't have enough money in your Gratipay account to cover your gifts, "
|
||||||
"we'll attempt to pull money in using your credit card."
|
"we'll attempt to pull money in using your credit card."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Kiam vi ne havas sufiĉan monon en vian Gittip-a konto kovri viajn donacojn, "
|
"Kiam vi ne havas sufiĉan monon en vian Gratipay-a konto kovri viajn donacojn, "
|
||||||
"ni pagigos vian kreditkaron fondusi viajn donacojn."
|
"ni pagigos vian kreditkaron fondusi viajn donacojn."
|
||||||
|
|
||||||
#: www/credit-card.html.spt:43
|
#: www/credit-card.html.spt:43
|
||||||
@ -599,16 +599,16 @@ msgid "Want to see who they are? Browse {0}our communities{1}."
|
|||||||
msgstr "Ĉu vi volas vidi kiu estas? Foliumu {0}niajn komunumojn{1}."
|
msgstr "Ĉu vi volas vidi kiu estas? Foliumu {0}niajn komunumojn{1}."
|
||||||
|
|
||||||
#: www/index.html.spt:87
|
#: www/index.html.spt:87
|
||||||
msgid "Want to work for Gittip? We are an {0}open company{1}."
|
msgid "Want to work for Gratipay? We are an {0}open company{1}."
|
||||||
msgstr "Ĉu vi volas labori por Gittip? Ni estas {0}malferma firmo{1}."
|
msgstr "Ĉu vi volas labori por Gratipay? Ni estas {0}malferma firmo{1}."
|
||||||
|
|
||||||
#: www/index.html.spt:93
|
#: www/index.html.spt:93
|
||||||
msgid "Welcome, {0}!"
|
msgid "Welcome, {0}!"
|
||||||
msgstr "Bonvenon, {0}!"
|
msgstr "Bonvenon, {0}!"
|
||||||
|
|
||||||
#: www/index.html.spt:94
|
#: www/index.html.spt:94
|
||||||
msgid "Thanks for joining Gittip!"
|
msgid "Thanks for joining Gratipay!"
|
||||||
msgstr "Dankon pro via aliĝado Gittip!"
|
msgstr "Dankon pro via aliĝado Gratipay!"
|
||||||
|
|
||||||
#: www/index.html.spt:95
|
#: www/index.html.spt:95
|
||||||
msgid "Next steps:"
|
msgid "Next steps:"
|
||||||
@ -683,8 +683,8 @@ msgid "I'm here as a patron, and politely decline to receive gifts."
|
|||||||
msgstr "Mi estas ĉi tie kiel patrono, kaj malakceptas ĝentile ricevi donacojn."
|
msgstr "Mi estas ĉi tie kiel patrono, kaj malakceptas ĝentile ricevi donacojn."
|
||||||
|
|
||||||
#: www/%username/index.html.spt:41
|
#: www/%username/index.html.spt:41
|
||||||
msgid "My goal is to receive {0} per week on Gittip."
|
msgid "My goal is to receive {0} per week on Gratipay."
|
||||||
msgstr "Mia celo estas ricevi {0} ĉiusemajne tra Gittip."
|
msgstr "Mia celo estas ricevi {0} ĉiusemajne tra Gratipay."
|
||||||
|
|
||||||
#: www/%username/index.html.spt:45
|
#: www/%username/index.html.spt:45
|
||||||
msgid "We're grateful for gifts, but don't have a specific funding goal."
|
msgid "We're grateful for gifts, but don't have a specific funding goal."
|
||||||
@ -699,8 +699,8 @@ msgid "We're here as a patron, and politely decline to receive gifts."
|
|||||||
msgstr "Ni estas ĉi tie kiel patrono, kaj ĝentile malakceptu ricevi donacojn."
|
msgstr "Ni estas ĉi tie kiel patrono, kaj ĝentile malakceptu ricevi donacojn."
|
||||||
|
|
||||||
#: www/%username/index.html.spt:48
|
#: www/%username/index.html.spt:48
|
||||||
msgid "Our goal is to receive {0} per week on Gittip."
|
msgid "Our goal is to receive {0} per week on Gratipay."
|
||||||
msgstr "Nia celo estas ricevi {0} ĉiusemajne tra Gittip."
|
msgstr "Nia celo estas ricevi {0} ĉiusemajne tra Gratipay."
|
||||||
|
|
||||||
#: www/%username/index.html.spt:55
|
#: www/%username/index.html.spt:55
|
||||||
msgid "with {n} other"
|
msgid "with {n} other"
|
||||||
@ -714,10 +714,10 @@ msgstr "Vi estas {0}"
|
|||||||
|
|
||||||
#: www/%username/account/index.html.spt:39
|
#: www/%username/account/index.html.spt:39
|
||||||
msgid ""
|
msgid ""
|
||||||
"Have you linked to your Gittip profile from other websites? Be sure to "
|
"Have you linked to your Gratipay profile from other websites? Be sure to "
|
||||||
"update those links!"
|
"update those links!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ĉu vi alligis via Gittip profilon de aliaj retejoj? Nepre aktualigi tiujn "
|
"Ĉu vi alligis via Gratipay profilon de aliaj retejoj? Nepre aktualigi tiujn "
|
||||||
"ligilojn!"
|
"ligilojn!"
|
||||||
|
|
||||||
#: www/%username/account/index.html.spt:46
|
#: www/%username/account/index.html.spt:46
|
||||||
@ -821,8 +821,8 @@ msgid "Outside"
|
|||||||
msgstr "Ekstere"
|
msgstr "Ekstere"
|
||||||
|
|
||||||
#: www/%username/history/index.html.spt:65
|
#: www/%username/history/index.html.spt:65
|
||||||
msgid "Inside Gittip"
|
msgid "Inside Gratipay"
|
||||||
msgstr "Interne Gittip"
|
msgstr "Interne Gratipay"
|
||||||
|
|
||||||
#: www/%username/history/index.html.spt:68
|
#: www/%username/history/index.html.spt:68
|
||||||
msgid "Bank"
|
msgid "Bank"
|
||||||
@ -870,20 +870,20 @@ msgid "Widget #{0}"
|
|||||||
msgstr "Umaĵo #{0}"
|
msgstr "Umaĵo #{0}"
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:104
|
#: www/%username/widgets/index.html.spt:104
|
||||||
msgid "Use this code to embed a Gittip button on your website:"
|
msgid "Use this code to embed a Gratipay button on your website:"
|
||||||
msgstr "Uzu tiun kodon por enkorpigi Gittip butonon sur vian retejon:"
|
msgstr "Uzu tiun kodon por enkorpigi Gratipay butonon sur vian retejon:"
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:110
|
#: www/%username/widgets/index.html.spt:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"The button opens your profile on Gittip in a new tab or window. Here's what "
|
"The button opens your profile on Gratipay in a new tab or window. Here's what "
|
||||||
"the text reads:"
|
"the text reads:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"La butono malfermas vian profilon en Gittip en nova langeto aŭ fenestro. Jen "
|
"La butono malfermas vian profilon en Gratipay en nova langeto aŭ fenestro. Jen "
|
||||||
"kion la teksto diras:"
|
"kion la teksto diras:"
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:115
|
#: www/%username/widgets/index.html.spt:115
|
||||||
msgid "person is not logged into Gittip or doesn't tip you"
|
msgid "person is not logged into Gratipay or doesn't tip you"
|
||||||
msgstr "persono ne estas ensalutinta en Gittip aŭ ne doni al vin"
|
msgstr "persono ne estas ensalutinta en Gratipay aŭ ne doni al vin"
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:118
|
#: www/%username/widgets/index.html.spt:118
|
||||||
msgid "person tips you; shows current gift amount"
|
msgid "person tips you; shows current gift amount"
|
||||||
@ -898,8 +898,8 @@ msgid "Here's an example using {0}:"
|
|||||||
msgstr "Jen ekzemplo uzanta {0}:"
|
msgstr "Jen ekzemplo uzanta {0}:"
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:134
|
#: www/%username/widgets/index.html.spt:134
|
||||||
msgid "Use this code to add a Gittip \"receiving\" widget on your website:"
|
msgid "Use this code to add a Gratipay \"receiving\" widget on your website:"
|
||||||
msgstr "Uzu tiun kodon por aldoni Gittip \"ricevado\" ilon en via retejo:"
|
msgstr "Uzu tiun kodon por aldoni Gratipay \"ricevado\" ilon en via retejo:"
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:139
|
#: www/%username/widgets/index.html.spt:139
|
||||||
#: www/%username/widgets/index.html.spt:150
|
#: www/%username/widgets/index.html.spt:150
|
||||||
@ -918,8 +918,8 @@ msgid "Browse Communities"
|
|||||||
msgstr "Foliumu komunumojn"
|
msgstr "Foliumu komunumojn"
|
||||||
|
|
||||||
#: www/for/index.html.spt:24
|
#: www/for/index.html.spt:24
|
||||||
msgid "{0}There are{1} {2} {3}communities on Gittip.{4}"
|
msgid "{0}There are{1} {2} {3}communities on Gratipay.{4}"
|
||||||
msgstr "{0}Ekzistas{1} {2} {3}komunumoj sur Gittip.{4}"
|
msgstr "{0}Ekzistas{1} {2} {3}komunumoj sur Gratipay.{4}"
|
||||||
|
|
||||||
#: www/for/index.html.spt:75
|
#: www/for/index.html.spt:75
|
||||||
msgid "Large Communities"
|
msgid "Large Communities"
|
||||||
@ -953,8 +953,8 @@ msgid "Browse {0}All Communities{1}"
|
|||||||
msgstr "Foliumu {0}Ĉiujn Komunumojn{1}"
|
msgstr "Foliumu {0}Ĉiujn Komunumojn{1}"
|
||||||
|
|
||||||
#: www/for/%slug/index.html.spt:163
|
#: www/for/%slug/index.html.spt:163
|
||||||
msgid "{0} to join the {1} community on Gittip."
|
msgid "{0} to join the {1} community on Gratipay."
|
||||||
msgstr "{0} por kuniĝi la {1}-an komunumon sur Gittip."
|
msgstr "{0} por kuniĝi la {1}-an komunumon sur Gratipay."
|
||||||
|
|
||||||
#: www/for/%slug/index.html.spt:170
|
#: www/for/%slug/index.html.spt:170
|
||||||
msgid "Leave"
|
msgid "Leave"
|
||||||
@ -970,8 +970,8 @@ msgstr "Vi estas la unua ĉi tie!"
|
|||||||
|
|
||||||
#: www/for/%slug/index.html.spt:184
|
#: www/for/%slug/index.html.spt:184
|
||||||
msgid ""
|
msgid ""
|
||||||
"Bring the {0} community to Gittip to find like-minded people to give to."
|
"Bring the {0} community to Gratipay to find like-minded people to give to."
|
||||||
msgstr "Alportu la {0} komunumon al Gittip trovi samideanojn homojn doni."
|
msgstr "Alportu la {0} komunumon al Gratipay trovi samideanojn homojn doni."
|
||||||
|
|
||||||
#: www/for/%slug/index.html.spt:193
|
#: www/for/%slug/index.html.spt:193
|
||||||
msgid "New Members"
|
msgid "New Members"
|
||||||
|
100
i18n/fr.po
@ -235,16 +235,16 @@ msgstr ""
|
|||||||
"{bottomstart}par semaine{bottomend}"
|
"{bottomstart}par semaine{bottomend}"
|
||||||
|
|
||||||
#: templates/participant.html:53
|
#: templates/participant.html:53
|
||||||
msgid "{0} just joined Gittip! :D"
|
msgid "{0} just joined Gratipay! :D"
|
||||||
msgstr "{0} vient juste de créer son compte Gittip! :D"
|
msgstr "{0} vient juste de créer son compte Gratipay! :D"
|
||||||
|
|
||||||
#: templates/participant.html:55
|
#: templates/participant.html:55
|
||||||
msgid "{0} joined recently"
|
msgid "{0} joined recently"
|
||||||
msgstr "{0} a créé son compte récemment"
|
msgstr "{0} a créé son compte récemment"
|
||||||
|
|
||||||
#: templates/participant.html:57
|
#: templates/participant.html:57
|
||||||
msgid "{0} is quietly watching the Gittip world"
|
msgid "{0} is quietly watching the Gratipay world"
|
||||||
msgstr "{0} observe silencieusement la planète Gittip"
|
msgstr "{0} observe silencieusement la planète Gratipay"
|
||||||
|
|
||||||
#: templates/participant.tip.html:5
|
#: templates/participant.tip.html:5
|
||||||
msgid "This account has been locked by its owner."
|
msgid "This account has been locked by its owner."
|
||||||
@ -331,37 +331,37 @@ msgstr "{0} pour donner à {1}"
|
|||||||
msgid "Sign in"
|
msgid "Sign in"
|
||||||
msgstr "Connectez vous"
|
msgstr "Connectez vous"
|
||||||
|
|
||||||
#: templates/support-gittip.html:5
|
#: templates/support-gratipay.html:5
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Only {0}% of active users also {1}support Gittip{2}."
|
msgid "Only {0}% of active users also {1}support Gratipay{2}."
|
||||||
msgstr "Seulement {0}% des utilisateurs actifs {1}supportent Gittip{2}."
|
msgstr "Seulement {0}% des utilisateurs actifs {1}supportent Gratipay{2}."
|
||||||
|
|
||||||
#: templates/support-gittip.html:7
|
#: templates/support-gratipay.html:7
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "{0}% of active users also {1}support Gittip{2}."
|
msgid "{0}% of active users also {1}support Gratipay{2}."
|
||||||
msgstr "{0}% des utilisateurs actifs {1}supportent Gittip{2}."
|
msgstr "{0}% des utilisateurs actifs {1}supportent Gratipay{2}."
|
||||||
|
|
||||||
#: templates/support-gittip.html:11
|
#: templates/support-gratipay.html:11
|
||||||
msgid "Will you help us reach {0}%?"
|
msgid "Will you help us reach {0}%?"
|
||||||
msgstr "Voulez-vous nous aider à atteindre {0}% ?"
|
msgstr "Voulez-vous nous aider à atteindre {0}% ?"
|
||||||
|
|
||||||
#: templates/support-gittip.html:13
|
#: templates/support-gratipay.html:13
|
||||||
msgid "Will you join them?"
|
msgid "Will you join them?"
|
||||||
msgstr "Voulez-vous en faire de même ?"
|
msgstr "Voulez-vous en faire de même ?"
|
||||||
|
|
||||||
#: templates/support-gittip.html:19
|
#: templates/support-gratipay.html:19
|
||||||
msgid "Other"
|
msgid "Other"
|
||||||
msgstr "Autre"
|
msgstr "Autre"
|
||||||
|
|
||||||
#: templates/support-gittip.html:19
|
#: templates/support-gratipay.html:19
|
||||||
msgid "No thanks"
|
msgid "No thanks"
|
||||||
msgstr "Non merci"
|
msgstr "Non merci"
|
||||||
|
|
||||||
#: templates/support-gittip.html:22
|
#: templates/support-gratipay.html:22
|
||||||
msgid "We fund Gittip solely through your voluntary payments!"
|
msgid "We fund Gratipay solely through your voluntary payments!"
|
||||||
msgstr "Gittip n'est financé que par vos dons!"
|
msgstr "Gratipay n'est financé que par vos dons!"
|
||||||
|
|
||||||
#: templates/support-gittip.html:23 www/index.html.spt:56
|
#: templates/support-gratipay.html:23 www/index.html.spt:56
|
||||||
msgid "Learn more"
|
msgid "Learn more"
|
||||||
msgstr "En savoir plus"
|
msgstr "En savoir plus"
|
||||||
|
|
||||||
@ -379,7 +379,7 @@ msgstr "Compte Bancaire"
|
|||||||
|
|
||||||
#: www/bank-account.html.spt:37
|
#: www/bank-account.html.spt:37
|
||||||
msgid ""
|
msgid ""
|
||||||
"When you receive money on Gittip we'll automatically deposit it into your"
|
"When you receive money on Gratipay we'll automatically deposit it into your"
|
||||||
" bank account."
|
" bank account."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Quand vous recevez des dons nous les déposerons automatiquement sur votre"
|
"Quand vous recevez des dons nous les déposerons automatiquement sur votre"
|
||||||
@ -388,7 +388,7 @@ msgstr ""
|
|||||||
#: www/bank-account.html.spt:38
|
#: www/bank-account.html.spt:38
|
||||||
msgid ""
|
msgid ""
|
||||||
"If you don't connect a bank account then your money will accumulate "
|
"If you don't connect a bank account then your money will accumulate "
|
||||||
"within Gittip unless you regift it to others."
|
"within Gratipay unless you regift it to others."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si vous ne connectez pas de compte bancaire alors votre argent "
|
"Si vous ne connectez pas de compte bancaire alors votre argent "
|
||||||
"s'accumulera dans votre balance, sauf si vous le donner à d'autres "
|
"s'accumulera dans votre balance, sauf si vous le donner à d'autres "
|
||||||
@ -492,10 +492,10 @@ msgstr "Carte de crédit"
|
|||||||
|
|
||||||
#: www/credit-card.html.spt:42
|
#: www/credit-card.html.spt:42
|
||||||
msgid ""
|
msgid ""
|
||||||
"When you don't have enough money in your Gittip account to cover your "
|
"When you don't have enough money in your Gratipay account to cover your "
|
||||||
"gifts, we'll attempt to pull money in using your credit card."
|
"gifts, we'll attempt to pull money in using your credit card."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Quand vous n'avez pas assez d'argent dans votre compte Gittip pour "
|
"Quand vous n'avez pas assez d'argent dans votre compte Gratipay pour "
|
||||||
"financer vos dons, nous essayons d'en ajouter en utilisant votre carte de"
|
"financer vos dons, nous essayons d'en ajouter en utilisant votre carte de"
|
||||||
" crédit."
|
" crédit."
|
||||||
|
|
||||||
@ -602,9 +602,9 @@ msgstr ""
|
|||||||
"utilisateurs."
|
"utilisateurs."
|
||||||
|
|
||||||
#: www/index.html.spt:87
|
#: www/index.html.spt:87
|
||||||
msgid "Want to work for Gittip? We are an {0}open company{1}."
|
msgid "Want to work for Gratipay? We are an {0}open company{1}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Vous voulez travaillez pour Gittip ? Nous sommes une {0}entreprise "
|
"Vous voulez travaillez pour Gratipay ? Nous sommes une {0}entreprise "
|
||||||
"ouverte{1}."
|
"ouverte{1}."
|
||||||
|
|
||||||
#: www/index.html.spt:93
|
#: www/index.html.spt:93
|
||||||
@ -612,8 +612,8 @@ msgid "Welcome, {0}!"
|
|||||||
msgstr "Bienvenue, {0}!"
|
msgstr "Bienvenue, {0}!"
|
||||||
|
|
||||||
#: www/index.html.spt:94
|
#: www/index.html.spt:94
|
||||||
msgid "Thanks for joining Gittip!"
|
msgid "Thanks for joining Gratipay!"
|
||||||
msgstr "Merci d'avoir rejoint Gittip!"
|
msgstr "Merci d'avoir rejoint Gratipay!"
|
||||||
|
|
||||||
#: www/index.html.spt:95
|
#: www/index.html.spt:95
|
||||||
msgid "Next steps:"
|
msgid "Next steps:"
|
||||||
@ -643,7 +643,7 @@ msgstr "Bonjour, {0}!"
|
|||||||
|
|
||||||
#: www/index.html.spt:107 www/%username/history/index.html.spt:20
|
#: www/index.html.spt:107 www/%username/history/index.html.spt:20
|
||||||
msgid "Your balance is {0}."
|
msgid "Your balance is {0}."
|
||||||
msgstr "Vous avec {0} dans votre compte Gittip."
|
msgstr "Vous avec {0} dans votre compte Gratipay."
|
||||||
|
|
||||||
#: www/index.html.spt:110
|
#: www/index.html.spt:110
|
||||||
msgid "Go to {0}your profile{1}, or {2}sign out{3}."
|
msgid "Go to {0}your profile{1}, or {2}sign out{3}."
|
||||||
@ -688,8 +688,8 @@ msgid "I'm here as a patron, and politely decline to receive gifts."
|
|||||||
msgstr "Je suis ici pour donner, et ne souhaite pas recevoir de dons."
|
msgstr "Je suis ici pour donner, et ne souhaite pas recevoir de dons."
|
||||||
|
|
||||||
#: www/%username/index.html.spt:41
|
#: www/%username/index.html.spt:41
|
||||||
msgid "My goal is to receive {0} per week on Gittip."
|
msgid "My goal is to receive {0} per week on Gratipay."
|
||||||
msgstr "Mon objectif est de recevoir {0} par semaine sur Gittip."
|
msgstr "Mon objectif est de recevoir {0} par semaine sur Gratipay."
|
||||||
|
|
||||||
#: www/%username/index.html.spt:45
|
#: www/%username/index.html.spt:45
|
||||||
msgid "We're grateful for gifts, but don't have a specific funding goal."
|
msgid "We're grateful for gifts, but don't have a specific funding goal."
|
||||||
@ -706,8 +706,8 @@ msgid "We're here as a patron, and politely decline to receive gifts."
|
|||||||
msgstr "Nous sommes ici pour donner, et ne souhaitons pas recevoir de dons."
|
msgstr "Nous sommes ici pour donner, et ne souhaitons pas recevoir de dons."
|
||||||
|
|
||||||
#: www/%username/index.html.spt:48
|
#: www/%username/index.html.spt:48
|
||||||
msgid "Our goal is to receive {0} per week on Gittip."
|
msgid "Our goal is to receive {0} per week on Gratipay."
|
||||||
msgstr "Notre objectif est de recevoir {0} par semaine sur Gittip."
|
msgstr "Notre objectif est de recevoir {0} par semaine sur Gratipay."
|
||||||
|
|
||||||
#: www/%username/index.html.spt:55
|
#: www/%username/index.html.spt:55
|
||||||
msgid "with {n} other"
|
msgid "with {n} other"
|
||||||
@ -721,10 +721,10 @@ msgstr "Vous êtes {0}"
|
|||||||
|
|
||||||
#: www/%username/account/index.html.spt:39
|
#: www/%username/account/index.html.spt:39
|
||||||
msgid ""
|
msgid ""
|
||||||
"Have you linked to your Gittip profile from other websites? Be sure to "
|
"Have you linked to your Gratipay profile from other websites? Be sure to "
|
||||||
"update those links!"
|
"update those links!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Avez-vous mis des liens vers votre profil Gittip sur d'autres sites? "
|
"Avez-vous mis des liens vers votre profil Gratipay sur d'autres sites? "
|
||||||
"Pensez à les mettre à jour!"
|
"Pensez à les mettre à jour!"
|
||||||
|
|
||||||
#: www/%username/account/index.html.spt:46
|
#: www/%username/account/index.html.spt:46
|
||||||
@ -813,11 +813,11 @@ msgstr "De plus, vous promettez {0} par semaine"
|
|||||||
|
|
||||||
#: www/%username/history/index.html.spt:15
|
#: www/%username/history/index.html.spt:15
|
||||||
msgid "You joined {0}."
|
msgid "You joined {0}."
|
||||||
msgstr "Vous avez rejoint Gittip {0}."
|
msgstr "Vous avez rejoint Gratipay {0}."
|
||||||
|
|
||||||
#: www/%username/history/index.html.spt:17
|
#: www/%username/history/index.html.spt:17
|
||||||
msgid "{0} joined {1}."
|
msgid "{0} joined {1}."
|
||||||
msgstr "{0} a rejoint Gittip {1}."
|
msgstr "{0} a rejoint Gratipay {1}."
|
||||||
|
|
||||||
#: www/%username/history/index.html.spt:22
|
#: www/%username/history/index.html.spt:22
|
||||||
msgid "Their balance is {0}."
|
msgid "Their balance is {0}."
|
||||||
@ -828,8 +828,8 @@ msgid "Outside"
|
|||||||
msgstr "À l'extérieur"
|
msgstr "À l'extérieur"
|
||||||
|
|
||||||
#: www/%username/history/index.html.spt:65
|
#: www/%username/history/index.html.spt:65
|
||||||
msgid "Inside Gittip"
|
msgid "Inside Gratipay"
|
||||||
msgstr "À l'intérieur de Gittip"
|
msgstr "À l'intérieur de Gratipay"
|
||||||
|
|
||||||
#: www/%username/history/index.html.spt:68
|
#: www/%username/history/index.html.spt:68
|
||||||
msgid "Bank"
|
msgid "Bank"
|
||||||
@ -877,19 +877,19 @@ msgid "Widget #{0}"
|
|||||||
msgstr "Widget #{0}"
|
msgstr "Widget #{0}"
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:104
|
#: www/%username/widgets/index.html.spt:104
|
||||||
msgid "Use this code to embed a Gittip button on your website:"
|
msgid "Use this code to embed a Gratipay button on your website:"
|
||||||
msgstr "Utilisez ce code pour intégrer un bouton Gittip à votre site web:"
|
msgstr "Utilisez ce code pour intégrer un bouton Gratipay à votre site web:"
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:110
|
#: www/%username/widgets/index.html.spt:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"The button opens your profile on Gittip in a new tab or window. Here's "
|
"The button opens your profile on Gratipay in a new tab or window. Here's "
|
||||||
"what the text reads:"
|
"what the text reads:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Le bouton ouvre votre profil Gittip dans un nouvel onglet. Voilà ce qui "
|
"Le bouton ouvre votre profil Gratipay dans un nouvel onglet. Voilà ce qui "
|
||||||
"est écrit:"
|
"est écrit:"
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:115
|
#: www/%username/widgets/index.html.spt:115
|
||||||
msgid "person is not logged into Gittip or doesn't tip you"
|
msgid "person is not logged into Gratipay or doesn't tip you"
|
||||||
msgstr "la personne n'est pas connectée ou ne vous fait pas de don"
|
msgstr "la personne n'est pas connectée ou ne vous fait pas de don"
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:118
|
#: www/%username/widgets/index.html.spt:118
|
||||||
@ -905,9 +905,9 @@ msgid "Here's an example using {0}:"
|
|||||||
msgstr "Voilà un exemple utilisant {0}:"
|
msgstr "Voilà un exemple utilisant {0}:"
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:134
|
#: www/%username/widgets/index.html.spt:134
|
||||||
msgid "Use this code to add a Gittip \"receiving\" widget on your website:"
|
msgid "Use this code to add a Gratipay \"receiving\" widget on your website:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Utilisez ce code pour ajouter un widget de \"revenu\" Gittip sur votre "
|
"Utilisez ce code pour ajouter un widget de \"revenu\" Gratipay sur votre "
|
||||||
"site web:"
|
"site web:"
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:139
|
#: www/%username/widgets/index.html.spt:139
|
||||||
@ -928,8 +928,8 @@ msgid "Browse Communities"
|
|||||||
msgstr "Explorer les communautés"
|
msgstr "Explorer les communautés"
|
||||||
|
|
||||||
#: www/for/index.html.spt:24
|
#: www/for/index.html.spt:24
|
||||||
msgid "{0}There are{1} {2} {3}communities on Gittip.{4}"
|
msgid "{0}There are{1} {2} {3}communities on Gratipay.{4}"
|
||||||
msgstr "{0}Il y a{1} {2} {3}communautés sur Gittip.{4}"
|
msgstr "{0}Il y a{1} {2} {3}communautés sur Gratipay.{4}"
|
||||||
|
|
||||||
#: www/for/index.html.spt:75
|
#: www/for/index.html.spt:75
|
||||||
msgid "Large Communities"
|
msgid "Large Communities"
|
||||||
@ -963,8 +963,8 @@ msgid "Browse {0}All Communities{1}"
|
|||||||
msgstr "Explorer {0}toutes les communautés{1}"
|
msgstr "Explorer {0}toutes les communautés{1}"
|
||||||
|
|
||||||
#: www/for/%slug/index.html.spt:163
|
#: www/for/%slug/index.html.spt:163
|
||||||
msgid "{0} to join the {1} community on Gittip."
|
msgid "{0} to join the {1} community on Gratipay."
|
||||||
msgstr "{0} pour rejoindre la communauté {1} sur Gittip."
|
msgstr "{0} pour rejoindre la communauté {1} sur Gratipay."
|
||||||
|
|
||||||
#: www/for/%slug/index.html.spt:170
|
#: www/for/%slug/index.html.spt:170
|
||||||
msgid "Leave"
|
msgid "Leave"
|
||||||
@ -979,9 +979,9 @@ msgid "You're the first one here!"
|
|||||||
msgstr "Vous êtes le premier ici!"
|
msgstr "Vous êtes le premier ici!"
|
||||||
|
|
||||||
#: www/for/%slug/index.html.spt:184
|
#: www/for/%slug/index.html.spt:184
|
||||||
msgid "Bring the {0} community to Gittip to find like-minded people to give to."
|
msgid "Bring the {0} community to Gratipay to find like-minded people to give to."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Amenez la communauté {0} sur Gittip pour trouver des gens comme vous à "
|
"Amenez la communauté {0} sur Gratipay pour trouver des gens comme vous à "
|
||||||
"qui donner."
|
"qui donner."
|
||||||
|
|
||||||
#: www/for/%slug/index.html.spt:193
|
#: www/for/%slug/index.html.spt:193
|
||||||
|
88
i18n/ko.po
@ -236,16 +236,16 @@ msgstr ""
|
|||||||
"{bottomstart}per week{bottomend}"
|
"{bottomstart}per week{bottomend}"
|
||||||
|
|
||||||
#: templates/participant.html:53
|
#: templates/participant.html:53
|
||||||
msgid "{0} just joined Gittip! :D"
|
msgid "{0} just joined Gratipay! :D"
|
||||||
msgstr "{0} 님은 방금 전부터 Gittip을 시작했어요! :D"
|
msgstr "{0} 님은 방금 전부터 Gratipay을 시작했어요! :D"
|
||||||
|
|
||||||
#: templates/participant.html:55
|
#: templates/participant.html:55
|
||||||
msgid "{0} joined recently"
|
msgid "{0} joined recently"
|
||||||
msgstr "{0} 님은 얼마 전에 가입하셨습니다"
|
msgstr "{0} 님은 얼마 전에 가입하셨습니다"
|
||||||
|
|
||||||
#: templates/participant.html:57
|
#: templates/participant.html:57
|
||||||
msgid "{0} is quietly watching the Gittip world"
|
msgid "{0} is quietly watching the Gratipay world"
|
||||||
msgstr "{0} 님은 가만히 Gittip 세상을 지켜보고 있습니다"
|
msgstr "{0} 님은 가만히 Gratipay 세상을 지켜보고 있습니다"
|
||||||
|
|
||||||
#: templates/participant.tip.html:5
|
#: templates/participant.tip.html:5
|
||||||
msgid "This account has been locked by its owner."
|
msgid "This account has been locked by its owner."
|
||||||
@ -332,37 +332,37 @@ msgstr "{1} 님에게 기부하려면 {0}이 필요합니다"
|
|||||||
msgid "Sign in"
|
msgid "Sign in"
|
||||||
msgstr "로그인"
|
msgstr "로그인"
|
||||||
|
|
||||||
#: templates/support-gittip.html:5
|
#: templates/support-gratipay.html:5
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Only {0}% of active users also {1}support Gittip{2}."
|
msgid "Only {0}% of active users also {1}support Gratipay{2}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/support-gittip.html:7
|
#: templates/support-gratipay.html:7
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "{0}% of active users also {1}support Gittip{2}."
|
msgid "{0}% of active users also {1}support Gratipay{2}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/support-gittip.html:11
|
#: templates/support-gratipay.html:11
|
||||||
msgid "Will you help us reach {0}%?"
|
msgid "Will you help us reach {0}%?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/support-gittip.html:13
|
#: templates/support-gratipay.html:13
|
||||||
msgid "Will you join them?"
|
msgid "Will you join them?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/support-gittip.html:19
|
#: templates/support-gratipay.html:19
|
||||||
msgid "Other"
|
msgid "Other"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/support-gittip.html:19
|
#: templates/support-gratipay.html:19
|
||||||
msgid "No thanks"
|
msgid "No thanks"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/support-gittip.html:22
|
#: templates/support-gratipay.html:22
|
||||||
msgid "We fund Gittip solely through your voluntary payments!"
|
msgid "We fund Gratipay solely through your voluntary payments!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/support-gittip.html:23 www/index.html.spt:56
|
#: templates/support-gratipay.html:23 www/index.html.spt:56
|
||||||
msgid "Learn more"
|
msgid "Learn more"
|
||||||
msgstr "자세히 알아보기"
|
msgstr "자세히 알아보기"
|
||||||
|
|
||||||
@ -380,16 +380,16 @@ msgstr "은행 계좌"
|
|||||||
|
|
||||||
#: www/bank-account.html.spt:37
|
#: www/bank-account.html.spt:37
|
||||||
msgid ""
|
msgid ""
|
||||||
"When you receive money on Gittip we'll automatically deposit it into your"
|
"When you receive money on Gratipay we'll automatically deposit it into your"
|
||||||
" bank account."
|
" bank account."
|
||||||
msgstr "Gittip으로 기부금을 받게 되면, 자동으로 은행 계좌로 금액이 입금됩니다."
|
msgstr "Gratipay으로 기부금을 받게 되면, 자동으로 은행 계좌로 금액이 입금됩니다."
|
||||||
|
|
||||||
#: www/bank-account.html.spt:38
|
#: www/bank-account.html.spt:38
|
||||||
msgid ""
|
msgid ""
|
||||||
"If you don't connect a bank account then your money will accumulate "
|
"If you don't connect a bank account then your money will accumulate "
|
||||||
"within Gittip unless you regift it to others."
|
"within Gratipay unless you regift it to others."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"은행 계좌를 연결하지 않았다면, 받은 금액은 Gittip 계좌에 쌓이게 됩니다. Gittip 계좌에 쌓인 금액은 다른 사람에게 다시"
|
"은행 계좌를 연결하지 않았다면, 받은 금액은 Gratipay 계좌에 쌓이게 됩니다. Gratipay 계좌에 쌓인 금액은 다른 사람에게 다시"
|
||||||
" 기부하지 않을 경우 소모되지 않습니다."
|
" 기부하지 않을 경우 소모되지 않습니다."
|
||||||
|
|
||||||
#: www/bank-account.html.spt:61
|
#: www/bank-account.html.spt:61
|
||||||
@ -490,9 +490,9 @@ msgstr "신용 카드"
|
|||||||
|
|
||||||
#: www/credit-card.html.spt:42
|
#: www/credit-card.html.spt:42
|
||||||
msgid ""
|
msgid ""
|
||||||
"When you don't have enough money in your Gittip account to cover your "
|
"When you don't have enough money in your Gratipay account to cover your "
|
||||||
"gifts, we'll attempt to pull money in using your credit card."
|
"gifts, we'll attempt to pull money in using your credit card."
|
||||||
msgstr "Gittip 계좌에 여유금이 없을 경우, 설정하신 신용 카드를 통해 지불을 시도하게 됩니다."
|
msgstr "Gratipay 계좌에 여유금이 없을 경우, 설정하신 신용 카드를 통해 지불을 시도하게 됩니다."
|
||||||
|
|
||||||
#: www/credit-card.html.spt:43
|
#: www/credit-card.html.spt:43
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -585,16 +585,16 @@ msgid "Want to see who they are? Browse {0}our communities{1}."
|
|||||||
msgstr "어떤 사람들이 있는지 궁금하세요? 어떤 {0}커뮤니티{1}가 있는지 둘러보세요."
|
msgstr "어떤 사람들이 있는지 궁금하세요? 어떤 {0}커뮤니티{1}가 있는지 둘러보세요."
|
||||||
|
|
||||||
#: www/index.html.spt:87
|
#: www/index.html.spt:87
|
||||||
msgid "Want to work for Gittip? We are an {0}open company{1}."
|
msgid "Want to work for Gratipay? We are an {0}open company{1}."
|
||||||
msgstr "Gittip에 기여하고 싶으신가요? 저희는 {0}누구에게나 개방된 조직{1}입니다."
|
msgstr "Gratipay에 기여하고 싶으신가요? 저희는 {0}누구에게나 개방된 조직{1}입니다."
|
||||||
|
|
||||||
#: www/index.html.spt:93
|
#: www/index.html.spt:93
|
||||||
msgid "Welcome, {0}!"
|
msgid "Welcome, {0}!"
|
||||||
msgstr "{0} 님 안녕하세요?"
|
msgstr "{0} 님 안녕하세요?"
|
||||||
|
|
||||||
#: www/index.html.spt:94
|
#: www/index.html.spt:94
|
||||||
msgid "Thanks for joining Gittip!"
|
msgid "Thanks for joining Gratipay!"
|
||||||
msgstr "Gittip에 가입해주셔서 고맙습니다!"
|
msgstr "Gratipay에 가입해주셔서 고맙습니다!"
|
||||||
|
|
||||||
#: www/index.html.spt:95
|
#: www/index.html.spt:95
|
||||||
msgid "Next steps:"
|
msgid "Next steps:"
|
||||||
@ -665,8 +665,8 @@ msgid "I'm here as a patron, and politely decline to receive gifts."
|
|||||||
msgstr "저는 후원자이며, 죄송합니다만 기부는 받지 않겠습니다."
|
msgstr "저는 후원자이며, 죄송합니다만 기부는 받지 않겠습니다."
|
||||||
|
|
||||||
#: www/%username/index.html.spt:41
|
#: www/%username/index.html.spt:41
|
||||||
msgid "My goal is to receive {0} per week on Gittip."
|
msgid "My goal is to receive {0} per week on Gratipay."
|
||||||
msgstr "제 목표 모금액은 매주 Gittip으로 {0}를 받는 것입니다."
|
msgstr "제 목표 모금액은 매주 Gratipay으로 {0}를 받는 것입니다."
|
||||||
|
|
||||||
#: www/%username/index.html.spt:45
|
#: www/%username/index.html.spt:45
|
||||||
msgid "We're grateful for gifts, but don't have a specific funding goal."
|
msgid "We're grateful for gifts, but don't have a specific funding goal."
|
||||||
@ -681,8 +681,8 @@ msgid "We're here as a patron, and politely decline to receive gifts."
|
|||||||
msgstr "저희는 후원자이며, 죄송합니다만 기부는 받지 않겠습니다."
|
msgstr "저희는 후원자이며, 죄송합니다만 기부는 받지 않겠습니다."
|
||||||
|
|
||||||
#: www/%username/index.html.spt:48
|
#: www/%username/index.html.spt:48
|
||||||
msgid "Our goal is to receive {0} per week on Gittip."
|
msgid "Our goal is to receive {0} per week on Gratipay."
|
||||||
msgstr "저희의 목표 모금액은 매주 Gittip으로 {0}를 받는 것입니다."
|
msgstr "저희의 목표 모금액은 매주 Gratipay으로 {0}를 받는 것입니다."
|
||||||
|
|
||||||
#: www/%username/index.html.spt:55
|
#: www/%username/index.html.spt:55
|
||||||
msgid "with {n} other"
|
msgid "with {n} other"
|
||||||
@ -695,9 +695,9 @@ msgstr "아이디는 {0}입니다"
|
|||||||
|
|
||||||
#: www/%username/account/index.html.spt:39
|
#: www/%username/account/index.html.spt:39
|
||||||
msgid ""
|
msgid ""
|
||||||
"Have you linked to your Gittip profile from other websites? Be sure to "
|
"Have you linked to your Gratipay profile from other websites? Be sure to "
|
||||||
"update those links!"
|
"update those links!"
|
||||||
msgstr "혹시 다른 사이트에 Gittip 프로필 페이지를 링크하신 적 있으신가요? 그 링크들 업데이트 해주세요!"
|
msgstr "혹시 다른 사이트에 Gratipay 프로필 페이지를 링크하신 적 있으신가요? 그 링크들 업데이트 해주세요!"
|
||||||
|
|
||||||
#: www/%username/account/index.html.spt:46
|
#: www/%username/account/index.html.spt:46
|
||||||
msgid "Hide total giving from others."
|
msgid "Hide total giving from others."
|
||||||
@ -800,7 +800,7 @@ msgid "Outside"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/%username/history/index.html.spt:65
|
#: www/%username/history/index.html.spt:65
|
||||||
msgid "Inside Gittip"
|
msgid "Inside Gratipay"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/%username/history/index.html.spt:68
|
#: www/%username/history/index.html.spt:68
|
||||||
@ -849,18 +849,18 @@ msgid "Widget #{0}"
|
|||||||
msgstr "{0}번 위젯"
|
msgstr "{0}번 위젯"
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:104
|
#: www/%username/widgets/index.html.spt:104
|
||||||
msgid "Use this code to embed a Gittip button on your website:"
|
msgid "Use this code to embed a Gratipay button on your website:"
|
||||||
msgstr "여러분의 웹사이트에 Gittip 버튼을 붙이고 싶다면 아래 코드를 쓰면 됩니다:"
|
msgstr "여러분의 웹사이트에 Gratipay 버튼을 붙이고 싶다면 아래 코드를 쓰면 됩니다:"
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:110
|
#: www/%username/widgets/index.html.spt:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"The button opens your profile on Gittip in a new tab or window. Here's "
|
"The button opens your profile on Gratipay in a new tab or window. Here's "
|
||||||
"what the text reads:"
|
"what the text reads:"
|
||||||
msgstr "이 버튼은 여러분의 Gittip 프로필 페이지 새 창(탭)으로 엽니다. 아래는 보이게 되는 문장입니다:"
|
msgstr "이 버튼은 여러분의 Gratipay 프로필 페이지 새 창(탭)으로 엽니다. 아래는 보이게 되는 문장입니다:"
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:115
|
#: www/%username/widgets/index.html.spt:115
|
||||||
msgid "person is not logged into Gittip or doesn't tip you"
|
msgid "person is not logged into Gratipay or doesn't tip you"
|
||||||
msgstr "Gittip에 로그인하지 않았거나 여러분한테 기부하고 있지 않은 사람에게"
|
msgstr "Gratipay에 로그인하지 않았거나 여러분한테 기부하고 있지 않은 사람에게"
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:118
|
#: www/%username/widgets/index.html.spt:118
|
||||||
msgid "person tips you; shows current gift amount"
|
msgid "person tips you; shows current gift amount"
|
||||||
@ -875,8 +875,8 @@ msgid "Here's an example using {0}:"
|
|||||||
msgstr "예를 들면 {0} 님의 버튼은 이렇게 나옵니다:"
|
msgstr "예를 들면 {0} 님의 버튼은 이렇게 나옵니다:"
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:134
|
#: www/%username/widgets/index.html.spt:134
|
||||||
msgid "Use this code to add a Gittip \"receiving\" widget on your website:"
|
msgid "Use this code to add a Gratipay \"receiving\" widget on your website:"
|
||||||
msgstr "여러분의 웹사이트에 Gittip \"모금중\" 위젯을 붙이고 싶다면 아래 코드를 쓰면 됩니다:"
|
msgstr "여러분의 웹사이트에 Gratipay \"모금중\" 위젯을 붙이고 싶다면 아래 코드를 쓰면 됩니다:"
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:139
|
#: www/%username/widgets/index.html.spt:139
|
||||||
#: www/%username/widgets/index.html.spt:150
|
#: www/%username/widgets/index.html.spt:150
|
||||||
@ -894,8 +894,8 @@ msgid "Browse Communities"
|
|||||||
msgstr "커뮤니티 둘러보기"
|
msgstr "커뮤니티 둘러보기"
|
||||||
|
|
||||||
#: www/for/index.html.spt:24
|
#: www/for/index.html.spt:24
|
||||||
msgid "{0}There are{1} {2} {3}communities on Gittip.{4}"
|
msgid "{0}There are{1} {2} {3}communities on Gratipay.{4}"
|
||||||
msgstr "{0}모두{1} {2} {3}커뮤니티가 Gittip에 있습니다.{4}"
|
msgstr "{0}모두{1} {2} {3}커뮤니티가 Gratipay에 있습니다.{4}"
|
||||||
|
|
||||||
#: www/for/index.html.spt:75
|
#: www/for/index.html.spt:75
|
||||||
msgid "Large Communities"
|
msgid "Large Communities"
|
||||||
@ -928,7 +928,7 @@ msgid "Browse {0}All Communities{1}"
|
|||||||
msgstr "{0}전체 커뮤니티{1} 둘러보기"
|
msgstr "{0}전체 커뮤니티{1} 둘러보기"
|
||||||
|
|
||||||
#: www/for/%slug/index.html.spt:163
|
#: www/for/%slug/index.html.spt:163
|
||||||
msgid "{0} to join the {1} community on Gittip."
|
msgid "{0} to join the {1} community on Gratipay."
|
||||||
msgstr "{1} 커뮤니티에 참여하려면 {0}이 필요합니다."
|
msgstr "{1} 커뮤니티에 참여하려면 {0}이 필요합니다."
|
||||||
|
|
||||||
#: www/for/%slug/index.html.spt:170
|
#: www/for/%slug/index.html.spt:170
|
||||||
@ -944,7 +944,7 @@ msgid "You're the first one here!"
|
|||||||
msgstr "첫 참여자십니다!"
|
msgstr "첫 참여자십니다!"
|
||||||
|
|
||||||
#: www/for/%slug/index.html.spt:184
|
#: www/for/%slug/index.html.spt:184
|
||||||
msgid "Bring the {0} community to Gittip to find like-minded people to give to."
|
msgid "Bring the {0} community to Gratipay to find like-minded people to give to."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/for/%slug/index.html.spt:193
|
#: www/for/%slug/index.html.spt:193
|
||||||
|
62
i18n/zh.po
@ -223,16 +223,16 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/participant.html:53
|
#: templates/participant.html:53
|
||||||
msgid "{0} just joined Gittip! :D"
|
msgid "{0} just joined Gratipay! :D"
|
||||||
msgstr "{0} 刚刚加入了 Gittip! :D"
|
msgstr "{0} 刚刚加入了 Gratipay! :D"
|
||||||
|
|
||||||
#: templates/participant.html:55
|
#: templates/participant.html:55
|
||||||
msgid "{0} joined recently"
|
msgid "{0} joined recently"
|
||||||
msgstr "{0} 最近加入了"
|
msgstr "{0} 最近加入了"
|
||||||
|
|
||||||
#: templates/participant.html:57
|
#: templates/participant.html:57
|
||||||
msgid "{0} is quietly watching the Gittip world"
|
msgid "{0} is quietly watching the Gratipay world"
|
||||||
msgstr "{0} 正在安静地看着Gittip的世界"
|
msgstr "{0} 正在安静地看着Gratipay的世界"
|
||||||
|
|
||||||
#: templates/participant.tip.html:5
|
#: templates/participant.tip.html:5
|
||||||
msgid "This account has been locked by its owner."
|
msgid "This account has been locked by its owner."
|
||||||
@ -319,37 +319,37 @@ msgstr ""
|
|||||||
msgid "Sign in"
|
msgid "Sign in"
|
||||||
msgstr "登录"
|
msgstr "登录"
|
||||||
|
|
||||||
#: templates/support-gittip.html:5
|
#: templates/support-gratipay.html:5
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Only {0}% of active users also {1}support Gittip{2}."
|
msgid "Only {0}% of active users also {1}support Gratipay{2}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/support-gittip.html:7
|
#: templates/support-gratipay.html:7
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "{0}% of active users also {1}support Gittip{2}."
|
msgid "{0}% of active users also {1}support Gratipay{2}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/support-gittip.html:11
|
#: templates/support-gratipay.html:11
|
||||||
msgid "Will you help us reach {0}%?"
|
msgid "Will you help us reach {0}%?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/support-gittip.html:13
|
#: templates/support-gratipay.html:13
|
||||||
msgid "Will you join them?"
|
msgid "Will you join them?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/support-gittip.html:19
|
#: templates/support-gratipay.html:19
|
||||||
msgid "Other"
|
msgid "Other"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/support-gittip.html:19
|
#: templates/support-gratipay.html:19
|
||||||
msgid "No thanks"
|
msgid "No thanks"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/support-gittip.html:22
|
#: templates/support-gratipay.html:22
|
||||||
msgid "We fund Gittip solely through your voluntary payments!"
|
msgid "We fund Gratipay solely through your voluntary payments!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: templates/support-gittip.html:23 www/index.html.spt:56
|
#: templates/support-gratipay.html:23 www/index.html.spt:56
|
||||||
msgid "Learn more"
|
msgid "Learn more"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -367,14 +367,14 @@ msgstr ""
|
|||||||
|
|
||||||
#: www/bank-account.html.spt:37
|
#: www/bank-account.html.spt:37
|
||||||
msgid ""
|
msgid ""
|
||||||
"When you receive money on Gittip we'll automatically deposit it into your"
|
"When you receive money on Gratipay we'll automatically deposit it into your"
|
||||||
" bank account."
|
" bank account."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/bank-account.html.spt:38
|
#: www/bank-account.html.spt:38
|
||||||
msgid ""
|
msgid ""
|
||||||
"If you don't connect a bank account then your money will accumulate "
|
"If you don't connect a bank account then your money will accumulate "
|
||||||
"within Gittip unless you regift it to others."
|
"within Gratipay unless you regift it to others."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/bank-account.html.spt:61
|
#: www/bank-account.html.spt:61
|
||||||
@ -475,7 +475,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: www/credit-card.html.spt:42
|
#: www/credit-card.html.spt:42
|
||||||
msgid ""
|
msgid ""
|
||||||
"When you don't have enough money in your Gittip account to cover your "
|
"When you don't have enough money in your Gratipay account to cover your "
|
||||||
"gifts, we'll attempt to pull money in using your credit card."
|
"gifts, we'll attempt to pull money in using your credit card."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -570,7 +570,7 @@ msgid "Want to see who they are? Browse {0}our communities{1}."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/index.html.spt:87
|
#: www/index.html.spt:87
|
||||||
msgid "Want to work for Gittip? We are an {0}open company{1}."
|
msgid "Want to work for Gratipay? We are an {0}open company{1}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/index.html.spt:93
|
#: www/index.html.spt:93
|
||||||
@ -578,7 +578,7 @@ msgid "Welcome, {0}!"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/index.html.spt:94
|
#: www/index.html.spt:94
|
||||||
msgid "Thanks for joining Gittip!"
|
msgid "Thanks for joining Gratipay!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/index.html.spt:95
|
#: www/index.html.spt:95
|
||||||
@ -650,7 +650,7 @@ msgid "I'm here as a patron, and politely decline to receive gifts."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/%username/index.html.spt:41
|
#: www/%username/index.html.spt:41
|
||||||
msgid "My goal is to receive {0} per week on Gittip."
|
msgid "My goal is to receive {0} per week on Gratipay."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/%username/index.html.spt:45
|
#: www/%username/index.html.spt:45
|
||||||
@ -666,7 +666,7 @@ msgid "We're here as a patron, and politely decline to receive gifts."
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/%username/index.html.spt:48
|
#: www/%username/index.html.spt:48
|
||||||
msgid "Our goal is to receive {0} per week on Gittip."
|
msgid "Our goal is to receive {0} per week on Gratipay."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/%username/index.html.spt:55
|
#: www/%username/index.html.spt:55
|
||||||
@ -681,7 +681,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: www/%username/account/index.html.spt:39
|
#: www/%username/account/index.html.spt:39
|
||||||
msgid ""
|
msgid ""
|
||||||
"Have you linked to your Gittip profile from other websites? Be sure to "
|
"Have you linked to your Gratipay profile from other websites? Be sure to "
|
||||||
"update those links!"
|
"update those links!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -786,7 +786,7 @@ msgid "Outside"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/%username/history/index.html.spt:65
|
#: www/%username/history/index.html.spt:65
|
||||||
msgid "Inside Gittip"
|
msgid "Inside Gratipay"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/%username/history/index.html.spt:68
|
#: www/%username/history/index.html.spt:68
|
||||||
@ -835,17 +835,17 @@ msgid "Widget #{0}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:104
|
#: www/%username/widgets/index.html.spt:104
|
||||||
msgid "Use this code to embed a Gittip button on your website:"
|
msgid "Use this code to embed a Gratipay button on your website:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:110
|
#: www/%username/widgets/index.html.spt:110
|
||||||
msgid ""
|
msgid ""
|
||||||
"The button opens your profile on Gittip in a new tab or window. Here's "
|
"The button opens your profile on Gratipay in a new tab or window. Here's "
|
||||||
"what the text reads:"
|
"what the text reads:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:115
|
#: www/%username/widgets/index.html.spt:115
|
||||||
msgid "person is not logged into Gittip or doesn't tip you"
|
msgid "person is not logged into Gratipay or doesn't tip you"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:118
|
#: www/%username/widgets/index.html.spt:118
|
||||||
@ -861,7 +861,7 @@ msgid "Here's an example using {0}:"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:134
|
#: www/%username/widgets/index.html.spt:134
|
||||||
msgid "Use this code to add a Gittip \"receiving\" widget on your website:"
|
msgid "Use this code to add a Gratipay \"receiving\" widget on your website:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/%username/widgets/index.html.spt:139
|
#: www/%username/widgets/index.html.spt:139
|
||||||
@ -880,7 +880,7 @@ msgid "Browse Communities"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/for/index.html.spt:24
|
#: www/for/index.html.spt:24
|
||||||
msgid "{0}There are{1} {2} {3}communities on Gittip.{4}"
|
msgid "{0}There are{1} {2} {3}communities on Gratipay.{4}"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/for/index.html.spt:75
|
#: www/for/index.html.spt:75
|
||||||
@ -915,7 +915,7 @@ msgid "Browse {0}All Communities{1}"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/for/%slug/index.html.spt:163
|
#: www/for/%slug/index.html.spt:163
|
||||||
msgid "{0} to join the {1} community on Gittip."
|
msgid "{0} to join the {1} community on Gratipay."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/for/%slug/index.html.spt:170
|
#: www/for/%slug/index.html.spt:170
|
||||||
@ -931,7 +931,7 @@ msgid "You're the first one here!"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/for/%slug/index.html.spt:184
|
#: www/for/%slug/index.html.spt:184
|
||||||
msgid "Bring the {0} community to Gittip to find like-minded people to give to."
|
msgid "Bring the {0} community to Gratipay to find like-minded people to give to."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: www/for/%slug/index.html.spt:193
|
#: www/for/%slug/index.html.spt:193
|
||||||
|
Before Width: | Height: | Size: 9.9 KiB After Width: | Height: | Size: 9.9 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
@ -1,26 +0,0 @@
|
|||||||
Gittip.communities = {};
|
|
||||||
|
|
||||||
Gittip.communities.update = function(name, is_member, callback) {
|
|
||||||
jQuery.ajax(
|
|
||||||
{ type: 'POST'
|
|
||||||
, url: '/for/communities.json'
|
|
||||||
, data: {name: name, is_member: is_member}
|
|
||||||
, dataType: 'json'
|
|
||||||
, success: callback
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
Gittip.communities.jumpTo = function(slug) {
|
|
||||||
window.location.href = "/for/" + slug + "/";
|
|
||||||
};
|
|
||||||
|
|
||||||
Gittip.communities.join = function(name, callback) {
|
|
||||||
Gittip.communities.update(name, true, callback);
|
|
||||||
};
|
|
||||||
|
|
||||||
Gittip.communities.leave = function(name, callback) {
|
|
||||||
if (confirm("Are you sure you want to leave the " + name + " community?"))
|
|
||||||
Gittip.communities.update(name, false, callback);
|
|
||||||
|
|
||||||
};
|
|
@ -1,2 +0,0 @@
|
|||||||
// Localize gittipURI for gttp.co widgets
|
|
||||||
gittipURI = '/';
|
|
@ -1,20 +1,20 @@
|
|||||||
/* Main namespace.
|
/* Main namespace.
|
||||||
* ===============
|
* ===============
|
||||||
* Individual modules are in the gittip/ directory.
|
* Individual modules are in the gratipay/ directory.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Gittip = {};
|
Gratipay = {};
|
||||||
|
|
||||||
Gittip.getCookie = function(key) {
|
Gratipay.getCookie = function(key) {
|
||||||
var o = new RegExp("(?:^|; ?)" + escape(key) + "=([^;]+)").exec(document.cookie);
|
var o = new RegExp("(?:^|; ?)" + escape(key) + "=([^;]+)").exec(document.cookie);
|
||||||
return o && unescape(o[1]);
|
return o && unescape(o[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
Gittip.init = function() {
|
Gratipay.init = function() {
|
||||||
Gittip.forms.initCSRF();
|
Gratipay.forms.initCSRF();
|
||||||
Gittip.signIn();
|
Gratipay.signIn();
|
||||||
Gittip.signOut();
|
Gratipay.signOut();
|
||||||
Gittip.tips.initSupportGittip();
|
Gratipay.tips.initSupportGratipay();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -22,12 +22,12 @@ Gittip.init = function() {
|
|||||||
// ===================
|
// ===================
|
||||||
// yanked from gttp.co/v1/api.js
|
// yanked from gttp.co/v1/api.js
|
||||||
|
|
||||||
Gittip.each = function(a, fn) {
|
Gratipay.each = function(a, fn) {
|
||||||
for (var i=0; i<a.length; i++)
|
for (var i=0; i<a.length; i++)
|
||||||
fn(a[i], i, length);
|
fn(a[i], i, length);
|
||||||
};
|
};
|
||||||
|
|
||||||
Gittip.jsoncss = function(jsoncss) {
|
Gratipay.jsoncss = function(jsoncss) {
|
||||||
var out = '';
|
var out = '';
|
||||||
|
|
||||||
this.each(jsoncss, function(selector) {
|
this.each(jsoncss, function(selector) {
|
||||||
@ -47,7 +47,7 @@ Gittip.jsoncss = function(jsoncss) {
|
|||||||
return this.jsonml(['style', out]);
|
return this.jsonml(['style', out]);
|
||||||
};
|
};
|
||||||
|
|
||||||
Gittip.jsonml = function(jsonml) {
|
Gratipay.jsonml = function(jsonml) {
|
||||||
var node = document.createElement(jsonml[0]),
|
var node = document.createElement(jsonml[0]),
|
||||||
_ = this;
|
_ = this;
|
||||||
|
|
||||||
@ -73,7 +73,7 @@ Gittip.jsonml = function(jsonml) {
|
|||||||
return node;
|
return node;
|
||||||
};
|
};
|
||||||
|
|
||||||
Gittip.signIn = function() {
|
Gratipay.signIn = function() {
|
||||||
$('.sign-in > .dropdown').mouseenter(function(e) {
|
$('.sign-in > .dropdown').mouseenter(function(e) {
|
||||||
clearTimeout($(this).data('timeoutId'));
|
clearTimeout($(this).data('timeoutId'));
|
||||||
$(this).addClass('open');
|
$(this).addClass('open');
|
||||||
@ -101,7 +101,7 @@ Gittip.signIn = function() {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
Gittip.signOut = function() {
|
Gratipay.signOut = function() {
|
||||||
$('a#sign-out').click(function(e) {
|
$('a#sign-out').click(function(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
@ -112,7 +112,7 @@ Gittip.signOut = function() {
|
|||||||
window.location.href = window.location.href;
|
window.location.href = window.location.href;
|
||||||
},
|
},
|
||||||
error: function() {
|
error: function() {
|
||||||
Gittip.notification('Failed to sign out', 'error');
|
Gratipay.notification('Failed to sign out', 'error');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
@ -1,6 +1,6 @@
|
|||||||
Gittip.account = {};
|
Gratipay.account = {};
|
||||||
|
|
||||||
Gittip.account.init = function() {
|
Gratipay.account.init = function() {
|
||||||
|
|
||||||
// Wire up username knob.
|
// Wire up username knob.
|
||||||
// ======================
|
// ======================
|
||||||
@ -26,7 +26,7 @@ Gittip.account.init = function() {
|
|||||||
}
|
}
|
||||||
function error(e) {
|
function error(e) {
|
||||||
$('#save-username').css('opacity', 1);
|
$('#save-username').css('opacity', 1);
|
||||||
Gittip.notification(JSON.parse(e.responseText).error_message_long, 'error');
|
Gratipay.notification(JSON.parse(e.responseText).error_message_long, 'error');
|
||||||
}
|
}
|
||||||
jQuery.ajax(
|
jQuery.ajax(
|
||||||
{ url: "../username.json"
|
{ url: "../username.json"
|
||||||
@ -67,7 +67,7 @@ Gittip.account.init = function() {
|
|||||||
$('.anonymous-giving input').attr('checked', data.giving);
|
$('.anonymous-giving input').attr('checked', data.giving);
|
||||||
}
|
}
|
||||||
, error: function() {
|
, error: function() {
|
||||||
Gittip.notification("Failed to change your anonymity preference. Please try again.", 'error');
|
Gratipay.notification("Failed to change your anonymity preference. Please try again.", 'error');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -86,7 +86,7 @@ Gittip.account.init = function() {
|
|||||||
$('.anonymous-receiving input').attr('checked', data.receiving);
|
$('.anonymous-receiving input').attr('checked', data.receiving);
|
||||||
}
|
}
|
||||||
, error: function() {
|
, error: function() {
|
||||||
Gittip.notification("Failed to change your anonymity preference. Please try again.", 'error');
|
Gratipay.notification("Failed to change your anonymity preference. Please try again.", 'error');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -151,7 +151,7 @@ Gittip.account.init = function() {
|
|||||||
success: success,
|
success: success,
|
||||||
error: function (data) {
|
error: function (data) {
|
||||||
$this.css('opacity', 1);
|
$this.css('opacity', 1);
|
||||||
Gittip.notification('Failed to save your email address. '
|
Gratipay.notification('Failed to save your email address. '
|
||||||
+ 'Please try again.', 'error');
|
+ 'Please try again.', 'error');
|
||||||
},
|
},
|
||||||
data: {email: $('input.email').val()}
|
data: {email: $('input.email').val()}
|
@ -1,7 +1,7 @@
|
|||||||
Gittip.charts = {};
|
Gratipay.charts = {};
|
||||||
|
|
||||||
|
|
||||||
Gittip.charts.make = function(series) {
|
Gratipay.charts.make = function(series) {
|
||||||
// Takes an array of time series data.
|
// Takes an array of time series data.
|
||||||
|
|
||||||
if (!series.length) {
|
if (!series.length) {
|
26
js/gratipay/communities.js
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
Gratipay.communities = {};
|
||||||
|
|
||||||
|
Gratipay.communities.update = function(name, is_member, callback) {
|
||||||
|
jQuery.ajax(
|
||||||
|
{ type: 'POST'
|
||||||
|
, url: '/for/communities.json'
|
||||||
|
, data: {name: name, is_member: is_member}
|
||||||
|
, dataType: 'json'
|
||||||
|
, success: callback
|
||||||
|
}
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
Gratipay.communities.jumpTo = function(slug) {
|
||||||
|
window.location.href = "/for/" + slug + "/";
|
||||||
|
};
|
||||||
|
|
||||||
|
Gratipay.communities.join = function(name, callback) {
|
||||||
|
Gratipay.communities.update(name, true, callback);
|
||||||
|
};
|
||||||
|
|
||||||
|
Gratipay.communities.leave = function(name, callback) {
|
||||||
|
if (confirm("Are you sure you want to leave the " + name + " community?"))
|
||||||
|
Gratipay.communities.update(name, false, callback);
|
||||||
|
|
||||||
|
};
|
@ -1,13 +1,13 @@
|
|||||||
// Form Generics
|
// Form Generics
|
||||||
// =============
|
// =============
|
||||||
|
|
||||||
Gittip.forms = {};
|
Gratipay.forms = {};
|
||||||
|
|
||||||
Gittip.forms.clearFeedback = function() {
|
Gratipay.forms.clearFeedback = function() {
|
||||||
$('#feedback').empty();
|
$('#feedback').empty();
|
||||||
};
|
};
|
||||||
|
|
||||||
Gittip.forms.showFeedback = function(msg, details) {
|
Gratipay.forms.showFeedback = function(msg, details) {
|
||||||
if (msg === null)
|
if (msg === null)
|
||||||
msg = "Failure";
|
msg = "Failure";
|
||||||
msg = '<h2><span class="highlight">' + msg + '</span></h2>';
|
msg = '<h2><span class="highlight">' + msg + '</span></h2>';
|
||||||
@ -18,16 +18,16 @@ Gittip.forms.showFeedback = function(msg, details) {
|
|||||||
$('#feedback .details').append('<li>' + details[i] + '</li>');
|
$('#feedback .details').append('<li>' + details[i] + '</li>');
|
||||||
};
|
};
|
||||||
|
|
||||||
Gittip.forms.submit = function(url, data, success, error) {
|
Gratipay.forms.submit = function(url, data, success, error) {
|
||||||
if (success === undefined) {
|
if (success === undefined) {
|
||||||
success = function() {
|
success = function() {
|
||||||
Gittip.forms.showFeedback("Success!");
|
Gratipay.forms.showFeedback("Success!");
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (error === undefined) {
|
if (error === undefined) {
|
||||||
error = function(data) {
|
error = function(data) {
|
||||||
Gittip.forms.showFeedback(data.problem);
|
Gratipay.forms.showFeedback(data.problem);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -39,7 +39,7 @@ Gittip.forms.submit = function(url, data, success, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function _error(xhr, foo, bar) {
|
function _error(xhr, foo, bar) {
|
||||||
Gittip.forms.showFeedback( "So sorry!!"
|
Gratipay.forms.showFeedback( "So sorry!!"
|
||||||
, ["There was a fairly drastic error with your request."]
|
, ["There was a fairly drastic error with your request."]
|
||||||
);
|
);
|
||||||
console.log("failed", xhr, foo, bar);
|
console.log("failed", xhr, foo, bar);
|
||||||
@ -54,7 +54,7 @@ Gittip.forms.submit = function(url, data, success, error) {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
Gittip.forms.initCSRF = function() { // https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax
|
Gratipay.forms.initCSRF = function() { // https://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax
|
||||||
jQuery(document).ajaxSend(function(event, xhr, settings) {
|
jQuery(document).ajaxSend(function(event, xhr, settings) {
|
||||||
function sameOrigin(url) {
|
function sameOrigin(url) {
|
||||||
// url could be relative or scheme relative or absolute
|
// url could be relative or scheme relative or absolute
|
||||||
@ -73,7 +73,7 @@ Gittip.forms.initCSRF = function() { // https://docs.djangoproject.com/en/dev/
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!safeMethod(settings.type) && sameOrigin(settings.url)) {
|
if (!safeMethod(settings.type) && sameOrigin(settings.url)) {
|
||||||
xhr.setRequestHeader("X-CSRF-TOKEN", Gittip.getCookie('csrf_token'));
|
xhr.setRequestHeader("X-CSRF-TOKEN", Gratipay.getCookie('csrf_token'));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
2
js/gratipay/gttp.js
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
// Localize gratipayURI for gttp.co widgets
|
||||||
|
gratipayURI = '/';
|
@ -2,15 +2,15 @@
|
|||||||
// ====================
|
// ====================
|
||||||
// "Who inspires you?"
|
// "Who inspires you?"
|
||||||
|
|
||||||
Gittip.jump = {};
|
Gratipay.jump = {};
|
||||||
|
|
||||||
Gittip.jump.init = function() {
|
Gratipay.jump.init = function() {
|
||||||
function jump(e) {
|
function jump(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
|
|
||||||
var platform = Gittip.trim($('#jump select').val()),
|
var platform = Gratipay.trim($('#jump select').val()),
|
||||||
val = Gittip.trim($('#jump input').val());
|
val = Gratipay.trim($('#jump input').val());
|
||||||
if (val)
|
if (val)
|
||||||
window.location = '/on/' + platform + '/' + val + '/';
|
window.location = '/on/' + platform + '/' + val + '/';
|
||||||
}
|
}
|
@ -1,10 +1,10 @@
|
|||||||
Gittip.modal = {};
|
Gratipay.modal = {};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Confirm dialog
|
* Confirm dialog
|
||||||
*
|
*
|
||||||
* @example
|
* @example
|
||||||
* Gittip.modal.confirm({
|
* Gratipay.modal.confirm({
|
||||||
* message: 'Error.',
|
* message: 'Error.',
|
||||||
* yes: 'Yes', // optional
|
* yes: 'Yes', // optional
|
||||||
* no: 'No', // optional
|
* no: 'No', // optional
|
||||||
@ -20,14 +20,14 @@ Gittip.modal = {};
|
|||||||
*
|
*
|
||||||
* @param {object} options
|
* @param {object} options
|
||||||
*/
|
*/
|
||||||
Gittip.modal.confirm = function(options) {
|
Gratipay.modal.confirm = function(options) {
|
||||||
var message = options.message;
|
var message = options.message;
|
||||||
var callback = options.callback;
|
var callback = options.callback;
|
||||||
var yesText = options.yes || 'Yes';
|
var yesText = options.yes || 'Yes';
|
||||||
var noText = options.no || 'No';
|
var noText = options.no || 'No';
|
||||||
var selected = (options.selected || 'yes').toLowerCase();
|
var selected = (options.selected || 'yes').toLowerCase();
|
||||||
|
|
||||||
var dialog = Gittip.jsonml(['div', { 'class': 'modal modal-confirm' },
|
var dialog = Gratipay.jsonml(['div', { 'class': 'modal modal-confirm' },
|
||||||
['p', message],
|
['p', message],
|
||||||
|
|
||||||
['div', { 'class': 'controls' },
|
['div', { 'class': 'controls' },
|
@ -3,14 +3,14 @@
|
|||||||
* @param {string} text Notification text
|
* @param {string} text Notification text
|
||||||
* @param {string} [type=notice] Notification type (one of: notice, error, success)
|
* @param {string} [type=notice] Notification type (one of: notice, error, success)
|
||||||
*/
|
*/
|
||||||
Gittip.notification = function(text, type, timeout) {
|
Gratipay.notification = function(text, type, timeout) {
|
||||||
var type = type || 'notice';
|
var type = type || 'notice';
|
||||||
var timeout = timeout || (type == 'error' ? 10000 : 5000);
|
var timeout = timeout || (type == 'error' ? 10000 : 5000);
|
||||||
|
|
||||||
var dialog = ['div', { 'class': 'notification notification-' + type }, [ 'div', text ]];
|
var dialog = ['div', { 'class': 'notification notification-' + type }, [ 'div', text ]];
|
||||||
var $dialog = $([
|
var $dialog = $([
|
||||||
Gittip.jsonml(dialog),
|
Gratipay.jsonml(dialog),
|
||||||
Gittip.jsonml(dialog)
|
Gratipay.jsonml(dialog)
|
||||||
]);
|
]);
|
||||||
|
|
||||||
if (!$('#notification-area').length)
|
if (!$('#notification-area').length)
|
@ -1,23 +1,23 @@
|
|||||||
/* Bank Account and Credit Card forms
|
/* Bank Account and Credit Card forms
|
||||||
*
|
*
|
||||||
* These two forms share some common wiring under the Gittip.payments
|
* These two forms share some common wiring under the Gratipay.payments
|
||||||
* namespace, and each has unique code under the Gittip.payments.{cc,ba}
|
* namespace, and each has unique code under the Gratipay.payments.{cc,ba}
|
||||||
* namespaces. Each form gets its own page so we only instantiate one of these
|
* namespaces. Each form gets its own page so we only instantiate one of these
|
||||||
* at a time.
|
* at a time.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Gittip.payments = {};
|
Gratipay.payments = {};
|
||||||
|
|
||||||
|
|
||||||
// Common code
|
// Common code
|
||||||
// ===========
|
// ===========
|
||||||
|
|
||||||
Gittip.payments.havePayments = false;
|
Gratipay.payments.havePayments = false;
|
||||||
|
|
||||||
Gittip.payments.processorAttempts = 0;
|
Gratipay.payments.processorAttempts = 0;
|
||||||
|
|
||||||
Gittip.payments.submitDeleteForm = function(e) {
|
Gratipay.payments.submitDeleteForm = function(e) {
|
||||||
var item = $("#payout").length ? "bank account" : "credit card";
|
var item = $("#payout").length ? "bank account" : "credit card";
|
||||||
var slug = $("#payout").length ? "bank-account" : "credit-card";
|
var slug = $("#payout").length ? "bank-account" : "credit-card";
|
||||||
var msg = "Really disconnect your " + item + "?";
|
var msg = "Really disconnect your " + item + "?";
|
||||||
@ -36,7 +36,7 @@ Gittip.payments.submitDeleteForm = function(e) {
|
|||||||
}
|
}
|
||||||
, error: function(x,y,z) {
|
, error: function(x,y,z) {
|
||||||
select(cur);
|
select(cur);
|
||||||
Gittip.notification("Sorry, something went wrong deleting your " + item + ". :(", 'error');
|
Gratipay.notification("Sorry, something went wrong deleting your " + item + ". :(", 'error');
|
||||||
console.log(x,y,z);
|
console.log(x,y,z);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -44,24 +44,24 @@ Gittip.payments.submitDeleteForm = function(e) {
|
|||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
Gittip.payments.onError = function(response) {
|
Gratipay.payments.onError = function(response) {
|
||||||
$('button#save').css('opacity', 1);
|
$('button#save').css('opacity', 1);
|
||||||
var msg = response.status_code + ": " +
|
var msg = response.status_code + ": " +
|
||||||
$.map(response.errors, function(obj) { return obj.description }).join(', ');
|
$.map(response.errors, function(obj) { return obj.description }).join(', ');
|
||||||
Gittip.forms.showFeedback(null, [msg]);
|
Gratipay.forms.showFeedback(null, [msg]);
|
||||||
return msg;
|
return msg;
|
||||||
};
|
};
|
||||||
|
|
||||||
Gittip.payments.onSuccess = function(data) {
|
Gratipay.payments.onSuccess = function(data) {
|
||||||
$('#status').text('working').addClass('highlight');
|
$('#status').text('working').addClass('highlight');
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
$('#status').removeClass('highlight');
|
$('#status').removeClass('highlight');
|
||||||
}, 8000);
|
}, 8000);
|
||||||
$('#delete').show();
|
$('#delete').show();
|
||||||
Gittip.forms.clearFeedback();
|
Gratipay.forms.clearFeedback();
|
||||||
$('button#save').css('opacity', 1);
|
$('button#save').css('opacity', 1);
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
window.location.href = '/' + Gittip.participantId + '/';
|
window.location.href = '/' + Gratipay.participantId + '/';
|
||||||
}, 1000);
|
}, 1000);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -69,26 +69,26 @@ Gittip.payments.onSuccess = function(data) {
|
|||||||
// Bank Accounts
|
// Bank Accounts
|
||||||
// =============
|
// =============
|
||||||
|
|
||||||
Gittip.payments.ba = {};
|
Gratipay.payments.ba = {};
|
||||||
|
|
||||||
Gittip.payments.ba.init = function(balanced_uri, participantId) {
|
Gratipay.payments.ba.init = function(balanced_uri, participantId) {
|
||||||
Gittip.participantId = participantId;
|
Gratipay.participantId = participantId;
|
||||||
$('#delete form').submit(Gittip.payments.submitDeleteForm);
|
$('#delete form').submit(Gratipay.payments.submitDeleteForm);
|
||||||
$('#payout').submit(Gittip.payments.ba.submit);
|
$('#payout').submit(Gratipay.payments.ba.submit);
|
||||||
|
|
||||||
// Lazily depend on Balanced.
|
// Lazily depend on Balanced.
|
||||||
var balanced_js = "https://js.balancedpayments.com/1.1/balanced.min.js";
|
var balanced_js = "https://js.balancedpayments.com/1.1/balanced.min.js";
|
||||||
jQuery.getScript(balanced_js, function() {
|
jQuery.getScript(balanced_js, function() {
|
||||||
Gittip.havePayouts = true;
|
Gratipay.havePayouts = true;
|
||||||
$('input[type!="hidden"]').eq(0).focus();
|
$('input[type!="hidden"]').eq(0).focus();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
Gittip.payments.ba.submit = function (e) {
|
Gratipay.payments.ba.submit = function (e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
|
||||||
$('button#save').css('opacity', 0.5);
|
$('button#save').css('opacity', 0.5);
|
||||||
Gittip.forms.clearFeedback();
|
Gratipay.forms.clearFeedback();
|
||||||
|
|
||||||
var bankAccount = {
|
var bankAccount = {
|
||||||
name: $('#account_name').val(),
|
name: $('#account_name').val(),
|
||||||
@ -96,7 +96,7 @@ Gittip.payments.ba.submit = function (e) {
|
|||||||
routing_number: $('#routing_number').val()
|
routing_number: $('#routing_number').val()
|
||||||
};
|
};
|
||||||
|
|
||||||
Gittip.payments.ba.merchantData = {
|
Gratipay.payments.ba.merchantData = {
|
||||||
//type: 'person', // Oooh, may need to vary this some day?
|
//type: 'person', // Oooh, may need to vary this some day?
|
||||||
street_address: $('#address_1').val(),
|
street_address: $('#address_1').val(),
|
||||||
postal_code: $('#zip').val(),
|
postal_code: $('#zip').val(),
|
||||||
@ -156,17 +156,17 @@ Gittip.payments.ba.submit = function (e) {
|
|||||||
|
|
||||||
if (errors.length) {
|
if (errors.length) {
|
||||||
$('button#save').css('opacity', 1);
|
$('button#save').css('opacity', 1);
|
||||||
Gittip.forms.showFeedback(null, errors);
|
Gratipay.forms.showFeedback(null, errors);
|
||||||
} else {
|
} else {
|
||||||
balanced.bankAccount.create( bankAccount
|
balanced.bankAccount.create( bankAccount
|
||||||
, Gittip.payments.ba.handleResponse
|
, Gratipay.payments.ba.handleResponse
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Gittip.payments.ba.handleResponse = function (response) {
|
Gratipay.payments.ba.handleResponse = function (response) {
|
||||||
if (response.status_code !== 201) {
|
if (response.status_code !== 201) {
|
||||||
var msg = Gittip.payments.onError(response);
|
var msg = Gratipay.payments.onError(response);
|
||||||
$.post('/bank-account.json', {action: 'store-error', msg: msg});
|
$.post('/bank-account.json', {action: 'store-error', msg: msg});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -186,16 +186,16 @@ Gittip.payments.ba.handleResponse = function (response) {
|
|||||||
+ "check, correct, and resubmit your details."
|
+ "check, correct, and resubmit your details."
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
Gittip.forms.showFeedback(data.problem, messages);
|
Gratipay.forms.showFeedback(data.problem, messages);
|
||||||
$('button#save').css('opacity', 1);
|
$('button#save').css('opacity', 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
var detailsToSubmit = Gittip.payments.ba.merchantData;
|
var detailsToSubmit = Gratipay.payments.ba.merchantData;
|
||||||
detailsToSubmit.bank_account_uri = response.bank_accounts[0].href;
|
detailsToSubmit.bank_account_uri = response.bank_accounts[0].href;
|
||||||
|
|
||||||
Gittip.forms.submit( "/bank-account.json"
|
Gratipay.forms.submit( "/bank-account.json"
|
||||||
, detailsToSubmit
|
, detailsToSubmit
|
||||||
, Gittip.payments.onSuccess
|
, Gratipay.payments.onSuccess
|
||||||
, detailedFeedback
|
, detailedFeedback
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
@ -204,36 +204,36 @@ Gittip.payments.ba.handleResponse = function (response) {
|
|||||||
// Credit Cards
|
// Credit Cards
|
||||||
// ============
|
// ============
|
||||||
|
|
||||||
Gittip.payments.cc = {};
|
Gratipay.payments.cc = {};
|
||||||
|
|
||||||
Gittip.payments.cc.init = function(balanced_uri, participantId) {
|
Gratipay.payments.cc.init = function(balanced_uri, participantId) {
|
||||||
Gittip.participantId = participantId;
|
Gratipay.participantId = participantId;
|
||||||
$('#delete form').submit(Gittip.payments.submitDeleteForm);
|
$('#delete form').submit(Gratipay.payments.submitDeleteForm);
|
||||||
$('form#payment').submit(Gittip.payments.cc.submit);
|
$('form#payment').submit(Gratipay.payments.cc.submit);
|
||||||
|
|
||||||
// Lazily depend on Balanced.
|
// Lazily depend on Balanced.
|
||||||
var balanced_js = "https://js.balancedpayments.com/1.1/balanced.min.js";
|
var balanced_js = "https://js.balancedpayments.com/1.1/balanced.min.js";
|
||||||
jQuery.getScript(balanced_js, function() {
|
jQuery.getScript(balanced_js, function() {
|
||||||
Gittip.havePayments = true;
|
Gratipay.havePayments = true;
|
||||||
$('input[type!="hidden"]').eq(0).focus();
|
$('input[type!="hidden"]').eq(0).focus();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
Gittip.payments.cc.submit = function(e) {
|
Gratipay.payments.cc.submit = function(e) {
|
||||||
|
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
$('button#save').css('opacity', 0.5);
|
$('button#save').css('opacity', 0.5);
|
||||||
Gittip.forms.clearFeedback();
|
Gratipay.forms.clearFeedback();
|
||||||
|
|
||||||
if (!Gittip.havePayments) {
|
if (!Gratipay.havePayments) {
|
||||||
if (Gittip.paymentProcessorAttempts++ === 50)
|
if (Gratipay.paymentProcessorAttempts++ === 50)
|
||||||
Gittip.notification( "Gah! Apparently we suck. If you're really motivated, call "
|
Gratipay.notification( "Gah! Apparently we suck. If you're really motivated, call "
|
||||||
+ "me (Chad) at 412-925-4220 and we'll figure this out. "
|
+ "me (Chad) at 412-925-4220 and we'll figure this out. "
|
||||||
+ "Sorry. :-("
|
+ "Sorry. :-("
|
||||||
);
|
);
|
||||||
else
|
else
|
||||||
setTimeout(Gittip.submitPaymentForm, 200);
|
setTimeout(Gratipay.submitPaymentForm, 200);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,7 +260,7 @@ Gittip.payments.cc.submit = function(e) {
|
|||||||
|
|
||||||
// XXX We're duping some of this info in both meta and address due to
|
// XXX We're duping some of this info in both meta and address due to
|
||||||
// evolution of the Balanced API and our stepwise keeping-up. See:
|
// evolution of the Balanced API and our stepwise keeping-up. See:
|
||||||
// https://github.com/gittip/www.gittip.com/issues/2446 and links from
|
// https://github.com/gratipay/www.gratipay.com/issues/2446 and links from
|
||||||
// there.
|
// there.
|
||||||
credit_card.address = { 'line1': val('address_1')
|
credit_card.address = { 'line1': val('address_1')
|
||||||
, 'line2': val('address_2')
|
, 'line2': val('address_2')
|
||||||
@ -275,27 +275,27 @@ Gittip.payments.cc.submit = function(e) {
|
|||||||
|
|
||||||
if (!balanced.card.isCardNumberValid(credit_card.number)) {
|
if (!balanced.card.isCardNumberValid(credit_card.number)) {
|
||||||
$('button#save').css('opacity', 1);
|
$('button#save').css('opacity', 1);
|
||||||
Gittip.forms.showFeedback(null, ["Your card number is bad."]);
|
Gratipay.forms.showFeedback(null, ["Your card number is bad."]);
|
||||||
} else if (!balanced.card.isExpiryValid( credit_card.expiration_month
|
} else if (!balanced.card.isExpiryValid( credit_card.expiration_month
|
||||||
, credit_card.expiration_year
|
, credit_card.expiration_year
|
||||||
)) {
|
)) {
|
||||||
$('button#save').css('opacity', 1);
|
$('button#save').css('opacity', 1);
|
||||||
Gittip.forms.showFeedback(null, ["Your expiration date is bad."]);
|
Gratipay.forms.showFeedback(null, ["Your expiration date is bad."]);
|
||||||
} else if (!balanced.card.isSecurityCodeValid( credit_card.number
|
} else if (!balanced.card.isSecurityCodeValid( credit_card.number
|
||||||
, credit_card.cvv
|
, credit_card.cvv
|
||||||
)) {
|
)) {
|
||||||
$('button#save').css('opacity', 1);
|
$('button#save').css('opacity', 1);
|
||||||
Gittip.forms.showFeedback(null, ["Your CVV is bad."]);
|
Gratipay.forms.showFeedback(null, ["Your CVV is bad."]);
|
||||||
} else {
|
} else {
|
||||||
balanced.card.create(credit_card, Gittip.payments.cc.handleResponse);
|
balanced.card.create(credit_card, Gratipay.payments.cc.handleResponse);
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
Gittip.payments.cc.handleResponse = function(response) {
|
Gratipay.payments.cc.handleResponse = function(response) {
|
||||||
if (response.status_code !== 201) {
|
if (response.status_code !== 201) {
|
||||||
var msg = Gittip.payments.onError(response);
|
var msg = Gratipay.payments.onError(response);
|
||||||
$.post('/credit-card.json', {action: 'store-error', msg: msg});
|
$.post('/credit-card.json', {action: 'store-error', msg: msg});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -312,13 +312,13 @@ Gittip.payments.cc.handleResponse = function(response) {
|
|||||||
$('#status').text('failing');
|
$('#status').text('failing');
|
||||||
$('#delete').show();
|
$('#delete').show();
|
||||||
var details = [];
|
var details = [];
|
||||||
Gittip.forms.showFeedback(data.problem, [data.error]);
|
Gratipay.forms.showFeedback(data.problem, [data.error]);
|
||||||
$('button#save').css('opacity', 1);
|
$('button#save').css('opacity', 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
Gittip.forms.submit( "/credit-card.json"
|
Gratipay.forms.submit( "/credit-card.json"
|
||||||
, {card_uri: response.cards[0].href}
|
, {card_uri: response.cards[0].href}
|
||||||
, Gittip.payments.onSuccess
|
, Gratipay.payments.onSuccess
|
||||||
, detailedFeedback
|
, detailedFeedback
|
||||||
);
|
);
|
||||||
};
|
};
|
@ -1,25 +1,25 @@
|
|||||||
Gittip.profile = {};
|
Gratipay.profile = {};
|
||||||
|
|
||||||
Gittip.profile.toNumber = function(number) {
|
Gratipay.profile.toNumber = function(number) {
|
||||||
if (number == 'plural')
|
if (number == 'plural')
|
||||||
Gittip.profile.toPlural();
|
Gratipay.profile.toPlural();
|
||||||
else if (number == 'singular')
|
else if (number == 'singular')
|
||||||
Gittip.profile.toSingular();
|
Gratipay.profile.toSingular();
|
||||||
};
|
};
|
||||||
|
|
||||||
Gittip.profile.toPlural = function() {
|
Gratipay.profile.toPlural = function() {
|
||||||
$('.i-am').text('We are');
|
$('.i-am').text('We are');
|
||||||
$('.i-m').text("We're");
|
$('.i-m').text("We're");
|
||||||
$('.my').text("Our");
|
$('.my').text("Our");
|
||||||
};
|
};
|
||||||
|
|
||||||
Gittip.profile.toSingular = function() {
|
Gratipay.profile.toSingular = function() {
|
||||||
$('.i-am').text('I am');
|
$('.i-am').text('I am');
|
||||||
$('.i-m').text("I'm");
|
$('.i-m').text("I'm");
|
||||||
$('.my').text("My");
|
$('.my').text("My");
|
||||||
};
|
};
|
||||||
|
|
||||||
Gittip.profile.init = function() {
|
Gratipay.profile.init = function() {
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
// /
|
// /
|
||||||
// XXX This is ripe for refactoring. I ran out of steam. :-/
|
// XXX This is ripe for refactoring. I ran out of steam. :-/
|
||||||
@ -70,13 +70,13 @@ Gittip.profile.init = function() {
|
|||||||
function success(d) {
|
function success(d) {
|
||||||
$('.statement .view span').html(d.statement);
|
$('.statement .view span').html(d.statement);
|
||||||
var number = $('.statement select').val();
|
var number = $('.statement select').val();
|
||||||
Gittip.profile.toNumber(number);
|
Gratipay.profile.toNumber(number);
|
||||||
finish_editing_statement();
|
finish_editing_statement();
|
||||||
update_members_button(is_plural);
|
update_members_button(is_plural);
|
||||||
}
|
}
|
||||||
function error(e) {
|
function error(e) {
|
||||||
$('.statement button.save').css('opacity', 1);
|
$('.statement button.save').css('opacity', 1);
|
||||||
Gittip.notification(JSON.parse(e.responseText).error_message_long, 'error');
|
Gratipay.notification(JSON.parse(e.responseText).error_message_long, 'error');
|
||||||
}
|
}
|
||||||
jQuery.ajax(
|
jQuery.ajax(
|
||||||
{ url: "statement.json"
|
{ url: "statement.json"
|
||||||
@ -161,7 +161,7 @@ Gittip.profile.init = function() {
|
|||||||
, success: success
|
, success: success
|
||||||
, error: function() {
|
, error: function() {
|
||||||
$('.goal button.save').css('opacity', 1);
|
$('.goal button.save').css('opacity', 1);
|
||||||
Gittip.notification("Failed to change your funding goal. Please try again.", 'error');
|
Gratipay.notification("Failed to change your funding goal. Please try again.", 'error');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -217,7 +217,7 @@ Gittip.profile.init = function() {
|
|||||||
success: success,
|
success: success,
|
||||||
error: function () {
|
error: function () {
|
||||||
$this.css('opacity', 1);
|
$this.css('opacity', 1);
|
||||||
Gittip.notification("Invalid Bitcoin address. Please try again.", 'error');
|
Gratipay.notification("Invalid Bitcoin address. Please try again.", 'error');
|
||||||
},
|
},
|
||||||
data: {
|
data: {
|
||||||
bitcoin_address: $('input.bitcoin').val()
|
bitcoin_address: $('input.bitcoin').val()
|
||||||
@ -245,9 +245,9 @@ Gittip.profile.init = function() {
|
|||||||
},
|
},
|
||||||
error: function (e) {
|
error: function (e) {
|
||||||
try {
|
try {
|
||||||
Gittip.notification(JSON.parse(e.responseText).error_message_long, 'error');
|
Gratipay.notification(JSON.parse(e.responseText).error_message_long, 'error');
|
||||||
} catch(exception) {
|
} catch(exception) {
|
||||||
Gittip.notification("Some error occured: "+exception, 'error')
|
Gratipay.notification("Some error occured: "+exception, 'error')
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
data: { platform: this.dataset.platform, user_id: this.dataset.user_id }
|
data: { platform: this.dataset.platform, user_id: this.dataset.user_id }
|
@ -1,4 +1,4 @@
|
|||||||
Gittip.team = (function() {
|
Gratipay.team = (function() {
|
||||||
function init() {
|
function init() {
|
||||||
var $team = $('#team');
|
var $team = $('#team');
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ Gittip.team = (function() {
|
|||||||
var rows = [];
|
var rows = [];
|
||||||
|
|
||||||
if (nmembers === 0) {
|
if (nmembers === 0) {
|
||||||
rows.push(Gittip.jsonml(
|
rows.push(Gratipay.jsonml(
|
||||||
[ 'tr'
|
[ 'tr'
|
||||||
, ['td', {'colspan': '6', 'class': 'no-members'}, "No members"]
|
, ['td', {'colspan': '6', 'class': 'no-members'}, "No members"]
|
||||||
]
|
]
|
||||||
@ -69,7 +69,7 @@ Gittip.team = (function() {
|
|||||||
increase = 'max';
|
increase = 'max';
|
||||||
|
|
||||||
if (i < nmembers)
|
if (i < nmembers)
|
||||||
rows.push(Gittip.jsonml(
|
rows.push(Gratipay.jsonml(
|
||||||
[ 'tr'
|
[ 'tr'
|
||||||
, ['td', {'class': 'n'}, (i === nmembers ? '' : nmembers - i)]
|
, ['td', {'class': 'n'}, (i === nmembers ? '' : nmembers - i)]
|
||||||
, ['td', ['a', {'href': '/'+member.username+'/'}, member.username]]
|
, ['td', ['a', {'href': '/'+member.username+'/'}, member.username]]
|
||||||
@ -80,7 +80,7 @@ Gittip.team = (function() {
|
|||||||
]
|
]
|
||||||
));
|
));
|
||||||
else if (nmembers > 0)
|
else if (nmembers > 0)
|
||||||
rows.push(Gittip.jsonml(
|
rows.push(Gratipay.jsonml(
|
||||||
[ 'tr'
|
[ 'tr'
|
||||||
, ['td']
|
, ['td']
|
||||||
, ['td']
|
, ['td']
|
||||||
@ -113,7 +113,7 @@ Gittip.team = (function() {
|
|||||||
var items = [];
|
var items = [];
|
||||||
for (var i=0, len=results.length; i<len; i++) {
|
for (var i=0, len=results.length; i<len; i++) {
|
||||||
var result = results[i];
|
var result = results[i];
|
||||||
items.push(Gittip.jsonml(
|
items.push(Gratipay.jsonml(
|
||||||
['li', {"data-id": result.id}, result.username]
|
['li', {"data-id": result.id}, result.username]
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@ -124,7 +124,7 @@ Gittip.team = (function() {
|
|||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
var query = $('#query').val();
|
var query = $('#query').val();
|
||||||
setTake(query, '0.01', function() { Gittip.notification('Member added!', 'success'); });
|
setTake(query, '0.01', function() { Gratipay.notification('Member added!', 'success'); });
|
||||||
$('#lookup-results').empty();
|
$('#lookup-results').empty();
|
||||||
$('#query').val('').focus();
|
$('#query').val('').focus();
|
||||||
return false;
|
return false;
|
||||||
@ -135,7 +135,7 @@ Gittip.team = (function() {
|
|||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
var membername = $(e.target).attr('data-username');
|
var membername = $(e.target).attr('data-username');
|
||||||
if (confirm("Remove " + membername + " from this team?"))
|
if (confirm("Remove " + membername + " from this team?"))
|
||||||
setTake(membername, '0.00', function() { Gittip.notification('Member removed!'); });
|
setTake(membername, '0.00', function() { Gratipay.notification('Member removed!'); });
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,21 +161,21 @@ Gittip.team = (function() {
|
|||||||
var username = _.attr('data-username'),
|
var username = _.attr('data-username'),
|
||||||
take = _.val();
|
take = _.val();
|
||||||
if (take.search(/^\d+\.?\d*$/) !== 0)
|
if (take.search(/^\d+\.?\d*$/) !== 0)
|
||||||
Gittip.notification("Bad input! Must be a number.", 'error');
|
Gratipay.notification("Bad input! Must be a number.", 'error');
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var callback = function(d) {
|
var callback = function(d) {
|
||||||
var newTake = $.grep(d, function(row) { return row.username == username })[0].take;
|
var newTake = $.grep(d, function(row) { return row.username == username })[0].take;
|
||||||
if ( take == newTake)
|
if ( take == newTake)
|
||||||
Gittip.notification('Updated your take!', 'success');
|
Gratipay.notification('Updated your take!', 'success');
|
||||||
else
|
else
|
||||||
Gittip.notification('You cannot exceed double of last week. Updated your take to ' + newTake + '.', 'error');
|
Gratipay.notification('You cannot exceed double of last week. Updated your take to ' + newTake + '.', 'error');
|
||||||
|
|
||||||
// Have a little fun if updating the user's take results in the team balance
|
// Have a little fun if updating the user's take results in the team balance
|
||||||
// equaling $0.01 or $1.00
|
// equaling $0.01 or $1.00
|
||||||
var balance = $('.figure.balance').last().text();
|
var balance = $('.figure.balance').last().text();
|
||||||
if (localStorage && !localStorage.lastSushi && (balance == '0.01' || balance == '1.00')) {
|
if (localStorage && !localStorage.lastSushi && (balance == '0.01' || balance == '1.00')) {
|
||||||
Gittip.notification('Achievement Unlocked: The Last Sushi Roll', 'success');
|
Gratipay.notification('Achievement Unlocked: The Last Sushi Roll', 'success');
|
||||||
localStorage.lastSushi = true;
|
localStorage.lastSushi = true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -184,7 +184,7 @@ Gittip.team = (function() {
|
|||||||
resetTake();
|
resetTake();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
callback = function() { Gittip.notification('Removed!'); };
|
callback = function() { Gratipay.notification('Removed!'); };
|
||||||
}
|
}
|
||||||
setTake(username, take, callback);
|
setTake(username, take, callback);
|
||||||
}
|
}
|
||||||
@ -205,8 +205,8 @@ Gittip.team = (function() {
|
|||||||
, success: function(d) { drawRows(d); callback(d); }
|
, success: function(d) { drawRows(d); callback(d); }
|
||||||
, error: function(xhr) {
|
, error: function(xhr) {
|
||||||
switch (xhr.status) {
|
switch (xhr.status) {
|
||||||
case 404: Gittip.notification("Unknown user!", 'error'); break;
|
case 404: Gratipay.notification("Unknown user!", 'error'); break;
|
||||||
default: Gittip.notification("Problem! " + xhr.status, 'error');
|
default: Gratipay.notification("Problem! " + xhr.status, 'error');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
@ -1,6 +1,6 @@
|
|||||||
Gittip.tips = {};
|
Gratipay.tips = {};
|
||||||
|
|
||||||
Gittip.tips.init = function() {
|
Gratipay.tips.init = function() {
|
||||||
|
|
||||||
// Check the tip value on change, or 0.7 seconds after the user stops typing.
|
// Check the tip value on change, or 0.7 seconds after the user stops typing.
|
||||||
// If the user presses enter, the browser should natively submit the form.
|
// If the user presses enter, the browser should natively submit the form.
|
||||||
@ -105,9 +105,9 @@ Gittip.tips.init = function() {
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if(isAnon)
|
if(isAnon)
|
||||||
Gittip.notification("Please sign in first", 'error');
|
Gratipay.notification("Please sign in first", 'error');
|
||||||
else
|
else
|
||||||
Gittip.tips.set(tippee, amount, function() {
|
Gratipay.tips.set(tippee, amount, function() {
|
||||||
// lock-in changes
|
// lock-in changes
|
||||||
$myTip[0].defaultValue = amount;
|
$myTip[0].defaultValue = amount;
|
||||||
$myTip.change();
|
$myTip.change();
|
||||||
@ -119,43 +119,43 @@ Gittip.tips.init = function() {
|
|||||||
parseInt($('.on-elsewhere .ready .number').text(),10) + 1);
|
parseInt($('.on-elsewhere .ready .number').text(),10) + 1);
|
||||||
|
|
||||||
// Use global notification system.
|
// Use global notification system.
|
||||||
Gittip.notification("Tip changed to $" + amount.toFixed(2) + "!", 'success');
|
Gratipay.notification("Tip changed to $" + amount.toFixed(2) + "!", 'success');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Gittip.tips.initSupportGittip = function() {
|
Gratipay.tips.initSupportGratipay = function() {
|
||||||
$('.support-gittip button').click(function() {
|
$('.support-gratipay button').click(function() {
|
||||||
var amount = parseFloat($(this).attr('data-amount'), 10);
|
var amount = parseFloat($(this).attr('data-amount'), 10);
|
||||||
Gittip.tips.set('Gittip', amount, function() {
|
Gratipay.tips.set('Gratipay', amount, function() {
|
||||||
Gittip.notification("Thank you so much for supporting Gittip! :D", 'success');
|
Gratipay.notification("Thank you so much for supporting Gratipay! :D", 'success');
|
||||||
$('.support-gittip').slideUp();
|
$('.support-gratipay').slideUp();
|
||||||
|
|
||||||
// If you're on your own giving page ...
|
// If you're on your own giving page ...
|
||||||
var tip_on_giving = $('.my-tip[data-tippee="Gittip"]');
|
var tip_on_giving = $('.my-tip[data-tippee="Gratipay"]');
|
||||||
if (tip_on_giving.length > 0) {
|
if (tip_on_giving.length > 0) {
|
||||||
tip_on_giving[0].defaultValue = amount;
|
tip_on_giving[0].defaultValue = amount;
|
||||||
tip_on_giving.attr('value', amount.toFixed(2));
|
tip_on_giving.attr('value', amount.toFixed(2));
|
||||||
}
|
}
|
||||||
|
|
||||||
// If you're on Gittip's profile page or your own profile page,
|
// If you're on Gratipay's profile page or your own profile page,
|
||||||
// updating the proper giving/receiving amounts is apparently taken
|
// updating the proper giving/receiving amounts is apparently taken
|
||||||
// care of in Gittip.tips.set.
|
// care of in Gratipay.tips.set.
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
$('.support-gittip .no-thanks').click(function(event) {
|
$('.support-gratipay .no-thanks').click(function(event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
jQuery.post('/ride-free.json')
|
jQuery.post('/ride-free.json')
|
||||||
.success(function() { $('.support-gittip').slideUp(); })
|
.success(function() { $('.support-gratipay').slideUp(); })
|
||||||
.fail(function() { Gittip.notification("Sorry, there was an error.", "failure"); })
|
.fail(function() { Gratipay.notification("Sorry, there was an error.", "failure"); })
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
Gittip.tips.set = function(tippee, amount, callback) {
|
Gratipay.tips.set = function(tippee, amount, callback) {
|
||||||
|
|
||||||
// send request to change tip
|
// send request to change tip
|
||||||
$.post('/' + tippee + '/tip.json', { amount: amount }, function(data) {
|
$.post('/' + tippee + '/tip.json', { amount: amount }, function(data) {
|
||||||
@ -172,7 +172,7 @@ Gittip.tips.set = function(tippee, amount, callback) {
|
|||||||
$('.quick-stats a').text('$' + data.total_giving + '/wk');
|
$('.quick-stats a').text('$' + data.total_giving + '/wk');
|
||||||
})
|
})
|
||||||
.fail(function() {
|
.fail(function() {
|
||||||
Gittip.notification('Sorry, something went wrong while changing your tip. :(', 'error');
|
Gratipay.notification('Sorry, something went wrong while changing your tip. :(', 'error');
|
||||||
console.log.apply(console, arguments);
|
console.log.apply(console, arguments);
|
||||||
});
|
});
|
||||||
};
|
};
|
@ -1,4 +1,4 @@
|
|||||||
// strips Unicode & non-printable characters, then leading/trailing whitespace
|
// strips Unicode & non-printable characters, then leading/trailing whitespace
|
||||||
Gittip.trim = function(s) {
|
Gratipay.trim = function(s) {
|
||||||
return s.replace(/[^\x20-\x7F]/g, '').replace(/^\s+|\s+$/g, '');
|
return s.replace(/[^\x20-\x7F]/g, '').replace(/^\s+|\s+$/g, '');
|
||||||
}
|
}
|
@ -1,6 +1,6 @@
|
|||||||
Gittip.upgrade = {};
|
Gratipay.upgrade = {};
|
||||||
|
|
||||||
Gittip.upgrade.init = function () {
|
Gratipay.upgrade.init = function () {
|
||||||
|
|
||||||
var userAgent = navigator.userAgent.toLowerCase();
|
var userAgent = navigator.userAgent.toLowerCase();
|
||||||
var browser = (userAgent.indexOf('msie') != -1) ? parseInt(userAgent.split('msie')[1], 10) : -1;
|
var browser = (userAgent.indexOf('msie') != -1) ? parseInt(userAgent.split('msie')[1], 10) : -1;
|
||||||
@ -17,4 +17,4 @@ Gittip.upgrade.init = function () {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$(document).ready(Gittip.upgrade.init);
|
$(document).ready(Gratipay.upgrade.init);
|
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "gittip",
|
"name": "gratipay",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {},
|
"dependencies": {},
|
||||||
|
@ -19,9 +19,9 @@ if [ $# = 0 -o "$1" = "" ]; then
|
|||||||
echo
|
echo
|
||||||
echo "Usage: $0 <number> [\"for_real_please\"]"
|
echo "Usage: $0 <number> [\"for_real_please\"]"
|
||||||
echo
|
echo
|
||||||
echo " This is a payday wrapper script for Gittip. It runs payday, logging to a file."
|
echo " This is a payday wrapper script for Gratipay. It runs payday, logging to a file."
|
||||||
echo " You must pass at least one argument, a small integer indicating which week of "
|
echo " You must pass at least one argument, a small integer indicating which week of "
|
||||||
echo " Gittip you are running (it's only used to decide where to log). If you pass a"
|
echo " Gratipay you are running (it's only used to decide where to log). If you pass a"
|
||||||
echo " second arg then it must be the string \"for_real_please\", and in that case we"
|
echo " second arg then it must be the string \"for_real_please\", and in that case we"
|
||||||
echo " try to run against the production database. Without that string we run using "
|
echo " try to run against the production database. Without that string we run using "
|
||||||
echo " your local.env configuration."
|
echo " your local.env configuration."
|
||||||
@ -67,7 +67,7 @@ start () {
|
|||||||
# ====
|
# ====
|
||||||
|
|
||||||
if [ "$2" == "for_real_please" ]; then
|
if [ "$2" == "for_real_please" ]; then
|
||||||
LOG="../paydays/gittip-$1.log"
|
LOG="../paydays/gratipay-$1.log"
|
||||||
else
|
else
|
||||||
LOG="../paydays/test-$1.log"
|
LOG="../paydays/test-$1.log"
|
||||||
fi
|
fi
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
# Exit if any subcommands or pipeline returns a non-zero status.
|
# Exit if any subcommands or pipeline returns a non-zero status.
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Make a database for Gittip.
|
# Make a database for Gratipay.
|
||||||
#
|
#
|
||||||
# usage: DATABASE_URL=postgres://foo:bar@baz:5234/buz recreate-schema.sh
|
# usage: DATABASE_URL=postgres://foo:bar@baz:5234/buz recreate-schema.sh
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ if [ $# = 0 ]; then
|
|||||||
echo
|
echo
|
||||||
echo "Usage: $0 <version>"
|
echo "Usage: $0 <version>"
|
||||||
echo
|
echo
|
||||||
echo " This is a release script for Gittip. We bump the version number in "
|
echo " This is a release script for Gratipay. We bump the version number in "
|
||||||
echo " www/version.txt and then do a git dance, pushing to Heroku."
|
echo " www/version.txt and then do a git dance, pushing to Heroku."
|
||||||
echo
|
echo
|
||||||
exit
|
exit
|
||||||
@ -83,8 +83,8 @@ if [ $1 ]; then
|
|||||||
# Check that the environment contains all required variables.
|
# Check that the environment contains all required variables.
|
||||||
# ===========================================================
|
# ===========================================================
|
||||||
|
|
||||||
heroku config -sa gittip | ./env/bin/honcho run -e /dev/stdin \
|
heroku config -sa gratipay | ./env/bin/honcho run -e /dev/stdin \
|
||||||
./env/bin/python gittip/wireup.py
|
./env/bin/python gratipay/wireup.py
|
||||||
|
|
||||||
|
|
||||||
# Bump the version.
|
# Bump the version.
|
||||||
|
34
schema.sql
@ -9,11 +9,11 @@
|
|||||||
-- numeric(35,2) maxes out at $999,999,999,999,999,999,999,999,999,999,999.00.
|
-- numeric(35,2) maxes out at $999,999,999,999,999,999,999,999,999,999,999.00.
|
||||||
|
|
||||||
|
|
||||||
-- https://github.com/gittip/www.gittip.com/pull/1274
|
-- https://github.com/gratipay/www.gratipay.com/pull/1274
|
||||||
CREATE TYPE participant_number AS ENUM ('singular', 'plural');
|
CREATE TYPE participant_number AS ENUM ('singular', 'plural');
|
||||||
|
|
||||||
|
|
||||||
-- https://github.com/gittip/www.gittip.com/pull/2305
|
-- https://github.com/gratipay/www.gratipay.com/pull/2305
|
||||||
CREATE TYPE email_address_with_confirmation AS
|
CREATE TYPE email_address_with_confirmation AS
|
||||||
(
|
(
|
||||||
address text,
|
address text,
|
||||||
@ -55,7 +55,7 @@ CREATE TABLE participants
|
|||||||
, is_free_rider boolean DEFAULT NULL
|
, is_free_rider boolean DEFAULT NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
-- https://github.com/gittip/www.gittip.com/pull/1610
|
-- https://github.com/gratipay/www.gratipay.com/pull/1610
|
||||||
CREATE INDEX participants_claimed_time ON participants (claimed_time DESC)
|
CREATE INDEX participants_claimed_time ON participants (claimed_time DESC)
|
||||||
WHERE is_suspicious IS NOT TRUE
|
WHERE is_suspicious IS NOT TRUE
|
||||||
AND claimed_time IS NOT null;
|
AND claimed_time IS NOT null;
|
||||||
@ -82,7 +82,7 @@ CREATE TABLE elsewhere
|
|||||||
, UNIQUE (platform, participant)
|
, UNIQUE (platform, participant)
|
||||||
);
|
);
|
||||||
|
|
||||||
-- https://github.com/gittip/www.gittip.com/issues/951
|
-- https://github.com/gratipay/www.gratipay.com/issues/951
|
||||||
CREATE INDEX elsewhere_participant ON elsewhere(participant);
|
CREATE INDEX elsewhere_participant ON elsewhere(participant);
|
||||||
|
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ CREATE VIEW current_tips AS
|
|||||||
ORDER BY tipper, tippee, mtime DESC;
|
ORDER BY tipper, tippee, mtime DESC;
|
||||||
|
|
||||||
|
|
||||||
-- https://github.com/gittip/www.gittip.com/pull/2501
|
-- https://github.com/gratipay/www.gratipay.com/pull/2501
|
||||||
CREATE TYPE context_type AS ENUM
|
CREATE TYPE context_type AS ENUM
|
||||||
('tip', 'take', 'final-gift', 'take-over', 'one-off');
|
('tip', 'take', 'final-gift', 'take-over', 'one-off');
|
||||||
|
|
||||||
@ -146,11 +146,11 @@ CREATE TABLE paydays
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
-- https://github.com/gittip/www.gittip.com/pull/2579
|
-- https://github.com/gratipay/www.gratipay.com/pull/2579
|
||||||
CREATE TYPE exchange_status AS ENUM ('pre', 'pending', 'failed', 'succeeded');
|
CREATE TYPE exchange_status AS ENUM ('pre', 'pending', 'failed', 'succeeded');
|
||||||
|
|
||||||
|
|
||||||
-- exchanges -- when a participant moves cash between Gittip and their bank
|
-- exchanges -- when a participant moves cash between Gratipay and their bank
|
||||||
CREATE TABLE exchanges
|
CREATE TABLE exchanges
|
||||||
( id serial PRIMARY KEY
|
( id serial PRIMARY KEY
|
||||||
, timestamp timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
|
, timestamp timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
@ -163,7 +163,7 @@ CREATE TABLE exchanges
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
-- https://github.com/gittip/www.gittip.com/issues/406
|
-- https://github.com/gratipay/www.gratipay.com/issues/406
|
||||||
CREATE TABLE absorptions
|
CREATE TABLE absorptions
|
||||||
( id serial PRIMARY KEY
|
( id serial PRIMARY KEY
|
||||||
, timestamp timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
|
, timestamp timestamp with time zone NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
@ -175,8 +175,8 @@ CREATE TABLE absorptions
|
|||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
-- https://github.com/gittip/www.gittip.com/issues/545
|
-- https://github.com/gratipay/www.gratipay.com/issues/545
|
||||||
-- https://github.com/gittip/www.gittip.com/issues/778
|
-- https://github.com/gratipay/www.gratipay.com/issues/778
|
||||||
CREATE VIEW goal_summary AS
|
CREATE VIEW goal_summary AS
|
||||||
SELECT tippee as id
|
SELECT tippee as id
|
||||||
, goal
|
, goal
|
||||||
@ -196,7 +196,7 @@ CREATE VIEW goal_summary AS
|
|||||||
GROUP BY tippee, goal, percentage, statement;
|
GROUP BY tippee, goal, percentage, statement;
|
||||||
|
|
||||||
|
|
||||||
-- https://github.com/gittip/www.gittip.com/issues/496
|
-- https://github.com/gratipay/www.gratipay.com/issues/496
|
||||||
CREATE TABLE communities
|
CREATE TABLE communities
|
||||||
( id bigserial PRIMARY KEY
|
( id bigserial PRIMARY KEY
|
||||||
, ctime timestamp with time zone NOT NULL
|
, ctime timestamp with time zone NOT NULL
|
||||||
@ -208,7 +208,7 @@ CREATE TABLE communities
|
|||||||
, is_member boolean
|
, is_member boolean
|
||||||
);
|
);
|
||||||
|
|
||||||
-- https://github.com/gittip/www.gittip.com/pull/2430
|
-- https://github.com/gratipay/www.gratipay.com/pull/2430
|
||||||
CREATE INDEX ON communities (slug);
|
CREATE INDEX ON communities (slug);
|
||||||
|
|
||||||
CREATE OR REPLACE VIEW current_communities AS
|
CREATE OR REPLACE VIEW current_communities AS
|
||||||
@ -231,7 +231,7 @@ CREATE VIEW community_summary AS
|
|||||||
ORDER BY nmembers DESC, slug;
|
ORDER BY nmembers DESC, slug;
|
||||||
|
|
||||||
|
|
||||||
-- https://github.com/gittip/www.gittip.com/issues/1085
|
-- https://github.com/gratipay/www.gratipay.com/issues/1085
|
||||||
CREATE TABLE takes
|
CREATE TABLE takes
|
||||||
( id serial PRIMARY KEY
|
( id serial PRIMARY KEY
|
||||||
, ctime timestamp with time zone NOT NULL
|
, ctime timestamp with time zone NOT NULL
|
||||||
@ -268,7 +268,7 @@ CREATE VIEW current_takes AS
|
|||||||
) AS anon WHERE amount > 0;
|
) AS anon WHERE amount > 0;
|
||||||
|
|
||||||
|
|
||||||
-- https://github.com/gittip/www.gittip.com/pull/1369
|
-- https://github.com/gratipay/www.gratipay.com/pull/1369
|
||||||
-- The following lets us cast queries to elsewhere_with_participant to get the
|
-- The following lets us cast queries to elsewhere_with_participant to get the
|
||||||
-- participant data dereferenced and returned in a composite type along with
|
-- participant data dereferenced and returned in a composite type along with
|
||||||
-- the elsewhere data.
|
-- the elsewhere data.
|
||||||
@ -309,7 +309,7 @@ CREATE CAST (elsewhere AS elsewhere_with_participant)
|
|||||||
WITH FUNCTION load_participant_for_elsewhere(elsewhere);
|
WITH FUNCTION load_participant_for_elsewhere(elsewhere);
|
||||||
|
|
||||||
|
|
||||||
-- https://github.com/gittip/www.gittip.com/pull/2006
|
-- https://github.com/gratipay/www.gratipay.com/pull/2006
|
||||||
CREATE TABLE events
|
CREATE TABLE events
|
||||||
( id serial PRIMARY KEY
|
( id serial PRIMARY KEY
|
||||||
, ts timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
, ts timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||||
@ -321,7 +321,7 @@ CREATE INDEX events_ts ON events(ts ASC);
|
|||||||
CREATE INDEX events_type ON events(type);
|
CREATE INDEX events_type ON events(type);
|
||||||
|
|
||||||
|
|
||||||
-- https://github.com/gittip/www.gittip.com/issues/1417
|
-- https://github.com/gratipay/www.gratipay.com/issues/1417
|
||||||
CREATE INDEX transfers_tipper_tippee_timestamp_idx
|
CREATE INDEX transfers_tipper_tippee_timestamp_idx
|
||||||
ON transfers
|
ON transfers
|
||||||
USING btree
|
USING btree
|
||||||
@ -329,7 +329,7 @@ CREATE INDEX transfers_tipper_tippee_timestamp_idx
|
|||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
-- https://github.com/gittip/www.gittip.com/pull/2682
|
-- https://github.com/gratipay/www.gratipay.com/pull/2682
|
||||||
|
|
||||||
BEGIN;
|
BEGIN;
|
||||||
|
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
CREATE ROLE gittip LOGIN PASSWORD 'gittip' SUPERUSER;
|
CREATE ROLE gratipay LOGIN PASSWORD 'gratipay' SUPERUSER;
|
||||||
CREATE DATABASE gittip WITH OWNER = gittip;
|
CREATE DATABASE gratipay WITH OWNER = gratipay;
|
||||||
|
@ -1 +1 @@
|
|||||||
CREATE DATABASE "gittip-test" WITH OWNER = gittip;
|
CREATE DATABASE "gratipay-test" WITH OWNER = gratipay;
|
||||||
|
@ -23,12 +23,12 @@ if grep --quiet --binary --binary-files=without-match $(printf '\r') README.md;
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Set up the environment, the database, and run Gittip
|
# Set up the environment, the database, and run Gratipay
|
||||||
cd /vagrant && make clean env schema data
|
cd /vagrant && make clean env schema data
|
||||||
|
|
||||||
# Output helper text
|
# Output helper text
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
|
|
||||||
Gittip installed! To run,
|
Gratipay installed! To run,
|
||||||
$ vagrant ssh --command "make run"
|
$ vagrant ssh --command "make run"
|
||||||
EOF
|
EOF
|
||||||
|