Massive cleanup in preparation for 0.30 (#25)
* Only use environment variable to configure the application.
In order to simplify deployment on containerized or 12-factor centric
environment (such as Docker or Heroku) where writing configuration
file is not preferrable.
We also prefer to have only a single way to configure application,
which means Pyramid-style ini configurations are now dropped in favor
for environment variable.
* Refactor post utils into post filters
Akismet, DNSBL and proxy checking are now refactored into a 'filter'
which can be easily extended.
* Replaced Beaker with PyNaCl-based session storage.
This change switched session storage from Memcached-based session
storage to a cookie-based session storage with strong encryption
* Replaced app-specific settings with setting model.
Application specific settings are now stored in the database instead
of configuration file as these configurations are not required
for running the app and may require a bit more complicate data
* Add services layer
We've added services layer and successfully migrated the application
to use services rather than calling components directly. This change
will make it easier to extend as well as optimizing the application
in the future.
This change also allowed us to remove complexity from model, such as
that post-commit hooks are now done within the services layer.
Caching is also implemented in some services, such as settings.
* Explicitly setting up routes.
We will add authentication and authorization, which requires
flexibility on the routing configuration, which means the helper in
its current form is no longer preferrable.
* Use Pyramid native CSRF implementation.
We have now switched to Pyramid's native CSRF implementation instead
of using home-grown SecureForm. This change resulted in a simplified
form handling throughout the application.
* Replaced fb2 maintenance scripts.
As we will have a proper admin interface, these scripts are no
longer necessary and its usage are discouraged. Due to this, we are
dropping all the maintenance scripts in favor for a more specific
* Remove PyCharm-style type annotations.
To be replaced with Python 3.5-style type annotations in order to
incorporate type checking with MyPy.
* Consolidate assets directory for concerns separation.
Move all assets-related files into assets/ so it's clear that which
files are responsible for compiling assets (and thus purgable after
assets are compiled when building images).
* Convert JsonType field to native JSON field.
SQLALchemy has since supported the native JSON field in PostgreSQL
and it is no longer necessary to use our own implementation of JSON
field that was a wrapper over Text.
* Cleanup migration files
Styling fixes per Flake8.
* Update dependencies.
Make sure dependencies are up-to-date.
Update changelog and bump version to 0.10.1.
Update asset packages and fix warnings.
Update all out-of-dated npm packages to latest version and fix
TS2415 error that was introduced due to upgrading to TypeScript 2.
Implement theme selector.
User can now choose the default theme to display the website in.
The theme will be applied immediately without page reload once
selected in the theme selector. After selected, the theme identifier
will be stored in a cookie (`_theme`) and the app will use that cookie
to select the correct CSS class to render on the next page load.
Theme selection is done in both client side (via the theme selector)
and on the server side (via the `user_theme`) in order to prevent a
quick page flashing in large pages (e.g. full topic view) which is
Move from whatwg-fetch to XMLHttpRequest.
Since whatwg-fetch currently doesn't support cancellation and
we need to be able to cancel the request. This commit replace
whatwg-fetch and any code that relies on it to use XHR with
Use Typings instead of TSD.
TSD is now deprecated. See also GitHub issue:
Add lodash.merge to vendor dependencies.
Properly add tsd to package.json.
And remove gulp-tsd as we're will be invoking tsd manually
and not using gulp-tsd.
Convert assets to use ECMAScript 5.1 with TypeScript.
As using ECMAScript 6 with TypeScript currently feel a little bit
premature (especially on tooling front.) This change also make
the compiled assets much smaller (by half) since babel-polyfill
is no longer required.
Add DOM4 to vendor package.
For modern DOM manipulation. As we won't add jQuery to the app.
Use npm to manage vendor assets and add tsd.
Vendor assets are now managed by npm and bundled using browserify
instead of concating files inside vendor/ directory. This change
should allow for much cleaner and easier package management.
TypeScript definitions are now loaded using tsd instead of placing
a file inside vendor/ except for whatwg-fetch which need a little
modification to support ES2015 Promise.
Configure TypeScript with Babel for ES2015 support.
Replace brunch with gulp and setup JS compilation.
For a more flexible compilation profile and larger community
resources (with ease of integration with Browserify/TypeScript
as a primary reason).
Rewrite all of the frontend-related components.
For extensibility, consistency and maintainability.
Extensibility: after this changes, the layout is separated from the
look of the site. It is now possible to create custom themes for
the site with minimum overrides.
Consistency: now the frontend styles uses shared variables for its
color, metric, font-size and line-height values. The overall look
of the site should be more consistent than before.
Maintainbility: SCSS is now being used instead of Stylus as the
former has much bigger community. Few PostCSS modules is chosen to
automatically transform and optimize CSS (for prefixes, cache-busting
hash, and such.)
Cleanup Brunch package and configuration files.
Merge branch 'feature/experiment-view2' of github.com:pxfs/fanboi2 into feature/experiment-view2
Initial template with cleaner header design.
In the new template, we re opt to the simpler flat template structure
to reduce CSS processing overhead as well as allow us to do selector
Remove old view components.
As part of template cleanup effort, we're switching from Jinja2 to Mako
in order to reduce number of old packages which are not compatible with