├── data └── .gitkeep ├── libs └── .gitkeep ├── blog ├── __init__.py ├── blueprints │ ├── __init__.py │ ├── admin │ │ ├── __init__.py │ │ ├── models.py │ │ ├── views.py │ │ └── templates │ │ │ └── login.html │ ├── apis │ │ ├── __init__.py │ │ └── views.py │ └── posts │ │ ├── __init__.py │ │ ├── templates │ │ ├── new.html │ │ ├── nicEditor.html │ │ ├── comment.html │ │ ├── list_posts_for_editing.html │ │ ├── editor.html │ │ ├── edit.html │ │ ├── list_posts.html │ │ ├── _paginate.html │ │ └── detail.html │ │ ├── models.py │ │ └── views.py ├── templates │ ├── tags.html │ ├── autocomplete.html │ ├── slide.html │ └── base.html ├── manager.py ├── settings.py ├── main.py └── utilities.py ├── .openshift ├── cron │ ├── daily │ │ └── .gitignore │ ├── hourly │ │ ├── .gitignore │ │ └── heatcache │ ├── minutely │ │ └── .gitignore │ ├── monthly │ │ └── .gitignore │ ├── weekly │ │ ├── chrono.dat │ │ ├── chronograph │ │ ├── jobs.deny │ │ ├── jobs.allow │ │ └── README │ └── README.cron ├── action_hooks │ ├── post_deploy │ ├── deploy │ ├── pre_build │ ├── build │ ├── post_start_python-2.6 │ ├── post_stop_python-2.6 │ ├── pre_start_python-2.6 │ └── pre_stop_python-2.6 └── markers │ └── README ├── wsgi ├── static │ ├── images │ │ ├── .gitkeeper │ │ ├── alipay.png │ │ ├── bg_tags.gif │ │ ├── pengfei.jpg │ │ ├── sina_32x32.png │ │ ├── douban_32x32.png │ │ ├── ui-anim_basic_16x16.gif │ │ ├── glyphicons-halflings.png │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ └── horn.svg │ ├── css │ │ ├── highlight │ │ │ ├── pojoaque.jpg │ │ │ ├── school_book.png │ │ │ ├── brown_papersq.png │ │ │ ├── ascetic.css │ │ │ ├── tomorrow.css │ │ │ ├── solarized_dark.css │ │ │ ├── solarized_light.css │ │ │ ├── tomorrow-night-bright.css │ │ │ ├── tomorrow-night-eighties.css │ │ │ ├── tomorrow-night.css │ │ │ ├── tomorrow-night-blue.css │ │ │ ├── vs.css │ │ │ ├── ir_black.css │ │ │ ├── pojoaque.css │ │ │ ├── dark.css │ │ │ ├── rainbow.css │ │ │ ├── brown_paper.css │ │ │ ├── github.css │ │ │ ├── idea.css │ │ │ ├── far.css │ │ │ ├── monokai.css │ │ │ ├── zenburn.css │ │ │ ├── magula.css │ │ │ ├── school_book.css │ │ │ ├── googlecode.css │ │ │ ├── default.css │ │ │ ├── sunburst.css │ │ │ ├── xcode.css │ │ │ └── arta.css │ │ ├── blog.css │ │ ├── bootstrap │ │ │ └── bootstrap-responsive.css │ │ └── jquery-ui.css │ ├── README │ └── js │ │ ├── bootstrap-button.js │ │ ├── bootstrap-carousel.js │ │ └── highlight.pack.js ├── .htaccess └── application ├── .gitignore ├── box ├── uwsgi.ini ├── application.py └── nginx.conf ├── setup.py └── README /data/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /libs/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /blog/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /blog/blueprints/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.openshift/cron/daily/.gitignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.openshift/cron/hourly/.gitignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /blog/blueprints/admin/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /blog/blueprints/apis/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /blog/blueprints/posts/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /wsgi/static/images/.gitkeeper: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.openshift/cron/minutely/.gitignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.openshift/cron/monthly/.gitignore: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.pyo 3 | *.swp 4 | -------------------------------------------------------------------------------- /.openshift/cron/weekly/chrono.dat: -------------------------------------------------------------------------------- 1 | Time And Relative D...n In Execution (Open)Shift! 2 | -------------------------------------------------------------------------------- /.openshift/cron/hourly/heatcache: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | curl -I https://life-map.rhcloud.com/apis/cnbeta.json 4 | -------------------------------------------------------------------------------- /.openshift/cron/weekly/chronograph: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "`date`: `cat $(dirname \"$0\")/chrono.dat`" 4 | -------------------------------------------------------------------------------- /wsgi/static/images/alipay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coldfire-x/openshift-flask-mongdb/HEAD/wsgi/static/images/alipay.png -------------------------------------------------------------------------------- /wsgi/static/images/bg_tags.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coldfire-x/openshift-flask-mongdb/HEAD/wsgi/static/images/bg_tags.gif -------------------------------------------------------------------------------- /wsgi/static/images/pengfei.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coldfire-x/openshift-flask-mongdb/HEAD/wsgi/static/images/pengfei.jpg -------------------------------------------------------------------------------- /wsgi/static/images/sina_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coldfire-x/openshift-flask-mongdb/HEAD/wsgi/static/images/sina_32x32.png -------------------------------------------------------------------------------- /wsgi/static/images/douban_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coldfire-x/openshift-flask-mongdb/HEAD/wsgi/static/images/douban_32x32.png -------------------------------------------------------------------------------- /wsgi/.htaccess: -------------------------------------------------------------------------------- 1 | RewriteEngine on 2 | 3 | RewriteCond %{HTTP:X-Forwarded-Proto} !https 4 | RewriteRule .* https://%{HTTP_HOST}%{REQUEST} [R,L] 5 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/pojoaque.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coldfire-x/openshift-flask-mongdb/HEAD/wsgi/static/css/highlight/pojoaque.jpg -------------------------------------------------------------------------------- /wsgi/static/css/highlight/school_book.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coldfire-x/openshift-flask-mongdb/HEAD/wsgi/static/css/highlight/school_book.png -------------------------------------------------------------------------------- /wsgi/static/images/ui-anim_basic_16x16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coldfire-x/openshift-flask-mongdb/HEAD/wsgi/static/images/ui-anim_basic_16x16.gif -------------------------------------------------------------------------------- /wsgi/static/css/highlight/brown_papersq.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coldfire-x/openshift-flask-mongdb/HEAD/wsgi/static/css/highlight/brown_papersq.png -------------------------------------------------------------------------------- /wsgi/static/images/glyphicons-halflings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coldfire-x/openshift-flask-mongdb/HEAD/wsgi/static/images/glyphicons-halflings.png -------------------------------------------------------------------------------- /wsgi/static/images/ui-bg_glass_75_dadada_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coldfire-x/openshift-flask-mongdb/HEAD/wsgi/static/images/ui-bg_glass_75_dadada_1x400.png -------------------------------------------------------------------------------- /.openshift/cron/weekly/jobs.deny: -------------------------------------------------------------------------------- 1 | # 2 | # Any script or job files listed in here (one entry per line) will NOT be 3 | # executed (read as ignored by run-parts). 4 | # 5 | 6 | README 7 | 8 | -------------------------------------------------------------------------------- /.openshift/action_hooks/post_deploy: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # This is a simple post deploy hook executed after your application 3 | # is deployed and started. This script gets executed directly, so 4 | # it could be python, php, ruby, etc. -------------------------------------------------------------------------------- /.openshift/action_hooks/deploy: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # This deploy hook gets executed after dependencies are resolved and the 3 | # build hook has been run but before the application has been started back 4 | # up again. This script gets executed directly, so it could be python, php, 5 | # ruby, etc. 6 | -------------------------------------------------------------------------------- /.openshift/action_hooks/pre_build: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # This is a simple script and will be executed on your CI system if 3 | # available. Otherwise it will execute while your application is stopped 4 | # before the build step. This script gets executed directly, so it 5 | # could be python, php, ruby, etc. -------------------------------------------------------------------------------- /.openshift/action_hooks/build: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # This is a simple build script and will be executed on your CI system if 3 | # available. Otherwise it will execute while your application is stopped 4 | # before the deploy step. This script gets executed directly, so it 5 | # could be python, php, ruby, etc. -------------------------------------------------------------------------------- /blog/templates/tags.html: -------------------------------------------------------------------------------- 1 | {% if tags %} 2 |
3 |

tags

4 | 11 |
12 | {% endif %} 13 | -------------------------------------------------------------------------------- /.openshift/markers/README: -------------------------------------------------------------------------------- 1 | Markers 2 | =========== 3 | 4 | Adding marker files to this directory will have the following effects: 5 | 6 | force_clean_build - Will remove the python virtualenv and force rebuild it 7 | including any previously downloaded libraries 8 | 9 | hot_deploy - Enables the dynamic reloading of python scripts via WSGI Daemon 10 | mode. 11 | -------------------------------------------------------------------------------- /box/uwsgi.ini: -------------------------------------------------------------------------------- 1 | [uwsgi] 2 | socket=127.0.0.1:8000 3 | master=true 4 | processes=2 5 | 6 | protocol = uwsgi 7 | touch-reload = /tmp/uwsgi_reload.txt 8 | daemonize = /tmp/uwsgi.log 9 | pidfile = /tmp/uwsgi.pid 10 | 11 | virtualenv = /Users/pengphy/Codes/virtualenvs/virtenv 12 | pythonpath = /Users/pengphy/Codes/virtualenvs/virtenv/life 13 | 14 | chdir = /Users/pengphy/Codes/virtualenvs/virtenv/life/box 15 | module = application 16 | callable = app 17 | -------------------------------------------------------------------------------- /blog/manager.py: -------------------------------------------------------------------------------- 1 | import sys, os 2 | sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) 3 | 4 | from flask.ext.script import Manager, Server 5 | from main import app 6 | 7 | manager = Manager(app) 8 | 9 | # Turn on debugger by default and reloader 10 | manager.add_command("runserver", Server( 11 | use_debugger = True, 12 | use_reloader = True, 13 | host = '0.0.0.0') 14 | ) 15 | 16 | if __name__ == "__main__": 17 | manager.run() 18 | -------------------------------------------------------------------------------- /.openshift/cron/weekly/jobs.allow: -------------------------------------------------------------------------------- 1 | # 2 | # Script or job files listed in here (one entry per line) will be 3 | # executed on a weekly-basis. 4 | # 5 | # Example: The chronograph script will be executed weekly but the README 6 | # and chrono.dat files in this directory will be ignored. 7 | # 8 | # The README file is actually ignored due to the entry in the 9 | # jobs.deny which is checked before jobs.allow (this file). 10 | # 11 | chronograph 12 | 13 | -------------------------------------------------------------------------------- /box/application.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | import sys 4 | 5 | sys.path.append(os.path.join(os.environ['OPENSHIFT_REPO_DIR'], 'blog')) 6 | 7 | virtenv = os.environ['APPDIR'] + '/virtenv/' 8 | os.environ['PYTHON_EGG_CACHE'] = os.path.join(virtenv, 'lib/python2.6/site-packages') 9 | virtualenv = os.path.join(virtenv, 'bin/activate_this.py') 10 | try: 11 | execfile(virtualenv, dict(__file__=virtualenv)) 12 | except IOError: 13 | pass 14 | 15 | from main import app 16 | -------------------------------------------------------------------------------- /wsgi/application: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | import os 3 | import sys 4 | 5 | sys.path.append(os.path.join(os.environ['OPENSHIFT_REPO_DIR'], 'blog')) 6 | 7 | virtenv = os.environ['APPDIR'] + '/virtenv/' 8 | os.environ['PYTHON_EGG_CACHE'] = os.path.join(virtenv, 'lib/python2.6/site-packages') 9 | virtualenv = os.path.join(virtenv, 'bin/activate_this.py') 10 | try: 11 | execfile(virtualenv, dict(__file__=virtualenv)) 12 | except IOError: 13 | pass 14 | 15 | from main import app as application 16 | -------------------------------------------------------------------------------- /wsgi/static/README: -------------------------------------------------------------------------------- 1 | Public, static content goes here. Users can create rewrite rules to link to 2 | content in the static dir. For example, django commonly uses /media/ 3 | directories for static content. For example in a .htaccess file in a 4 | wsgi/.htaccess location, developers could put: 5 | 6 | RewriteEngine On 7 | RewriteRule ^application/media/(.+)$ /static/media/$1 [L] 8 | 9 | Then copy the media/* content to yourapp/wsgi/static/media/ and it should 10 | just work. 11 | 12 | Note: The ^application/ part of the URI match is required. 13 | -------------------------------------------------------------------------------- /blog/blueprints/posts/templates/new.html: -------------------------------------------------------------------------------- 1 | {% import "editor.html" as forms %} 2 | {% extends "base.html" %} 3 | 4 | {% block css_header %} 5 | 6 | 7 | {% endblock %} 8 | 9 | {% block sidebar %} 10 |
11 | {% endblock %} 12 | 13 | {% block content %} 14 | {{ forms.render(form) }} 15 | {% endblock %} 16 | 17 | {% block js_footer %} 18 | 19 | {% endblock %} 20 | -------------------------------------------------------------------------------- /blog/settings.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | # debug 4 | DEBUG = os.environ.get('FLASK_DEBUG', False) 5 | 6 | # mongodb configuration 7 | MONGODB_DB = os.environ['OPENSHIFT_APP_NAME'] 8 | MONGODB_USERNAME = os.environ['OPENSHIFT_MONGODB_DB_USERNAME'] 9 | MONGODB_PASSWORD = os.environ['OPENSHIFT_MONGODB_DB_PASSWORD'] 10 | MONGODB_HOST = os.environ['OPENSHIFT_MONGODB_DB_HOST'] 11 | MONGODB_PORT = os.environ['OPENSHIFT_MONGODB_DB_PORT'] 12 | 13 | # secret keys 14 | SECRET_KEY = '=5NO>NO>a"Tj4=^#~Co^T#fD_b!-&J' 15 | 16 | # cache timeout, 30 mins 17 | CACHE_TIMEOUT = 60 * 30 18 | 19 | # PERMANENT_SESSION_LIFETIME 20 | PERMANENT_SESSION_LIFETIME = 60 * 60 * 15 21 | -------------------------------------------------------------------------------- /blog/blueprints/admin/models.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from main import db 4 | 5 | class Users(db.Document): 6 | username = db.StringField(required=True) 7 | password = db.StringField(required=True) 8 | first_name = db.StringField(max_length=50) 9 | last_name = db.StringField(max_length=50) 10 | 11 | @classmethod 12 | def check_user_passwd(cls, username, password): 13 | is_valid = None 14 | 15 | try: 16 | Users.objects.get(username=username, password=password) 17 | except Users.DoesNotExist: 18 | is_valid = False 19 | else: 20 | is_valid = True 21 | 22 | return is_valid 23 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from setuptools import setup 2 | 3 | setup(name='life-map', 4 | version='1.0', 5 | description='blog for pengfei xue', 6 | author='Pengfei Xue', 7 | author_email='pengphy@gmail.com', 8 | url='https://facebook.com/pengfei.xue', 9 | install_requires=['flask==0.9', 10 | 'mongoengine==0.7.6', 11 | 'flask-mongoengine==0.6', 12 | 'Flask-Script==0.5.1', 13 | 'Flask-WTF==0.8', 14 | 'WTForms==1.0.2', 15 | 'pymongo==2.3', 16 | 'Jinja2==2.6', 17 | 'WTForms==1.0.2', 18 | 'Werkzeug==0.8.3', 19 | 'argparse==1.2.1', 20 | 'feedparser==5.1.3', 21 | ], 22 | ) 23 | -------------------------------------------------------------------------------- /.openshift/action_hooks/post_start_python-2.6: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # The pre_start_cartridge and pre_stop_cartridge hooks are *SOURCED* 4 | # immediately before (re)starting or stopping the specified cartridge. 5 | # They are able to make any desired environment variable changes as 6 | # well as other adjustments to the application environment. 7 | 8 | # The post_start_cartridge and post_stop_cartridge hooks are executed 9 | # immediately after (re)starting or stopping the specified cartridge. 10 | 11 | # Exercise caution when adding commands to these hooks. They can 12 | # prevent your application from stopping cleanly or starting at all. 13 | # Application start and stop is subject to different timeouts 14 | # throughout the system. 15 | -------------------------------------------------------------------------------- /.openshift/action_hooks/post_stop_python-2.6: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # The pre_start_cartridge and pre_stop_cartridge hooks are *SOURCED* 4 | # immediately before (re)starting or stopping the specified cartridge. 5 | # They are able to make any desired environment variable changes as 6 | # well as other adjustments to the application environment. 7 | 8 | # The post_start_cartridge and post_stop_cartridge hooks are executed 9 | # immediately after (re)starting or stopping the specified cartridge. 10 | 11 | # Exercise caution when adding commands to these hooks. They can 12 | # prevent your application from stopping cleanly or starting at all. 13 | # Application start and stop is subject to different timeouts 14 | # throughout the system. 15 | -------------------------------------------------------------------------------- /.openshift/action_hooks/pre_start_python-2.6: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # The pre_start_cartridge and pre_stop_cartridge hooks are *SOURCED* 4 | # immediately before (re)starting or stopping the specified cartridge. 5 | # They are able to make any desired environment variable changes as 6 | # well as other adjustments to the application environment. 7 | 8 | # The post_start_cartridge and post_stop_cartridge hooks are executed 9 | # immediately after (re)starting or stopping the specified cartridge. 10 | 11 | # Exercise caution when adding commands to these hooks. They can 12 | # prevent your application from stopping cleanly or starting at all. 13 | # Application start and stop is subject to different timeouts 14 | # throughout the system. 15 | -------------------------------------------------------------------------------- /.openshift/action_hooks/pre_stop_python-2.6: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # The pre_start_cartridge and pre_stop_cartridge hooks are *SOURCED* 4 | # immediately before (re)starting or stopping the specified cartridge. 5 | # They are able to make any desired environment variable changes as 6 | # well as other adjustments to the application environment. 7 | 8 | # The post_start_cartridge and post_stop_cartridge hooks are executed 9 | # immediately after (re)starting or stopping the specified cartridge. 10 | 11 | # Exercise caution when adding commands to these hooks. They can 12 | # prevent your application from stopping cleanly or starting at all. 13 | # Application start and stop is subject to different timeouts 14 | # throughout the system. 15 | -------------------------------------------------------------------------------- /blog/blueprints/posts/templates/nicEditor.html: -------------------------------------------------------------------------------- 1 | {% block css_header %} 2 | 3 | {% endblock %} 4 | 5 | {% macro nicEditor() -%} 6 | 10 | 11 | 12 | 17 | 18 | 19 | 20 | 21 | 22 | {%- endmacro %} 23 | -------------------------------------------------------------------------------- /blog/templates/autocomplete.html: -------------------------------------------------------------------------------- 1 | {% macro autocomplete(elem_id, minlenght_in=1) -%} 2 | 21 | {%- endmacro %} 22 | -------------------------------------------------------------------------------- /.openshift/cron/weekly/README: -------------------------------------------------------------------------------- 1 | Run scripts or jobs on a weekly basis 2 | ===================================== 3 | Any scripts or jobs added to this directory will be run on a scheduled basis 4 | (weekly) using run-parts. 5 | 6 | run-parts ignores any files that are hidden or dotfiles (.*) or backup 7 | files (*~ or *,) or named *.{rpmsave,rpmorig,rpmnew,swp,cfsaved} and handles 8 | the files named jobs.deny and jobs.allow specially. 9 | 10 | In this specific example, the chronograph script is the only script or job file 11 | executed on a weekly basis (due to white-listing it in jobs.allow). And the 12 | README and chrono.dat file are ignored either as a result of being black-listed 13 | in jobs.deny or because they are NOT white-listed in the jobs.allow file. 14 | 15 | For more details, please see ../README.cron file. 16 | 17 | -------------------------------------------------------------------------------- /blog/blueprints/posts/templates/comment.html: -------------------------------------------------------------------------------- 1 | {% macro render(form) -%} 2 |
3 | {% for field in form %} 4 | {% if field.type in ['CSRFTokenField', 'HiddenField'] %} 5 | {{ field() }} 6 | {% else %} 7 |
8 | {{ field.label }} 9 |
10 | {% if field.name == "body" %} 11 | {{ field(cols=80, rows=6, class="span6") }} 12 | {% else %} 13 | {{ field() }} 14 | {% endif %} 15 | {% if field.errors or field.help_text %} 16 | 17 | {% if field.errors %} 18 | {{ field.errors|join(' ') }} 19 | {% else %} 20 | {{ field.help_text }} 21 | {% endif %} 22 | 23 | {% endif %} 24 |
25 |
26 | {% endif %} 27 | {% endfor %} 28 |
29 | {% endmacro %} 30 | -------------------------------------------------------------------------------- /blog/blueprints/posts/templates/list_posts_for_editing.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block sidebar %} 4 |
5 | {% endblock %} 6 | 7 | {% block content %} 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | {% for post in posts %} 17 | 18 | 19 | 20 | 21 | 22 | {% endfor %} 23 | 24 |
TitleCreatedActions
{{ post.title }}{{ post.created_at.strftime('%Y-%m-%d') }}Edit
25 | {% endblock %} 26 | -------------------------------------------------------------------------------- /blog/blueprints/posts/templates/editor.html: -------------------------------------------------------------------------------- 1 | {% macro render(form) -%} 2 | 3 |
4 |
5 | {{ form.hidden_tag() }} 6 |
7 | 8 | 9 | 10 |
11 | 12 | {% import "nicEditor.html" as nicEditor %} 13 | {% call nicEditor.nicEditor() %} {% endcall %} 14 | 15 |


16 | 17 |

18 | 19 | {% import 'autocomplete.html' as autocomplete %} 20 | {{ autocomplete.autocomplete('#tag-suggest') }} 21 | 22 |
23 | 24 | {% endmacro %} 25 | -------------------------------------------------------------------------------- /blog/blueprints/posts/templates/edit.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block sidebar %} 4 |
5 | {% endblock %} 6 | 7 | {% block content %} 8 |
9 |
10 | {{ form.hidden_tag() }} 11 |
12 | 13 | 14 | 15 |
16 | 17 | {% import "nicEditor.html" as nicEditor %} 18 | {% call nicEditor.nicEditor() %} {{ post.body }} {% endcall %} 19 | 20 |


21 | 22 |

23 |
24 | {% endblock %} 25 | -------------------------------------------------------------------------------- /blog/blueprints/posts/templates/list_posts.html: -------------------------------------------------------------------------------- 1 | {% import "_paginate.html" as paginate %} 2 | {% extends "base.html" %} 3 | 4 | {% block content %} 5 | {% for post in pagination.items %} 6 |
7 |

{{ post.title }}

8 |

{{ post.body | striptags | truncate(100) }}

9 |

10 | {{ post.created_at.strftime('%Y-%m-%d %H:%M') }} | 11 | {% with total=post.comments|length %} 12 | {{ total }} comment {%- if total > 1 %}s{%- endif -%} 13 | {% endwith %} 14 |

15 |
16 | {% endfor %} 17 | 18 | {% if pagination.has_prev or pagination.has_next %} 19 | {% if tag %} 20 | {% set endpoint = 'posts.tags' %} 21 | {% else %} 22 | {% set endpoint = 'posts.index' %} 23 | {% endif %} 24 | {{ paginate.render(pagination, endpoint, tag) }} 25 | {% endif %} 26 | {% endblock %} 27 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/ascetic.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Original style from softwaremaniacs.org (c) Ivan Sagalaev 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background: white; color: black; 10 | } 11 | 12 | pre .string, 13 | pre .tag .value, 14 | pre .filter .argument, 15 | pre .addition, 16 | pre .change, 17 | pre .apache .tag, 18 | pre .apache .cbracket, 19 | pre .nginx .built_in, 20 | pre .tex .formula { 21 | color: #888; 22 | } 23 | 24 | pre .comment, 25 | pre .template_comment, 26 | pre .shebang, 27 | pre .doctype, 28 | pre .pi, 29 | pre .javadoc, 30 | pre .deletion, 31 | pre .apache .sqbracket { 32 | color: #CCC; 33 | } 34 | 35 | pre .keyword, 36 | pre .tag .title, 37 | pre .ini .title, 38 | pre .lisp .title, 39 | pre .clojure .title, 40 | pre .http .title, 41 | pre .nginx .title, 42 | pre .css .tag, 43 | pre .winutils, 44 | pre .flow, 45 | pre .apache .tag, 46 | pre .tex .command, 47 | pre .request, 48 | pre .status { 49 | font-weight: bold; 50 | } 51 | -------------------------------------------------------------------------------- /wsgi/static/images/horn.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /blog/main.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf8 -*- 2 | import os 3 | 4 | from flask import Flask, url_for, redirect 5 | from flask.ext.mongoengine import MongoEngine 6 | 7 | import utilities 8 | 9 | # NOTE : tricky here, import self otherwise there will be 10 | # import cycle issue 11 | import main 12 | 13 | app = Flask(__name__) 14 | app.config.from_object('settings') 15 | 16 | # get db connection 17 | db = MongoEngine(app) 18 | 19 | from blueprints.admin.views import admin 20 | from blueprints.posts.views import posts 21 | from blueprints.apis.views import apis 22 | app.register_blueprint(admin, url_prefix='/admin') 23 | app.register_blueprint(posts) 24 | app.register_blueprint(apis, url_prefix='/apis') 25 | 26 | 27 | if __name__ == "__main__": 28 | import logging 29 | from werkzeug.serving import run_simple 30 | 31 | app.logger.setLevel(logging.DEBUG) 32 | logging.getLogger().setLevel(logging.DEBUG) 33 | logging.info("Launching server at port %d", 5000) 34 | 35 | run_simple('localhost', 5000, app, use_reloader=True, 36 | passthrough_errors=True, threaded=True) 37 | 38 | logging.info("Server sucessfully terminated") 39 | -------------------------------------------------------------------------------- /blog/utilities.py: -------------------------------------------------------------------------------- 1 | import time 2 | import functools 3 | 4 | import feedparser 5 | from jinja2 import Markup 6 | from flask import request, session, url_for, redirect, current_app 7 | 8 | 9 | def login_required(func): 10 | @functools.wraps(func) 11 | def wrappered_func(*args, **kwargs): 12 | if not all(session.get(key) for key in('uid', 'ts')) \ 13 | or (time.time() - session.get('ts') > 14 | current_app.config['PERMANENT_SESSION_LIFETIME']): 15 | return redirect(url_for('admin.login')) 16 | return func(*args, **kwargs) 17 | return wrappered_func 18 | 19 | 20 | def uniq_list(list_in, sep): 21 | new_list = [ele for ele in set(x.strip().lower() 22 | for x in list_in.split(sep))] 23 | 24 | return new_list 25 | 26 | 27 | def get_cnbeta_feed(): 28 | d = feedparser.parse('http://www.cnbeta.com/backend.php') 29 | 30 | tips = [] 31 | for entry in d.entries[:20]: 32 | tip = {} 33 | tip['title'] = entry.title 34 | tip['content'] = Markup(entry.summary).striptags() 35 | tip['link'] = entry.link 36 | tips.append(tip) 37 | 38 | return tips 39 | -------------------------------------------------------------------------------- /.openshift/cron/README.cron: -------------------------------------------------------------------------------- 1 | Run scripts or jobs on a periodic basis 2 | ======================================= 3 | Any scripts or jobs added to the minutely, hourly, daily, weekly or monthly 4 | directories will be run on a scheduled basis (frequency is as indicated by the 5 | name of the directory) using run-parts. 6 | 7 | run-parts ignores any files that are hidden or dotfiles (.*) or backup 8 | files (*~ or *,) or named *.{rpmsave,rpmorig,rpmnew,swp,cfsaved} 9 | 10 | The presence of two specially named files jobs.deny and jobs.allow controls 11 | how run-parts executes your scripts/jobs. 12 | jobs.deny ===> Prevents specific scripts or jobs from being executed. 13 | jobs.allow ===> Only execute the named scripts or jobs (all other/non-named 14 | scripts that exist in this directory are ignored). 15 | 16 | The principles of jobs.deny and jobs.allow are the same as those of cron.deny 17 | and cron.allow and are described in detail at: 18 | http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/ch-Automating_System_Tasks.html#s2-autotasks-cron-access 19 | 20 | See: man crontab or above link for more details and see the the weekly/ 21 | directory for an example. 22 | 23 | -------------------------------------------------------------------------------- /blog/blueprints/posts/templates/_paginate.html: -------------------------------------------------------------------------------- 1 | {% macro render(pagination, endpoint, tag) %} 2 | 37 | {% endmacro %} 38 | -------------------------------------------------------------------------------- /blog/blueprints/apis/views.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf8 -*- 2 | 3 | from flask import Blueprint, jsonify, request 4 | from flask.views import MethodView 5 | from werkzeug.contrib.cache import SimpleCache 6 | 7 | from blueprints.posts.models import Post 8 | from utilities import get_cnbeta_feed 9 | 10 | apis = Blueprint('apis', __name__) 11 | 12 | cache = SimpleCache() 13 | 14 | class CnbetaFeedView(MethodView): 15 | def get(self): 16 | tips = cache.get('tips') 17 | 18 | if not tips: 19 | tips = get_cnbeta_feed() 20 | cache.set('tips', tips) 21 | 22 | return jsonify(tips=tips) 23 | 24 | 25 | class TagAutocomplete(MethodView): 26 | def get(self): 27 | term = request.args.get('term', None) 28 | items = Post.objects().only('tags') 29 | 30 | result = [] 31 | for item in items: 32 | result.extend(item.tags) 33 | result = list(filter(lambda tag: term.lower() in tag.lower(), 34 | set(result))) 35 | 36 | return jsonify(items=result) 37 | 38 | 39 | apis.add_url_rule('/cnbeta.json', 40 | view_func=CnbetaFeedView.as_view('cnbetacallpoint')) 41 | 42 | apis.add_url_rule('/tagautocomplete.json', 43 | view_func=TagAutocomplete.as_view('tagautocomplete')) 44 | -------------------------------------------------------------------------------- /blog/blueprints/posts/models.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | import datetime 4 | 5 | from flask import url_for 6 | 7 | from main import db 8 | 9 | class Post(db.Document): 10 | created_at = db.DateTimeField(default=datetime.datetime.now, required=True) 11 | updated_at = db.DateTimeField(default=datetime.datetime.now, required=True) 12 | title = db.StringField(max_length=255, required=True) 13 | slug = db.StringField(max_length=255, required=True) 14 | body = db.StringField(required=True) 15 | tags = db.ListField(db.StringField(max_length=60), default=[u'未分类']) 16 | comments = db.ListField(db.EmbeddedDocumentField('Comment')) 17 | 18 | def get_absolute_url(self): 19 | return url_for('post', kwargs={"slug": self.slug}) 20 | 21 | def __unicode__(self): 22 | return self.title 23 | 24 | meta = { 25 | 'allow_inheritance': True, 26 | 'indexes': ['-created_at', 'slug'], 27 | 'ordering': ['-updated_at'] 28 | } 29 | 30 | 31 | class Comment(db.EmbeddedDocument): 32 | created_at = db.DateTimeField(default=datetime.datetime.now, required=True) 33 | body = db.StringField(verbose_name="Comment", required=True) 34 | author = db.StringField(verbose_name="Name", max_length=255, required=True) 35 | -------------------------------------------------------------------------------- /blog/blueprints/admin/views.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf8 -*- 2 | import hashlib 3 | import time 4 | 5 | import flask 6 | from flask import (Blueprint, request, redirect, session, 7 | render_template, url_for, escape) 8 | from flask.views import MethodView 9 | from flask.ext.mongoengine.wtf import model_form 10 | 11 | from blueprints.admin.models import Users 12 | from utilities import login_required 13 | 14 | 15 | admin = Blueprint('admin', __name__, template_folder='templates') 16 | 17 | 18 | class AdminLogin(MethodView): 19 | def get(self): 20 | return render_template('login.html') 21 | 22 | def post(self): 23 | username = escape(request.form['username']) 24 | password = escape(request.form['password']) 25 | passwd_md5 = hashlib.md5(password).hexdigest() 26 | 27 | is_valid = Users.check_user_passwd(username, passwd_md5) 28 | if is_valid: 29 | session['uid'] = username 30 | session['ts'] = time.time() 31 | return redirect(url_for('.console')) 32 | 33 | else: 34 | error = 'Invalid credentials' 35 | 36 | return render_template('login.html', error=error) 37 | 38 | 39 | @admin.route('/console') 40 | @login_required 41 | def console(): 42 | return redirect(url_for('posts.index')) 43 | 44 | admin.add_url_rule('/', view_func=AdminLogin.as_view('login')) 45 | admin.add_url_rule('/login', view_func=AdminLogin.as_view('login')) 46 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/tomorrow.css: -------------------------------------------------------------------------------- 1 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 2 | .tomorrow-comment, pre .comment, pre .title { 3 | color: #8e908c; 4 | } 5 | 6 | .tomorrow-red, pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant, pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype, pre .css .id, pre .css .class, pre .css .pseudo { 7 | color: #c82829; 8 | } 9 | 10 | .tomorrow-orange, pre .number, pre .preprocessor, pre .built_in, pre .literal, pre .params, pre .constant { 11 | color: #f5871f; 12 | } 13 | 14 | .tomorrow-yellow, pre .class, pre .ruby .class .title, pre .css .rules .attribute { 15 | color: #eab700; 16 | } 17 | 18 | .tomorrow-green, pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata { 19 | color: #718c00; 20 | } 21 | 22 | .tomorrow-aqua, pre .css .hexcolor { 23 | color: #3e999f; 24 | } 25 | 26 | .tomorrow-blue, pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title, pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title { 27 | color: #4271ae; 28 | } 29 | 30 | .tomorrow-purple, pre .keyword, pre .javascript .function { 31 | color: #8959a8; 32 | } 33 | 34 | pre code { 35 | display: block; 36 | background: white; 37 | color: #4d4d4c; 38 | padding: 0.5em; 39 | } 40 | 41 | pre .coffeescript .javascript, 42 | pre .javascript .xml, 43 | pre .tex .formula, 44 | pre .xml .javascript, 45 | pre .xml .vbscript, 46 | pre .xml .css, 47 | pre .xml .cdata { 48 | opacity: 0.5; 49 | } 50 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/solarized_dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background: #002b36; color: #839496; 10 | } 11 | 12 | pre .comment, 13 | pre .template_comment, 14 | pre .diff .header, 15 | pre .doctype, 16 | pre .pi, 17 | pre .lisp .string, 18 | pre .javadoc { 19 | color: #586e75; 20 | font-style: italic; 21 | } 22 | 23 | pre .keyword, 24 | pre .winutils, 25 | pre .method, 26 | pre .addition, 27 | pre .css .tag, 28 | pre .request, 29 | pre .status, 30 | pre .nginx .title { 31 | color: #859900; 32 | } 33 | 34 | pre .number, 35 | pre .command, 36 | pre .string, 37 | pre .tag .value, 38 | pre .phpdoc, 39 | pre .tex .formula, 40 | pre .regexp, 41 | pre .hexcolor { 42 | color: #2aa198; 43 | } 44 | 45 | pre .title, 46 | pre .localvars, 47 | pre .chunk, 48 | pre .decorator, 49 | pre .built_in, 50 | pre .identifier, 51 | pre .vhdl .literal, 52 | pre .id { 53 | color: #268bd2; 54 | } 55 | 56 | pre .attribute, 57 | pre .variable, 58 | pre .lisp .body, 59 | pre .smalltalk .number, 60 | pre .constant, 61 | pre .class .title, 62 | pre .parent, 63 | pre .haskell .type { 64 | color: #b58900; 65 | } 66 | 67 | pre .preprocessor, 68 | pre .preprocessor .keyword, 69 | pre .shebang, 70 | pre .symbol, 71 | pre .symbol .string, 72 | pre .diff .change, 73 | pre .special, 74 | pre .attr_selector, 75 | pre .important, 76 | pre .subst, 77 | pre .cdata, 78 | pre .clojure .title { 79 | color: #cb4b16; 80 | } 81 | 82 | pre .deletion { 83 | color: #dc322f; 84 | } 85 | 86 | pre .tex .formula { 87 | background: #073642; 88 | } 89 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/solarized_light.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background: #fdf6e3; color: #657b83; 10 | } 11 | 12 | pre .comment, 13 | pre .template_comment, 14 | pre .diff .header, 15 | pre .doctype, 16 | pre .pi, 17 | pre .lisp .string, 18 | pre .javadoc { 19 | color: #93a1a1; 20 | font-style: italic; 21 | } 22 | 23 | pre .keyword, 24 | pre .winutils, 25 | pre .method, 26 | pre .addition, 27 | pre .css .tag, 28 | pre .request, 29 | pre .status, 30 | pre .nginx .title { 31 | color: #859900; 32 | } 33 | 34 | pre .number, 35 | pre .command, 36 | pre .string, 37 | pre .tag .value, 38 | pre .phpdoc, 39 | pre .tex .formula, 40 | pre .regexp, 41 | pre .hexcolor { 42 | color: #2aa198; 43 | } 44 | 45 | pre .title, 46 | pre .localvars, 47 | pre .chunk, 48 | pre .decorator, 49 | pre .built_in, 50 | pre .identifier, 51 | pre .vhdl .literal, 52 | pre .id { 53 | color: #268bd2; 54 | } 55 | 56 | pre .attribute, 57 | pre .variable, 58 | pre .lisp .body, 59 | pre .smalltalk .number, 60 | pre .constant, 61 | pre .class .title, 62 | pre .parent, 63 | pre .haskell .type { 64 | color: #b58900; 65 | } 66 | 67 | pre .preprocessor, 68 | pre .preprocessor .keyword, 69 | pre .shebang, 70 | pre .symbol, 71 | pre .symbol .string, 72 | pre .diff .change, 73 | pre .special, 74 | pre .attr_selector, 75 | pre .important, 76 | pre .subst, 77 | pre .cdata, 78 | pre .clojure .title { 79 | color: #cb4b16; 80 | } 81 | 82 | pre .deletion { 83 | color: #dc322f; 84 | } 85 | 86 | pre .tex .formula { 87 | background: #eee8d5; 88 | } 89 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/tomorrow-night-bright.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Night Bright Theme */ 2 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 3 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 4 | .tomorrow-comment, pre .comment, pre .title { 5 | color: #969896; 6 | } 7 | 8 | .tomorrow-red, pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant, pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype, pre .css .id, pre .css .class, pre .css .pseudo { 9 | color: #d54e53; 10 | } 11 | 12 | .tomorrow-orange, pre .number, pre .preprocessor, pre .built_in, pre .literal, pre .params, pre .constant { 13 | color: #e78c45; 14 | } 15 | 16 | .tomorrow-yellow, pre .class, pre .ruby .class .title, pre .css .rules .attribute { 17 | color: #e7c547; 18 | } 19 | 20 | .tomorrow-green, pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata { 21 | color: #b9ca4a; 22 | } 23 | 24 | .tomorrow-aqua, pre .css .hexcolor { 25 | color: #70c0b1; 26 | } 27 | 28 | .tomorrow-blue, pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title, pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title { 29 | color: #7aa6da; 30 | } 31 | 32 | .tomorrow-purple, pre .keyword, pre .javascript .function { 33 | color: #c397d8; 34 | } 35 | 36 | pre code { 37 | display: block; 38 | background: black; 39 | color: #eaeaea; 40 | padding: 0.5em; 41 | } 42 | 43 | pre .coffeescript .javascript, 44 | pre .javascript .xml, 45 | pre .tex .formula, 46 | pre .xml .javascript, 47 | pre .xml .vbscript, 48 | pre .xml .css, 49 | pre .xml .cdata { 50 | opacity: 0.5; 51 | } 52 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/tomorrow-night-eighties.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Night Eighties Theme */ 2 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 3 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 4 | .tomorrow-comment, pre .comment, pre .title { 5 | color: #999999; 6 | } 7 | 8 | .tomorrow-red, pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant, pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype, pre .css .id, pre .css .class, pre .css .pseudo { 9 | color: #f2777a; 10 | } 11 | 12 | .tomorrow-orange, pre .number, pre .preprocessor, pre .built_in, pre .literal, pre .params, pre .constant { 13 | color: #f99157; 14 | } 15 | 16 | .tomorrow-yellow, pre .class, pre .ruby .class .title, pre .css .rules .attribute { 17 | color: #ffcc66; 18 | } 19 | 20 | .tomorrow-green, pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata { 21 | color: #99cc99; 22 | } 23 | 24 | .tomorrow-aqua, pre .css .hexcolor { 25 | color: #66cccc; 26 | } 27 | 28 | .tomorrow-blue, pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title, pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title { 29 | color: #6699cc; 30 | } 31 | 32 | .tomorrow-purple, pre .keyword, pre .javascript .function { 33 | color: #cc99cc; 34 | } 35 | 36 | pre code { 37 | display: block; 38 | background: #2d2d2d; 39 | color: #cccccc; 40 | padding: 0.5em; 41 | } 42 | 43 | pre .coffeescript .javascript, 44 | pre .javascript .xml, 45 | pre .tex .formula, 46 | pre .xml .javascript, 47 | pre .xml .vbscript, 48 | pre .xml .css, 49 | pre .xml .cdata { 50 | opacity: 0.5; 51 | } 52 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/tomorrow-night.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Night Theme */ 2 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 3 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 4 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 5 | .tomorrow-comment, pre .comment, pre .title { 6 | color: #969896; 7 | } 8 | 9 | .tomorrow-red, pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant, pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype, pre .css .id, pre .css .class, pre .css .pseudo { 10 | color: #cc6666; 11 | } 12 | 13 | .tomorrow-orange, pre .number, pre .preprocessor, pre .built_in, pre .literal, pre .params, pre .constant { 14 | color: #de935f; 15 | } 16 | 17 | .tomorrow-yellow, pre .class, pre .ruby .class .title, pre .css .rules .attribute { 18 | color: #f0c674; 19 | } 20 | 21 | .tomorrow-green, pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata { 22 | color: #b5bd68; 23 | } 24 | 25 | .tomorrow-aqua, pre .css .hexcolor { 26 | color: #8abeb7; 27 | } 28 | 29 | .tomorrow-blue, pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title, pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title { 30 | color: #81a2be; 31 | } 32 | 33 | .tomorrow-purple, pre .keyword, pre .javascript .function { 34 | color: #b294bb; 35 | } 36 | 37 | pre code { 38 | display: block; 39 | background: #1d1f21; 40 | color: #c5c8c6; 41 | padding: 0.5em; 42 | } 43 | 44 | pre .coffeescript .javascript, 45 | pre .javascript .xml, 46 | pre .tex .formula, 47 | pre .xml .javascript, 48 | pre .xml .vbscript, 49 | pre .xml .css, 50 | pre .xml .cdata { 51 | opacity: 0.5; 52 | } 53 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/tomorrow-night-blue.css: -------------------------------------------------------------------------------- 1 | /* Tomorrow Night Blue Theme */ 2 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 3 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */ 4 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */ 5 | .tomorrow-comment, pre .comment, pre .title { 6 | color: #7285b7; 7 | } 8 | 9 | .tomorrow-red, pre .variable, pre .attribute, pre .tag, pre .regexp, pre .ruby .constant, pre .xml .tag .title, pre .xml .pi, pre .xml .doctype, pre .html .doctype, pre .css .id, pre .css .class, pre .css .pseudo { 10 | color: #ff9da4; 11 | } 12 | 13 | .tomorrow-orange, pre .number, pre .preprocessor, pre .built_in, pre .literal, pre .params, pre .constant { 14 | color: #ffc58f; 15 | } 16 | 17 | .tomorrow-yellow, pre .class, pre .ruby .class .title, pre .css .rules .attribute { 18 | color: #ffeead; 19 | } 20 | 21 | .tomorrow-green, pre .string, pre .value, pre .inheritance, pre .header, pre .ruby .symbol, pre .xml .cdata { 22 | color: #d1f1a9; 23 | } 24 | 25 | .tomorrow-aqua, pre .css .hexcolor { 26 | color: #99ffff; 27 | } 28 | 29 | .tomorrow-blue, pre .function, pre .python .decorator, pre .python .title, pre .ruby .function .title, pre .ruby .title .keyword, pre .perl .sub, pre .javascript .title, pre .coffeescript .title { 30 | color: #bbdaff; 31 | } 32 | 33 | .tomorrow-purple, pre .keyword, pre .javascript .function { 34 | color: #ebbbff; 35 | } 36 | 37 | pre code { 38 | display: block; 39 | background: #002451; 40 | color: white; 41 | padding: 0.5em; 42 | } 43 | 44 | pre .coffeescript .javascript, 45 | pre .javascript .xml, 46 | pre .tex .formula, 47 | pre .xml .javascript, 48 | pre .xml .vbscript, 49 | pre .xml .css, 50 | pre .xml .cdata { 51 | opacity: 0.5; 52 | } 53 | -------------------------------------------------------------------------------- /blog/templates/slide.html: -------------------------------------------------------------------------------- 1 | 50 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/vs.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Visual Studio-like style based on original C# coloring by Jason Diamond 4 | 5 | */ 6 | pre code { 7 | display: block; padding: 0.5em; 8 | } 9 | 10 | pre .comment, 11 | pre .annotation, 12 | pre .template_comment, 13 | pre .diff .header, 14 | pre .chunk, 15 | pre .apache .cbracket { 16 | color: rgb(0, 128, 0); 17 | } 18 | 19 | pre .keyword, 20 | pre .id, 21 | pre .built_in, 22 | pre .smalltalk .class, 23 | pre .winutils, 24 | pre .bash .variable, 25 | pre .tex .command, 26 | pre .request, 27 | pre .status, 28 | pre .nginx .title, 29 | pre .xml .tag, 30 | pre .xml .tag .value { 31 | color: rgb(0, 0, 255); 32 | } 33 | 34 | pre .string, 35 | pre .title, 36 | pre .parent, 37 | pre .tag .value, 38 | pre .rules .value, 39 | pre .rules .value .number, 40 | pre .ruby .symbol, 41 | pre .ruby .symbol .string, 42 | pre .aggregate, 43 | pre .template_tag, 44 | pre .django .variable, 45 | pre .addition, 46 | pre .flow, 47 | pre .stream, 48 | pre .apache .tag, 49 | pre .date, 50 | pre .tex .formula { 51 | color: rgb(163, 21, 21); 52 | } 53 | 54 | pre .ruby .string, 55 | pre .decorator, 56 | pre .filter .argument, 57 | pre .localvars, 58 | pre .array, 59 | pre .attr_selector, 60 | pre .pseudo, 61 | pre .pi, 62 | pre .doctype, 63 | pre .deletion, 64 | pre .envvar, 65 | pre .shebang, 66 | pre .preprocessor, 67 | pre .userType, 68 | pre .apache .sqbracket, 69 | pre .nginx .built_in, 70 | pre .tex .special, 71 | pre .prompt { 72 | color: rgb(43, 145, 175); 73 | } 74 | 75 | pre .phpdoc, 76 | pre .javadoc, 77 | pre .xmlDocTag { 78 | color: rgb(128, 128, 128); 79 | } 80 | 81 | pre .vhdl .typename { font-weight: bold; } 82 | pre .vhdl .string { color: #666666; } 83 | pre .vhdl .literal { color: rgb(163, 21, 21); } 84 | pre .vhdl .attribute { color: #00B0E8; } 85 | 86 | pre .xml .attribute { color: rgb(255, 0, 0); } 87 | -------------------------------------------------------------------------------- /blog/blueprints/posts/templates/detail.html: -------------------------------------------------------------------------------- 1 | {% import "comment.html" as comment %} 2 | {% extends "base.html" %} 3 | 4 | {% block css_header %} 5 | 6 | {% endblock %} 7 | 8 | {% block sidebar %} 9 |
10 | {% endblock %} 11 | 12 | {% block page_header %} 13 | 16 | {% endblock %} 17 | 18 | {% block content %} 19 |

{{ post.body | safe }}

20 |

21 |
22 | last updated: {{ post.updated_at.strftime('%Y-%m-%d %H:%M') }} 23 |
24 | 25 |
26 | {% if post.tags %} 27 | {% for tag in post.tags %} 28 | 29 | 30 | {{ tag }} 31 | 32 | 33 | {% endfor %} 34 | {% else %} 35 | 打酱油 36 | {% endif %} 37 |
38 |
39 |
40 |

Comments

41 | {% if post.comments %} 42 | {% for comment in post.comments %} 43 |

{{ comment.body }}

44 |

{{ comment.author }} on {{ comment.created_at.strftime('%H:%M %Y-%m-%d') }}

45 | {{ comment.text }} 46 | {% endfor %} 47 | {% endif %} 48 |
49 | 50 |

Add a comment

51 |
52 | {{ comment.render(form) }} 53 |
54 | 55 |
56 |
57 | {% endblock %} 58 | 59 | {% block js_footer %} 60 | 61 | 62 | {% endblock %} 63 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/ir_black.css: -------------------------------------------------------------------------------- 1 | /* 2 | IR_Black style (c) Vasily Mikhailitchenko 3 | */ 4 | 5 | pre code { 6 | display: block; padding: 0.5em; 7 | background: #000; color: #f8f8f8; 8 | } 9 | 10 | pre .shebang, 11 | pre .comment, 12 | pre .template_comment, 13 | pre .javadoc { 14 | color: #7c7c7c; 15 | } 16 | 17 | pre .keyword, 18 | pre .tag, 19 | pre .tex .command, 20 | pre .request, 21 | pre .status, 22 | pre .clojure .attribute { 23 | color: #96CBFE; 24 | } 25 | 26 | pre .sub .keyword, 27 | pre .method, 28 | pre .list .title, 29 | pre .nginx .title { 30 | color: #FFFFB6; 31 | } 32 | 33 | pre .string, 34 | pre .tag .value, 35 | pre .cdata, 36 | pre .filter .argument, 37 | pre .attr_selector, 38 | pre .apache .cbracket, 39 | pre .date { 40 | color: #A8FF60; 41 | } 42 | 43 | pre .subst { 44 | color: #DAEFA3; 45 | } 46 | 47 | pre .regexp { 48 | color: #E9C062; 49 | } 50 | 51 | pre .title, 52 | pre .sub .identifier, 53 | pre .pi, 54 | pre .decorator, 55 | pre .tex .special, 56 | pre .haskell .type, 57 | pre .constant, 58 | pre .smalltalk .class, 59 | pre .javadoctag, 60 | pre .yardoctag, 61 | pre .phpdoc, 62 | pre .nginx .built_in { 63 | color: #FFFFB6; 64 | } 65 | 66 | pre .symbol, 67 | pre .ruby .symbol .string, 68 | pre .number, 69 | pre .variable, 70 | pre .vbscript, 71 | pre .literal { 72 | color: #C6C5FE; 73 | } 74 | 75 | pre .css .tag { 76 | color: #96CBFE; 77 | } 78 | 79 | pre .css .rules .property, 80 | pre .css .id { 81 | color: #FFFFB6; 82 | } 83 | 84 | pre .css .class { 85 | color: #FFF; 86 | } 87 | 88 | pre .hexcolor { 89 | color: #C6C5FE; 90 | } 91 | 92 | pre .number { 93 | color:#FF73FD; 94 | } 95 | 96 | pre .coffeescript .javascript, 97 | pre .javascript .xml, 98 | pre .tex .formula, 99 | pre .xml .javascript, 100 | pre .xml .vbscript, 101 | pre .xml .css, 102 | pre .xml .cdata { 103 | opacity: 0.7; 104 | } 105 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/pojoaque.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Pojoaque Style by Jason Tate 4 | http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html 5 | Based on Solarized Style from http://ethanschoonover.com/solarized 6 | 7 | */ 8 | 9 | pre code { 10 | display: block; padding: 0.5em; 11 | color: #DCCF8F; 12 | background: url(./pojoaque.jpg) repeat scroll left top #181914; 13 | } 14 | 15 | pre .comment, 16 | pre .template_comment, 17 | pre .diff .header, 18 | pre .doctype, 19 | pre .lisp .string, 20 | pre .javadoc { 21 | color: #586e75; 22 | font-style: italic; 23 | } 24 | 25 | pre .keyword, 26 | pre .css .rule .keyword, 27 | pre .winutils, 28 | pre .javascript .title, 29 | pre .method, 30 | pre .addition, 31 | pre .css .tag, 32 | pre .clojure .title, 33 | pre .nginx .title { 34 | color: #B64926; 35 | } 36 | 37 | pre .number, 38 | pre .command, 39 | pre .string, 40 | pre .tag .value, 41 | pre .phpdoc, 42 | pre .tex .formula, 43 | pre .regexp, 44 | pre .hexcolor { 45 | color: #468966; 46 | } 47 | 48 | pre .title, 49 | pre .localvars, 50 | pre .function .title, 51 | pre .chunk, 52 | pre .decorator, 53 | pre .built_in, 54 | pre .lisp .title, 55 | pre .clojure .built_in, 56 | pre .identifier, 57 | pre .id { 58 | color: #FFB03B; 59 | } 60 | 61 | pre .attribute, 62 | pre .variable, 63 | pre .lisp .body, 64 | pre .smalltalk .number, 65 | pre .constant, 66 | pre .class .title, 67 | pre .parent, 68 | pre .haskell .type { 69 | color: #b58900; 70 | } 71 | 72 | pre .css .attribute { 73 | color: #b89859; 74 | } 75 | 76 | pre .css .number,pre .css .hexcolor{ 77 | color: #DCCF8F; 78 | } 79 | 80 | pre .css .class { 81 | color: #d3a60c; 82 | } 83 | 84 | pre .preprocessor, 85 | pre .pi, 86 | pre .shebang, 87 | pre .symbol, 88 | pre .symbol .string, 89 | pre .diff .change, 90 | pre .special, 91 | pre .attr_selector, 92 | pre .important, 93 | pre .subst, 94 | pre .cdata { 95 | color: #cb4b16; 96 | } 97 | 98 | pre .deletion { 99 | color: #dc322f; 100 | } 101 | 102 | pre .tex .formula { 103 | background: #073642; 104 | } 105 | -------------------------------------------------------------------------------- /box/nginx.conf: -------------------------------------------------------------------------------- 1 | user pengphy admin; 2 | 3 | worker_processes 3; 4 | 5 | error_log /usr/local/Cellar/nginx/1.2.3/logs/error.log crit; 6 | 7 | pid /usr/local/Cellar/nginx/1.2.3/nginx.pid; 8 | 9 | #Specifies the value for maximum file descriptors that can be opened by this process. 10 | worker_rlimit_nofile 65535; 11 | 12 | events 13 | { 14 | use kqueue; 15 | worker_connections 65535; 16 | } 17 | 18 | http 19 | { 20 | include mime.types; 21 | default_type application/octet-stream; 22 | 23 | #charset gb2312; 24 | 25 | server_names_hash_bucket_size 128; 26 | client_header_buffer_size 64k; 27 | large_client_header_buffers 8 64k; 28 | 29 | sendfile on; 30 | tcp_nopush on; 31 | 32 | #keepalive_timeout 60; 33 | keepalive_timeout 0; 34 | client_max_body_size 6M; 35 | client_body_buffer_size 128k; 36 | client_body_temp_path /tmp; 37 | 38 | tcp_nodelay on; 39 | 40 | fastcgi_connect_timeout 30s; 41 | fastcgi_send_timeout 30s; 42 | fastcgi_read_timeout 30s; 43 | fastcgi_buffer_size 64k; 44 | fastcgi_buffers 8 64k; 45 | fastcgi_busy_buffers_size 128k; 46 | fastcgi_temp_file_write_size 128k; 47 | 48 | gzip on; 49 | gzip_min_length 1k; 50 | gzip_buffers 4 16k; 51 | gzip_http_version 1.0; 52 | gzip_comp_level 2; 53 | gzip_types text/plain application/x-javascript text/css application/xml; 54 | gzip_vary on; 55 | 56 | #limit_zone crawler $binary_remote_addr 10m; 57 | log_format access '$remote_addr - $http_x_operamini_id [$time_local]' 58 | ' "$request" $status $body_bytes_sent "$http_referer"' 59 | ' "$http_user_agent" $http_x_forwarded_for'; 60 | 61 | server { 62 | listen 80; 63 | server_name life-map.rhcloud.com; 64 | 65 | 66 | location / { 67 | uwsgi_pass 127.0.0.1:8000; 68 | include uwsgi_params; 69 | } 70 | 71 | location ^~ /static { 72 | root /Users/pengphy/Codes/virtualenvs/virtenv/life/wsgi/; 73 | } 74 | 75 | access_log /usr/local/Cellar/nginx/1.2.3/logs/access.log access; 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/dark.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Dark style from softwaremaniacs.org (c) Ivan Sagalaev 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background: #444; 10 | } 11 | 12 | pre .keyword, 13 | pre .literal, 14 | pre .change, 15 | pre .winutils, 16 | pre .flow, 17 | pre .lisp .title, 18 | pre .clojure .built_in, 19 | pre .nginx .title, 20 | pre .tex .special { 21 | color: white; 22 | } 23 | 24 | pre code, 25 | pre .subst { 26 | color: #DDD; 27 | } 28 | 29 | pre .string, 30 | pre .title, 31 | pre .haskell .type, 32 | pre .ini .title, 33 | pre .tag .value, 34 | pre .css .rules .value, 35 | pre .preprocessor, 36 | pre .ruby .symbol, 37 | pre .ruby .symbol .string, 38 | pre .ruby .class .parent, 39 | pre .built_in, 40 | pre .sql .aggregate, 41 | pre .django .template_tag, 42 | pre .django .variable, 43 | pre .smalltalk .class, 44 | pre .javadoc, 45 | pre .ruby .string, 46 | pre .django .filter .argument, 47 | pre .smalltalk .localvars, 48 | pre .smalltalk .array, 49 | pre .attr_selector, 50 | pre .pseudo, 51 | pre .addition, 52 | pre .stream, 53 | pre .envvar, 54 | pre .apache .tag, 55 | pre .apache .cbracket, 56 | pre .tex .command, 57 | pre .prompt { 58 | color: #D88; 59 | } 60 | 61 | pre .comment, 62 | pre .java .annotation, 63 | pre .python .decorator, 64 | pre .template_comment, 65 | pre .pi, 66 | pre .doctype, 67 | pre .deletion, 68 | pre .shebang, 69 | pre .apache .sqbracket, 70 | pre .tex .formula { 71 | color: #777; 72 | } 73 | 74 | pre .keyword, 75 | pre .literal, 76 | pre .title, 77 | pre .css .id, 78 | pre .phpdoc, 79 | pre .haskell .type, 80 | pre .vbscript .built_in, 81 | pre .sql .aggregate, 82 | pre .rsl .built_in, 83 | pre .smalltalk .class, 84 | pre .diff .header, 85 | pre .chunk, 86 | pre .winutils, 87 | pre .bash .variable, 88 | pre .apache .tag, 89 | pre .tex .special, 90 | pre .request, 91 | pre .status { 92 | font-weight: bold; 93 | } 94 | 95 | pre .coffeescript .javascript, 96 | pre .javascript .xml, 97 | pre .tex .formula, 98 | pre .xml .javascript, 99 | pre .xml .vbscript, 100 | pre .xml .css, 101 | pre .xml .cdata { 102 | opacity: 0.5; 103 | } 104 | -------------------------------------------------------------------------------- /blog/blueprints/admin/templates/login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | life-backend 5 | 6 | 7 | 8 | 40 | 41 | 42 |
43 | 56 |
57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/rainbow.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Style with support for rainbow parens 4 | 5 | */ 6 | 7 | pre ::-moz-selection{ background: #FF5E99; color:#fff; text-shadow: none; } 8 | pre ::selection { background:#FF5E99; color:#fff; text-shadow: none; } 9 | 10 | pre code { 11 | display: block; padding: 0.5em; 12 | background: #474949; color: #D1D9E1; 13 | } 14 | 15 | 16 | pre .body, 17 | pre .collection { 18 | color: #D1D9E1; 19 | } 20 | 21 | pre .comment, 22 | pre .template_comment, 23 | pre .diff .header, 24 | pre .doctype, 25 | pre .lisp .string, 26 | pre .javadoc { 27 | color: #969896; 28 | font-style: italic; 29 | } 30 | 31 | pre .keyword, 32 | pre .clojure .attribute, 33 | pre .winutils, 34 | pre .javascript .title, 35 | pre .addition, 36 | pre .css .tag { 37 | color: #cc99cc; 38 | } 39 | 40 | pre .number { color: #f99157; } 41 | 42 | pre .command, 43 | pre .string, 44 | pre .tag .value, 45 | pre .phpdoc, 46 | pre .tex .formula, 47 | pre .regexp, 48 | pre .hexcolor { 49 | color: #8abeb7; 50 | } 51 | 52 | pre .title, 53 | pre .localvars, 54 | pre .function .title, 55 | pre .chunk, 56 | pre .decorator, 57 | pre .built_in, 58 | pre .lisp .title, 59 | pre .identifier 60 | { 61 | color: #b5bd68; 62 | } 63 | 64 | pre .class .keyword 65 | { 66 | color: #f2777a; 67 | } 68 | 69 | pre .variable, 70 | pre .lisp .body, 71 | pre .smalltalk .number, 72 | pre .constant, 73 | pre .class .title, 74 | pre .parent, 75 | pre .haskell .label, 76 | pre .id, 77 | pre .lisp .title, 78 | pre .clojure .title .built_in { 79 | color: #ffcc66; 80 | } 81 | 82 | pre .tag .title, 83 | pre .rules .property, 84 | pre .django .tag .keyword, 85 | pre .clojure .title .built_in { 86 | font-weight: bold; 87 | } 88 | 89 | pre .attribute, 90 | pre .clojure .title { 91 | color: #81a2be; 92 | } 93 | 94 | pre .preprocessor, 95 | pre .pi, 96 | pre .shebang, 97 | pre .symbol, 98 | pre .symbol .string, 99 | pre .diff .change, 100 | pre .special, 101 | pre .attr_selector, 102 | pre .important, 103 | pre .subst, 104 | pre .cdata { 105 | color: #f99157; 106 | } 107 | 108 | pre .deletion { 109 | color: #dc322f; 110 | } 111 | 112 | pre .tex .formula { 113 | background: #eee8d5; 114 | } 115 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/brown_paper.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Brown Paper style from goldblog.com.ua (c) Zaripov Yura 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background:#b7a68e url(./brown_papersq.png); 10 | } 11 | 12 | pre .keyword, 13 | pre .literal, 14 | pre .change, 15 | pre .winutils, 16 | pre .flow, 17 | pre .lisp .title, 18 | pre .clojure .built_in, 19 | pre .nginx .title, 20 | pre .tex .special, 21 | pre .request, 22 | pre .status { 23 | color:#005599; 24 | font-weight:bold; 25 | } 26 | 27 | pre code, 28 | pre .subst, 29 | pre .tag .keyword { 30 | color: #363C69; 31 | } 32 | 33 | pre .string, 34 | pre .title, 35 | pre .haskell .type, 36 | pre .tag .value, 37 | pre .css .rules .value, 38 | pre .preprocessor, 39 | pre .ruby .symbol, 40 | pre .ruby .symbol .string, 41 | pre .ruby .class .parent, 42 | pre .built_in, 43 | pre .sql .aggregate, 44 | pre .django .template_tag, 45 | pre .django .variable, 46 | pre .smalltalk .class, 47 | pre .javadoc, 48 | pre .ruby .string, 49 | pre .django .filter .argument, 50 | pre .smalltalk .localvars, 51 | pre .smalltalk .array, 52 | pre .attr_selector, 53 | pre .pseudo, 54 | pre .addition, 55 | pre .stream, 56 | pre .envvar, 57 | pre .apache .tag, 58 | pre .apache .cbracket, 59 | pre .tex .number { 60 | color: #2C009F; 61 | } 62 | 63 | pre .comment, 64 | pre .java .annotation, 65 | pre .python .decorator, 66 | pre .template_comment, 67 | pre .pi, 68 | pre .doctype, 69 | pre .deletion, 70 | pre .shebang, 71 | pre .apache .sqbracket, 72 | pre .nginx .built_in, 73 | pre .tex .formula { 74 | color: #802022; 75 | } 76 | 77 | pre .keyword, 78 | pre .literal, 79 | pre .css .id, 80 | pre .phpdoc, 81 | pre .title, 82 | pre .haskell .type, 83 | pre .vbscript .built_in, 84 | pre .sql .aggregate, 85 | pre .rsl .built_in, 86 | pre .smalltalk .class, 87 | pre .diff .header, 88 | pre .chunk, 89 | pre .winutils, 90 | pre .bash .variable, 91 | pre .apache .tag, 92 | pre .tex .command { 93 | font-weight: bold; 94 | } 95 | 96 | pre .coffeescript .javascript, 97 | pre .javascript .xml, 98 | pre .tex .formula, 99 | pre .xml .javascript, 100 | pre .xml .vbscript, 101 | pre .xml .css, 102 | pre .xml .cdata { 103 | opacity: 0.8; 104 | } 105 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/github.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | github.com style (c) Vasily Polovnyov 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | color: #333; 10 | background: #f8f8ff 11 | } 12 | 13 | pre .comment, 14 | pre .template_comment, 15 | pre .diff .header, 16 | pre .javadoc { 17 | color: #998; 18 | font-style: italic 19 | } 20 | 21 | pre .keyword, 22 | pre .css .rule .keyword, 23 | pre .winutils, 24 | pre .javascript .title, 25 | pre .nginx .title, 26 | pre .subst, 27 | pre .request, 28 | pre .status { 29 | color: #333; 30 | font-weight: bold 31 | } 32 | 33 | pre .number, 34 | pre .hexcolor, 35 | pre .ruby .constant { 36 | color: #099; 37 | } 38 | 39 | pre .string, 40 | pre .tag .value, 41 | pre .phpdoc, 42 | pre .tex .formula { 43 | color: #d14 44 | } 45 | 46 | pre .title, 47 | pre .id { 48 | color: #900; 49 | font-weight: bold 50 | } 51 | 52 | pre .javascript .title, 53 | pre .lisp .title, 54 | pre .clojure .title, 55 | pre .subst { 56 | font-weight: normal 57 | } 58 | 59 | pre .class .title, 60 | pre .haskell .type, 61 | pre .vhdl .literal, 62 | pre .tex .command { 63 | color: #458; 64 | font-weight: bold 65 | } 66 | 67 | pre .tag, 68 | pre .tag .title, 69 | pre .rules .property, 70 | pre .django .tag .keyword { 71 | color: #000080; 72 | font-weight: normal 73 | } 74 | 75 | pre .attribute, 76 | pre .variable, 77 | pre .lisp .body { 78 | color: #008080 79 | } 80 | 81 | pre .regexp { 82 | color: #009926 83 | } 84 | 85 | pre .class { 86 | color: #458; 87 | font-weight: bold 88 | } 89 | 90 | pre .symbol, 91 | pre .ruby .symbol .string, 92 | pre .lisp .keyword, 93 | pre .tex .special, 94 | pre .prompt { 95 | color: #990073 96 | } 97 | 98 | pre .built_in, 99 | pre .lisp .title, 100 | pre .clojure .built_in { 101 | color: #0086b3 102 | } 103 | 104 | pre .preprocessor, 105 | pre .pi, 106 | pre .doctype, 107 | pre .shebang, 108 | pre .cdata { 109 | color: #999; 110 | font-weight: bold 111 | } 112 | 113 | pre .deletion { 114 | background: #fdd 115 | } 116 | 117 | pre .addition { 118 | background: #dfd 119 | } 120 | 121 | pre .diff .change { 122 | background: #0086b3 123 | } 124 | 125 | pre .chunk { 126 | color: #aaa 127 | } 128 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/idea.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Intellij Idea-like styling (c) Vasily Polovnyov 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | color: #000; 10 | background: #fff; 11 | } 12 | 13 | pre .subst, 14 | pre .title { 15 | font-weight: normal; 16 | color: #000; 17 | } 18 | 19 | pre .comment, 20 | pre .template_comment, 21 | pre .javadoc, 22 | pre .diff .header { 23 | color: #808080; 24 | font-style: italic; 25 | } 26 | 27 | pre .annotation, 28 | pre .decorator, 29 | pre .preprocessor, 30 | pre .doctype, 31 | pre .pi, 32 | pre .chunk, 33 | pre .shebang, 34 | pre .apache .cbracket, 35 | pre .prompt, 36 | pre .http .title { 37 | color: #808000; 38 | } 39 | 40 | pre .tag, 41 | pre .pi { 42 | background: #efefef; 43 | } 44 | 45 | pre .tag .title, 46 | pre .id, 47 | pre .attr_selector, 48 | pre .pseudo, 49 | pre .literal, 50 | pre .keyword, 51 | pre .hexcolor, 52 | pre .css .function, 53 | pre .ini .title, 54 | pre .css .class, 55 | pre .list .title, 56 | pre .clojure .title, 57 | pre .nginx .title, 58 | pre .tex .command, 59 | pre .request, 60 | pre .status { 61 | font-weight: bold; 62 | color: #000080; 63 | } 64 | 65 | pre .attribute, 66 | pre .rules .keyword, 67 | pre .number, 68 | pre .date, 69 | pre .regexp, 70 | pre .tex .special { 71 | font-weight: bold; 72 | color: #0000ff; 73 | } 74 | 75 | pre .number, 76 | pre .regexp { 77 | font-weight: normal; 78 | } 79 | 80 | pre .string, 81 | pre .value, 82 | pre .filter .argument, 83 | pre .css .function .params, 84 | pre .apache .tag { 85 | color: #008000; 86 | font-weight: bold; 87 | } 88 | 89 | pre .symbol, 90 | pre .ruby .symbol .string, 91 | pre .char, 92 | pre .tex .formula { 93 | color: #000; 94 | background: #d0eded; 95 | font-style: italic; 96 | } 97 | 98 | pre .phpdoc, 99 | pre .yardoctag, 100 | pre .javadoctag { 101 | text-decoration: underline; 102 | } 103 | 104 | pre .variable, 105 | pre .envvar, 106 | pre .apache .sqbracket, 107 | pre .nginx .built_in { 108 | color: #660e7a; 109 | } 110 | 111 | pre .addition { 112 | background: #baeeba; 113 | } 114 | 115 | pre .deletion { 116 | background: #ffc8bd; 117 | } 118 | 119 | pre .diff .change { 120 | background: #bccff9; 121 | } 122 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/far.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | FAR Style (c) MajestiC 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background: #000080; 10 | } 11 | 12 | pre code, 13 | pre .subst { 14 | color: #0FF; 15 | } 16 | 17 | pre .string, 18 | pre .ruby .string, 19 | pre .haskell .type, 20 | pre .tag .value, 21 | pre .css .rules .value, 22 | pre .css .rules .value .number, 23 | pre .preprocessor, 24 | pre .ruby .symbol, 25 | pre .ruby .symbol .string, 26 | pre .built_in, 27 | pre .sql .aggregate, 28 | pre .django .template_tag, 29 | pre .django .variable, 30 | pre .smalltalk .class, 31 | pre .addition, 32 | pre .apache .tag, 33 | pre .apache .cbracket, 34 | pre .tex .command, 35 | pre .clojure .title { 36 | color: #FF0; 37 | } 38 | 39 | pre .keyword, 40 | pre .css .id, 41 | pre .title, 42 | pre .haskell .type, 43 | pre .vbscript .built_in, 44 | pre .sql .aggregate, 45 | pre .rsl .built_in, 46 | pre .smalltalk .class, 47 | pre .xml .tag .title, 48 | pre .winutils, 49 | pre .flow, 50 | pre .change, 51 | pre .envvar, 52 | pre .bash .variable, 53 | pre .tex .special, 54 | pre .clojure .built_in { 55 | color: #FFF; 56 | } 57 | 58 | pre .comment, 59 | pre .phpdoc, 60 | pre .javadoc, 61 | pre .java .annotation, 62 | pre .template_comment, 63 | pre .deletion, 64 | pre .apache .sqbracket, 65 | pre .tex .formula { 66 | color: #888; 67 | } 68 | 69 | pre .number, 70 | pre .date, 71 | pre .regexp, 72 | pre .literal, 73 | pre .smalltalk .symbol, 74 | pre .smalltalk .char, 75 | pre .clojure .attribute { 76 | color: #0F0; 77 | } 78 | 79 | pre .python .decorator, 80 | pre .django .filter .argument, 81 | pre .smalltalk .localvars, 82 | pre .smalltalk .array, 83 | pre .attr_selector, 84 | pre .pseudo, 85 | pre .xml .pi, 86 | pre .diff .header, 87 | pre .chunk, 88 | pre .shebang, 89 | pre .nginx .built_in, 90 | pre .prompt { 91 | color: #008080; 92 | } 93 | 94 | pre .keyword, 95 | pre .css .id, 96 | pre .title, 97 | pre .haskell .type, 98 | pre .vbscript .built_in, 99 | pre .sql .aggregate, 100 | pre .rsl .built_in, 101 | pre .smalltalk .class, 102 | pre .winutils, 103 | pre .flow, 104 | pre .apache .tag, 105 | pre .nginx .built_in, 106 | pre .tex .command, 107 | pre .tex .special, 108 | pre .request, 109 | pre .status { 110 | font-weight: bold; 111 | } 112 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/monokai.css: -------------------------------------------------------------------------------- 1 | /* 2 | Monokai style - ported by Luigi Maselli - http://grigio.org 3 | */ 4 | 5 | pre code { 6 | display: block; padding: 0.5em; 7 | background: #272822; 8 | } 9 | 10 | pre .tag, 11 | pre .tag .title, 12 | pre .keyword, 13 | pre .literal, 14 | pre .change, 15 | pre .winutils, 16 | pre .flow, 17 | pre .lisp .title, 18 | pre .clojure .built_in, 19 | pre .nginx .title, 20 | pre .tex .special { 21 | color: #F92672; 22 | } 23 | 24 | pre code { 25 | color: #DDD; 26 | } 27 | 28 | pre code .constant { 29 | color: #66D9EF; 30 | } 31 | 32 | pre .class .title { 33 | color: white; 34 | } 35 | 36 | pre .attribute, 37 | pre .symbol, 38 | pre .symbol .string, 39 | pre .value, 40 | pre .regexp { 41 | color: #BF79DB; 42 | } 43 | 44 | pre .tag .value, 45 | pre .string, 46 | pre .subst, 47 | pre .title, 48 | pre .haskell .type, 49 | pre .preprocessor, 50 | pre .ruby .class .parent, 51 | pre .built_in, 52 | pre .sql .aggregate, 53 | pre .django .template_tag, 54 | pre .django .variable, 55 | pre .smalltalk .class, 56 | pre .javadoc, 57 | pre .django .filter .argument, 58 | pre .smalltalk .localvars, 59 | pre .smalltalk .array, 60 | pre .attr_selector, 61 | pre .pseudo, 62 | pre .addition, 63 | pre .stream, 64 | pre .envvar, 65 | pre .apache .tag, 66 | pre .apache .cbracket, 67 | pre .tex .command, 68 | pre .prompt { 69 | color: #A6E22E; 70 | } 71 | 72 | pre .comment, 73 | pre .java .annotation, 74 | pre .python .decorator, 75 | pre .template_comment, 76 | pre .pi, 77 | pre .doctype, 78 | pre .deletion, 79 | pre .shebang, 80 | pre .apache .sqbracket, 81 | pre .tex .formula { 82 | color: #75715E; 83 | } 84 | 85 | pre .keyword, 86 | pre .literal, 87 | pre .css .id, 88 | pre .phpdoc, 89 | pre .title, 90 | pre .haskell .type, 91 | pre .vbscript .built_in, 92 | pre .sql .aggregate, 93 | pre .rsl .built_in, 94 | pre .smalltalk .class, 95 | pre .diff .header, 96 | pre .chunk, 97 | pre .winutils, 98 | pre .bash .variable, 99 | pre .apache .tag, 100 | pre .tex .special, 101 | pre .request, 102 | pre .status { 103 | font-weight: bold; 104 | } 105 | 106 | pre .coffeescript .javascript, 107 | pre .javascript .xml, 108 | pre .tex .formula, 109 | pre .xml .javascript, 110 | pre .xml .vbscript, 111 | pre .xml .css, 112 | pre .xml .cdata { 113 | opacity: 0.5; 114 | } 115 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/zenburn.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Zenburn style from voldmar.ru (c) Vladimir Epifanov 4 | based on dark.css by Ivan Sagalaev 5 | 6 | */ 7 | 8 | pre code { 9 | display: block; padding: 0.5em; 10 | background: #3F3F3F; 11 | color: #DCDCDC; 12 | } 13 | 14 | pre .keyword, 15 | pre .tag, 16 | pre .css .class, 17 | pre .css .id, 18 | pre .lisp .title, 19 | pre .nginx .title, 20 | pre .request, 21 | pre .status, 22 | pre .clojure .attribute { 23 | color: #E3CEAB; 24 | } 25 | 26 | pre .django .template_tag, 27 | pre .django .variable, 28 | pre .django .filter .argument { 29 | color: #DCDCDC; 30 | } 31 | 32 | pre .number, 33 | pre .date { 34 | color: #8CD0D3; 35 | } 36 | 37 | pre .dos .envvar, 38 | pre .dos .stream, 39 | pre .variable, 40 | pre .apache .sqbracket { 41 | color: #EFDCBC; 42 | } 43 | 44 | pre .dos .flow, 45 | pre .diff .change, 46 | pre .python .exception, 47 | pre .python .built_in, 48 | pre .literal, 49 | pre .tex .special { 50 | color: #EFEFAF; 51 | } 52 | 53 | pre .diff .chunk, 54 | pre .subst { 55 | color: #8F8F8F; 56 | } 57 | 58 | pre .dos .keyword, 59 | pre .python .decorator, 60 | pre .title, 61 | pre .haskell .type, 62 | pre .diff .header, 63 | pre .ruby .class .parent, 64 | pre .apache .tag, 65 | pre .nginx .built_in, 66 | pre .tex .command, 67 | pre .prompt { 68 | color: #efef8f; 69 | } 70 | 71 | pre .dos .winutils, 72 | pre .ruby .symbol, 73 | pre .ruby .symbol .string, 74 | pre .ruby .string { 75 | color: #DCA3A3; 76 | } 77 | 78 | pre .diff .deletion, 79 | pre .string, 80 | pre .tag .value, 81 | pre .preprocessor, 82 | pre .built_in, 83 | pre .sql .aggregate, 84 | pre .javadoc, 85 | pre .smalltalk .class, 86 | pre .smalltalk .localvars, 87 | pre .smalltalk .array, 88 | pre .css .rules .value, 89 | pre .attr_selector, 90 | pre .pseudo, 91 | pre .apache .cbracket, 92 | pre .tex .formula { 93 | color: #CC9393; 94 | } 95 | 96 | pre .shebang, 97 | pre .diff .addition, 98 | pre .comment, 99 | pre .java .annotation, 100 | pre .template_comment, 101 | pre .pi, 102 | pre .doctype { 103 | color: #7F9F7F; 104 | } 105 | 106 | pre .coffeescript .javascript, 107 | pre .javascript .xml, 108 | pre .tex .formula, 109 | pre .xml .javascript, 110 | pre .xml .vbscript, 111 | pre .xml .css, 112 | pre .xml .cdata { 113 | opacity: 0.5; 114 | } 115 | 116 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/magula.css: -------------------------------------------------------------------------------- 1 | /* 2 | Description: Magula style for highligh.js 3 | Author: Ruslan Keba 4 | Website: http://rukeba.com/ 5 | Version: 1.0 6 | Date: 2009-01-03 7 | Music: Aphex Twin / Xtal 8 | */ 9 | 10 | pre code { 11 | display: block; padding: 0.5em; 12 | background-color: #f4f4f4; 13 | } 14 | 15 | pre code, 16 | pre .subst, 17 | pre .lisp .title, 18 | pre .clojure .built_in { 19 | color: black; 20 | } 21 | 22 | pre .string, 23 | pre .title, 24 | pre .parent, 25 | pre .tag .value, 26 | pre .rules .value, 27 | pre .rules .value .number, 28 | pre .preprocessor, 29 | pre .ruby .symbol, 30 | pre .ruby .symbol .string, 31 | pre .aggregate, 32 | pre .template_tag, 33 | pre .django .variable, 34 | pre .smalltalk .class, 35 | pre .addition, 36 | pre .flow, 37 | pre .stream, 38 | pre .bash .variable, 39 | pre .apache .cbracket { 40 | color: #050; 41 | } 42 | 43 | pre .comment, 44 | pre .annotation, 45 | pre .template_comment, 46 | pre .diff .header, 47 | pre .chunk { 48 | color: #777; 49 | } 50 | 51 | pre .number, 52 | pre .date, 53 | pre .regexp, 54 | pre .literal, 55 | pre .smalltalk .symbol, 56 | pre .smalltalk .char, 57 | pre .change, 58 | pre .tex .special { 59 | color: #800; 60 | } 61 | 62 | pre .label, 63 | pre .javadoc, 64 | pre .ruby .string, 65 | pre .decorator, 66 | pre .filter .argument, 67 | pre .localvars, 68 | pre .array, 69 | pre .attr_selector, 70 | pre .pseudo, 71 | pre .pi, 72 | pre .doctype, 73 | pre .deletion, 74 | pre .envvar, 75 | pre .shebang, 76 | pre .apache .sqbracket, 77 | pre .nginx .built_in, 78 | pre .tex .formula, 79 | pre .prompt, 80 | pre .clojure .attribute { 81 | color: #00e; 82 | } 83 | 84 | pre .keyword, 85 | pre .id, 86 | pre .phpdoc, 87 | pre .title, 88 | pre .built_in, 89 | pre .aggregate, 90 | pre .smalltalk .class, 91 | pre .winutils, 92 | pre .bash .variable, 93 | pre .apache .tag, 94 | pre .xml .tag, 95 | pre .tex .command, 96 | pre .request, 97 | pre .status { 98 | font-weight: bold; 99 | color: navy; 100 | } 101 | 102 | pre .nginx .built_in { 103 | font-weight: normal; 104 | } 105 | 106 | pre .coffeescript .javascript, 107 | pre .javascript .xml, 108 | pre .tex .formula, 109 | pre .xml .javascript, 110 | pre .xml .vbscript, 111 | pre .xml .css, 112 | pre .xml .cdata { 113 | opacity: 0.5; 114 | } 115 | 116 | /* --- */ 117 | pre .apache .tag { 118 | font-weight: bold; 119 | color: blue; 120 | } 121 | 122 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/school_book.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | School Book style from goldblog.com.ua (c) Zaripov Yura 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 15px 0.5em 0.5em 30px; 9 | font-size: 11px !important; 10 | line-height:16px !important; 11 | } 12 | 13 | pre{ 14 | background:#f6f6ae url(./school_book.png); 15 | border-top: solid 2px #d2e8b9; 16 | border-bottom: solid 1px #d2e8b9; 17 | } 18 | 19 | pre .keyword, 20 | pre .literal, 21 | pre .change, 22 | pre .winutils, 23 | pre .flow, 24 | pre .lisp .title, 25 | pre .clojure .built_in, 26 | pre .nginx .title, 27 | pre .tex .special { 28 | color:#005599; 29 | font-weight:bold; 30 | } 31 | 32 | pre code, 33 | pre .subst, 34 | pre .tag .keyword { 35 | color: #3E5915; 36 | } 37 | 38 | pre .string, 39 | pre .title, 40 | pre .haskell .type, 41 | pre .tag .value, 42 | pre .css .rules .value, 43 | pre .preprocessor, 44 | pre .ruby .symbol, 45 | pre .ruby .symbol .string, 46 | pre .ruby .class .parent, 47 | pre .built_in, 48 | pre .sql .aggregate, 49 | pre .django .template_tag, 50 | pre .django .variable, 51 | pre .smalltalk .class, 52 | pre .javadoc, 53 | pre .ruby .string, 54 | pre .django .filter .argument, 55 | pre .smalltalk .localvars, 56 | pre .smalltalk .array, 57 | pre .attr_selector, 58 | pre .pseudo, 59 | pre .addition, 60 | pre .stream, 61 | pre .envvar, 62 | pre .apache .tag, 63 | pre .apache .cbracket, 64 | pre .nginx .built_in, 65 | pre .tex .command { 66 | color: #2C009F; 67 | } 68 | 69 | pre .comment, 70 | pre .java .annotation, 71 | pre .python .decorator, 72 | pre .template_comment, 73 | pre .pi, 74 | pre .doctype, 75 | pre .deletion, 76 | pre .shebang, 77 | pre .apache .sqbracket { 78 | color: #E60415; 79 | } 80 | 81 | pre .keyword, 82 | pre .literal, 83 | pre .css .id, 84 | pre .phpdoc, 85 | pre .title, 86 | pre .haskell .type, 87 | pre .vbscript .built_in, 88 | pre .sql .aggregate, 89 | pre .rsl .built_in, 90 | pre .smalltalk .class, 91 | pre .xml .tag .title, 92 | pre .diff .header, 93 | pre .chunk, 94 | pre .winutils, 95 | pre .bash .variable, 96 | pre .apache .tag, 97 | pre .tex .command, 98 | pre .request, 99 | pre .status { 100 | font-weight: bold; 101 | } 102 | 103 | pre .coffeescript .javascript, 104 | pre .javascript .xml, 105 | pre .tex .formula, 106 | pre .xml .javascript, 107 | pre .xml .vbscript, 108 | pre .xml .css, 109 | pre .xml .cdata { 110 | opacity: 0.5; 111 | } 112 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/googlecode.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Google Code style (c) Aahan Krish 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background: white; color: black; 10 | } 11 | 12 | pre .comment, 13 | pre .template_comment, 14 | pre .javadoc, 15 | pre .comment * { 16 | color: #800; 17 | } 18 | 19 | pre .keyword, 20 | pre .method, 21 | pre .list .title, 22 | pre .clojure .built_in, 23 | pre .nginx .title, 24 | pre .tag .title, 25 | pre .setting .value, 26 | pre .winutils, 27 | pre .tex .command, 28 | pre .http .title, 29 | pre .request, 30 | pre .status { 31 | color: #008; 32 | } 33 | 34 | pre .envvar, 35 | pre .tex .special { 36 | color: #660; 37 | } 38 | 39 | pre .string, 40 | pre .tag .value, 41 | pre .cdata, 42 | pre .filter .argument, 43 | pre .attr_selector, 44 | pre .apache .cbracket, 45 | pre .date, 46 | pre .regexp { 47 | color: #080; 48 | } 49 | 50 | pre .sub .identifier, 51 | pre .pi, 52 | pre .tag, 53 | pre .tag .keyword, 54 | pre .decorator, 55 | pre .ini .title, 56 | pre .shebang, 57 | pre .prompt, 58 | pre .hexcolor, 59 | pre .rules .value, 60 | pre .css .value .number, 61 | pre .literal, 62 | pre .symbol, 63 | pre .ruby .symbol .string, 64 | pre .number, 65 | pre .css .function, 66 | pre .clojure .attribute { 67 | color: #066; 68 | } 69 | 70 | pre .class .title, 71 | pre .haskell .type, 72 | pre .smalltalk .class, 73 | pre .javadoctag, 74 | pre .yardoctag, 75 | pre .phpdoc, 76 | pre .typename, 77 | pre .tag .attribute, 78 | pre .doctype, 79 | pre .class .id, 80 | pre .built_in, 81 | pre .setting, 82 | pre .params, 83 | pre .variable, 84 | pre .clojure .title { 85 | color: #606; 86 | } 87 | 88 | pre .css .tag, 89 | pre .rules .property, 90 | pre .pseudo, 91 | pre .subst { 92 | color: #000; 93 | } 94 | 95 | pre .css .class, pre .css .id { 96 | color: #9B703F; 97 | } 98 | 99 | pre .value .important { 100 | color: #ff7700; 101 | font-weight: bold; 102 | } 103 | 104 | pre .rules .keyword { 105 | color: #C5AF75; 106 | } 107 | 108 | pre .annotation, 109 | pre .apache .sqbracket, 110 | pre .nginx .built_in { 111 | color: #9B859D; 112 | } 113 | 114 | pre .preprocessor, 115 | pre .preprocessor * { 116 | color: #444; 117 | } 118 | 119 | pre .tex .formula { 120 | background-color: #EEE; 121 | font-style: italic; 122 | } 123 | 124 | pre .diff .header, 125 | pre .chunk { 126 | color: #808080; 127 | font-weight: bold; 128 | } 129 | 130 | pre .diff .change { 131 | background-color: #BCCFF9; 132 | } 133 | 134 | pre .addition { 135 | background-color: #BAEEBA; 136 | } 137 | 138 | pre .deletion { 139 | background-color: #FFC8BD; 140 | } 141 | 142 | pre .comment .yardoctag { 143 | font-weight: bold; 144 | } 145 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/default.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Original style from softwaremaniacs.org (c) Ivan Sagalaev 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background: #F0F0F0; 10 | } 11 | 12 | pre code, 13 | pre .subst, 14 | pre .tag .title, 15 | pre .lisp .title, 16 | pre .clojure .built_in, 17 | pre .nginx .title { 18 | color: black; 19 | } 20 | 21 | pre .string, 22 | pre .title, 23 | pre .constant, 24 | pre .parent, 25 | pre .tag .value, 26 | pre .rules .value, 27 | pre .rules .value .number, 28 | pre .preprocessor, 29 | pre .ruby .symbol, 30 | pre .ruby .symbol .string, 31 | pre .aggregate, 32 | pre .template_tag, 33 | pre .django .variable, 34 | pre .smalltalk .class, 35 | pre .addition, 36 | pre .flow, 37 | pre .stream, 38 | pre .bash .variable, 39 | pre .apache .tag, 40 | pre .apache .cbracket, 41 | pre .tex .command, 42 | pre .tex .special, 43 | pre .erlang_repl .function_or_atom, 44 | pre .markdown .header { 45 | color: #800; 46 | } 47 | 48 | pre .comment, 49 | pre .annotation, 50 | pre .template_comment, 51 | pre .diff .header, 52 | pre .chunk, 53 | pre .markdown .blockquote { 54 | color: #888; 55 | } 56 | 57 | pre .number, 58 | pre .date, 59 | pre .regexp, 60 | pre .literal, 61 | pre .smalltalk .symbol, 62 | pre .smalltalk .char, 63 | pre .go .constant, 64 | pre .change, 65 | pre .markdown .bullet, 66 | pre .markdown .link_url { 67 | color: #080; 68 | } 69 | 70 | pre .label, 71 | pre .javadoc, 72 | pre .ruby .string, 73 | pre .decorator, 74 | pre .filter .argument, 75 | pre .localvars, 76 | pre .array, 77 | pre .attr_selector, 78 | pre .important, 79 | pre .pseudo, 80 | pre .pi, 81 | pre .doctype, 82 | pre .deletion, 83 | pre .envvar, 84 | pre .shebang, 85 | pre .apache .sqbracket, 86 | pre .nginx .built_in, 87 | pre .tex .formula, 88 | pre .erlang_repl .reserved, 89 | pre .prompt, 90 | pre .markdown .link_label, 91 | pre .vhdl .attribute, 92 | pre .clojure .attribute, 93 | pre .coffeescript .property { 94 | color: #88F 95 | } 96 | 97 | pre .keyword, 98 | pre .id, 99 | pre .phpdoc, 100 | pre .title, 101 | pre .built_in, 102 | pre .aggregate, 103 | pre .css .tag, 104 | pre .javadoctag, 105 | pre .phpdoc, 106 | pre .yardoctag, 107 | pre .smalltalk .class, 108 | pre .winutils, 109 | pre .bash .variable, 110 | pre .apache .tag, 111 | pre .go .typename, 112 | pre .tex .command, 113 | pre .markdown .strong, 114 | pre .request, 115 | pre .status { 116 | font-weight: bold; 117 | } 118 | 119 | pre .markdown .emphasis { 120 | font-style: italic; 121 | } 122 | 123 | pre .nginx .built_in { 124 | font-weight: normal; 125 | } 126 | 127 | pre .coffeescript .javascript, 128 | pre .javascript .xml, 129 | pre .tex .formula, 130 | pre .xml .javascript, 131 | pre .xml .vbscript, 132 | pre .xml .css, 133 | pre .xml .cdata { 134 | opacity: 0.5; 135 | } 136 | -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | Feel free to change or remove this file, it is informational only. 2 | 3 | Repo layout 4 | =========== 5 | wsgi/ - Externally exposed wsgi code goes 6 | wsgi/static/ - Public static content gets served here 7 | libs/ - Additional libraries 8 | data/ - For not-externally exposed wsgi code 9 | setup.py - Standard setup.py, specify deps here 10 | .openshift/action_hooks/pre_build - Script that gets run every git push before the build 11 | .openshift/action_hooks/build - Script that gets run every git push as part of the build process (on the CI system if available) 12 | .openshift/action_hooks/deploy - Script that gets run every git push after build but before the app is restarted 13 | .openshift/action_hooks/post_deploy - Script that gets run every git push after the app is restarted 14 | 15 | Notes about layout 16 | ================== 17 | Every time you push, everything in your remote repo dir gets recreated, please 18 | store long term items (like an sqlite database) in the OpenShift data 19 | directory, which will persist between pushes of your repo. 20 | The OpenShift data directory is accessible relative to the remote repo 21 | directory (../data) or via an environment variable OPENSHIFT_DATA_DIR. 22 | 23 | 24 | Environment Variables 25 | ===================== 26 | 27 | OpenShift provides several environment variables to reference for ease 28 | of use. 29 | 30 | 31 | When embedding a database using 'rhc app cartridge add', you can reference 32 | environment variables for username, host and password. Example for mysql: 33 | 34 | os.environ['OPENSHIFT_MYSQL_DB_HOST'] - DB host 35 | os.environ['OPENSHIFT_MYSQL_DB_PORT'] - DB Port 36 | os.environ['OPENSHIFT_MYSQL_DB_USERNAME'] - DB Username 37 | os.environ['OPENSHIFT_MYSQL_DB_PASSWORD'] - DB Password 38 | 39 | When embedding a NoSQL database using 'rhc app cartridge add', you can 40 | reference environment variables for username, host and password. 41 | Example for MongoDB: 42 | os.environ['OPENSHIFT_MONGODB_DB_HOST'] - NoSQL DB Host 43 | os.environ['OPENSHIFT_MONGODB_DB_PORT'] - NoSQL DB Port 44 | os.environ['OPENSHIFT_MONGODB_DB_USERNAME'] - NoSQL DB Username 45 | os.environ['OPENSHIFT_MONGODB_DB_PASSWORD'] - NoSQL DB Password 46 | 47 | To get a full list of environment variables, simply add a line in your 48 | .openshift/action_hooks/build script that says "export" and push. 49 | 50 | 51 | Notes about layout 52 | ================== 53 | Please leave wsgi, libs and data directories but feel free to create additional 54 | directories if needed. 55 | 56 | Note: Every time you push, everything in your remote repo dir gets recreated 57 | please store long term items (like an sqlite database) in ../data which will 58 | persist between pushes of your repo. 59 | 60 | 61 | Notes about setup.py 62 | ==================== 63 | 64 | Adding deps to the install_requires will have the openshift server actually 65 | install those deps at git push time. 66 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/sunburst.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | Sunburst-like style (c) Vasily Polovnyov 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background: #000; color: #f8f8f8; 10 | } 11 | 12 | pre .comment, 13 | pre .template_comment, 14 | pre .javadoc { 15 | color: #aeaeae; 16 | font-style: italic; 17 | } 18 | 19 | pre .keyword, 20 | pre .ruby .function .keyword, 21 | pre .request, 22 | pre .status, 23 | pre .nginx .title { 24 | color: #E28964; 25 | } 26 | 27 | pre .function .keyword, 28 | pre .sub .keyword, 29 | pre .method, 30 | pre .list .title { 31 | color: #99CF50; 32 | } 33 | 34 | pre .string, 35 | pre .tag .value, 36 | pre .cdata, 37 | pre .filter .argument, 38 | pre .attr_selector, 39 | pre .apache .cbracket, 40 | pre .date, 41 | pre .tex .command { 42 | color: #65B042; 43 | } 44 | 45 | pre .subst { 46 | color: #DAEFA3; 47 | } 48 | 49 | pre .regexp { 50 | color: #E9C062; 51 | } 52 | 53 | pre .title, 54 | pre .sub .identifier, 55 | pre .pi, 56 | pre .tag, 57 | pre .tag .keyword, 58 | pre .decorator, 59 | pre .shebang, 60 | pre .prompt { 61 | color: #89BDFF; 62 | } 63 | 64 | pre .class .title, 65 | pre .haskell .type, 66 | pre .smalltalk .class, 67 | pre .javadoctag, 68 | pre .yardoctag, 69 | pre .phpdoc { 70 | text-decoration: underline; 71 | } 72 | 73 | pre .symbol, 74 | pre .ruby .symbol .string, 75 | pre .number { 76 | color: #3387CC; 77 | } 78 | 79 | pre .params, 80 | pre .variable, 81 | pre .clojure .attribute { 82 | color: #3E87E3; 83 | } 84 | 85 | pre .css .tag, 86 | pre .rules .property, 87 | pre .pseudo, 88 | pre .tex .special { 89 | color: #CDA869; 90 | } 91 | 92 | pre .css .class { 93 | color: #9B703F; 94 | } 95 | 96 | pre .rules .keyword { 97 | color: #C5AF75; 98 | } 99 | 100 | pre .rules .value { 101 | color: #CF6A4C; 102 | } 103 | 104 | pre .css .id { 105 | color: #8B98AB; 106 | } 107 | 108 | pre .annotation, 109 | pre .apache .sqbracket, 110 | pre .nginx .built_in { 111 | color: #9B859D; 112 | } 113 | 114 | pre .preprocessor { 115 | color: #8996A8; 116 | } 117 | 118 | pre .hexcolor, 119 | pre .css .value .number { 120 | color: #DD7B3B; 121 | } 122 | 123 | pre .css .function { 124 | color: #DAD085; 125 | } 126 | 127 | pre .diff .header, 128 | pre .chunk, 129 | pre .tex .formula { 130 | background-color: #0E2231; 131 | color: #F8F8F8; 132 | font-style: italic; 133 | } 134 | 135 | pre .diff .change { 136 | background-color: #4A410D; 137 | color: #F8F8F8; 138 | } 139 | 140 | pre .addition { 141 | background-color: #253B22; 142 | color: #F8F8F8; 143 | } 144 | 145 | pre .deletion { 146 | background-color: #420E09; 147 | color: #F8F8F8; 148 | } 149 | 150 | pre .coffeescript .javascript, 151 | pre .javascript .xml, 152 | pre .tex .formula, 153 | pre .xml .javascript, 154 | pre .xml .vbscript, 155 | pre .xml .css, 156 | pre .xml .cdata { 157 | opacity: 0.5; 158 | } 159 | -------------------------------------------------------------------------------- /wsgi/static/css/highlight/xcode.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | XCode style (c) Angel Garcia 4 | 5 | */ 6 | 7 | pre code { 8 | display: block; padding: 0.5em; 9 | background: #fff; color: black; 10 | } 11 | 12 | pre .comment, 13 | pre .template_comment, 14 | pre .javadoc, 15 | pre .comment * { 16 | color: rgb(0,106,0); 17 | } 18 | 19 | pre .keyword, 20 | pre .literal, 21 | pre .nginx .title { 22 | color: rgb(170,13,145); 23 | } 24 | pre .method, 25 | pre .list .title, 26 | pre .tag .title, 27 | pre .setting .value, 28 | pre .winutils, 29 | pre .tex .command, 30 | pre .http .title, 31 | pre .request, 32 | pre .status { 33 | color: #008; 34 | } 35 | 36 | pre .envvar, 37 | pre .tex .special { 38 | color: #660; 39 | } 40 | 41 | pre .string { 42 | color: rgb(196,26,22); 43 | } 44 | pre .tag .value, 45 | pre .cdata, 46 | pre .filter .argument, 47 | pre .attr_selector, 48 | pre .apache .cbracket, 49 | pre .date, 50 | pre .regexp { 51 | color: #080; 52 | } 53 | 54 | pre .sub .identifier, 55 | pre .pi, 56 | pre .tag, 57 | pre .tag .keyword, 58 | pre .decorator, 59 | pre .ini .title, 60 | pre .shebang, 61 | pre .prompt, 62 | pre .hexcolor, 63 | pre .rules .value, 64 | pre .css .value .number, 65 | pre .symbol, 66 | pre .symbol .string, 67 | pre .number, 68 | pre .css .function, 69 | pre .clojure .title, 70 | pre .clojure .built_in { 71 | color: rgb(28,0,207); 72 | } 73 | 74 | pre .class .title, 75 | pre .haskell .type, 76 | pre .smalltalk .class, 77 | pre .javadoctag, 78 | pre .yardoctag, 79 | pre .phpdoc, 80 | pre .typename, 81 | pre .tag .attribute, 82 | pre .doctype, 83 | pre .class .id, 84 | pre .built_in, 85 | pre .setting, 86 | pre .params, 87 | pre .clojure .attribute { 88 | color: rgb(92,38,153); 89 | } 90 | 91 | pre .variable { 92 | color: rgb(63,110,116); 93 | } 94 | pre .css .tag, 95 | pre .rules .property, 96 | pre .pseudo, 97 | pre .subst { 98 | color: #000; 99 | } 100 | 101 | pre .css .class, pre .css .id { 102 | color: #9B703F; 103 | } 104 | 105 | pre .value .important { 106 | color: #ff7700; 107 | font-weight: bold; 108 | } 109 | 110 | pre .rules .keyword { 111 | color: #C5AF75; 112 | } 113 | 114 | pre .annotation, 115 | pre .apache .sqbracket, 116 | pre .nginx .built_in { 117 | color: #9B859D; 118 | } 119 | 120 | pre .preprocessor, 121 | pre .preprocessor * { 122 | color: rgb(100,56,32); 123 | } 124 | 125 | pre .tex .formula { 126 | background-color: #EEE; 127 | font-style: italic; 128 | } 129 | 130 | pre .diff .header, 131 | pre .chunk { 132 | color: #808080; 133 | font-weight: bold; 134 | } 135 | 136 | pre .diff .change { 137 | background-color: #BCCFF9; 138 | } 139 | 140 | pre .addition { 141 | background-color: #BAEEBA; 142 | } 143 | 144 | pre .deletion { 145 | background-color: #FFC8BD; 146 | } 147 | 148 | pre .comment .yardoctag { 149 | font-weight: bold; 150 | } 151 | 152 | pre .method .id { 153 | color: #000; 154 | } 155 | -------------------------------------------------------------------------------- /wsgi/static/js/bootstrap-button.js: -------------------------------------------------------------------------------- 1 | /* ============================================================ 2 | * bootstrap-button.js v2.2.1 3 | * http://twitter.github.com/bootstrap/javascript.html#buttons 4 | * ============================================================ 5 | * Copyright 2012 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ============================================================ */ 19 | 20 | 21 | !function ($) { 22 | 23 | "use strict"; // jshint ;_; 24 | 25 | 26 | /* BUTTON PUBLIC CLASS DEFINITION 27 | * ============================== */ 28 | 29 | var Button = function (element, options) { 30 | this.$element = $(element) 31 | this.options = $.extend({}, $.fn.button.defaults, options) 32 | } 33 | 34 | Button.prototype.setState = function (state) { 35 | var d = 'disabled' 36 | , $el = this.$element 37 | , data = $el.data() 38 | , val = $el.is('input') ? 'val' : 'html' 39 | 40 | state = state + 'Text' 41 | data.resetText || $el.data('resetText', $el[val]()) 42 | 43 | $el[val](data[state] || this.options[state]) 44 | 45 | // push to event loop to allow forms to submit 46 | setTimeout(function () { 47 | state == 'loadingText' ? 48 | $el.addClass(d).attr(d, d) : 49 | $el.removeClass(d).removeAttr(d) 50 | }, 0) 51 | } 52 | 53 | Button.prototype.toggle = function () { 54 | var $parent = this.$element.closest('[data-toggle="buttons-radio"]') 55 | 56 | $parent && $parent 57 | .find('.active') 58 | .removeClass('active') 59 | 60 | this.$element.toggleClass('active') 61 | } 62 | 63 | 64 | /* BUTTON PLUGIN DEFINITION 65 | * ======================== */ 66 | 67 | $.fn.button = function (option) { 68 | return this.each(function () { 69 | var $this = $(this) 70 | , data = $this.data('button') 71 | , options = typeof option == 'object' && option 72 | if (!data) $this.data('button', (data = new Button(this, options))) 73 | if (option == 'toggle') data.toggle() 74 | else if (option) data.setState(option) 75 | }) 76 | } 77 | 78 | $.fn.button.defaults = { 79 | loadingText: 'loading...' 80 | } 81 | 82 | $.fn.button.Constructor = Button 83 | 84 | 85 | /* BUTTON DATA-API 86 | * =============== */ 87 | 88 | $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { 89 | var $btn = $(e.target) 90 | if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') 91 | $btn.button('toggle') 92 | }) 93 | 94 | }(window.jQuery); -------------------------------------------------------------------------------- /wsgi/static/css/highlight/arta.css: -------------------------------------------------------------------------------- 1 | /* 2 | Date: 17.V.2011 3 | Author: pumbur 4 | */ 5 | 6 | pre code 7 | { 8 | display: block; padding: 0.5em; 9 | background: #222; 10 | } 11 | 12 | pre .profile .header *, 13 | pre .ini .title, 14 | pre .nginx .title 15 | { 16 | color: #fff; 17 | } 18 | 19 | pre .comment, 20 | pre .javadoc, 21 | pre .preprocessor, 22 | pre .preprocessor .title, 23 | pre .shebang, 24 | pre .profile .summary, 25 | pre .diff, 26 | pre .pi, 27 | pre .doctype, 28 | pre .tag, 29 | pre .template_comment, 30 | pre .css .rules, 31 | pre .tex .special 32 | { 33 | color: #444; 34 | } 35 | 36 | pre .string, 37 | pre .symbol, 38 | pre .diff .change, 39 | pre .regexp, 40 | pre .xml .attribute, 41 | pre .smalltalk .char, 42 | pre .xml .value, 43 | pre .ini .value, 44 | pre .clojure .attribute 45 | { 46 | color: #ffcc33; 47 | } 48 | 49 | pre .number, 50 | pre .addition 51 | { 52 | color: #00cc66; 53 | } 54 | 55 | pre .built_in, 56 | pre .literal, 57 | pre .vhdl .typename, 58 | pre .go .constant, 59 | pre .go .typename, 60 | pre .ini .keyword, 61 | pre .lua .title, 62 | pre .perl .variable, 63 | pre .php .variable, 64 | pre .mel .variable, 65 | pre .django .variable, 66 | pre .css .funtion, 67 | pre .smalltalk .method, 68 | pre .hexcolor, 69 | pre .important, 70 | pre .flow, 71 | pre .inheritance, 72 | pre .parser3 .variable 73 | { 74 | color: #32AAEE; 75 | } 76 | 77 | pre .keyword, 78 | pre .tag .title, 79 | pre .css .tag, 80 | pre .css .class, 81 | pre .css .id, 82 | pre .css .pseudo, 83 | pre .css .attr_selector, 84 | pre .lisp .title, 85 | pre .clojure .built_in, 86 | pre .winutils, 87 | pre .tex .command, 88 | pre .request, 89 | pre .status 90 | { 91 | color: #6644aa; 92 | } 93 | 94 | pre .title, 95 | pre .ruby .constant, 96 | pre .vala .constant, 97 | pre .parent, 98 | pre .deletion, 99 | pre .template_tag, 100 | pre .css .keyword, 101 | pre .objectivec .class .id, 102 | pre .smalltalk .class, 103 | pre .lisp .keyword, 104 | pre .apache .tag, 105 | pre .nginx .variable, 106 | pre .envvar, 107 | pre .bash .variable, 108 | pre .go .built_in, 109 | pre .vbscript .built_in, 110 | pre .lua .built_in, 111 | pre .rsl .built_in, 112 | pre .tail, 113 | pre .avrasm .label, 114 | pre .tex .formula, 115 | pre .tex .formula * 116 | { 117 | color: #bb1166; 118 | } 119 | 120 | pre .yardoctag, 121 | pre .phpdoc, 122 | pre .profile .header, 123 | pre .ini .title, 124 | pre .apache .tag, 125 | pre .parser3 .title 126 | { 127 | font-weight: bold; 128 | } 129 | 130 | pre .coffeescript .javascript, 131 | pre .javascript .xml, 132 | pre .tex .formula, 133 | pre .xml .javascript, 134 | pre .xml .vbscript, 135 | pre .xml .css, 136 | pre .xml .cdata 137 | { 138 | opacity: 0.6; 139 | } 140 | 141 | pre code, 142 | pre .javascript, 143 | pre .css, 144 | pre .xml, 145 | pre .subst, 146 | pre .diff .chunk, 147 | pre .css .value, 148 | pre .css .attribute, 149 | pre .lisp .string, 150 | pre .lisp .number, 151 | pre .tail .params, 152 | pre .container, 153 | pre .haskell *, 154 | pre .erlang *, 155 | pre .erlang_repl * 156 | { 157 | color: #aaa; 158 | } 159 | -------------------------------------------------------------------------------- /wsgi/static/css/blog.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | height: 100%; 3 | } 4 | 5 | form .clearfix.error > label, 6 | form .clearfix.error .help-block, 7 | form .clearfix.error .help-inline { 8 | color: #b94a48; 9 | } 10 | 11 | form .clearfix.error input, 12 | form .clearfix.error textarea { 13 | color: #b94a48; 14 | border-color: #ee5f5b; 15 | } 16 | 17 | form .clearfix.error input:focus, 18 | form .clearfix.error textarea:focus { 19 | border-color: #e9322d; 20 | -webkit-box-shadow: 0 0 6px #f8b9b7; 21 | -moz-box-shadow: 0 0 6px #f8b9b7; 22 | box-shadow: 0 0 6px #f8b9b7; 23 | } 24 | 25 | form .clearfix.error .input-prepend .add-on, 26 | form .clearfix.error .input-append .add-on { 27 | color: #b94a48; 28 | background-color: #fce6e6; 29 | border-color: #b94a48; 30 | } 31 | 32 | .font-cute { 33 | font-family:'Lucida Casual', 'Comic Sans MS'; 34 | } 35 | 36 | .imgcenter-wrapper { 37 | text-align: center; 38 | } 39 | 40 | /* Tag cloud */ 41 | 42 | .tags ul{ 43 | margin:1em 0; 44 | padding:.5em 10px; 45 | text-align:center; 46 | background:#71b5e9 url(/static/images/bg_tags.gif) repeat-x; 47 | } 48 | .tags li{ 49 | margin:0; 50 | padding:0; 51 | list-style:none; 52 | display:inline; 53 | } 54 | .tags li a{ 55 | text-decoration:none; 56 | color:#fff; 57 | padding:0 2px; 58 | } 59 | .tags li a:hover{ 60 | color:#cff400; 61 | } 62 | 63 | .tag1{font-size:100%;} 64 | .tag2{font-size:120%;} 65 | .tag3{font-size:140%;} 66 | .tag4{font-size:160%;} 67 | .tag5{font-size:180%;} 68 | 69 | /* alternative layout */ 70 | 71 | .tags .alt{ 72 | text-align:left; 73 | padding:0; 74 | background:none; 75 | } 76 | .tags .alt li{ 77 | padding:2px 10px; 78 | background:#efefef; 79 | display:block; 80 | } 81 | .tags .alt .tag1, 82 | .tags .alt .tag2, 83 | .tags .alt .tag3, 84 | .tags .alt .tag4, 85 | .tags .alt .tag5{font-size:100%;} 86 | .tags .alt .tag1{background:#7cc0f4;} 87 | .tags .alt .tag2{background:#67abe0;} 88 | .tags .alt .tag3{background:#4d92c7;} 89 | .tags .alt .tag4{background:#3277ad;} 90 | .tags .alt .tag5{background:#266ca2;} 91 | /* // Tag cloud */ 92 | 93 | /* footer */ 94 | #wrap { 95 | min-height: 100%; 96 | height: auto !important; 97 | height: 100%; 98 | margin: 0 auto -60px; 99 | } 100 | 101 | #push, 102 | #footer { 103 | height: 30px; 104 | } 105 | 106 | #push { 107 | margin-top: 45px; 108 | } 109 | 110 | #footer { 111 | padding-top: 20px; 112 | padding-bottom: 20px; 113 | } 114 | 115 | /* Unfloat the back to top in footer to prevent odd text wrapping */ 116 | #footer .pull-right { 117 | float: none; 118 | } 119 | 120 | #footer { 121 | padding: 10px 0; 122 | margin-top: 15px; 123 | border-top: 1px solid #e5e5e5; 124 | background-color: #f5f5f5; 125 | } 126 | 127 | .fixed-at-bottom-right { 128 | position:fixed; 129 | bottom:20px; 130 | right:0; 131 | } 132 | 133 | #cnbeta-rss { 134 | width:241px; 135 | right:-220px; 136 | } 137 | 138 | #cnbeta-rss:hover { 139 | right:0; 140 | } 141 | 142 | .popover-title img { 143 | width: 1.0em; 144 | margin-top: 0.1em; 145 | margin-right: 0.2em; 146 | } 147 | 148 | .clean-a:hover { 149 | text-decoration: none; 150 | } 151 | 152 | #cnbeta-rss-bottom { 153 | height: 30px; 154 | margin-top: -20px; 155 | background-color: #f7f7f7; 156 | line-height: 30px; 157 | display:none; 158 | } 159 | 160 | .hero-unit:hover { 161 | box-shadow:0 0 10px #06C; 162 | } 163 | -------------------------------------------------------------------------------- /blog/templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Pengfei Xue 7 | 8 | 9 | 10 | 11 | 12 | {% block css_header %} 13 | {% endblock %} 14 | 15 | 16 | 17 | 18 | 19 |
20 | {%- block topbar -%} 21 | 32 | {%- endblock -%} 33 | 34 |
35 |
36 | {% block sidebar %} 37 |
38 | 39 |

40 | @Beijing 41 |

42 |
43 | {% include 'tags.html' %} 44 |
45 | {% endblock %} 46 |
47 | {% block page_header %}{% endblock %} 48 | {% block content %}{% endblock %} 49 |
50 |
51 |
52 |
53 |
54 | 55 | 75 | 76 | {% include 'slide.html' %} 77 | 78 |
79 | {% block js_footer %} 80 | {% endblock %} 81 | 82 | 83 | 84 | 95 |
96 | 97 | 98 | -------------------------------------------------------------------------------- /blog/blueprints/posts/views.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf8 -*- 2 | from datetime import datetime 3 | 4 | from flask import (Blueprint, request, redirect, 5 | render_template, url_for, session) 6 | from flask.views import MethodView 7 | from flask.ext.mongoengine.wtf import model_form 8 | 9 | from models import Post, Comment 10 | from utilities import login_required, uniq_list 11 | 12 | posts = Blueprint('posts', __name__, template_folder='templates') 13 | 14 | def check_slug_uniq(slug): 15 | try: 16 | post = Post.objects.get(slug=slug) 17 | except Post.DoesNotExist: 18 | return True 19 | else: 20 | return False 21 | 22 | 23 | @posts.route('/') 24 | def index(): 25 | page = request.args.get('page', 1) 26 | 27 | paginated_posts = Post.objects.paginate(page=int(page), per_page=6) 28 | tags = Post.objects.item_frequencies('tags') 29 | 30 | return render_template('list_posts.html', pagination=paginated_posts, tags=tags) 31 | 32 | @posts.route('/tags/') 33 | def tags(tag): 34 | page = request.args.get('page', 1) 35 | 36 | paginated_posts = Post.objects(tags=tag).paginate(page=int(page), per_page=6) 37 | tags = Post.objects.item_frequencies('tags') 38 | 39 | return render_template('list_posts.html', pagination=paginated_posts, tags=tags, tag=tag) 40 | 41 | 42 | @posts.route('/admin/posts/') 43 | @login_required 44 | def list_posts(): 45 | posts = Post.objects.all() 46 | return render_template('list_posts_for_editing.html', posts=posts) 47 | 48 | 49 | class DetailView(MethodView): 50 | form = model_form(Comment, exclude=['created_at']) 51 | 52 | def get_context(self, slug): 53 | post = Post.objects.get_or_404(slug=slug) 54 | form = self.form(request.form) 55 | 56 | context = { 57 | "post": post, 58 | "form": form 59 | } 60 | return context 61 | 62 | def get(self, slug): 63 | context = self.get_context(slug) 64 | return render_template('detail.html', **context) 65 | 66 | def post(self, slug): 67 | context = self.get_context(slug) 68 | form = context.get('form') 69 | 70 | if form.validate(): 71 | comment = Comment() 72 | form.populate_obj(comment) 73 | 74 | post = context.get('post') 75 | post.comments.append(comment) 76 | post.save() 77 | 78 | return redirect(url_for('.detail', slug=slug)) 79 | 80 | return render_template('detail.html', **context) 81 | 82 | 83 | class NewPostView(MethodView): 84 | form = model_form(Post, 85 | exclude=('created_at', 'comments', 'updated_at')) 86 | 87 | def get(self): 88 | return render_template('new.html', form=self.form()) 89 | 90 | def post(self): 91 | form = self.form(request.form) 92 | tags = request.form['tags'] if request.form['tags'] else '' 93 | 94 | if form.validate(): 95 | post = Post() 96 | form.populate_obj(post) 97 | 98 | tags = uniq_list(tags, ',') 99 | post['tags'] = tags 100 | 101 | post.save() 102 | 103 | return redirect(url_for('.index')) 104 | 105 | 106 | class EditPost(MethodView): 107 | form = model_form(Post, 108 | exclude=('created_at', 'comments', 'updated_at')) 109 | 110 | def get(self, slug): 111 | post = Post.objects.get_or_404(slug=slug) 112 | form = self.form() 113 | return render_template('edit.html', post=post, form=form) 114 | 115 | def post(self, slug): 116 | post = Post.objects.get_or_404(slug=slug) 117 | form = self.form(request.form) 118 | tags = request.form['tags'] if request.form['tags'] else '' 119 | 120 | if form.validate(): 121 | now = datetime.now() 122 | 123 | for field in ['slug', 'title', 'body']: 124 | post[field] = form[field].data 125 | 126 | tags = uniq_list(tags, ',') 127 | post['tags'] = tags 128 | 129 | post['updated_at'] = now 130 | 131 | post.save() 132 | 133 | return redirect(url_for('.index')) 134 | 135 | # Register the urls 136 | posts.add_url_rule('/posts//', view_func=DetailView.as_view('detail')) 137 | posts.add_url_rule('/posts/new', view_func=login_required(NewPostView.as_view('new'))) 138 | posts.add_url_rule('/posts//edit',view_func=login_required(EditPost.as_view('edit'))) 139 | -------------------------------------------------------------------------------- /wsgi/static/js/bootstrap-carousel.js: -------------------------------------------------------------------------------- 1 | /* ========================================================== 2 | * bootstrap-carousel.js v2.2.2 3 | * http://twitter.github.com/bootstrap/javascript.html#carousel 4 | * ========================================================== 5 | * Copyright 2012 Twitter, Inc. 6 | * 7 | * Licensed under the Apache License, Version 2.0 (the "License"); 8 | * you may not use this file except in compliance with the License. 9 | * You may obtain a copy of the License at 10 | * 11 | * http://www.apache.org/licenses/LICENSE-2.0 12 | * 13 | * Unless required by applicable law or agreed to in writing, software 14 | * distributed under the License is distributed on an "AS IS" BASIS, 15 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | * See the License for the specific language governing permissions and 17 | * limitations under the License. 18 | * ========================================================== */ 19 | 20 | 21 | !function ($) { 22 | 23 | "use strict"; // jshint ;_; 24 | 25 | 26 | /* CAROUSEL CLASS DEFINITION 27 | * ========================= */ 28 | 29 | var Carousel = function (element, options) { 30 | this.$element = $(element) 31 | this.options = options 32 | this.options.pause == 'hover' && this.$element 33 | .on('mouseenter', $.proxy(this.pause, this)) 34 | .on('mouseleave', $.proxy(this.cycle, this)) 35 | } 36 | 37 | Carousel.prototype = { 38 | 39 | cycle: function (e) { 40 | if (!e) this.paused = false 41 | this.options.interval 42 | && !this.paused 43 | && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) 44 | return this 45 | } 46 | 47 | , to: function (pos) { 48 | var $active = this.$element.find('.item.active') 49 | , children = $active.parent().children() 50 | , activePos = children.index($active) 51 | , that = this 52 | 53 | if (pos > (children.length - 1) || pos < 0) return 54 | 55 | if (this.sliding) { 56 | return this.$element.one('slid', function () { 57 | that.to(pos) 58 | }) 59 | } 60 | 61 | if (activePos == pos) { 62 | return this.pause().cycle() 63 | } 64 | 65 | return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos])) 66 | } 67 | 68 | , pause: function (e) { 69 | if (!e) this.paused = true 70 | if (this.$element.find('.next, .prev').length && $.support.transition.end) { 71 | this.$element.trigger($.support.transition.end) 72 | this.cycle() 73 | } 74 | clearInterval(this.interval) 75 | this.interval = null 76 | return this 77 | } 78 | 79 | , next: function () { 80 | if (this.sliding) return 81 | return this.slide('next') 82 | } 83 | 84 | , prev: function () { 85 | if (this.sliding) return 86 | return this.slide('prev') 87 | } 88 | 89 | , slide: function (type, next) { 90 | var $active = this.$element.find('.item.active') 91 | , $next = next || $active[type]() 92 | , isCycling = this.interval 93 | , direction = type == 'next' ? 'left' : 'right' 94 | , fallback = type == 'next' ? 'first' : 'last' 95 | , that = this 96 | , e 97 | 98 | this.sliding = true 99 | 100 | isCycling && this.pause() 101 | 102 | $next = $next.length ? $next : this.$element.find('.item')[fallback]() 103 | 104 | e = $.Event('slide', { 105 | relatedTarget: $next[0] 106 | }) 107 | 108 | if ($next.hasClass('active')) return 109 | 110 | if ($.support.transition && this.$element.hasClass('slide')) { 111 | this.$element.trigger(e) 112 | if (e.isDefaultPrevented()) return 113 | $next.addClass(type) 114 | $next[0].offsetWidth // force reflow 115 | $active.addClass(direction) 116 | $next.addClass(direction) 117 | this.$element.one($.support.transition.end, function () { 118 | $next.removeClass([type, direction].join(' ')).addClass('active') 119 | $active.removeClass(['active', direction].join(' ')) 120 | that.sliding = false 121 | setTimeout(function () { that.$element.trigger('slid') }, 0) 122 | }) 123 | } else { 124 | this.$element.trigger(e) 125 | if (e.isDefaultPrevented()) return 126 | $active.removeClass('active') 127 | $next.addClass('active') 128 | this.sliding = false 129 | this.$element.trigger('slid') 130 | } 131 | 132 | isCycling && this.cycle() 133 | 134 | return this 135 | } 136 | 137 | } 138 | 139 | 140 | /* CAROUSEL PLUGIN DEFINITION 141 | * ========================== */ 142 | 143 | var old = $.fn.carousel 144 | 145 | $.fn.carousel = function (option) { 146 | return this.each(function () { 147 | var $this = $(this) 148 | , data = $this.data('carousel') 149 | , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) 150 | , action = typeof option == 'string' ? option : options.slide 151 | if (!data) $this.data('carousel', (data = new Carousel(this, options))) 152 | if (typeof option == 'number') data.to(option) 153 | else if (action) data[action]() 154 | else if (options.interval) data.cycle() 155 | }) 156 | } 157 | 158 | $.fn.carousel.defaults = { 159 | interval: 5000 160 | , pause: 'hover' 161 | } 162 | 163 | $.fn.carousel.Constructor = Carousel 164 | 165 | 166 | /* CAROUSEL NO CONFLICT 167 | * ==================== */ 168 | 169 | $.fn.carousel.noConflict = function () { 170 | $.fn.carousel = old 171 | return this 172 | } 173 | 174 | /* CAROUSEL DATA-API 175 | * ================= */ 176 | 177 | $(document).on('click.carousel.data-api', '[data-slide]', function (e) { 178 | var $this = $(this), href 179 | , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 180 | , options = $.extend({}, $target.data(), $this.data()) 181 | $target.carousel(options) 182 | e.preventDefault() 183 | }) 184 | 185 | }(window.jQuery); -------------------------------------------------------------------------------- /wsgi/static/js/highlight.pack.js: -------------------------------------------------------------------------------- 1 | var hljs=new function(){function l(o){return o.replace(/&/gm,"&").replace(//gm,">")}function b(p){for(var o=p.firstChild;o;o=o.nextSibling){if(o.nodeName=="CODE"){return o}if(!(o.nodeType==3&&o.nodeValue.match(/\s+/))){break}}}function h(p,o){return Array.prototype.map.call(p.childNodes,function(q){if(q.nodeType==3){return o?q.nodeValue.replace(/\n/g,""):q.nodeValue}if(q.nodeName=="BR"){return"\n"}return h(q,o)}).join("")}function a(q){var p=(q.className+" "+q.parentNode.className).split(/\s+/);p=p.map(function(r){return r.replace(/^language-/,"")});for(var o=0;o"}while(x.length||v.length){var u=t().splice(0,1)[0];y+=l(w.substr(p,u.offset-p));p=u.offset;if(u.event=="start"){y+=s(u.node);r.push(u.node)}else{if(u.event=="stop"){var o,q=r.length;do{q--;o=r[q];y+=("")}while(o!=u.node);r.splice(q,1);while(q'+L[0]+""}else{r+=L[0]}N=A.lR.lastIndex;L=A.lR.exec(K)}return r+K.substr(N)}function z(){if(A.sL&&!e[A.sL]){return l(w)}var r=A.sL?d(A.sL,w):g(w);if(A.r>0){v+=r.keyword_count;B+=r.r}return''+r.value+""}function J(){return A.sL!==undefined?z():G()}function I(L,r){var K=L.cN?'':"";if(L.rB){x+=K;w=""}else{if(L.eB){x+=l(r)+K;w=""}else{x+=K;w=r}}A=Object.create(L,{parent:{value:A}});B+=L.r}function C(K,r){w+=K;if(r===undefined){x+=J();return 0}var L=o(r,A);if(L){x+=J();I(L,r);return L.rB?0:r.length}var M=s(A,r);if(M){if(!(M.rE||M.eE)){w+=r}x+=J();do{if(A.cN){x+=""}A=A.parent}while(A!=M.parent);if(M.eE){x+=l(r)}w="";if(M.starts){I(M.starts,"")}return M.rE?0:r.length}if(t(r,A)){throw"Illegal"}w+=r;return r.length||1}var F=e[D];f(F);var A=F;var w="";var B=0;var v=0;var x="";try{var u,q,p=0;while(true){A.t.lastIndex=p;u=A.t.exec(E);if(!u){break}q=C(E.substr(p,u.index-p),u[0]);p=u.index+q}C(E.substr(p));return{r:B,keyword_count:v,value:x,language:D}}catch(H){if(H=="Illegal"){return{r:0,keyword_count:0,value:l(E)}}else{throw H}}}function g(s){var o={keyword_count:0,r:0,value:l(s)};var q=o;for(var p in e){if(!e.hasOwnProperty(p)){continue}var r=d(p,s);r.language=p;if(r.keyword_count+r.r>q.keyword_count+q.r){q=r}if(r.keyword_count+r.r>o.keyword_count+o.r){q=o;o=r}}if(q.language){o.second_best=q}return o}function i(q,p,o){if(p){q=q.replace(/^((<[^>]+>|\t)+)/gm,function(r,v,u,t){return v.replace(/\t/g,p)})}if(o){q=q.replace(/\n/g,"
")}return q}function m(r,u,p){var v=h(r,p);var t=a(r);if(t=="no-highlight"){return}var w=t?d(t,v):g(v);t=w.language;var o=c(r);if(o.length){var q=document.createElement("pre");q.innerHTML=w.value;w.value=j(o,c(q),v)}w.value=i(w.value,u,p);var s=r.className;if(!s.match("(\\s|^)(language-)?"+t+"(\\s|$)")){s=s?(s+" "+t):t}r.innerHTML=w.value;r.className=s;r.result={language:t,kw:w.keyword_count,re:w.r};if(w.second_best){r.second_best={language:w.second_best.language,kw:w.second_best.keyword_count,re:w.second_best.r}}}function n(){if(n.called){return}n.called=true;Array.prototype.map.call(document.getElementsByTagName("pre"),b).filter(Boolean).forEach(function(o){m(o,hljs.tabReplace)})}function k(){window.addEventListener("DOMContentLoaded",n,false);window.addEventListener("load",n,false)}var e={};this.LANGUAGES=e;this.highlight=d;this.highlightAuto=g;this.fixMarkup=i;this.highlightBlock=m;this.initHighlighting=n;this.initHighlightingOnLoad=k;this.IR="[a-zA-Z][a-zA-Z0-9_]*";this.UIR="[a-zA-Z_][a-zA-Z0-9_]*";this.NR="\\b\\d+(\\.\\d+)?";this.CNR="(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)";this.BNR="\\b(0b[01]+)";this.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|\\.|-|-=|/|/=|:|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\[\\s\\S]",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.BNM={cN:"number",b:this.BNR,r:0};this.inherit=function(q,r){var o={};for(var p in q){o[p]=q[p]}if(r){for(var p in r){o[p]=r[p]}}return o}}();hljs.LANGUAGES.bash=function(a){var g="true false";var e="if then else elif fi for break continue while in do done echo exit return set declare";var c={cN:"variable",b:"\\$[a-zA-Z0-9_#]+"};var b={cN:"variable",b:"\\${([^}]|\\\\})+}"};var h={cN:"string",b:'"',e:'"',i:"\\n",c:[a.BE,c,b],r:0};var d={cN:"string",b:"'",e:"'",c:[{b:"''"}],r:0};var f={cN:"test_condition",b:"",e:"",c:[h,d,c,b],k:{literal:g},r:0};return{k:{keyword:e,literal:g},c:[{cN:"shebang",b:"(#!\\/bin\\/bash)|(#!\\/bin\\/sh)",r:10},c,b,a.HCM,h,d,a.inherit(f,{b:"\\[ ",e:" \\]",r:0}),a.inherit(f,{b:"\\[\\[ ",e:" \\]\\]"})]}}(hljs);hljs.LANGUAGES.cs=function(a){return{k:"abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit extern false finally fixed float for foreach goto if implicit in int interface internal is lock long namespace new null object operator out override params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual volatile void while ascending descending from get group into join let orderby partial select set value var where yield",c:[{cN:"comment",b:"///",e:"$",rB:true,c:[{cN:"xmlDocTag",b:"///|"},{cN:"xmlDocTag",b:""}]},a.CLCM,a.CBLCLM,{cN:"preprocessor",b:"#",e:"$",k:"if else elif endif define undef warning error line region endregion pragma checksum"},{cN:"string",b:'@"',e:'"',c:[{b:'""'}]},a.ASM,a.QSM,a.CNM]}}(hljs);hljs.LANGUAGES.ruby=function(e){var a="[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?";var j="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?";var g={keyword:"and false then defined module in return redo if BEGIN retry end for true self when next until do begin unless END rescue nil else break undef not super class case require yield alias while ensure elsif or include"};var c={cN:"yardoctag",b:"@[A-Za-z]+"};var k=[{cN:"comment",b:"#",e:"$",c:[c]},{cN:"comment",b:"^\\=begin",e:"^\\=end",c:[c],r:10},{cN:"comment",b:"^__END__",e:"\\n$"}];var d={cN:"subst",b:"#\\{",e:"}",l:a,k:g};var i=[e.BE,d];var b=[{cN:"string",b:"'",e:"'",c:i,r:0},{cN:"string",b:'"',e:'"',c:i,r:0},{cN:"string",b:"%[qw]?\\(",e:"\\)",c:i},{cN:"string",b:"%[qw]?\\[",e:"\\]",c:i},{cN:"string",b:"%[qw]?{",e:"}",c:i},{cN:"string",b:"%[qw]?<",e:">",c:i,r:10},{cN:"string",b:"%[qw]?/",e:"/",c:i,r:10},{cN:"string",b:"%[qw]?%",e:"%",c:i,r:10},{cN:"string",b:"%[qw]?-",e:"-",c:i,r:10},{cN:"string",b:"%[qw]?\\|",e:"\\|",c:i,r:10}];var h={cN:"function",bWK:true,e:" |$|;",k:"def",c:[{cN:"title",b:j,l:a,k:g},{cN:"params",b:"\\(",e:"\\)",l:a,k:g}].concat(k)};var f=k.concat(b.concat([{cN:"class",bWK:true,e:"$|;",k:"class module",c:[{cN:"title",b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?",r:0},{cN:"inheritance",b:"<\\s*",c:[{cN:"parent",b:"("+e.IR+"::)?"+e.IR}]}].concat(k)},h,{cN:"constant",b:"(::)?(\\b[A-Z]\\w*(::)?)+",r:0},{cN:"symbol",b:":",c:b.concat([{b:j}]),r:0},{cN:"symbol",b:a+":",r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"number",b:"\\?\\w"},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{b:"("+e.RSR+")\\s*",c:k.concat([{cN:"regexp",b:"/",e:"/[a-z]*",i:"\\n",c:[e.BE,d]}]),r:0}]));d.c=f;h.c[1].c=f;return{l:a,k:g,c:f}}(hljs);hljs.LANGUAGES.diff=function(a){return{c:[{cN:"chunk",b:"^\\@\\@ +\\-\\d+,\\d+ +\\+\\d+,\\d+ +\\@\\@$",r:10},{cN:"chunk",b:"^\\*\\*\\* +\\d+,\\d+ +\\*\\*\\*\\*$",r:10},{cN:"chunk",b:"^\\-\\-\\- +\\d+,\\d+ +\\-\\-\\-\\-$",r:10},{cN:"header",b:"Index: ",e:"$"},{cN:"header",b:"=====",e:"=====$"},{cN:"header",b:"^\\-\\-\\-",e:"$"},{cN:"header",b:"^\\*{3} ",e:"$"},{cN:"header",b:"^\\+\\+\\+",e:"$"},{cN:"header",b:"\\*{5}",e:"\\*{5}$"},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"change",b:"^\\!",e:"$"}]}}(hljs);hljs.LANGUAGES.javascript=function(a){return{k:{keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const",literal:"true false null undefined NaN Infinity"},c:[a.ASM,a.QSM,a.CLCM,a.CBLCLM,a.CNM,{b:"("+a.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[a.CLCM,a.CBLCLM,{cN:"regexp",b:"/",e:"/[gim]*",i:"\\n",c:[{b:"\\\\/"}]},{b:"<",e:">;",sL:"xml"}],r:0},{cN:"function",bWK:true,e:"{",k:"function",c:[{cN:"title",b:"[A-Za-z$_][0-9A-Za-z$_]*"},{cN:"params",b:"\\(",e:"\\)",c:[a.CLCM,a.CBLCLM],i:"[\"'\\(]"}],i:"\\[|%"}]}}(hljs);hljs.LANGUAGES.css=function(a){var b={cN:"function",b:a.IR+"\\(",e:"\\)",c:[a.NM,a.ASM,a.QSM]};return{cI:true,i:"[=/|']",c:[a.CBLCLM,{cN:"id",b:"\\#[A-Za-z0-9_-]+"},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"pseudo",b:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{cN:"at_rule",b:"@(font-face|page)",l:"[a-z-]+",k:"font-face page"},{cN:"at_rule",b:"@",e:"[{;]",eE:true,k:"import page media charset",c:[b,a.ASM,a.QSM,a.NM]},{cN:"tag",b:a.IR,r:0},{cN:"rules",b:"{",e:"}",i:"[^\\s]",r:0,c:[a.CBLCLM,{cN:"rule",b:"[^\\s]",rB:true,e:";",eW:true,c:[{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:true,i:"[^\\s]",starts:{cN:"value",eW:true,eE:true,c:[b,a.NM,a.QSM,a.ASM,a.CBLCLM,{cN:"hexcolor",b:"\\#[0-9A-F]+"},{cN:"important",b:"!important"}]}}]}]}]}}(hljs);hljs.LANGUAGES.xml=function(a){var c="[A-Za-z0-9\\._:-]+";var b={eW:true,c:[{cN:"attribute",b:c,r:0},{b:'="',rB:true,e:'"',c:[{cN:"value",b:'"',eW:true}]},{b:"='",rB:true,e:"'",c:[{cN:"value",b:"'",eW:true}]},{b:"=",c:[{cN:"value",b:"[^\\s/>]+"}]}]};return{cI:true,c:[{cN:"pi",b:"<\\?",e:"\\?>",r:10},{cN:"doctype",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},{cN:"comment",b:"",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"|$)",e:">",k:{title:"style"},c:[b],starts:{e:"",rE:true,sL:"css"}},{cN:"tag",b:"|$)",e:">",k:{title:"script"},c:[b],starts:{e:"<\/script>",rE:true,sL:"javascript"}},{b:"<%",e:"%>",sL:"vbscript"},{cN:"tag",b:"",c:[{cN:"title",b:"[^ />]+"},b]}]}}(hljs);hljs.LANGUAGES.http=function(a){return{i:"\\S",c:[{cN:"status",b:"^HTTP/[0-9\\.]+",e:"$",c:[{cN:"number",b:"\\b\\d{3}\\b"}]},{cN:"request",b:"^[A-Z]+ (.*?) HTTP/[0-9\\.]+$",rB:true,e:"$",c:[{cN:"string",b:" ",e:" ",eB:true,eE:true}]},{cN:"attribute",b:"^\\w",e:": ",eE:true,i:"\\n|\\s|=",starts:{cN:"string",e:"$"}},{b:"\\n\\n",starts:{sL:"",eW:true}}]}}(hljs);hljs.LANGUAGES.java=function(a){return{k:"false synchronized int abstract float private char boolean static null if const for true while long throw strictfp finally protected import native final return void enum else break transient new catch instanceof byte super volatile case assert short package default double public try this switch continue throws",c:[{cN:"javadoc",b:"/\\*\\*",e:"\\*/",c:[{cN:"javadoctag",b:"@[A-Za-z]+"}],r:10},a.CLCM,a.CBLCLM,a.ASM,a.QSM,{cN:"class",bWK:true,e:"{",k:"class interface",i:":",c:[{bWK:true,k:"extends implements",r:10},{cN:"title",b:a.UIR}]},a.CNM,{cN:"annotation",b:"@[A-Za-z]+"}]}}(hljs);hljs.LANGUAGES.php=function(a){var e={cN:"variable",b:"\\$+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*"};var b=[a.inherit(a.ASM,{i:null}),a.inherit(a.QSM,{i:null}),{cN:"string",b:'b"',e:'"',c:[a.BE]},{cN:"string",b:"b'",e:"'",c:[a.BE]}];var c=[a.BNM,a.CNM];var d={cN:"title",b:a.UIR};return{cI:true,k:"and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return implements parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception php_user_filter default die require __FUNCTION__ enddeclare final try this switch continue endfor endif declare unset true false namespace trait goto instanceof insteadof __DIR__ __NAMESPACE__ __halt_compiler",c:[a.CLCM,a.HCM,{cN:"comment",b:"/\\*",e:"\\*/",c:[{cN:"phpdoc",b:"\\s@[A-Za-z]+"}]},{cN:"comment",eB:true,b:"__halt_compiler.+?;",eW:true},{cN:"string",b:"<<<['\"]?\\w+['\"]?$",e:"^\\w+;",c:[a.BE]},{cN:"preprocessor",b:"<\\?php",r:10},{cN:"preprocessor",b:"\\?>"},e,{cN:"function",bWK:true,e:"{",k:"function",i:"\\$|\\[|%",c:[d,{cN:"params",b:"\\(",e:"\\)",c:["self",e,a.CBLCLM].concat(b).concat(c)}]},{cN:"class",bWK:true,e:"{",k:"class",i:"[:\\(\\$]",c:[{bWK:true,eW:true,k:"extends",c:[d]},d]},{b:"=>"}].concat(b).concat(c)}}(hljs);hljs.LANGUAGES.haskell=function(a){var d={cN:"type",b:"\\b[A-Z][\\w']*",r:0};var c={cN:"container",b:"\\(",e:"\\)",c:[{cN:"type",b:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},{cN:"title",b:"[_a-z][\\w']*"}]};var b={cN:"container",b:"{",e:"}",c:c.c};return{k:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance not as foreign ccall safe unsafe",c:[{cN:"comment",b:"--",e:"$"},{cN:"preprocessor",b:"{-#",e:"#-}"},{cN:"comment",c:["self"],b:"{-",e:"-}"},{cN:"string",b:"\\s+'",e:"'",c:[a.BE],r:0},a.QSM,{cN:"import",b:"\\bimport",e:"$",k:"import qualified as hiding",c:[c],i:"\\W\\.|;"},{cN:"module",b:"\\bmodule",e:"where",k:"module where",c:[c],i:"\\W\\.|;"},{cN:"class",b:"\\b(class|instance)",e:"where",k:"class where instance",c:[d]},{cN:"typedef",b:"\\b(data|(new)?type)",e:"$",k:"data type newtype deriving",c:[d,c,b]},a.CNM,{cN:"shebang",b:"#!\\/usr\\/bin\\/env runhaskell",e:"$"},d,{cN:"title",b:"^[_a-z][\\w']*"}]}}(hljs);hljs.LANGUAGES.python=function(a){var f={cN:"prompt",b:"^(>>>|\\.\\.\\.) "};var c=[{cN:"string",b:"(u|b)?r?'''",e:"'''",c:[f],r:10},{cN:"string",b:'(u|b)?r?"""',e:'"""',c:[f],r:10},{cN:"string",b:"(u|r|ur)'",e:"'",c:[a.BE],r:10},{cN:"string",b:'(u|r|ur)"',e:'"',c:[a.BE],r:10},{cN:"string",b:"(b|br)'",e:"'",c:[a.BE]},{cN:"string",b:'(b|br)"',e:'"',c:[a.BE]}].concat([a.ASM,a.QSM]);var e={cN:"title",b:a.UIR};var d={cN:"params",b:"\\(",e:"\\)",c:["self",a.CNM,f].concat(c)};var b={bWK:true,e:":",i:"[${=;\\n]",c:[e,d],r:10};return{k:{keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda nonlocal|10",built_in:"None True False Ellipsis NotImplemented"},i:"(|\\?)",c:c.concat([f,a.HCM,a.inherit(b,{cN:"function",k:"def"}),a.inherit(b,{cN:"class",k:"class"}),a.CNM,{cN:"decorator",b:"@",e:"$"},{b:"\\b(print|exec)\\("}])}}(hljs);hljs.LANGUAGES.sql=function(a){return{cI:true,c:[{cN:"operator",b:"(begin|start|commit|rollback|savepoint|lock|alter|create|drop|rename|call|delete|do|handler|insert|load|replace|select|truncate|update|set|show|pragma|grant)\\b(?!:)",e:";",eW:true,k:{keyword:"all partial global month current_timestamp using go revoke smallint indicator end-exec disconnect zone with character assertion to add current_user usage input local alter match collate real then rollback get read timestamp session_user not integer bit unique day minute desc insert execute like ilike|2 level decimal drop continue isolation found where constraints domain right national some module transaction relative second connect escape close system_user for deferred section cast current sqlstate allocate intersect deallocate numeric public preserve full goto initially asc no key output collation group by union session both last language constraint column of space foreign deferrable prior connection unknown action commit view or first into float year primary cascaded except restrict set references names table outer open select size are rows from prepare distinct leading create only next inner authorization schema corresponding option declare precision immediate else timezone_minute external varying translation true case exception join hour default double scroll value cursor descriptor values dec fetch procedure delete and false int is describe char as at in varchar null trailing any absolute current_time end grant privileges when cross check write current_date pad begin temporary exec time update catalog user sql date on identity timezone_hour natural whenever interval work order cascade diagnostics nchar having left call do handler load replace truncate start lock show pragma exists number",aggregate:"count sum min max avg"},c:[{cN:"string",b:"'",e:"'",c:[a.BE,{b:"''"}],r:0},{cN:"string",b:'"',e:'"',c:[a.BE,{b:'""'}],r:0},{cN:"string",b:"`",e:"`",c:[a.BE]},a.CNM]},a.CBLCLM,{cN:"comment",b:"--",e:"$"}]}}(hljs);hljs.LANGUAGES.ini=function(a){return{cI:true,i:"[^\\s]",c:[{cN:"comment",b:";",e:"$"},{cN:"title",b:"^\\[",e:"\\]"},{cN:"setting",b:"^[a-z0-9\\[\\]_-]+[ \\t]*=[ \\t]*",e:"$",c:[{cN:"value",eW:true,k:"on off true false yes no",c:[a.QSM,a.NM]}]}]}}(hljs);hljs.LANGUAGES.perl=function(e){var a="getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when";var d={cN:"subst",b:"[$@]\\{",e:"\\}",k:a,r:10};var b={cN:"variable",b:"\\$\\d"};var i={cN:"variable",b:"[\\$\\%\\@\\*](\\^\\w\\b|#\\w+(\\:\\:\\w+)*|[^\\s\\w{]|{\\w+}|\\w+(\\:\\:\\w*)*)"};var f=[e.BE,d,b,i];var h={b:"->",c:[{b:e.IR},{b:"{",e:"}"}]};var g={cN:"comment",b:"^(__END__|__DATA__)",e:"\\n$",r:5};var c=[b,i,e.HCM,g,{cN:"comment",b:"^\\=\\w",e:"\\=cut",eW:true},h,{cN:"string",b:"q[qwxr]?\\s*\\(",e:"\\)",c:f,r:5},{cN:"string",b:"q[qwxr]?\\s*\\[",e:"\\]",c:f,r:5},{cN:"string",b:"q[qwxr]?\\s*\\{",e:"\\}",c:f,r:5},{cN:"string",b:"q[qwxr]?\\s*\\|",e:"\\|",c:f,r:5},{cN:"string",b:"q[qwxr]?\\s*\\<",e:"\\>",c:f,r:5},{cN:"string",b:"qw\\s+q",e:"q",c:f,r:5},{cN:"string",b:"'",e:"'",c:[e.BE],r:0},{cN:"string",b:'"',e:'"',c:f,r:0},{cN:"string",b:"`",e:"`",c:[e.BE]},{cN:"string",b:"{\\w+}",r:0},{cN:"string",b:"-?\\w+\\s*\\=\\>",r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"("+e.RSR+"|\\b(split|return|print|reverse|grep)\\b)\\s*",k:"split return print reverse grep",r:0,c:[e.HCM,g,{cN:"regexp",b:"(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*",r:10},{cN:"regexp",b:"(m|qr)?/",e:"/[a-z]*",c:[e.BE],r:0}]},{cN:"sub",bWK:true,e:"(\\s*\\(.*?\\))?[;{]",k:"sub",r:5},{cN:"operator",b:"-\\w\\b",r:0}];d.c=c;h.c[1].c=c;return{k:a,c:c}}(hljs);hljs.LANGUAGES.nginx=function(b){var c=[{cN:"variable",b:"\\$\\d+"},{cN:"variable",b:"\\${",e:"}"},{cN:"variable",b:"[\\$\\@]"+b.UIR}];var a={eW:true,l:"[a-z/_]+",k:{built_in:"on off yes no true false none blocked debug info notice warn error crit select break last permanent redirect kqueue rtsig epoll poll /dev/poll"},r:0,i:"=>",c:[b.HCM,{cN:"string",b:'"',e:'"',c:[b.BE].concat(c),r:0},{cN:"string",b:"'",e:"'",c:[b.BE].concat(c),r:0},{cN:"url",b:"([a-z]+):/",e:"\\s",eW:true,eE:true},{cN:"regexp",b:"\\s\\^",e:"\\s|{|;",rE:true,c:[b.BE].concat(c)},{cN:"regexp",b:"~\\*?\\s+",e:"\\s|{|;",rE:true,c:[b.BE].concat(c)},{cN:"regexp",b:"\\*(\\.[a-z\\-]+)+",c:[b.BE].concat(c)},{cN:"regexp",b:"([a-z\\-]+\\.)+\\*",c:[b.BE].concat(c)},{cN:"number",b:"\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b"},{cN:"number",b:"\\b\\d+[kKmMgGdshdwy]*\\b",r:0}].concat(c)};return{c:[b.HCM,{b:b.UIR+"\\s",e:";|{",rB:true,c:[{cN:"title",b:b.UIR,starts:a}]}],i:"[^\\s\\}]"}}(hljs);hljs.LANGUAGES.json=function(a){var e={literal:"true false null"};var d=[a.QSM,a.CNM];var c={cN:"value",e:",",eW:true,eE:true,c:d,k:e};var b={b:"{",e:"}",c:[{cN:"attribute",b:'\\s*"',e:'"\\s*:\\s*',eB:true,eE:true,c:[a.BE],i:"\\n",starts:c}],i:"\\S"};var f={b:"\\[",e:"\\]",c:[a.inherit(c,{cN:null})],i:"\\S"};d.splice(d.length,0,b,f);return{c:d,k:e,i:"\\S"}}(hljs);hljs.LANGUAGES.django=function(c){function e(h,g){return(g==undefined||(!h.cN&&g.cN=="tag")||h.cN=="value")}function f(l,k){var g={};for(var j in l){if(j!="contains"){g[j]=l[j]}var m=[];for(var h=0;l.c&&h",k:b,r:10,c:["self"]}]}}(hljs); -------------------------------------------------------------------------------- /wsgi/static/css/bootstrap/bootstrap-responsive.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Responsive v2.2.1 3 | * 4 | * Copyright 2012 Twitter, Inc 5 | * Licensed under the Apache License v2.0 6 | * http://www.apache.org/licenses/LICENSE-2.0 7 | * 8 | * Designed and built with all the love in the world @twitter by @mdo and @fat. 9 | */ 10 | 11 | .clearfix { 12 | *zoom: 1; 13 | } 14 | 15 | .clearfix:before, 16 | .clearfix:after { 17 | display: table; 18 | line-height: 0; 19 | content: ""; 20 | } 21 | 22 | .clearfix:after { 23 | clear: both; 24 | } 25 | 26 | .hide-text { 27 | font: 0/0 a; 28 | color: transparent; 29 | text-shadow: none; 30 | background-color: transparent; 31 | border: 0; 32 | } 33 | 34 | .input-block-level { 35 | display: block; 36 | width: 100%; 37 | min-height: 30px; 38 | -webkit-box-sizing: border-box; 39 | -moz-box-sizing: border-box; 40 | box-sizing: border-box; 41 | } 42 | 43 | .hidden { 44 | display: none; 45 | visibility: hidden; 46 | } 47 | 48 | .visible-phone { 49 | display: none !important; 50 | } 51 | 52 | .visible-tablet { 53 | display: none !important; 54 | } 55 | 56 | .hidden-desktop { 57 | display: none !important; 58 | } 59 | 60 | .visible-desktop { 61 | display: inherit !important; 62 | } 63 | 64 | @media (min-width: 768px) and (max-width: 979px) { 65 | .hidden-desktop { 66 | display: inherit !important; 67 | } 68 | .visible-desktop { 69 | display: none !important ; 70 | } 71 | .visible-tablet { 72 | display: inherit !important; 73 | } 74 | .hidden-tablet { 75 | display: none !important; 76 | } 77 | } 78 | 79 | @media (max-width: 767px) { 80 | .hidden-desktop { 81 | display: inherit !important; 82 | } 83 | .visible-desktop { 84 | display: none !important; 85 | } 86 | .visible-phone { 87 | display: inherit !important; 88 | } 89 | .hidden-phone { 90 | display: none !important; 91 | } 92 | } 93 | 94 | @media (min-width: 1200px) { 95 | .row { 96 | margin-left: -30px; 97 | *zoom: 1; 98 | } 99 | .row:before, 100 | .row:after { 101 | display: table; 102 | line-height: 0; 103 | content: ""; 104 | } 105 | .row:after { 106 | clear: both; 107 | } 108 | [class*="span"] { 109 | float: left; 110 | min-height: 1px; 111 | margin-left: 30px; 112 | } 113 | .container, 114 | .navbar-static-top .container, 115 | .navbar-fixed-top .container, 116 | .navbar-fixed-bottom .container { 117 | width: 1170px; 118 | } 119 | .span12 { 120 | width: 1170px; 121 | } 122 | .span11 { 123 | width: 1070px; 124 | } 125 | .span10 { 126 | width: 970px; 127 | } 128 | .span9 { 129 | width: 870px; 130 | } 131 | .span8 { 132 | width: 770px; 133 | } 134 | .span7 { 135 | width: 670px; 136 | } 137 | .span6 { 138 | width: 570px; 139 | } 140 | .span5 { 141 | width: 470px; 142 | } 143 | .span4 { 144 | width: 370px; 145 | } 146 | .span3 { 147 | width: 270px; 148 | } 149 | .span2 { 150 | width: 170px; 151 | } 152 | .span1 { 153 | width: 70px; 154 | } 155 | .offset12 { 156 | margin-left: 1230px; 157 | } 158 | .offset11 { 159 | margin-left: 1130px; 160 | } 161 | .offset10 { 162 | margin-left: 1030px; 163 | } 164 | .offset9 { 165 | margin-left: 930px; 166 | } 167 | .offset8 { 168 | margin-left: 830px; 169 | } 170 | .offset7 { 171 | margin-left: 730px; 172 | } 173 | .offset6 { 174 | margin-left: 630px; 175 | } 176 | .offset5 { 177 | margin-left: 530px; 178 | } 179 | .offset4 { 180 | margin-left: 430px; 181 | } 182 | .offset3 { 183 | margin-left: 330px; 184 | } 185 | .offset2 { 186 | margin-left: 230px; 187 | } 188 | .offset1 { 189 | margin-left: 130px; 190 | } 191 | .row-fluid { 192 | width: 100%; 193 | *zoom: 1; 194 | } 195 | .row-fluid:before, 196 | .row-fluid:after { 197 | display: table; 198 | line-height: 0; 199 | content: ""; 200 | } 201 | .row-fluid:after { 202 | clear: both; 203 | } 204 | .row-fluid [class*="span"] { 205 | display: block; 206 | float: left; 207 | width: 100%; 208 | min-height: 30px; 209 | margin-left: 2.564102564102564%; 210 | *margin-left: 2.5109110747408616%; 211 | -webkit-box-sizing: border-box; 212 | -moz-box-sizing: border-box; 213 | box-sizing: border-box; 214 | } 215 | .row-fluid [class*="span"]:first-child { 216 | margin-left: 0; 217 | } 218 | .row-fluid .controls-row [class*="span"] + [class*="span"] { 219 | margin-left: 2.564102564102564%; 220 | } 221 | .row-fluid .span12 { 222 | width: 100%; 223 | *width: 99.94680851063829%; 224 | } 225 | .row-fluid .span11 { 226 | width: 91.45299145299145%; 227 | *width: 91.39979996362975%; 228 | } 229 | .row-fluid .span10 { 230 | width: 82.90598290598291%; 231 | *width: 82.8527914166212%; 232 | } 233 | .row-fluid .span9 { 234 | width: 74.35897435897436%; 235 | *width: 74.30578286961266%; 236 | } 237 | .row-fluid .span8 { 238 | width: 65.81196581196582%; 239 | *width: 65.75877432260411%; 240 | } 241 | .row-fluid .span7 { 242 | width: 57.26495726495726%; 243 | *width: 57.21176577559556%; 244 | } 245 | .row-fluid .span6 { 246 | width: 48.717948717948715%; 247 | *width: 48.664757228587014%; 248 | } 249 | .row-fluid .span5 { 250 | width: 40.17094017094017%; 251 | *width: 40.11774868157847%; 252 | } 253 | .row-fluid .span4 { 254 | width: 31.623931623931625%; 255 | *width: 31.570740134569924%; 256 | } 257 | .row-fluid .span3 { 258 | width: 23.076923076923077%; 259 | *width: 23.023731587561375%; 260 | } 261 | .row-fluid .span2 { 262 | width: 14.52991452991453%; 263 | *width: 14.476723040552828%; 264 | } 265 | .row-fluid .span1 { 266 | width: 5.982905982905983%; 267 | *width: 5.929714493544281%; 268 | } 269 | .row-fluid .offset12 { 270 | margin-left: 105.12820512820512%; 271 | *margin-left: 105.02182214948171%; 272 | } 273 | .row-fluid .offset12:first-child { 274 | margin-left: 102.56410256410257%; 275 | *margin-left: 102.45771958537915%; 276 | } 277 | .row-fluid .offset11 { 278 | margin-left: 96.58119658119658%; 279 | *margin-left: 96.47481360247316%; 280 | } 281 | .row-fluid .offset11:first-child { 282 | margin-left: 94.01709401709402%; 283 | *margin-left: 93.91071103837061%; 284 | } 285 | .row-fluid .offset10 { 286 | margin-left: 88.03418803418803%; 287 | *margin-left: 87.92780505546462%; 288 | } 289 | .row-fluid .offset10:first-child { 290 | margin-left: 85.47008547008548%; 291 | *margin-left: 85.36370249136206%; 292 | } 293 | .row-fluid .offset9 { 294 | margin-left: 79.48717948717949%; 295 | *margin-left: 79.38079650845607%; 296 | } 297 | .row-fluid .offset9:first-child { 298 | margin-left: 76.92307692307693%; 299 | *margin-left: 76.81669394435352%; 300 | } 301 | .row-fluid .offset8 { 302 | margin-left: 70.94017094017094%; 303 | *margin-left: 70.83378796144753%; 304 | } 305 | .row-fluid .offset8:first-child { 306 | margin-left: 68.37606837606839%; 307 | *margin-left: 68.26968539734497%; 308 | } 309 | .row-fluid .offset7 { 310 | margin-left: 62.393162393162385%; 311 | *margin-left: 62.28677941443899%; 312 | } 313 | .row-fluid .offset7:first-child { 314 | margin-left: 59.82905982905982%; 315 | *margin-left: 59.72267685033642%; 316 | } 317 | .row-fluid .offset6 { 318 | margin-left: 53.84615384615384%; 319 | *margin-left: 53.739770867430444%; 320 | } 321 | .row-fluid .offset6:first-child { 322 | margin-left: 51.28205128205128%; 323 | *margin-left: 51.175668303327875%; 324 | } 325 | .row-fluid .offset5 { 326 | margin-left: 45.299145299145295%; 327 | *margin-left: 45.1927623204219%; 328 | } 329 | .row-fluid .offset5:first-child { 330 | margin-left: 42.73504273504273%; 331 | *margin-left: 42.62865975631933%; 332 | } 333 | .row-fluid .offset4 { 334 | margin-left: 36.75213675213675%; 335 | *margin-left: 36.645753773413354%; 336 | } 337 | .row-fluid .offset4:first-child { 338 | margin-left: 34.18803418803419%; 339 | *margin-left: 34.081651209310785%; 340 | } 341 | .row-fluid .offset3 { 342 | margin-left: 28.205128205128204%; 343 | *margin-left: 28.0987452264048%; 344 | } 345 | .row-fluid .offset3:first-child { 346 | margin-left: 25.641025641025642%; 347 | *margin-left: 25.53464266230224%; 348 | } 349 | .row-fluid .offset2 { 350 | margin-left: 19.65811965811966%; 351 | *margin-left: 19.551736679396257%; 352 | } 353 | .row-fluid .offset2:first-child { 354 | margin-left: 17.094017094017094%; 355 | *margin-left: 16.98763411529369%; 356 | } 357 | .row-fluid .offset1 { 358 | margin-left: 11.11111111111111%; 359 | *margin-left: 11.004728132387708%; 360 | } 361 | .row-fluid .offset1:first-child { 362 | margin-left: 8.547008547008547%; 363 | *margin-left: 8.440625568285142%; 364 | } 365 | input, 366 | textarea, 367 | .uneditable-input { 368 | margin-left: 0; 369 | } 370 | .controls-row [class*="span"] + [class*="span"] { 371 | margin-left: 30px; 372 | } 373 | input.span12, 374 | textarea.span12, 375 | .uneditable-input.span12 { 376 | width: 1156px; 377 | } 378 | input.span11, 379 | textarea.span11, 380 | .uneditable-input.span11 { 381 | width: 1056px; 382 | } 383 | input.span10, 384 | textarea.span10, 385 | .uneditable-input.span10 { 386 | width: 956px; 387 | } 388 | input.span9, 389 | textarea.span9, 390 | .uneditable-input.span9 { 391 | width: 856px; 392 | } 393 | input.span8, 394 | textarea.span8, 395 | .uneditable-input.span8 { 396 | width: 756px; 397 | } 398 | input.span7, 399 | textarea.span7, 400 | .uneditable-input.span7 { 401 | width: 656px; 402 | } 403 | input.span6, 404 | textarea.span6, 405 | .uneditable-input.span6 { 406 | width: 556px; 407 | } 408 | input.span5, 409 | textarea.span5, 410 | .uneditable-input.span5 { 411 | width: 456px; 412 | } 413 | input.span4, 414 | textarea.span4, 415 | .uneditable-input.span4 { 416 | width: 356px; 417 | } 418 | input.span3, 419 | textarea.span3, 420 | .uneditable-input.span3 { 421 | width: 256px; 422 | } 423 | input.span2, 424 | textarea.span2, 425 | .uneditable-input.span2 { 426 | width: 156px; 427 | } 428 | input.span1, 429 | textarea.span1, 430 | .uneditable-input.span1 { 431 | width: 56px; 432 | } 433 | .thumbnails { 434 | margin-left: -30px; 435 | } 436 | .thumbnails > li { 437 | margin-left: 30px; 438 | } 439 | .row-fluid .thumbnails { 440 | margin-left: 0; 441 | } 442 | } 443 | 444 | @media (min-width: 768px) and (max-width: 979px) { 445 | .row { 446 | margin-left: -20px; 447 | *zoom: 1; 448 | } 449 | .row:before, 450 | .row:after { 451 | display: table; 452 | line-height: 0; 453 | content: ""; 454 | } 455 | .row:after { 456 | clear: both; 457 | } 458 | [class*="span"] { 459 | float: left; 460 | min-height: 1px; 461 | margin-left: 20px; 462 | } 463 | .container, 464 | .navbar-static-top .container, 465 | .navbar-fixed-top .container, 466 | .navbar-fixed-bottom .container { 467 | width: 724px; 468 | } 469 | .span12 { 470 | width: 724px; 471 | } 472 | .span11 { 473 | width: 662px; 474 | } 475 | .span10 { 476 | width: 600px; 477 | } 478 | .span9 { 479 | width: 538px; 480 | } 481 | .span8 { 482 | width: 476px; 483 | } 484 | .span7 { 485 | width: 414px; 486 | } 487 | .span6 { 488 | width: 352px; 489 | } 490 | .span5 { 491 | width: 290px; 492 | } 493 | .span4 { 494 | width: 228px; 495 | } 496 | .span3 { 497 | width: 166px; 498 | } 499 | .span2 { 500 | width: 104px; 501 | } 502 | .span1 { 503 | width: 42px; 504 | } 505 | .offset12 { 506 | margin-left: 764px; 507 | } 508 | .offset11 { 509 | margin-left: 702px; 510 | } 511 | .offset10 { 512 | margin-left: 640px; 513 | } 514 | .offset9 { 515 | margin-left: 578px; 516 | } 517 | .offset8 { 518 | margin-left: 516px; 519 | } 520 | .offset7 { 521 | margin-left: 454px; 522 | } 523 | .offset6 { 524 | margin-left: 392px; 525 | } 526 | .offset5 { 527 | margin-left: 330px; 528 | } 529 | .offset4 { 530 | margin-left: 268px; 531 | } 532 | .offset3 { 533 | margin-left: 206px; 534 | } 535 | .offset2 { 536 | margin-left: 144px; 537 | } 538 | .offset1 { 539 | margin-left: 82px; 540 | } 541 | .row-fluid { 542 | width: 100%; 543 | *zoom: 1; 544 | } 545 | .row-fluid:before, 546 | .row-fluid:after { 547 | display: table; 548 | line-height: 0; 549 | content: ""; 550 | } 551 | .row-fluid:after { 552 | clear: both; 553 | } 554 | .row-fluid [class*="span"] { 555 | display: block; 556 | float: left; 557 | width: 100%; 558 | min-height: 30px; 559 | margin-left: 2.7624309392265194%; 560 | *margin-left: 2.709239449864817%; 561 | -webkit-box-sizing: border-box; 562 | -moz-box-sizing: border-box; 563 | box-sizing: border-box; 564 | } 565 | .row-fluid [class*="span"]:first-child { 566 | margin-left: 0; 567 | } 568 | .row-fluid .controls-row [class*="span"] + [class*="span"] { 569 | margin-left: 2.7624309392265194%; 570 | } 571 | .row-fluid .span12 { 572 | width: 100%; 573 | *width: 99.94680851063829%; 574 | } 575 | .row-fluid .span11 { 576 | width: 91.43646408839778%; 577 | *width: 91.38327259903608%; 578 | } 579 | .row-fluid .span10 { 580 | width: 82.87292817679558%; 581 | *width: 82.81973668743387%; 582 | } 583 | .row-fluid .span9 { 584 | width: 74.30939226519337%; 585 | *width: 74.25620077583166%; 586 | } 587 | .row-fluid .span8 { 588 | width: 65.74585635359117%; 589 | *width: 65.69266486422946%; 590 | } 591 | .row-fluid .span7 { 592 | width: 57.18232044198895%; 593 | *width: 57.12912895262725%; 594 | } 595 | .row-fluid .span6 { 596 | width: 48.61878453038674%; 597 | *width: 48.56559304102504%; 598 | } 599 | .row-fluid .span5 { 600 | width: 40.05524861878453%; 601 | *width: 40.00205712942283%; 602 | } 603 | .row-fluid .span4 { 604 | width: 31.491712707182323%; 605 | *width: 31.43852121782062%; 606 | } 607 | .row-fluid .span3 { 608 | width: 22.92817679558011%; 609 | *width: 22.87498530621841%; 610 | } 611 | .row-fluid .span2 { 612 | width: 14.3646408839779%; 613 | *width: 14.311449394616199%; 614 | } 615 | .row-fluid .span1 { 616 | width: 5.801104972375691%; 617 | *width: 5.747913483013988%; 618 | } 619 | .row-fluid .offset12 { 620 | margin-left: 105.52486187845304%; 621 | *margin-left: 105.41847889972962%; 622 | } 623 | .row-fluid .offset12:first-child { 624 | margin-left: 102.76243093922652%; 625 | *margin-left: 102.6560479605031%; 626 | } 627 | .row-fluid .offset11 { 628 | margin-left: 96.96132596685082%; 629 | *margin-left: 96.8549429881274%; 630 | } 631 | .row-fluid .offset11:first-child { 632 | margin-left: 94.1988950276243%; 633 | *margin-left: 94.09251204890089%; 634 | } 635 | .row-fluid .offset10 { 636 | margin-left: 88.39779005524862%; 637 | *margin-left: 88.2914070765252%; 638 | } 639 | .row-fluid .offset10:first-child { 640 | margin-left: 85.6353591160221%; 641 | *margin-left: 85.52897613729868%; 642 | } 643 | .row-fluid .offset9 { 644 | margin-left: 79.8342541436464%; 645 | *margin-left: 79.72787116492299%; 646 | } 647 | .row-fluid .offset9:first-child { 648 | margin-left: 77.07182320441989%; 649 | *margin-left: 76.96544022569647%; 650 | } 651 | .row-fluid .offset8 { 652 | margin-left: 71.2707182320442%; 653 | *margin-left: 71.16433525332079%; 654 | } 655 | .row-fluid .offset8:first-child { 656 | margin-left: 68.50828729281768%; 657 | *margin-left: 68.40190431409427%; 658 | } 659 | .row-fluid .offset7 { 660 | margin-left: 62.70718232044199%; 661 | *margin-left: 62.600799341718584%; 662 | } 663 | .row-fluid .offset7:first-child { 664 | margin-left: 59.94475138121547%; 665 | *margin-left: 59.838368402492065%; 666 | } 667 | .row-fluid .offset6 { 668 | margin-left: 54.14364640883978%; 669 | *margin-left: 54.037263430116376%; 670 | } 671 | .row-fluid .offset6:first-child { 672 | margin-left: 51.38121546961326%; 673 | *margin-left: 51.27483249088986%; 674 | } 675 | .row-fluid .offset5 { 676 | margin-left: 45.58011049723757%; 677 | *margin-left: 45.47372751851417%; 678 | } 679 | .row-fluid .offset5:first-child { 680 | margin-left: 42.81767955801105%; 681 | *margin-left: 42.71129657928765%; 682 | } 683 | .row-fluid .offset4 { 684 | margin-left: 37.01657458563536%; 685 | *margin-left: 36.91019160691196%; 686 | } 687 | .row-fluid .offset4:first-child { 688 | margin-left: 34.25414364640884%; 689 | *margin-left: 34.14776066768544%; 690 | } 691 | .row-fluid .offset3 { 692 | margin-left: 28.45303867403315%; 693 | *margin-left: 28.346655695309746%; 694 | } 695 | .row-fluid .offset3:first-child { 696 | margin-left: 25.69060773480663%; 697 | *margin-left: 25.584224756083227%; 698 | } 699 | .row-fluid .offset2 { 700 | margin-left: 19.88950276243094%; 701 | *margin-left: 19.783119783707537%; 702 | } 703 | .row-fluid .offset2:first-child { 704 | margin-left: 17.12707182320442%; 705 | *margin-left: 17.02068884448102%; 706 | } 707 | .row-fluid .offset1 { 708 | margin-left: 11.32596685082873%; 709 | *margin-left: 11.219583872105325%; 710 | } 711 | .row-fluid .offset1:first-child { 712 | margin-left: 8.56353591160221%; 713 | *margin-left: 8.457152932878806%; 714 | } 715 | input, 716 | textarea, 717 | .uneditable-input { 718 | margin-left: 0; 719 | } 720 | .controls-row [class*="span"] + [class*="span"] { 721 | margin-left: 20px; 722 | } 723 | input.span12, 724 | textarea.span12, 725 | .uneditable-input.span12 { 726 | width: 710px; 727 | } 728 | input.span11, 729 | textarea.span11, 730 | .uneditable-input.span11 { 731 | width: 648px; 732 | } 733 | input.span10, 734 | textarea.span10, 735 | .uneditable-input.span10 { 736 | width: 586px; 737 | } 738 | input.span9, 739 | textarea.span9, 740 | .uneditable-input.span9 { 741 | width: 524px; 742 | } 743 | input.span8, 744 | textarea.span8, 745 | .uneditable-input.span8 { 746 | width: 462px; 747 | } 748 | input.span7, 749 | textarea.span7, 750 | .uneditable-input.span7 { 751 | width: 400px; 752 | } 753 | input.span6, 754 | textarea.span6, 755 | .uneditable-input.span6 { 756 | width: 338px; 757 | } 758 | input.span5, 759 | textarea.span5, 760 | .uneditable-input.span5 { 761 | width: 276px; 762 | } 763 | input.span4, 764 | textarea.span4, 765 | .uneditable-input.span4 { 766 | width: 214px; 767 | } 768 | input.span3, 769 | textarea.span3, 770 | .uneditable-input.span3 { 771 | width: 152px; 772 | } 773 | input.span2, 774 | textarea.span2, 775 | .uneditable-input.span2 { 776 | width: 90px; 777 | } 778 | input.span1, 779 | textarea.span1, 780 | .uneditable-input.span1 { 781 | width: 28px; 782 | } 783 | } 784 | 785 | @media (max-width: 767px) { 786 | body { 787 | padding-right: 20px; 788 | padding-left: 20px; 789 | } 790 | .navbar-fixed-top, 791 | .navbar-fixed-bottom, 792 | .navbar-static-top { 793 | margin-right: -20px; 794 | margin-left: -20px; 795 | } 796 | .container-fluid { 797 | padding: 0; 798 | } 799 | .dl-horizontal dt { 800 | float: none; 801 | width: auto; 802 | clear: none; 803 | text-align: left; 804 | } 805 | .dl-horizontal dd { 806 | margin-left: 0; 807 | } 808 | .container { 809 | width: auto; 810 | } 811 | .row-fluid { 812 | width: 100%; 813 | } 814 | .row, 815 | .thumbnails { 816 | margin-left: 0; 817 | } 818 | .thumbnails > li { 819 | float: none; 820 | margin-left: 0; 821 | } 822 | [class*="span"], 823 | .uneditable-input[class*="span"], 824 | .row-fluid [class*="span"] { 825 | display: block; 826 | float: none; 827 | width: 100%; 828 | margin-left: 0; 829 | -webkit-box-sizing: border-box; 830 | -moz-box-sizing: border-box; 831 | box-sizing: border-box; 832 | } 833 | .span12, 834 | .row-fluid .span12 { 835 | width: 100%; 836 | -webkit-box-sizing: border-box; 837 | -moz-box-sizing: border-box; 838 | box-sizing: border-box; 839 | } 840 | .row-fluid [class*="offset"]:first-child { 841 | margin-left: 0; 842 | } 843 | .input-large, 844 | .input-xlarge, 845 | .input-xxlarge, 846 | input[class*="span"], 847 | select[class*="span"], 848 | textarea[class*="span"], 849 | .uneditable-input { 850 | display: block; 851 | width: 100%; 852 | min-height: 30px; 853 | -webkit-box-sizing: border-box; 854 | -moz-box-sizing: border-box; 855 | box-sizing: border-box; 856 | } 857 | .input-prepend input, 858 | .input-append input, 859 | .input-prepend input[class*="span"], 860 | .input-append input[class*="span"] { 861 | display: inline-block; 862 | width: auto; 863 | } 864 | .controls-row [class*="span"] + [class*="span"] { 865 | margin-left: 0; 866 | } 867 | .modal { 868 | position: fixed; 869 | top: 20px; 870 | right: 20px; 871 | left: 20px; 872 | width: auto; 873 | margin: 0; 874 | } 875 | .modal.fade { 876 | top: -100px; 877 | } 878 | .modal.fade.in { 879 | top: 20px; 880 | } 881 | } 882 | 883 | @media (max-width: 480px) { 884 | .nav-collapse { 885 | -webkit-transform: translate3d(0, 0, 0); 886 | } 887 | .page-header h1 small { 888 | display: block; 889 | line-height: 20px; 890 | } 891 | input[type="checkbox"], 892 | input[type="radio"] { 893 | border: 1px solid #ccc; 894 | } 895 | .form-horizontal .control-label { 896 | float: none; 897 | width: auto; 898 | padding-top: 0; 899 | text-align: left; 900 | } 901 | .form-horizontal .controls { 902 | margin-left: 0; 903 | } 904 | .form-horizontal .control-list { 905 | padding-top: 0; 906 | } 907 | .form-horizontal .form-actions { 908 | padding-right: 10px; 909 | padding-left: 10px; 910 | } 911 | .media .pull-left, 912 | .media .pull-right { 913 | display: block; 914 | float: none; 915 | margin-bottom: 10px; 916 | } 917 | .media-object { 918 | margin-right: 0; 919 | margin-left: 0; 920 | } 921 | .modal { 922 | top: 10px; 923 | right: 10px; 924 | left: 10px; 925 | } 926 | .modal-header .close { 927 | padding: 10px; 928 | margin: -10px; 929 | } 930 | .carousel-caption { 931 | position: static; 932 | } 933 | } 934 | 935 | @media (max-width: 979px) { 936 | body { 937 | padding-top: 0; 938 | } 939 | .navbar-fixed-top, 940 | .navbar-fixed-bottom { 941 | position: static; 942 | } 943 | .navbar-fixed-top { 944 | margin-bottom: 20px; 945 | } 946 | .navbar-fixed-bottom { 947 | margin-top: 20px; 948 | } 949 | .navbar-fixed-top .navbar-inner, 950 | .navbar-fixed-bottom .navbar-inner { 951 | padding: 5px; 952 | } 953 | .navbar .container { 954 | width: auto; 955 | padding: 0; 956 | } 957 | .navbar .brand { 958 | padding-right: 10px; 959 | padding-left: 10px; 960 | margin: 0 0 0 -5px; 961 | } 962 | .nav-collapse { 963 | clear: both; 964 | } 965 | .nav-collapse .nav { 966 | float: none; 967 | margin: 0 0 10px; 968 | } 969 | .nav-collapse .nav > li { 970 | float: none; 971 | } 972 | .nav-collapse .nav > li > a { 973 | margin-bottom: 2px; 974 | } 975 | .nav-collapse .nav > .divider-vertical { 976 | display: none; 977 | } 978 | .nav-collapse .nav .nav-header { 979 | color: #777777; 980 | text-shadow: none; 981 | } 982 | .nav-collapse .nav > li > a, 983 | .nav-collapse .dropdown-menu a { 984 | padding: 9px 15px; 985 | font-weight: bold; 986 | color: #777777; 987 | -webkit-border-radius: 3px; 988 | -moz-border-radius: 3px; 989 | border-radius: 3px; 990 | } 991 | .nav-collapse .btn { 992 | padding: 4px 10px 4px; 993 | font-weight: normal; 994 | -webkit-border-radius: 4px; 995 | -moz-border-radius: 4px; 996 | border-radius: 4px; 997 | } 998 | .nav-collapse .dropdown-menu li + li a { 999 | margin-bottom: 2px; 1000 | } 1001 | .nav-collapse .nav > li > a:hover, 1002 | .nav-collapse .dropdown-menu a:hover { 1003 | background-color: #f2f2f2; 1004 | } 1005 | .navbar-inverse .nav-collapse .nav > li > a, 1006 | .navbar-inverse .nav-collapse .dropdown-menu a { 1007 | color: #999999; 1008 | } 1009 | .navbar-inverse .nav-collapse .nav > li > a:hover, 1010 | .navbar-inverse .nav-collapse .dropdown-menu a:hover { 1011 | background-color: #111111; 1012 | } 1013 | .nav-collapse.in .btn-group { 1014 | padding: 0; 1015 | margin-top: 5px; 1016 | } 1017 | .nav-collapse .dropdown-menu { 1018 | position: static; 1019 | top: auto; 1020 | left: auto; 1021 | display: none; 1022 | float: none; 1023 | max-width: none; 1024 | padding: 0; 1025 | margin: 0 15px; 1026 | background-color: transparent; 1027 | border: none; 1028 | -webkit-border-radius: 0; 1029 | -moz-border-radius: 0; 1030 | border-radius: 0; 1031 | -webkit-box-shadow: none; 1032 | -moz-box-shadow: none; 1033 | box-shadow: none; 1034 | } 1035 | .nav-collapse .open > .dropdown-menu { 1036 | display: block; 1037 | } 1038 | .nav-collapse .dropdown-menu:before, 1039 | .nav-collapse .dropdown-menu:after { 1040 | display: none; 1041 | } 1042 | .nav-collapse .dropdown-menu .divider { 1043 | display: none; 1044 | } 1045 | .nav-collapse .nav > li > .dropdown-menu:before, 1046 | .nav-collapse .nav > li > .dropdown-menu:after { 1047 | display: none; 1048 | } 1049 | .nav-collapse .navbar-form, 1050 | .nav-collapse .navbar-search { 1051 | float: none; 1052 | padding: 10px 15px; 1053 | margin: 10px 0; 1054 | border-top: 1px solid #f2f2f2; 1055 | border-bottom: 1px solid #f2f2f2; 1056 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); 1057 | -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); 1058 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); 1059 | } 1060 | .navbar-inverse .nav-collapse .navbar-form, 1061 | .navbar-inverse .nav-collapse .navbar-search { 1062 | border-top-color: #111111; 1063 | border-bottom-color: #111111; 1064 | } 1065 | .navbar .nav-collapse .nav.pull-right { 1066 | float: none; 1067 | margin-left: 0; 1068 | } 1069 | .nav-collapse, 1070 | .nav-collapse.collapse { 1071 | height: 0; 1072 | overflow: hidden; 1073 | } 1074 | .navbar .btn-navbar { 1075 | display: block; 1076 | } 1077 | .navbar-static .navbar-inner { 1078 | padding-right: 10px; 1079 | padding-left: 10px; 1080 | } 1081 | } 1082 | 1083 | @media (min-width: 980px) { 1084 | .nav-collapse.collapse { 1085 | height: auto !important; 1086 | overflow: visible !important; 1087 | } 1088 | } 1089 | -------------------------------------------------------------------------------- /wsgi/static/css/jquery-ui.css: -------------------------------------------------------------------------------- 1 | /* 2 | * jQuery UI CSS Framework 3 | * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) 4 | * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. 5 | */ 6 | 7 | /* Layout helpers 8 | ----------------------------------*/ 9 | .ui-helper-hidden { display: none; } 10 | .ui-helper-hidden-accessible { position: absolute; left: -99999999px; } 11 | .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } 12 | .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } 13 | .ui-helper-clearfix { display: inline-block; } 14 | /* required comment for clearfix to work in Opera \*/ 15 | * html .ui-helper-clearfix { height:1%; } 16 | .ui-helper-clearfix { display:block; } 17 | /* end clearfix */ 18 | .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } 19 | 20 | 21 | /* Interaction Cues 22 | ----------------------------------*/ 23 | .ui-state-disabled { cursor: default !important; } 24 | 25 | 26 | /* Icons 27 | ----------------------------------*/ 28 | 29 | /* states and images */ 30 | .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } 31 | 32 | 33 | /* Misc visuals 34 | ----------------------------------*/ 35 | 36 | /* Overlays */ 37 | .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } 38 | /* Accordion 39 | ----------------------------------*/ 40 | .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } 41 | .ui-accordion .ui-accordion-li-fix { display: inline; } 42 | .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } 43 | .ui-accordion .ui-accordion-header a { display: block; font-size: 1em; padding: .5em .5em .5em .7em; } 44 | /* IE7-/Win - Fix extra vertical space in lists */ 45 | .ui-accordion a { zoom: 1; } 46 | .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } 47 | .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } 48 | .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } 49 | .ui-accordion .ui-accordion-content-active { display: block; }/* Autocomplete 50 | ----------------------------------*/ 51 | .ui-autocomplete { position: absolute; cursor: default; } 52 | .ui-autocomplete-loading { background: white url('images/ui-anim_basic_16x16.gif') right center no-repeat; } 53 | 54 | /* workarounds */ 55 | * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ 56 | 57 | /* Menu 58 | ----------------------------------*/ 59 | .ui-menu { 60 | list-style:none; 61 | padding: 2px; 62 | margin: 0; 63 | display:block; 64 | } 65 | .ui-menu .ui-menu { 66 | margin-top: -3px; 67 | } 68 | .ui-menu .ui-menu-item { 69 | margin:0; 70 | padding: 0; 71 | zoom: 1; 72 | float: left; 73 | clear: left; 74 | width: 100%; 75 | } 76 | .ui-menu .ui-menu-item a { 77 | text-decoration:none; 78 | display:block; 79 | padding:.2em .4em; 80 | line-height:1.5; 81 | zoom:1; 82 | } 83 | .ui-menu .ui-menu-item a.ui-state-hover, 84 | .ui-menu .ui-menu-item a.ui-state-active { 85 | font-weight: normal; 86 | margin: -1px; 87 | } 88 | /* Button 89 | ----------------------------------*/ 90 | 91 | .ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; } /* the overflow property removes extra width in IE */ 92 | .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ 93 | button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ 94 | .ui-button-icons-only { width: 3.4em; } 95 | button.ui-button-icons-only { width: 3.7em; } 96 | 97 | /*button text element */ 98 | .ui-button .ui-button-text { display: block; line-height: 1.4; } 99 | .ui-button-text-only .ui-button-text { padding: .4em 1em; } 100 | .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } 101 | .ui-button-text-icon .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } 102 | .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } 103 | /* no icon support for input elements, provide padding by default */ 104 | input.ui-button { padding: .4em 1em; } 105 | 106 | /*button icon element(s) */ 107 | .ui-button-icon-only .ui-icon, .ui-button-text-icon .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } 108 | .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } 109 | .ui-button-text-icon .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } 110 | .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } 111 | 112 | /*button sets*/ 113 | .ui-buttonset { margin-right: 7px; } 114 | .ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } 115 | 116 | /* workarounds */ 117 | button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ 118 | 119 | 120 | 121 | 122 | 123 | /* Datepicker 124 | ----------------------------------*/ 125 | .ui-datepicker { width: 17em; padding: .2em .2em 0; } 126 | .ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; } 127 | .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; } 128 | .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; } 129 | .ui-datepicker .ui-datepicker-prev { left:2px; } 130 | .ui-datepicker .ui-datepicker-next { right:2px; } 131 | .ui-datepicker .ui-datepicker-prev-hover { left:1px; } 132 | .ui-datepicker .ui-datepicker-next-hover { right:1px; } 133 | .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; } 134 | .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; } 135 | .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } 136 | .ui-datepicker select.ui-datepicker-month-year {width: 100%;} 137 | .ui-datepicker select.ui-datepicker-month, 138 | .ui-datepicker select.ui-datepicker-year { width: 49%;} 139 | .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } 140 | .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } 141 | .ui-datepicker td { border: 0; padding: 1px; } 142 | .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } 143 | .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } 144 | .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } 145 | .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } 146 | 147 | /* with multiple calendars */ 148 | .ui-datepicker.ui-datepicker-multi { width:auto; } 149 | .ui-datepicker-multi .ui-datepicker-group { float:left; } 150 | .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } 151 | .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } 152 | .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } 153 | .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } 154 | .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } 155 | .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } 156 | .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } 157 | .ui-datepicker-row-break { clear:both; width:100%; } 158 | 159 | /* RTL support */ 160 | .ui-datepicker-rtl { direction: rtl; } 161 | .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } 162 | .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } 163 | .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } 164 | .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } 165 | .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } 166 | .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } 167 | .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } 168 | .ui-datepicker-rtl .ui-datepicker-group { float:right; } 169 | .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } 170 | .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } 171 | 172 | /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ 173 | .ui-datepicker-cover { 174 | display: none; /*sorry for IE5*/ 175 | display/**/: block; /*sorry for IE5*/ 176 | position: absolute; /*must have*/ 177 | z-index: -1; /*must have*/ 178 | filter: mask(); /*must have*/ 179 | top: -4px; /*must have*/ 180 | left: -4px; /*must have*/ 181 | width: 200px; /*must have*/ 182 | height: 200px; /*must have*/ 183 | }/* Dialog 184 | ----------------------------------*/ 185 | .ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } 186 | .ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } 187 | .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } 188 | .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } 189 | .ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } 190 | .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } 191 | .ui-dialog .ui-dialog-content { border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } 192 | .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } 193 | .ui-dialog .ui-dialog-buttonpane button { float: right; margin: .5em .4em .5em 0; cursor: pointer; padding: .2em .6em .3em .6em; line-height: 1.4em; width:auto; overflow:visible; } 194 | .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } 195 | .ui-draggable .ui-dialog-titlebar { cursor: move; } 196 | /* Progressbar 197 | ----------------------------------*/ 198 | .ui-progressbar { height:2em; text-align: left; } 199 | .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }/* Resizable 200 | ----------------------------------*/ 201 | .ui-resizable { position: relative;} 202 | .ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;} 203 | .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } 204 | .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } 205 | .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } 206 | .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } 207 | .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } 208 | .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } 209 | .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } 210 | .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } 211 | .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* Slider 212 | ----------------------------------*/ 213 | .ui-slider { position: relative; text-align: left; } 214 | .ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } 215 | .ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } 216 | 217 | .ui-slider-horizontal { height: .8em; } 218 | .ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } 219 | .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } 220 | .ui-slider-horizontal .ui-slider-range-min { left: 0; } 221 | .ui-slider-horizontal .ui-slider-range-max { right: 0; } 222 | 223 | .ui-slider-vertical { width: .8em; height: 100px; } 224 | .ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } 225 | .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } 226 | .ui-slider-vertical .ui-slider-range-min { bottom: 0; } 227 | .ui-slider-vertical .ui-slider-range-max { top: 0; }/* Tabs 228 | ----------------------------------*/ 229 | .ui-tabs { position: relative; padding: .2em; zoom: 1; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ 230 | .ui-tabs .ui-tabs-nav { margin: 0; padding: .2em .2em 0; } 231 | .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } 232 | .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; } 233 | .ui-tabs .ui-tabs-nav li.ui-tabs-selected { margin-bottom: 0; padding-bottom: 1px; } 234 | .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; } 235 | .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ 236 | .ui-tabs .ui-tabs-panel { display: block; border-width: 0; padding: 1em 1.4em; background: none; } 237 | .ui-tabs .ui-tabs-hide { display: none !important; } 238 | /* 239 | * jQuery UI CSS Framework 240 | * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about) 241 | * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. 242 | * To view and modify this theme, visit http://jqueryui.com/themeroller/ 243 | */ 244 | 245 | 246 | /* Component containers 247 | ----------------------------------*/ 248 | .ui-widget { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1.1em/*{fsDefault}*/; } 249 | .ui-widget .ui-widget { font-size: 1em; } 250 | .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif/*{ffDefault}*/; font-size: 1em; } 251 | .ui-widget-content { border: 1px solid #aaaaaa/*{borderColorContent}*/; background: #ffffff/*{bgColorContent}*/ url(images/ui-bg_flat_75_ffffff_40x100.png)/*{bgImgUrlContent}*/ 50%/*{bgContentXPos}*/ 50%/*{bgContentYPos}*/ repeat-x/*{bgContentRepeat}*/; color: #222222/*{fcContent}*/; } 252 | .ui-widget-content a { color: #222222/*{fcContent}*/; } 253 | .ui-widget-header { border: 1px solid #aaaaaa/*{borderColorHeader}*/; background: #cccccc/*{bgColorHeader}*/ url(images/ui-bg_highlight-soft_75_cccccc_1x100.png)/*{bgImgUrlHeader}*/ 50%/*{bgHeaderXPos}*/ 50%/*{bgHeaderYPos}*/ repeat-x/*{bgHeaderRepeat}*/; color: #222222/*{fcHeader}*/; font-weight: bold; } 254 | .ui-widget-header a { color: #222222/*{fcHeader}*/; } 255 | 256 | /* Interaction states 257 | ----------------------------------*/ 258 | .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3/*{borderColorDefault}*/; background: #e6e6e6/*{bgColorDefault}*/ url(images/ui-bg_glass_75_e6e6e6_1x400.png)/*{bgImgUrlDefault}*/ 50%/*{bgDefaultXPos}*/ 50%/*{bgDefaultYPos}*/ repeat-x/*{bgDefaultRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #555555/*{fcDefault}*/; } 259 | .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555/*{fcDefault}*/; text-decoration: none; } 260 | .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999/*{borderColorHover}*/; background: #dadada/*{bgColorHover}*/ url(images/ui-bg_glass_75_dadada_1x400.png)/*{bgImgUrlHover}*/ 50%/*{bgHoverXPos}*/ 50%/*{bgHoverYPos}*/ repeat-x/*{bgHoverRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcHover}*/; } 261 | .ui-state-hover a, .ui-state-hover a:hover { color: #212121/*{fcHover}*/; text-decoration: none; } 262 | .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa/*{borderColorActive}*/; background: #ffffff/*{bgColorActive}*/ url(images/ui-bg_glass_65_ffffff_1x400.png)/*{bgImgUrlActive}*/ 50%/*{bgActiveXPos}*/ 50%/*{bgActiveYPos}*/ repeat-x/*{bgActiveRepeat}*/; font-weight: normal/*{fwDefault}*/; color: #212121/*{fcActive}*/; } 263 | .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121/*{fcActive}*/; text-decoration: none; } 264 | .ui-widget :active { outline: none; } 265 | 266 | /* Interaction Cues 267 | ----------------------------------*/ 268 | .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1/*{borderColorHighlight}*/; background: #fbf9ee/*{bgColorHighlight}*/ url(images/ui-bg_glass_55_fbf9ee_1x400.png)/*{bgImgUrlHighlight}*/ 50%/*{bgHighlightXPos}*/ 50%/*{bgHighlightYPos}*/ repeat-x/*{bgHighlightRepeat}*/; color: #363636/*{fcHighlight}*/; } 269 | .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636/*{fcHighlight}*/; } 270 | .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a/*{borderColorError}*/; background: #fef1ec/*{bgColorError}*/ url(images/ui-bg_glass_95_fef1ec_1x400.png)/*{bgImgUrlError}*/ 50%/*{bgErrorXPos}*/ 50%/*{bgErrorYPos}*/ repeat-x/*{bgErrorRepeat}*/; color: #cd0a0a/*{fcError}*/; } 271 | .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a/*{fcError}*/; } 272 | .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a/*{fcError}*/; } 273 | .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } 274 | .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } 275 | .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } 276 | 277 | /* Icons 278 | ----------------------------------*/ 279 | 280 | /* states and images */ 281 | .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } 282 | .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsContent}*/; } 283 | .ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png)/*{iconsHeader}*/; } 284 | .ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png)/*{iconsDefault}*/; } 285 | .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsHover}*/; } 286 | .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png)/*{iconsActive}*/; } 287 | .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png)/*{iconsHighlight}*/; } 288 | .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png)/*{iconsError}*/; } 289 | 290 | /* positioning */ 291 | .ui-icon-carat-1-n { background-position: 0 0; } 292 | .ui-icon-carat-1-ne { background-position: -16px 0; } 293 | .ui-icon-carat-1-e { background-position: -32px 0; } 294 | .ui-icon-carat-1-se { background-position: -48px 0; } 295 | .ui-icon-carat-1-s { background-position: -64px 0; } 296 | .ui-icon-carat-1-sw { background-position: -80px 0; } 297 | .ui-icon-carat-1-w { background-position: -96px 0; } 298 | .ui-icon-carat-1-nw { background-position: -112px 0; } 299 | .ui-icon-carat-2-n-s { background-position: -128px 0; } 300 | .ui-icon-carat-2-e-w { background-position: -144px 0; } 301 | .ui-icon-triangle-1-n { background-position: 0 -16px; } 302 | .ui-icon-triangle-1-ne { background-position: -16px -16px; } 303 | .ui-icon-triangle-1-e { background-position: -32px -16px; } 304 | .ui-icon-triangle-1-se { background-position: -48px -16px; } 305 | .ui-icon-triangle-1-s { background-position: -64px -16px; } 306 | .ui-icon-triangle-1-sw { background-position: -80px -16px; } 307 | .ui-icon-triangle-1-w { background-position: -96px -16px; } 308 | .ui-icon-triangle-1-nw { background-position: -112px -16px; } 309 | .ui-icon-triangle-2-n-s { background-position: -128px -16px; } 310 | .ui-icon-triangle-2-e-w { background-position: -144px -16px; } 311 | .ui-icon-arrow-1-n { background-position: 0 -32px; } 312 | .ui-icon-arrow-1-ne { background-position: -16px -32px; } 313 | .ui-icon-arrow-1-e { background-position: -32px -32px; } 314 | .ui-icon-arrow-1-se { background-position: -48px -32px; } 315 | .ui-icon-arrow-1-s { background-position: -64px -32px; } 316 | .ui-icon-arrow-1-sw { background-position: -80px -32px; } 317 | .ui-icon-arrow-1-w { background-position: -96px -32px; } 318 | .ui-icon-arrow-1-nw { background-position: -112px -32px; } 319 | .ui-icon-arrow-2-n-s { background-position: -128px -32px; } 320 | .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } 321 | .ui-icon-arrow-2-e-w { background-position: -160px -32px; } 322 | .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } 323 | .ui-icon-arrowstop-1-n { background-position: -192px -32px; } 324 | .ui-icon-arrowstop-1-e { background-position: -208px -32px; } 325 | .ui-icon-arrowstop-1-s { background-position: -224px -32px; } 326 | .ui-icon-arrowstop-1-w { background-position: -240px -32px; } 327 | .ui-icon-arrowthick-1-n { background-position: 0 -48px; } 328 | .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } 329 | .ui-icon-arrowthick-1-e { background-position: -32px -48px; } 330 | .ui-icon-arrowthick-1-se { background-position: -48px -48px; } 331 | .ui-icon-arrowthick-1-s { background-position: -64px -48px; } 332 | .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } 333 | .ui-icon-arrowthick-1-w { background-position: -96px -48px; } 334 | .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } 335 | .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } 336 | .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } 337 | .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } 338 | .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } 339 | .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } 340 | .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } 341 | .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } 342 | .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } 343 | .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } 344 | .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } 345 | .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } 346 | .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } 347 | .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } 348 | .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } 349 | .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } 350 | .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } 351 | .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } 352 | .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } 353 | .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } 354 | .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } 355 | .ui-icon-arrow-4 { background-position: 0 -80px; } 356 | .ui-icon-arrow-4-diag { background-position: -16px -80px; } 357 | .ui-icon-extlink { background-position: -32px -80px; } 358 | .ui-icon-newwin { background-position: -48px -80px; } 359 | .ui-icon-refresh { background-position: -64px -80px; } 360 | .ui-icon-shuffle { background-position: -80px -80px; } 361 | .ui-icon-transfer-e-w { background-position: -96px -80px; } 362 | .ui-icon-transferthick-e-w { background-position: -112px -80px; } 363 | .ui-icon-folder-collapsed { background-position: 0 -96px; } 364 | .ui-icon-folder-open { background-position: -16px -96px; } 365 | .ui-icon-document { background-position: -32px -96px; } 366 | .ui-icon-document-b { background-position: -48px -96px; } 367 | .ui-icon-note { background-position: -64px -96px; } 368 | .ui-icon-mail-closed { background-position: -80px -96px; } 369 | .ui-icon-mail-open { background-position: -96px -96px; } 370 | .ui-icon-suitcase { background-position: -112px -96px; } 371 | .ui-icon-comment { background-position: -128px -96px; } 372 | .ui-icon-person { background-position: -144px -96px; } 373 | .ui-icon-print { background-position: -160px -96px; } 374 | .ui-icon-trash { background-position: -176px -96px; } 375 | .ui-icon-locked { background-position: -192px -96px; } 376 | .ui-icon-unlocked { background-position: -208px -96px; } 377 | .ui-icon-bookmark { background-position: -224px -96px; } 378 | .ui-icon-tag { background-position: -240px -96px; } 379 | .ui-icon-home { background-position: 0 -112px; } 380 | .ui-icon-flag { background-position: -16px -112px; } 381 | .ui-icon-calendar { background-position: -32px -112px; } 382 | .ui-icon-cart { background-position: -48px -112px; } 383 | .ui-icon-pencil { background-position: -64px -112px; } 384 | .ui-icon-clock { background-position: -80px -112px; } 385 | .ui-icon-disk { background-position: -96px -112px; } 386 | .ui-icon-calculator { background-position: -112px -112px; } 387 | .ui-icon-zoomin { background-position: -128px -112px; } 388 | .ui-icon-zoomout { background-position: -144px -112px; } 389 | .ui-icon-search { background-position: -160px -112px; } 390 | .ui-icon-wrench { background-position: -176px -112px; } 391 | .ui-icon-gear { background-position: -192px -112px; } 392 | .ui-icon-heart { background-position: -208px -112px; } 393 | .ui-icon-star { background-position: -224px -112px; } 394 | .ui-icon-link { background-position: -240px -112px; } 395 | .ui-icon-cancel { background-position: 0 -128px; } 396 | .ui-icon-plus { background-position: -16px -128px; } 397 | .ui-icon-plusthick { background-position: -32px -128px; } 398 | .ui-icon-minus { background-position: -48px -128px; } 399 | .ui-icon-minusthick { background-position: -64px -128px; } 400 | .ui-icon-close { background-position: -80px -128px; } 401 | .ui-icon-closethick { background-position: -96px -128px; } 402 | .ui-icon-key { background-position: -112px -128px; } 403 | .ui-icon-lightbulb { background-position: -128px -128px; } 404 | .ui-icon-scissors { background-position: -144px -128px; } 405 | .ui-icon-clipboard { background-position: -160px -128px; } 406 | .ui-icon-copy { background-position: -176px -128px; } 407 | .ui-icon-contact { background-position: -192px -128px; } 408 | .ui-icon-image { background-position: -208px -128px; } 409 | .ui-icon-video { background-position: -224px -128px; } 410 | .ui-icon-script { background-position: -240px -128px; } 411 | .ui-icon-alert { background-position: 0 -144px; } 412 | .ui-icon-info { background-position: -16px -144px; } 413 | .ui-icon-notice { background-position: -32px -144px; } 414 | .ui-icon-help { background-position: -48px -144px; } 415 | .ui-icon-check { background-position: -64px -144px; } 416 | .ui-icon-bullet { background-position: -80px -144px; } 417 | .ui-icon-radio-off { background-position: -96px -144px; } 418 | .ui-icon-radio-on { background-position: -112px -144px; } 419 | .ui-icon-pin-w { background-position: -128px -144px; } 420 | .ui-icon-pin-s { background-position: -144px -144px; } 421 | .ui-icon-play { background-position: 0 -160px; } 422 | .ui-icon-pause { background-position: -16px -160px; } 423 | .ui-icon-seek-next { background-position: -32px -160px; } 424 | .ui-icon-seek-prev { background-position: -48px -160px; } 425 | .ui-icon-seek-end { background-position: -64px -160px; } 426 | .ui-icon-seek-start { background-position: -80px -160px; } 427 | /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ 428 | .ui-icon-seek-first { background-position: -80px -160px; } 429 | .ui-icon-stop { background-position: -96px -160px; } 430 | .ui-icon-eject { background-position: -112px -160px; } 431 | .ui-icon-volume-off { background-position: -128px -160px; } 432 | .ui-icon-volume-on { background-position: -144px -160px; } 433 | .ui-icon-power { background-position: 0 -176px; } 434 | .ui-icon-signal-diag { background-position: -16px -176px; } 435 | .ui-icon-signal { background-position: -32px -176px; } 436 | .ui-icon-battery-0 { background-position: -48px -176px; } 437 | .ui-icon-battery-1 { background-position: -64px -176px; } 438 | .ui-icon-battery-2 { background-position: -80px -176px; } 439 | .ui-icon-battery-3 { background-position: -96px -176px; } 440 | .ui-icon-circle-plus { background-position: 0 -192px; } 441 | .ui-icon-circle-minus { background-position: -16px -192px; } 442 | .ui-icon-circle-close { background-position: -32px -192px; } 443 | .ui-icon-circle-triangle-e { background-position: -48px -192px; } 444 | .ui-icon-circle-triangle-s { background-position: -64px -192px; } 445 | .ui-icon-circle-triangle-w { background-position: -80px -192px; } 446 | .ui-icon-circle-triangle-n { background-position: -96px -192px; } 447 | .ui-icon-circle-arrow-e { background-position: -112px -192px; } 448 | .ui-icon-circle-arrow-s { background-position: -128px -192px; } 449 | .ui-icon-circle-arrow-w { background-position: -144px -192px; } 450 | .ui-icon-circle-arrow-n { background-position: -160px -192px; } 451 | .ui-icon-circle-zoomin { background-position: -176px -192px; } 452 | .ui-icon-circle-zoomout { background-position: -192px -192px; } 453 | .ui-icon-circle-check { background-position: -208px -192px; } 454 | .ui-icon-circlesmall-plus { background-position: 0 -208px; } 455 | .ui-icon-circlesmall-minus { background-position: -16px -208px; } 456 | .ui-icon-circlesmall-close { background-position: -32px -208px; } 457 | .ui-icon-squaresmall-plus { background-position: -48px -208px; } 458 | .ui-icon-squaresmall-minus { background-position: -64px -208px; } 459 | .ui-icon-squaresmall-close { background-position: -80px -208px; } 460 | .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } 461 | .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } 462 | .ui-icon-grip-solid-vertical { background-position: -32px -224px; } 463 | .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } 464 | .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } 465 | .ui-icon-grip-diagonal-se { background-position: -80px -224px; } 466 | 467 | 468 | /* Misc visuals 469 | ----------------------------------*/ 470 | 471 | /* Corner radius */ 472 | .ui-corner-tl { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; } 473 | .ui-corner-tr { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; } 474 | .ui-corner-bl { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; } 475 | .ui-corner-br { -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; } 476 | .ui-corner-top { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; } 477 | .ui-corner-bottom { -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; } 478 | .ui-corner-right { -moz-border-radius-topright: 4px/*{cornerRadius}*/; -webkit-border-top-right-radius: 4px/*{cornerRadius}*/; border-top-right-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomright: 4px/*{cornerRadius}*/; -webkit-border-bottom-right-radius: 4px/*{cornerRadius}*/; border-bottom-right-radius: 4px/*{cornerRadius}*/; } 479 | .ui-corner-left { -moz-border-radius-topleft: 4px/*{cornerRadius}*/; -webkit-border-top-left-radius: 4px/*{cornerRadius}*/; border-top-left-radius: 4px/*{cornerRadius}*/; -moz-border-radius-bottomleft: 4px/*{cornerRadius}*/; -webkit-border-bottom-left-radius: 4px/*{cornerRadius}*/; border-bottom-left-radius: 4px/*{cornerRadius}*/; } 480 | .ui-corner-all { -moz-border-radius: 4px/*{cornerRadius}*/; -webkit-border-radius: 4px/*{cornerRadius}*/; border-radius: 4px/*{cornerRadius}*/; } 481 | 482 | /* Overlays */ 483 | .ui-widget-overlay { background: #aaaaaa/*{bgColorOverlay}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlOverlay}*/ 50%/*{bgOverlayXPos}*/ 50%/*{bgOverlayYPos}*/ repeat-x/*{bgOverlayRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityOverlay}*/; } 484 | .ui-widget-shadow { margin: -8px/*{offsetTopShadow}*/ 0 0 -8px/*{offsetLeftShadow}*/; padding: 8px/*{thicknessShadow}*/; background: #aaaaaa/*{bgColorShadow}*/ url(images/ui-bg_flat_0_aaaaaa_40x100.png)/*{bgImgUrlShadow}*/ 50%/*{bgShadowXPos}*/ 50%/*{bgShadowYPos}*/ repeat-x/*{bgShadowRepeat}*/; opacity: .3;filter:Alpha(Opacity=30)/*{opacityShadow}*/; -moz-border-radius: 8px/*{cornerRadiusShadow}*/; -webkit-border-radius: 8px/*{cornerRadiusShadow}*/; border-radius: 8px/*{cornerRadiusShadow}*/; } --------------------------------------------------------------------------------