[geany/www.geany.org] b26b6e: Update to Django 1.8 / Mezzanine 4.0 / Bootstrap 3
Enrico Tröger
git-noreply at xxxxx
Tue Jul 28 19:49:10 UTC 2015
Branch: refs/heads/master
Author: Enrico Tröger <enrico.troeger at uvena.de>
Committer: Enrico Tröger <enrico.troeger at uvena.de>
Date: Tue, 28 Jul 2015 19:49:10 UTC
Commit: b26b6e88dfd3cc5711f90009b6cd6ab8897413ea
https://github.com/geany/www.geany.org/commit/b26b6e88dfd3cc5711f90009b6cd6ab8897413ea
Log Message:
-----------
Update to Django 1.8 / Mezzanine 4.0 / Bootstrap 3
Modified Paths:
--------------
README.dev.md
__init__.py
geany/__init__.py
geany/apps.py
geany/settings.py
geany/sitemaps.py
geany/static/css/bootstrap-responsive.css
geany/static/css/bootstrap.css
geany/static/css/main.css
geany/static/js/bootstrap.js
geany/static/js/tinymce_setup.js
geany/templates/base.html
geany/templates/blog/blog_post_list.html
geany/templates/errors/error_base.html
geany/templates/home.html
geany/templates/pages/menus/dropdown.html
geany/templates/pages/support/irc.html
geany/templates/skel.html
geany/templates/twitter/tweets.html
geany/templatetags/geany_tags.py
geany/urls.py
geany/wsgi.py
manage.py
nightlybuilds/templates/nightlybuilds.html
pastebin/highlight.py
pastebin/static/css/pastebin.css
pastebin/templates/pastebin/api.html
pastebin/templates/pastebin/base.html
pastebin/templates/pastebin/help.html
pastebin/templates/pastebin/snippet_details.html
pastebin/templates/pastebin/snippet_form.html
pastebin/templates/pastebin/snippet_list.html
pastebin/templates/pastebin/snippet_list_embedded.html
pastebin/templates/pastebin/snippet_new.html
requirements.txt
static_docs/templates/pages/documentation/releasenotes.html
Modified: README.dev.md
4 lines changed, 4 insertions(+), 0 deletions(-)
===================================================================
@@ -107,6 +107,10 @@ the settings to your needs:
}
NIGHTLYBUILDS_BASE_DIR = '/path/to/nightlybuilds/or/just/empty/'
+ # disable security on 127.0.0.1 without HTTPS
+ CSRF_COOKIE_SECURE = False
+ SESSION_COOKIE_SECURE = False
+ SSL_FORCE_URL_PREFIXES = ()
### Database settings ###
Modified: __init__.py
0 lines changed, 0 insertions(+), 0 deletions(-)
===================================================================
No diff available, check online
Modified: geany/__init__.py
2 lines changed, 2 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,2 @@
+
+default_app_config = 'geany.apps.GeanyAppConfig'
Modified: geany/apps.py
21 lines changed, 21 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,21 @@
+# coding: utf-8
+# LICENCE: This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+from django.apps import AppConfig
+
+
+########################################################################
+class GeanyAppConfig(AppConfig):
+ name = 'geany'
+ verbose_name = "Geany"
Modified: geany/settings.py
305 lines changed, 153 insertions(+), 152 deletions(-)
===================================================================
@@ -12,21 +12,27 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
+from __future__ import absolute_import, unicode_literals
+import os
from django.utils.translation import ugettext_lazy as _
+
######################
# MEZZANINE SETTINGS #
######################
-# The following settings are already defined in mezzanine.conf.defaults
-# with default values, but are common enough to be put here, commented
-# out, for convenient overriding.
+# The following settings are already defined with default values in
+# the ``defaults.py`` module within each of Mezzanine's apps, but are
+# common enough to be put here, commented out, for conveniently
+# overriding. Please consult the settings documentation for a full list
+# of settings Mezzanine implements:
+# http://mezzanine.jupo.org/docs/configuration.html#default-settings
# Controls the ordering and grouping of the admin menu.
#
# ADMIN_MENU_ORDER = (
# ("Content", ("pages.Page", "blog.BlogPost",
-# "generic.ThreadedComment", ("Media Library", "fb_browse"),)),
+# "generic.ThreadedComment", (_("Media Library"), "fb_browse"),)),
# ("Site", ("sites.Site", "redirects.Redirect", "conf.Setting")),
# ("Users", ("auth.User", "auth.Group",)),
# )
@@ -40,6 +46,19 @@
# ("mezzanine_tags.recent_actions",),
# )
+# A sequence of templates used by the ``page_menu`` template tag. Each
+# item in the sequence is a three item sequence, containing a unique ID
+# for the template, a label for the template, and the template path.
+# These templates are then available for selection when editing which
+# menus a page should appear in. Note that if a menu template is used
+# that doesn't appear in this setting, all pages will appear in it.
+
+# PAGE_MENU_TEMPLATES = (
+# (1, _("Top navigation bar"), "pages/menus/dropdown.html"),
+# (2, _("Left-hand tree"), "pages/menus/tree.html"),
+# (3, _("Footer"), "pages/menus/footer.html"),
+# )
+
# A sequence of fields that will be injected into Mezzanine's (or any
# library's) models. Each item in the sequence is a four item sequence.
# The first two items are the dotted path to the model and its field
@@ -56,7 +75,7 @@
# # Dotted path to field class.
# "somelib.fields.ImageField",
# # Positional args for field class.
-# ("Image",),
+# (_("Image"),),
# # Keyword args for field class.
# {"blank": True, "upload_to": "blog"},
# ),
@@ -64,7 +83,7 @@
# (
# "mezzanine.pages.models.Page.another_field",
# "IntegerField", # 'django.db.models.' is implied if path is omitted.
-# ("Another name",),
+# (_("Another name"),),
# {"blank": True, "default": 1},
# ),
# )
@@ -76,7 +95,7 @@
# If ``True``, users will be automatically redirected to HTTPS
# for the URLs specified by the ``SSL_FORCE_URL_PREFIXES`` setting.
#
-# SSL_ENABLED = True
+SSL_ENABLED = True
# Host name that the site should always be accessed via that matches
# the SSL certificate.
@@ -88,26 +107,37 @@
# ('/admin', '/example') would force all URLs beginning with
# /admin or /example to run over SSL. Defaults to:
#
-# SSL_FORCE_URL_PREFIXES = ("/admin", "/account")
+SSL_FORCE_URL_PREFIXES = ("/admin", "/account")
+
+# Django security settings
+SECURE_CONTENT_TYPE_NOSNIFF = True
+SECURE_BROWSER_XSS_FILTER = True
+
+CSRF_COOKIE_HTTPONLY = True
+CSRF_COOKIE_SECURE = True
-# If True, the south application will be automatically added to the
-# INSTALLED_APPS setting. This setting is not defined in
-# mezzanine.conf.defaults as is the case with the above settings.
-USE_SOUTH = True
+X_FRAME_OPTIONS = 'DENY'
+
+# If True, the django-modeltranslation will be added to the
+# INSTALLED_APPS setting.
+USE_MODELTRANSLATION = False
+
+USE_X_FORWARDED_HOST = True
########################
# MAIN DJANGO SETTINGS #
########################
-# People who get code error notifications.
-# In the format (('Full Name', 'email at example.com'),
-# ('Full Name', 'anotheremail at example.com'))
-ADMINS = (
- ('Enrico Tröger', 'enrico at geany.org'),
-)
-MANAGERS = ADMINS
-COMMENTS_NOTIFICATION_EMAILS = 'enrico at geany.org'
+# Hosts/domain names that are valid for this site; required if DEBUG is False
+# See https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts
+ALLOWED_HOSTS = ('127.0.0.1',
+ 'geany.org',
+ 'www.geany.org',
+ 'pastebin.geany.org',
+ 'geany.nightlybuilds.org',
+ 'nightly.geany.org')
+
# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
@@ -125,53 +155,34 @@
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = "en"
+# Supported languages
+LANGUAGES = (
+ ('en', _('English')),
+)
+
# A boolean that turns on/off debug mode. When set to ``True``, stack traces
# are displayed for error pages. Should always be set to ``False`` in
# production. Best set to ``True`` in local_settings.py
DEBUG = False
+# Whether a user's session cookie expires when the Web browser is closed.
+SESSION_EXPIRE_AT_BROWSER_CLOSE = True
SITE_ID = 1
-ALLOWED_HOSTS = ('127.0.0.1',
- 'geany.org',
- 'www.geany.org',
- 'pastebin.geany.org',
- 'geany.nightlybuilds.org',
- 'nightly.geany.org')
-
# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
-USE_I18N = True
-
-# Make this unique, and don't share it with anybody.
-SECRET_KEY = "to-be-configured-in-local-settings"
-NEVERCACHE_KEY = "to-be-configured-in-local-settings"
-
-# Tuple of IP addresses, as strings, that:
-# * See debug comments, when DEBUG is true
-# * Receive x-headers
-INTERNAL_IPS = ("127.0.0.1", "176.9.184.2", "2a01:4f8:151:51a3:176:9:184:2")
-
-DEFAULT_FROM_EMAIL = 'no-reply at geany.org'
-
-# List of callables that know how to import templates from various sources.
-TEMPLATE_LOADERS = (
- "django.template.loaders.filesystem.Loader",
- "django.template.loaders.app_directories.Loader",
-)
+USE_I18N = False
AUTHENTICATION_BACKENDS = ("mezzanine.core.auth_backends.MezzanineBackend",)
-# List of finder classes that know how to find static files in
-# various locations.
-STATICFILES_FINDERS = (
- "django.contrib.staticfiles.finders.FileSystemFinder",
- "django.contrib.staticfiles.finders.AppDirectoriesFinder",
-# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
- 'compressor.finders.CompressorFinder',
-)
+# The numeric mode to set newly-uploaded files to. The value should be
+# a mode you'd pass directly to os.chmod.
+FILE_UPLOAD_PERMISSIONS = 0o644
+
+ADMINS = (('Enrico Tröger', 'enrico.troeger at uvena.de'),)
+MANAGERS = ADMINS
#############
# DATABASES #
@@ -179,7 +190,6 @@
DATABASES = {
"default": {
- # Add "postgresql_psycopg2", "mysql", "sqlite3" or "oracle".
"ENGINE": "django.db.backends.mysql",
"NAME": "dbname",
"USER": "",
@@ -194,26 +204,22 @@
"HOST": "127.0.0.1",
}
}
-
DATABASE_ROUTERS = ['nightlybuilds.database_routers.NightlyBuildsRouter']
+
#########
# PATHS #
#########
-import re
-import os
-
# Full filesystem path to the project.
-PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
-
-# Name of the directory for the project.
-PROJECT_DIRNAME = PROJECT_ROOT.split(os.sep)[-1]
+PROJECT_APP_PATH = os.path.dirname(os.path.abspath(__file__))
+PROJECT_APP = os.path.basename(PROJECT_APP_PATH)
+PROJECT_ROOT = BASE_DIR = os.path.dirname(PROJECT_APP_PATH)
# Every cache key will get prefixed with this value - here we set it to
# the name of the directory the project is in to try and use something
# project specific.
-CACHE_MIDDLEWARE_KEY_PREFIX = PROJECT_DIRNAME
+CACHE_MIDDLEWARE_KEY_PREFIX = PROJECT_APP
CACHE_MIDDLEWARE_SECONDS = 300
CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
CACHE_MIDDLEWARE_ALIAS = 'default'
@@ -237,23 +243,42 @@
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = os.path.join(PROJECT_ROOT, *MEDIA_URL.strip("/").split("/"))
-# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
-# trailing slash.
-# Examples: "http://foo.com/media/", "/media/".
-ADMIN_MEDIA_PREFIX = STATIC_URL + "grappelli/"
-
# Package/module name to import the root urlpatterns from for the project.
-ROOT_URLCONF = "%s.urls" % PROJECT_DIRNAME
-
-# Put strings here, like "/home/html/django_templates"
-# or "C:/www/django/templates".
-# Always use forward slashes, even on Windows.
-# Don't forget to use absolute paths, not relative paths.
-TEMPLATE_DIRS = (
- os.path.join(PROJECT_ROOT, "templates"),
-)
+ROOT_URLCONF = "%s.urls" % PROJECT_APP
+
+TEMPLATES = [
+ {
+ 'BACKEND': 'django.template.backends.django.DjangoTemplates',
+ 'APP_DIRS': True,
+ 'DIRS': [
+ os.path.join(PROJECT_APP_PATH, "templates"),
+ ],
+ 'OPTIONS': {
+ 'context_processors': [
+ 'django.contrib.auth.context_processors.auth',
+ 'django.contrib.messages.context_processors.messages',
+ 'django.template.context_processors.debug',
+ 'django.template.context_processors.i18n',
+ 'django.template.context_processors.static',
+ 'django.template.context_processors.media',
+ 'django.template.context_processors.request',
+ 'django.template.context_processors.tz',
+ 'mezzanine.conf.context_processors.settings',
+ 'latest_version.context_processors.latest_version',
+ 'mezzanine.pages.context_processors.page',
+ ],
+ },
+ },
+]
+TEMPLATE_CONTEXT_PROCESSORS = TEMPLATES[0]['OPTIONS']['context_processors']
-TINYMCE_SETUP_JS = '/static/js/tinymce_setup.js'
+# List of finder classes that know how to find static files in
+# various locations.
+STATICFILES_FINDERS = (
+ "django.contrib.staticfiles.finders.FileSystemFinder",
+ "django.contrib.staticfiles.finders.AppDirectoriesFinder",
+ 'compressor.finders.CompressorFinder',
+)
################
@@ -273,12 +298,12 @@
"mezzanine.conf",
"mezzanine.core",
"mezzanine.generic",
+ "mezzanine.pages",
"mezzanine.blog",
"mezzanine.forms",
- "mezzanine.pages",
- #~ "mezzanine.mobile",
"mezzanine.galleries",
"mezzanine.twitter",
+ "mezzanine.accounts",
# we
"geany",
@@ -290,21 +315,7 @@
# 3rd party
"honeypot", # for pastebin
"django_hosts",
-)
-
-# List of processors used by RequestContext to populate the context.
-# Each one should be a callable that takes the request object as its
-# only parameter and returns a dictionary to add to the context.
-TEMPLATE_CONTEXT_PROCESSORS = (
- "django.contrib.auth.context_processors.auth",
- "django.contrib.messages.context_processors.messages",
- "django.core.context_processors.debug",
- "django.core.context_processors.i18n",
- "django.core.context_processors.static",
- "django.core.context_processors.media",
- "django.core.context_processors.request",
- "mezzanine.conf.context_processors.settings",
- "latest_version.context_processors.latest_version",
+ "gunicorn",
)
# List of middleware classes to use. Order is important; in the request phase,
@@ -312,24 +323,29 @@
# response phase the middleware will be applied in reverse order.
MIDDLEWARE_CLASSES = (
"mezzanine.core.middleware.UpdateCacheMiddleware",
+
+ "django.middleware.security.SecurityMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
- "django.contrib.auth.middleware.AuthenticationMiddleware",
- #"django_log_failed_auth.middleware.FailedAuthenticationMiddleware",
- "django.contrib.redirects.middleware.RedirectFallbackMiddleware",
+ # Uncomment if using internationalisation or localisation
+ # "django.middleware.locale.LocaleMiddleware",
"django.middleware.common.CommonMiddleware",
+ "django.middleware.common.BrokenLinkEmailsMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
+ "django.contrib.auth.middleware.AuthenticationMiddleware",
+ "django.contrib.auth.middleware.SessionAuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
+ "django.middleware.clickjacking.XFrameOptionsMiddleware",
+
"mezzanine.core.request.CurrentRequestMiddleware",
- "mezzanine.core.middleware.TemplateForDeviceMiddleware",
- #~ "mezzanine.core.middleware.TemplateForHostMiddleware",
+ "mezzanine.core.middleware.RedirectFallbackMiddleware",
+ #"mezzanine.core.middleware.TemplateForDeviceMiddleware",
+ #"mezzanine.core.middleware.TemplateForHostMiddleware",
"mezzanine.core.middleware.AdminLoginInterfaceSelectorMiddleware",
"mezzanine.core.middleware.SitePermissionMiddleware",
# Uncomment the following if using any of the SSL settings:
# "mezzanine.core.middleware.SSLRedirectMiddleware",
- "django.middleware.transaction.TransactionMiddleware",
"mezzanine.pages.middleware.PageMiddleware",
"django_hosts.middleware.HostsMiddleware",
- "debug_toolbar.middleware.DebugToolbarMiddleware",
"mezzanine.core.middleware.FetchFromCacheMiddleware",
)
@@ -338,9 +354,6 @@
PACKAGE_NAME_FILEBROWSER = "filebrowser_safe"
PACKAGE_NAME_GRAPPELLI = "grappelli_safe"
-BLOG_SLUG = 'news'
-
-
#########################
# OPTIONAL APPLICATIONS #
#########################
@@ -349,24 +362,22 @@
OPTIONAL_APPS = (
"debug_toolbar",
"django_extensions",
- "compressor",
- "piwik_stats",
"memcache_status",
+ "compressor",
PACKAGE_NAME_FILEBROWSER,
PACKAGE_NAME_GRAPPELLI,
)
-DEBUG_TOOLBAR_CONFIG = {"INTERCEPT_REDIRECTS": False}
-
-
#########################
-# MISCELLANEOUS #
+# GEANY SETINGS #
#########################
-# caching & sessions
-SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"
-SESSION_EXPIRE_AT_BROWSER_CLOSE = False
+# some more Mezzanine settings
+BLOG_SLUG = 'news'
+FORMS_USE_HTML5 = True
+INLINE_EDITING_ENABLED = False
+# dashboard
DASHBOARD_TAGS = (
("mezzanine_tags.app_list",),
("comment_tags.recent_comments",),
@@ -379,10 +390,15 @@
(_("Site"), ("sites.Site", "redirects.Redirect", "conf.Setting", "latest_version.LatestVersion", (_("Manage latest version"), "mezzanine_spam_stats.SpamStat"))),
(_("Users"), ("auth.User", "auth.Group",)))
-FORMS_USE_HTML5 = True
+# django-debug-toolbar
+DEBUG_TOOLBAR_CONFIG = {"INTERCEPT_REDIRECTS": False}
-INLINE_EDITING_ENABLED = False
+# caching & sessions
+SESSION_ENGINE = "django.contrib.sessions.backends.cached_db"
+SESSION_EXPIRE_AT_BROWSER_CLOSE = True
+SESSION_COOKIE_SECURE = True
+# django compressor
COMPRESS_CSS_FILTERS = ['compressor.filters.cssmin.CSSMinFilter']
# django-hosts
@@ -392,16 +408,14 @@
# django-honeypot
HONEYPOT_FIELD_NAME = 'website'
-# the URL should end with a slash or 'index.php'
-PIWIK_STATS_URL = 'http://demo.piwik.org'
-PIWIK_STATS_TOKEN = 'anonymous'
-PIWIK_STATS_SITE_ID = 1
-
NIGHTLYBUILDS_BASE_DIR = '/path/to/nightly/builds'
IRC_USER_LIST_FILE = '/var/tmp/irc_userlist'
+#########################
+# LOGGING #
+#########################
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
@@ -428,7 +442,7 @@
}
},
'loggers': {
- '': {
+ 'root': {
'handlers':['console'],
'level':'DEBUG',
},
@@ -445,29 +459,6 @@
}
}
-###################
-# DEPLOY SETTINGS #
-###################
-
-# These settings are used by the default fabfile.py provided.
-# Check fabfile.py for defaults.
-
-# FABRIC = {
-# "SSH_USER": "", # SSH username
-# "SSH_PASS": "", # SSH password (consider key-based authentication)
-# "SSH_KEY_PATH": "", # Local path to SSH key file, for key-based auth
-# "HOSTS": [], # List of hosts to deploy to
-# "VIRTUALENV_HOME": "", # Absolute remote path for virtualenvs
-# "PROJECT_NAME": "", # Unique identifier for project
-# "REQUIREMENTS_PATH": "", # Path to pip requirements, relative to project
-# "GUNICORN_PORT": 8000, # Port gunicorn will listen on
-# "LOCALE": "en_US.UTF-8", # Should end with ".UTF-8"
-# "LIVE_HOSTNAME": "www.example.com", # Host for public site.
-# "REPO_URL": "", # Git or Mercurial remote repo URL for the project
-# "DB_PASS": "", # Live database password
-# "ADMIN_PASS": "", # Live admin user password
-# }
-
##################
# LOCAL SETTINGS #
@@ -476,10 +467,13 @@
# Allow any settings to be defined in local_settings.py which should be
# ignored in your version control system allowing for settings to be
# defined per machine.
-try:
- from local_settings import *
-except ImportError:
- pass
+
+# Instead of doing "from .local_settings import *", we use exec so that
+# local_settings has full access to everything defined in this module.
+
+f = os.path.join(os.path.dirname(os.path.abspath(__file__)), "local_settings.py")
+if os.path.exists(f):
+ exec(open(f, "rb").read())
####################
@@ -488,6 +482,13 @@
# set_dynamic_settings() will rewrite globals based on what has been
# defined so far, in order to provide some better defaults where
-# applicable.
-from mezzanine.utils.conf import set_dynamic_settings
-set_dynamic_settings(globals())
+# applicable. We also allow this settings module to be imported
+# without Mezzanine installed, as the case may be when using the
+# fabfile, where setting the dynamic settings below isn't strictly
+# required.
+try:
+ from mezzanine.utils.conf import set_dynamic_settings
+except ImportError:
+ pass
+else:
+ set_dynamic_settings(globals())
Modified: geany/sitemaps.py
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -15,7 +15,7 @@
from django.contrib import sitemaps
from django.contrib.sites.models import Site
from django.core import urlresolvers
-from django_hosts.reverse import get_host
+from django_hosts.resolvers import get_host
from mezzanine.blog.models import BlogPost
from mezzanine.core.sitemaps import DisplayableSitemap
Modified: geany/static/css/bootstrap-responsive.css
1109 lines changed, 0 insertions(+), 1109 deletions(-)
===================================================================
@@ -1,1109 +0,0 @@
-/*!
- * Bootstrap Responsive v2.3.2
- *
- * Copyright 2012 Twitter, Inc
- * Licensed under the Apache License v2.0
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Designed and built with all the love in the world @twitter by @mdo and @fat.
- */
-
-.clearfix {
- *zoom: 1;
-}
-
-.clearfix:before,
-.clearfix:after {
- display: table;
- line-height: 0;
- content: "";
-}
-
-.clearfix:after {
- clear: both;
-}
-
-.hide-text {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0;
-}
-
-.input-block-level {
- display: block;
- width: 100%;
- min-height: 30px;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
-}
-
- at -ms-viewport {
- width: device-width;
-}
-
-.hidden {
- display: none;
- visibility: hidden;
-}
-
-.visible-phone {
- display: none !important;
-}
-
-.visible-tablet {
- display: none !important;
-}
-
-.hidden-desktop {
- display: none !important;
-}
-
-.visible-desktop {
- display: inherit !important;
-}
-
- at media (min-width: 768px) and (max-width: 979px) {
- .hidden-desktop {
- display: inherit !important;
- }
- .visible-desktop {
- display: none !important ;
- }
- .visible-tablet {
- display: inherit !important;
- }
- .hidden-tablet {
- display: none !important;
- }
-}
-
- at media (max-width: 767px) {
- .hidden-desktop {
- display: inherit !important;
- }
- .visible-desktop {
- display: none !important;
- }
- .visible-phone {
- display: inherit !important;
- }
- .hidden-phone {
- display: none !important;
- }
-}
-
-.visible-print {
- display: none !important;
-}
-
- at media print {
- .visible-print {
- display: inherit !important;
- }
- .hidden-print {
- display: none !important;
- }
-}
-
- at media (min-width: 1200px) {
- .row {
- margin-left: -30px;
- *zoom: 1;
- }
- .row:before,
- .row:after {
- display: table;
- line-height: 0;
- content: "";
- }
- .row:after {
- clear: both;
- }
- [class*="span"] {
- float: left;
- min-height: 1px;
- margin-left: 30px;
- }
- .container,
- .navbar-static-top .container,
- .navbar-fixed-top .container,
- .navbar-fixed-bottom .container {
- width: 1170px;
- }
- .span12 {
- width: 1170px;
- }
- .span11 {
- width: 1070px;
- }
- .span10 {
- width: 970px;
- }
- .span9 {
- width: 870px;
- }
- .span8 {
- width: 770px;
- }
- .span7 {
- width: 670px;
- }
- .span6 {
- width: 570px;
- }
- .span5 {
- width: 470px;
- }
- .span4 {
- width: 370px;
- }
- .span3 {
- width: 270px;
- }
- .span2 {
- width: 170px;
- }
- .span1 {
- width: 70px;
- }
- .offset12 {
- margin-left: 1230px;
- }
- .offset11 {
- margin-left: 1130px;
- }
- .offset10 {
- margin-left: 1030px;
- }
- .offset9 {
- margin-left: 930px;
- }
- .offset8 {
- margin-left: 830px;
- }
- .offset7 {
- margin-left: 730px;
- }
- .offset6 {
- margin-left: 630px;
- }
- .offset5 {
- margin-left: 530px;
- }
- .offset4 {
- margin-left: 430px;
- }
- .offset3 {
- margin-left: 330px;
- }
- .offset2 {
- margin-left: 230px;
- }
- .offset1 {
- margin-left: 130px;
- }
- .row-fluid {
- width: 100%;
- *zoom: 1;
- }
- .row-fluid:before,
- .row-fluid:after {
- display: table;
- line-height: 0;
- content: "";
- }
- .row-fluid:after {
- clear: both;
- }
- .row-fluid [class*="span"] {
- display: block;
- float: left;
- width: 100%;
- min-height: 30px;
- margin-left: 2.564102564102564%;
- *margin-left: 2.5109110747408616%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- .row-fluid [class*="span"]:first-child {
- margin-left: 0;
- }
- .row-fluid .controls-row [class*="span"] + [class*="span"] {
- margin-left: 2.564102564102564%;
- }
- .row-fluid .span12 {
- width: 100%;
- *width: 99.94680851063829%;
- }
- .row-fluid .span11 {
- width: 91.45299145299145%;
- *width: 91.39979996362975%;
- }
- .row-fluid .span10 {
- width: 82.90598290598291%;
- *width: 82.8527914166212%;
- }
- .row-fluid .span9 {
- width: 74.35897435897436%;
- *width: 74.30578286961266%;
- }
- .row-fluid .span8 {
- width: 65.81196581196582%;
- *width: 65.75877432260411%;
- }
- .row-fluid .span7 {
- width: 57.26495726495726%;
- *width: 57.21176577559556%;
- }
- .row-fluid .span6 {
- width: 48.717948717948715%;
- *width: 48.664757228587014%;
- }
- .row-fluid .span5 {
- width: 40.17094017094017%;
- *width: 40.11774868157847%;
- }
- .row-fluid .span4 {
- width: 31.623931623931625%;
- *width: 31.570740134569924%;
- }
- .row-fluid .span3 {
- width: 23.076923076923077%;
- *width: 23.023731587561375%;
- }
- .row-fluid .span2 {
- width: 14.52991452991453%;
- *width: 14.476723040552828%;
- }
- .row-fluid .span1 {
- width: 5.982905982905983%;
- *width: 5.929714493544281%;
- }
- .row-fluid .offset12 {
- margin-left: 105.12820512820512%;
- *margin-left: 105.02182214948171%;
- }
- .row-fluid .offset12:first-child {
- margin-left: 102.56410256410257%;
- *margin-left: 102.45771958537915%;
- }
- .row-fluid .offset11 {
- margin-left: 96.58119658119658%;
- *margin-left: 96.47481360247316%;
- }
- .row-fluid .offset11:first-child {
- margin-left: 94.01709401709402%;
- *margin-left: 93.91071103837061%;
- }
- .row-fluid .offset10 {
- margin-left: 88.03418803418803%;
- *margin-left: 87.92780505546462%;
- }
- .row-fluid .offset10:first-child {
- margin-left: 85.47008547008548%;
- *margin-left: 85.36370249136206%;
- }
- .row-fluid .offset9 {
- margin-left: 79.48717948717949%;
- *margin-left: 79.38079650845607%;
- }
- .row-fluid .offset9:first-child {
- margin-left: 76.92307692307693%;
- *margin-left: 76.81669394435352%;
- }
- .row-fluid .offset8 {
- margin-left: 70.94017094017094%;
- *margin-left: 70.83378796144753%;
- }
- .row-fluid .offset8:first-child {
- margin-left: 68.37606837606839%;
- *margin-left: 68.26968539734497%;
- }
- .row-fluid .offset7 {
- margin-left: 62.393162393162385%;
- *margin-left: 62.28677941443899%;
- }
- .row-fluid .offset7:first-child {
- margin-left: 59.82905982905982%;
- *margin-left: 59.72267685033642%;
- }
- .row-fluid .offset6 {
- margin-left: 53.84615384615384%;
- *margin-left: 53.739770867430444%;
- }
- .row-fluid .offset6:first-child {
- margin-left: 51.28205128205128%;
- *margin-left: 51.175668303327875%;
- }
- .row-fluid .offset5 {
- margin-left: 45.299145299145295%;
- *margin-left: 45.1927623204219%;
- }
- .row-fluid .offset5:first-child {
- margin-left: 42.73504273504273%;
- *margin-left: 42.62865975631933%;
- }
- .row-fluid .offset4 {
- margin-left: 36.75213675213675%;
- *margin-left: 36.645753773413354%;
- }
- .row-fluid .offset4:first-child {
- margin-left: 34.18803418803419%;
- *margin-left: 34.081651209310785%;
- }
- .row-fluid .offset3 {
- margin-left: 28.205128205128204%;
- *margin-left: 28.0987452264048%;
- }
- .row-fluid .offset3:first-child {
- margin-left: 25.641025641025642%;
- *margin-left: 25.53464266230224%;
- }
- .row-fluid .offset2 {
- margin-left: 19.65811965811966%;
- *margin-left: 19.551736679396257%;
- }
- .row-fluid .offset2:first-child {
- margin-left: 17.094017094017094%;
- *margin-left: 16.98763411529369%;
- }
- .row-fluid .offset1 {
- margin-left: 11.11111111111111%;
- *margin-left: 11.004728132387708%;
- }
- .row-fluid .offset1:first-child {
- margin-left: 8.547008547008547%;
- *margin-left: 8.440625568285142%;
- }
- input,
- textarea,
- .uneditable-input {
- margin-left: 0;
- }
- .controls-row [class*="span"] + [class*="span"] {
- margin-left: 30px;
- }
- input.span12,
- textarea.span12,
- .uneditable-input.span12 {
- width: 1156px;
- }
- input.span11,
- textarea.span11,
- .uneditable-input.span11 {
- width: 1056px;
- }
- input.span10,
- textarea.span10,
- .uneditable-input.span10 {
- width: 956px;
- }
- input.span9,
- textarea.span9,
- .uneditable-input.span9 {
- width: 856px;
- }
- input.span8,
- textarea.span8,
- .uneditable-input.span8 {
- width: 756px;
- }
- input.span7,
- textarea.span7,
- .uneditable-input.span7 {
- width: 656px;
- }
- input.span6,
- textarea.span6,
- .uneditable-input.span6 {
- width: 556px;
- }
- input.span5,
- textarea.span5,
- .uneditable-input.span5 {
- width: 456px;
- }
- input.span4,
- textarea.span4,
- .uneditable-input.span4 {
- width: 356px;
- }
- input.span3,
- textarea.span3,
- .uneditable-input.span3 {
- width: 256px;
- }
- input.span2,
- textarea.span2,
- .uneditable-input.span2 {
- width: 156px;
- }
- input.span1,
- textarea.span1,
- .uneditable-input.span1 {
- width: 56px;
- }
- .thumbnails {
- margin-left: -30px;
- }
- .thumbnails > li {
- margin-left: 30px;
- }
- .row-fluid .thumbnails {
- margin-left: 0;
- }
-}
-
- at media (min-width: 768px) and (max-width: 979px) {
- .row {
- margin-left: -20px;
- *zoom: 1;
- }
- .row:before,
- .row:after {
- display: table;
- line-height: 0;
- content: "";
- }
- .row:after {
- clear: both;
- }
- [class*="span"] {
- float: left;
- min-height: 1px;
- margin-left: 20px;
- }
- .container,
- .navbar-static-top .container,
- .navbar-fixed-top .container,
- .navbar-fixed-bottom .container {
- width: 724px;
- }
- .span12 {
- width: 724px;
- }
- .span11 {
- width: 662px;
- }
- .span10 {
- width: 600px;
- }
- .span9 {
- width: 538px;
- }
- .span8 {
- width: 476px;
- }
- .span7 {
- width: 414px;
- }
- .span6 {
- width: 352px;
- }
- .span5 {
- width: 290px;
- }
- .span4 {
- width: 228px;
- }
- .span3 {
- width: 166px;
- }
- .span2 {
- width: 104px;
- }
- .span1 {
- width: 42px;
- }
- .offset12 {
- margin-left: 764px;
- }
- .offset11 {
- margin-left: 702px;
- }
- .offset10 {
- margin-left: 640px;
- }
- .offset9 {
- margin-left: 578px;
- }
- .offset8 {
- margin-left: 516px;
- }
- .offset7 {
- margin-left: 454px;
- }
- .offset6 {
- margin-left: 392px;
- }
- .offset5 {
- margin-left: 330px;
- }
- .offset4 {
- margin-left: 268px;
- }
- .offset3 {
- margin-left: 206px;
- }
- .offset2 {
- margin-left: 144px;
- }
- .offset1 {
- margin-left: 82px;
- }
- .row-fluid {
- width: 100%;
- *zoom: 1;
- }
- .row-fluid:before,
- .row-fluid:after {
- display: table;
- line-height: 0;
- content: "";
- }
- .row-fluid:after {
- clear: both;
- }
- .row-fluid [class*="span"] {
- display: block;
- float: left;
- width: 100%;
- min-height: 30px;
- margin-left: 2.7624309392265194%;
- *margin-left: 2.709239449864817%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- .row-fluid [class*="span"]:first-child {
- margin-left: 0;
- }
- .row-fluid .controls-row [class*="span"] + [class*="span"] {
- margin-left: 2.7624309392265194%;
- }
- .row-fluid .span12 {
- width: 100%;
- *width: 99.94680851063829%;
- }
- .row-fluid .span11 {
- width: 91.43646408839778%;
- *width: 91.38327259903608%;
- }
- .row-fluid .span10 {
- width: 82.87292817679558%;
- *width: 82.81973668743387%;
- }
- .row-fluid .span9 {
- width: 74.30939226519337%;
- *width: 74.25620077583166%;
- }
- .row-fluid .span8 {
- width: 65.74585635359117%;
- *width: 65.69266486422946%;
- }
- .row-fluid .span7 {
- width: 57.18232044198895%;
- *width: 57.12912895262725%;
- }
- .row-fluid .span6 {
- width: 48.61878453038674%;
- *width: 48.56559304102504%;
- }
- .row-fluid .span5 {
- width: 40.05524861878453%;
- *width: 40.00205712942283%;
- }
- .row-fluid .span4 {
- width: 31.491712707182323%;
- *width: 31.43852121782062%;
- }
- .row-fluid .span3 {
- width: 22.92817679558011%;
- *width: 22.87498530621841%;
- }
- .row-fluid .span2 {
- width: 14.3646408839779%;
- *width: 14.311449394616199%;
- }
- .row-fluid .span1 {
- width: 5.801104972375691%;
- *width: 5.747913483013988%;
- }
- .row-fluid .offset12 {
- margin-left: 105.52486187845304%;
- *margin-left: 105.41847889972962%;
- }
- .row-fluid .offset12:first-child {
- margin-left: 102.76243093922652%;
- *margin-left: 102.6560479605031%;
- }
- .row-fluid .offset11 {
- margin-left: 96.96132596685082%;
- *margin-left: 96.8549429881274%;
- }
- .row-fluid .offset11:first-child {
- margin-left: 94.1988950276243%;
- *margin-left: 94.09251204890089%;
- }
- .row-fluid .offset10 {
- margin-left: 88.39779005524862%;
- *margin-left: 88.2914070765252%;
- }
- .row-fluid .offset10:first-child {
- margin-left: 85.6353591160221%;
- *margin-left: 85.52897613729868%;
- }
- .row-fluid .offset9 {
- margin-left: 79.8342541436464%;
- *margin-left: 79.72787116492299%;
- }
- .row-fluid .offset9:first-child {
- margin-left: 77.07182320441989%;
- *margin-left: 76.96544022569647%;
- }
- .row-fluid .offset8 {
- margin-left: 71.2707182320442%;
- *margin-left: 71.16433525332079%;
- }
- .row-fluid .offset8:first-child {
- margin-left: 68.50828729281768%;
- *margin-left: 68.40190431409427%;
- }
- .row-fluid .offset7 {
- margin-left: 62.70718232044199%;
- *margin-left: 62.600799341718584%;
- }
- .row-fluid .offset7:first-child {
- margin-left: 59.94475138121547%;
- *margin-left: 59.838368402492065%;
- }
- .row-fluid .offset6 {
- margin-left: 54.14364640883978%;
- *margin-left: 54.037263430116376%;
- }
- .row-fluid .offset6:first-child {
- margin-left: 51.38121546961326%;
- *margin-left: 51.27483249088986%;
- }
- .row-fluid .offset5 {
- margin-left: 45.58011049723757%;
- *margin-left: 45.47372751851417%;
- }
- .row-fluid .offset5:first-child {
- margin-left: 42.81767955801105%;
- *margin-left: 42.71129657928765%;
- }
- .row-fluid .offset4 {
- margin-left: 37.01657458563536%;
- *margin-left: 36.91019160691196%;
- }
- .row-fluid .offset4:first-child {
- margin-left: 34.25414364640884%;
- *margin-left: 34.14776066768544%;
- }
- .row-fluid .offset3 {
- margin-left: 28.45303867403315%;
- *margin-left: 28.346655695309746%;
- }
- .row-fluid .offset3:first-child {
- margin-left: 25.69060773480663%;
- *margin-left: 25.584224756083227%;
- }
- .row-fluid .offset2 {
- margin-left: 19.88950276243094%;
- *margin-left: 19.783119783707537%;
- }
- .row-fluid .offset2:first-child {
- margin-left: 17.12707182320442%;
- *margin-left: 17.02068884448102%;
- }
- .row-fluid .offset1 {
- margin-left: 11.32596685082873%;
- *margin-left: 11.219583872105325%;
- }
- .row-fluid .offset1:first-child {
- margin-left: 8.56353591160221%;
- *margin-left: 8.457152932878806%;
- }
- input,
- textarea,
- .uneditable-input {
- margin-left: 0;
- }
- .controls-row [class*="span"] + [class*="span"] {
- margin-left: 20px;
- }
- input.span12,
- textarea.span12,
- .uneditable-input.span12 {
- width: 710px;
- }
- input.span11,
- textarea.span11,
- .uneditable-input.span11 {
- width: 648px;
- }
- input.span10,
- textarea.span10,
- .uneditable-input.span10 {
- width: 586px;
- }
- input.span9,
- textarea.span9,
- .uneditable-input.span9 {
- width: 524px;
- }
- input.span8,
- textarea.span8,
- .uneditable-input.span8 {
- width: 462px;
- }
- input.span7,
- textarea.span7,
- .uneditable-input.span7 {
- width: 400px;
- }
- input.span6,
- textarea.span6,
- .uneditable-input.span6 {
- width: 338px;
- }
- input.span5,
- textarea.span5,
- .uneditable-input.span5 {
- width: 276px;
- }
- input.span4,
- textarea.span4,
- .uneditable-input.span4 {
- width: 214px;
- }
- input.span3,
- textarea.span3,
- .uneditable-input.span3 {
- width: 152px;
- }
- input.span2,
- textarea.span2,
- .uneditable-input.span2 {
- width: 90px;
- }
- input.span1,
- textarea.span1,
- .uneditable-input.span1 {
- width: 28px;
- }
-}
-
- at media (max-width: 767px) {
- body {
- padding-right: 20px;
- padding-left: 20px;
- }
- .navbar-fixed-top,
- .navbar-fixed-bottom,
- .navbar-static-top {
- margin-right: -20px;
- margin-left: -20px;
- }
- .container-fluid {
- padding: 0;
- }
- .dl-horizontal dt {
- float: none;
- width: auto;
- clear: none;
- text-align: left;
- }
- .dl-horizontal dd {
- margin-left: 0;
- }
- .container {
- width: auto;
- }
- .row-fluid {
- width: 100%;
- }
- .row,
- .thumbnails {
- margin-left: 0;
- }
- .thumbnails > li {
- float: none;
- margin-left: 0;
- }
- [class*="span"],
- .uneditable-input[class*="span"],
- .row-fluid [class*="span"] {
- display: block;
- float: none;
- width: 100%;
- margin-left: 0;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- .span12,
- .row-fluid .span12 {
- width: 100%;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- .row-fluid [class*="offset"]:first-child {
- margin-left: 0;
- }
- .input-large,
- .input-xlarge,
- .input-xxlarge,
- input[class*="span"],
- select[class*="span"],
- textarea[class*="span"],
- .uneditable-input {
- display: block;
- width: 100%;
- min-height: 30px;
- -webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
- }
- .input-prepend input,
- .input-append input,
- .input-prepend input[class*="span"],
- .input-append input[class*="span"] {
- display: inline-block;
- width: auto;
- }
- .controls-row [class*="span"] + [class*="span"] {
- margin-left: 0;
- }
- .modal {
- position: fixed;
- top: 20px;
- right: 20px;
- left: 20px;
- width: auto;
- margin: 0;
- }
- .modal.fade {
- top: -100px;
- }
- .modal.fade.in {
- top: 20px;
- }
-}
-
- at media (max-width: 480px) {
- .nav-collapse {
- -webkit-transform: translate3d(0, 0, 0);
- }
- .page-header h1 small {
- display: block;
- line-height: 20px;
- }
- input[type="checkbox"],
- input[type="radio"] {
- border: 1px solid #ccc;
- }
- .form-horizontal .control-label {
- float: none;
- width: auto;
- padding-top: 0;
- text-align: left;
- }
- .form-horizontal .controls {
- margin-left: 0;
- }
- .form-horizontal .control-list {
- padding-top: 0;
- }
- .form-horizontal .form-actions {
- padding-right: 10px;
- padding-left: 10px;
- }
- .media .pull-left,
- .media .pull-right {
- display: block;
- float: none;
- margin-bottom: 10px;
- }
- .media-object {
- margin-right: 0;
- margin-left: 0;
- }
- .modal {
- top: 10px;
- right: 10px;
- left: 10px;
- }
- .modal-header .close {
- padding: 10px;
- margin: -10px;
- }
- .carousel-caption {
- position: static;
- }
-}
-
- at media (max-width: 979px) {
- body {
- padding-top: 0;
- }
- .navbar-fixed-top,
- .navbar-fixed-bottom {
- position: static;
- }
- .navbar-fixed-top {
- margin-bottom: 20px;
- }
- .navbar-fixed-bottom {
- margin-top: 20px;
- }
- .navbar-fixed-top .navbar-inner,
- .navbar-fixed-bottom .navbar-inner {
- padding: 5px;
- }
- .navbar .container {
- width: auto;
- padding: 0;
- }
- .navbar .brand {
- padding-right: 10px;
- padding-left: 10px;
- margin: 0 0 0 -5px;
- }
- .nav-collapse {
- clear: both;
- }
- .nav-collapse .nav {
- float: none;
- margin: 0 0 10px;
- }
- .nav-collapse .nav > li {
- float: none;
- }
- .nav-collapse .nav > li > a {
- margin-bottom: 2px;
- }
- .nav-collapse .nav > .divider-vertical {
- display: none;
- }
- .nav-collapse .nav .nav-header {
- color: #777777;
- text-shadow: none;
- }
- .nav-collapse .nav > li > a,
- .nav-collapse .dropdown-menu a {
- padding: 9px 15px;
- font-weight: bold;
- color: #777777;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
- }
- .nav-collapse .btn {
- padding: 4px 10px 4px;
- font-weight: normal;
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- }
- .nav-collapse .dropdown-menu li + li a {
- margin-bottom: 2px;
- }
- .nav-collapse .nav > li > a:hover,
- .nav-collapse .nav > li > a:focus,
- .nav-collapse .dropdown-menu a:hover,
- .nav-collapse .dropdown-menu a:focus {
- background-color: #f2f2f2;
- }
- .navbar-inverse .nav-collapse .nav > li > a,
- .navbar-inverse .nav-collapse .dropdown-menu a {
- color: #999999;
- }
- .navbar-inverse .nav-collapse .nav > li > a:hover,
- .navbar-inverse .nav-collapse .nav > li > a:focus,
- .navbar-inverse .nav-collapse .dropdown-menu a:hover,
- .navbar-inverse .nav-collapse .dropdown-menu a:focus {
- background-color: #111111;
- }
- .nav-collapse.in .btn-group {
- padding: 0;
- margin-top: 5px;
- }
- .nav-collapse .dropdown-menu {
- position: static;
- top: auto;
- left: auto;
- display: none;
- float: none;
- max-width: none;
- padding: 0;
- margin: 0 15px;
- background-color: transparent;
- border: none;
- -webkit-border-radius: 0;
- -moz-border-radius: 0;
- border-radius: 0;
- -webkit-box-shadow: none;
- -moz-box-shadow: none;
- box-shadow: none;
- }
- .nav-collapse .open > .dropdown-menu {
- display: block;
- }
- .nav-collapse .dropdown-menu:before,
- .nav-collapse .dropdown-menu:after {
- display: none;
- }
- .nav-collapse .dropdown-menu .divider {
- display: none;
- }
- .nav-collapse .nav > li > .dropdown-menu:before,
- .nav-collapse .nav > li > .dropdown-menu:after {
- display: none;
- }
- .nav-collapse .navbar-form,
- .nav-collapse .navbar-search {
- float: none;
- padding: 10px 15px;
- margin: 10px 0;
- border-top: 1px solid #f2f2f2;
- border-bottom: 1px solid #f2f2f2;
- -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
- -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
- box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);
- }
- .navbar-inverse .nav-collapse .navbar-form,
- .navbar-inverse .nav-collapse .navbar-search {
- border-top-color: #111111;
- border-bottom-color: #111111;
- }
- .navbar .nav-collapse .nav.pull-right {
- float: none;
- margin-left: 0;
- }
- .nav-collapse,
- .nav-collapse.collapse {
- height: 0;
- overflow: hidden;
- }
- .navbar .btn-navbar {
- display: block;
- }
- .navbar-static .navbar-inner {
- padding-right: 10px;
- padding-left: 10px;
- }
-}
-
- at media (min-width: 980px) {
- .nav-collapse.collapse {
- height: auto !important;
- overflow: visible !important;
- }
-}
Modified: geany/static/css/bootstrap.css
8949 lines changed, 4950 insertions(+), 3999 deletions(-)
===================================================================
No diff available, check online
Modified: geany/static/css/main.css
36 lines changed, 30 insertions(+), 6 deletions(-)
===================================================================
@@ -6,22 +6,27 @@
border: 0;
}
-.hero-unit {
+h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
+ font-weight: bold;
+}
+
+.jumbotron {
padding-top: 20px;
}
-.hero-unit h1 {
+.jumbotron h1 {
padding-bottom: 20px;
font-size: 32px;
}
-.hero-unit {
+.jumbotron {
font-size: 16px;
font-weight: 200;
line-height: 20px;
+ padding-bottom: 58px;
}
-.hero-unit .btn {
+.jumbotron .btn {
padding: 8px 12px;
margin: 20px;
float: right;
@@ -29,12 +34,23 @@
font-size: 16px;
}
-.navbar img.brand {
- padding: 0px 5px;
+.navbar img.navbar-brand {
+ padding: 5px 5px;
+}
+
+.navbar {
+ min-height: 40px;
+}
+
+.carousel {
+ margin-bottom: 10px;
}
.carousel-indicators {
top: -35px;
+ left: auto;
+ right: 15px;
+ width: auto;
}
.carousel-indicators li {
@@ -47,6 +63,14 @@
background-color: rgba(190, 190, 190, 0.5);
}
+#content-main .well {
+ padding-top: 3px;
+}
+
+#content-main .well h1 {
+ padding-bottom: 10px;
+}
+
#footer .well {
padding: 10px;
}
Modified: geany/static/js/bootstrap.js
2622 lines changed, 1174 insertions(+), 1448 deletions(-)
===================================================================
No diff available, check online
Modified: geany/static/js/tinymce_setup.js
202 lines changed, 74 insertions(+), 128 deletions(-)
===================================================================
@@ -1,141 +1,87 @@
-function CustomFileBrowser(field_name, url, type, win) {
+// Map Django language codes to valid TinyMCE language codes.
+// There's an entry for every TinyMCE language that exists,
+// so if a Django language code isn't here, we can default to en.
+
+var language_codes = {
+ 'ar': 'ar',
+ 'ca': 'ca',
+ 'cs': 'cs',
+ 'da': 'da',
+ 'de': 'de',
+ 'es': 'es',
+ 'et': 'et',
+ 'fa': 'fa',
+ 'fa_IR': 'fa_IR',
+ 'fi': 'fi',
+ 'fr': 'fr_FR',
+ 'hr_HR': 'hr',
+ 'hu': 'hu_HU',
+ 'id_ID': 'id',
+ 'is_IS': 'is_IS',
+ 'it': 'it',
+ 'ja': 'ja',
+ 'ko': 'ko_KR',
+ 'lv': 'lv',
+ 'nb': 'nb_NO',
+ 'nl': 'nl',
+ 'pl': 'pl',
+ 'pt_BR': 'pt_BR',
+ 'pt_PT': 'pt_PT',
+ 'ru': 'ru',
+ 'sk': 'sk',
+ 'sr': 'sr_Latn',
+ 'sv': 'sv_SE',
+ 'tr': 'tr',
+ 'uk': 'uk_UA',
+ 'vi': 'vi',
+ 'zh_CN': 'zh_CN',
+ 'zh_TW': 'zh_TW'
+};
+
+function custom_file_browser(field_name, url, type, win) {
tinyMCE.activeEditor.windowManager.open({
- file: window.__filebrowser_url + '?pop=2&type=' + type,
- width: 820, // Your dimensions may differ - toy around with them!
+ title: 'Select ' + type + ' to insert',
+ file: window.__filebrowser_url + '?pop=5&type=' + type,
+ width: 800,
height: 500,
- resizable: "yes",
- scrollbars: "yes",
- inline: "yes", // This parameter only has an effect if you use the inlinepopups plugin!
- close_previous: "no"
+ resizable: 'yes',
+ scrollbars: 'yes',
+ inline: 'yes',
+ close_previous: 'no'
}, {
window: win,
- input: field_name,
- editor_id: tinyMCE.selectedInstance.editorId
+ input: field_name
});
return false;
}
-if (typeof tinyMCE != 'undefined') {
-
- tinyMCE.init({
-
- // main settings
- mode : "specific_textareas",
- editor_selector : "mceEditor",
- theme: "advanced",
- language: "en",
- dialog_type: "window",
- editor_deselector : "mceNoEditor",
-
- // general settings
- width: '700',
- height: '350',
- indentation : '10px',
- fix_list_elements : true,
- relative_urls: false,
- remove_script_host : true,
- accessibility_warnings : false,
- object_resizing: false,
- //cleanup: false, // SETTING THIS TO FALSE WILL BREAK EMBEDDING YOUTUBE VIDEOS
- forced_root_block: "p",
- remove_trailing_nbsp: true,
+jQuery(function($) {
- // callbackss
- file_browser_callback: "CustomFileBrowser",
+ if (typeof tinyMCE != 'undefined') {
- // theme_advanced
- theme_advanced_toolbar_location: "top",
- theme_advanced_toolbar_align: "left",
- theme_advanced_statusbar_location: "",
- theme_advanced_buttons1: "bold,italic,underline,|,link,unlink,|,image,|,media,charmap,|,code,|,table,|,hr,|,bullist,numlist,blockquote,|,undo,redo,|,formatselect,|,search,replace,|,forecolor,backcolor,|,justifyleft,justifycenter,justifyright,justifyfull,",
- theme_advanced_buttons2: "",
- theme_advanced_buttons3: "",
- theme_advanced_path: false,
- theme_advanced_blockformats: "p,h1,h2,h3,h4,pre",
- theme_advanced_styles: "[all] clearfix=clearfix;[p] small=small;[img] Image left-aligned=img_left;[img] Image left-aligned (nospace)=img_left_nospacetop;[img] Image right-aligned=img_right;[img] Image right-aligned (nospace)=img_right_nospacetop;[img] Image Block=img_block;[img] Image Block (nospace)=img_block_nospacetop;[div] column span-2=column span-2;[div] column span-4=column span-4;[div] column span-8=column span-8",
- theme_advanced_resizing : true,
- theme_advanced_resize_horizontal : false,
- theme_advanced_resizing_use_cookie : true,
- theme_advanced_styles: "Image left-aligned=img_left;Image left-aligned (nospace)=img_left_nospacetop;Image right-aligned=img_right;Image right-aligned (nospace)=img_right_nospacetop;Image Block=img_block",
- advlink_styles: "intern=internal;extern=external",
+ tinyMCE.init({
+ selector: "textarea.mceEditor",
+ height: '500px',
+ language: language_codes[window.__language_code] || 'en',
+ plugins: [
+ "advlist autolink lists link image charmap print preview anchor",
+ "searchreplace visualblocks code fullscreen",
+ "insertdatetime media table contextmenu paste"
+ ],
+ link_list: '/displayable_links.js',
+ relative_urls: false,
+ convert_urls: false,
+ menubar: false,
+ statusbar: false,
+ toolbar: ("insertfile undo redo | styleselect | bold italic | " +
+ "alignleft aligncenter alignright alignjustify | " +
+ "bullist numlist outdent indent | link image table | " +
+ "code fullscreen"),
+ file_browser_callback: custom_file_browser,
+ content_css: window.__tinymce_css
+ });
- // plugins
- plugins: "inlinepopups,contextmenu,tabfocus,searchreplace,fullscreen,advimage,advlink,paste,media,table",
- advimage_update_dimensions_onchange: true,
+ }
- // remove MS Word's inline styles when copying and pasting.
- paste_remove_spans: true,
- paste_auto_cleanup_on_paste : true,
- paste_remove_styles: true,
- paste_remove_styles_if_webkit: true,
- paste_strip_class_attributes: true,
-
- // allow inline styles
- inline_styles : true,
-
-
- // elements
- valid_elements : ""
- + "span[style],"
- + "-p,"
- + "a[href|target=_blank|class],"
- + "-strong/-b,"
- + "-strike/-s,-u,"
- + "-em/-i,"
- + "-u,"
- + "-ol,"
- + "-ul,"
- + "-li,"
- + "-dl,"
- + "-dd,"
- + "-dt,"
- + "br,"
- + "img[class|src|alt=|width|height],"
- + "-h1,-h2,-h3,-h4,"
- + "-pre,"
- + "-blockquote,"
- + "-cite,"
- + "-code,"
- + "-iframe,"
- + "-table[border=0|cellspacing|cellpadding|width|frame|style|class|rules|height|"
- + "align|summary|bgcolor|background|bordercolor],"
- + "-tr[rowspan|width|height|align|valign|bgcolor|"
- + "background|bordercolor],"
- + "tbody,"
- + "thead,"
- + "tfoot,"
- + "#td[colspan|rowspan|width|height|align|valign|style|bgcolor|background|"
- + "bordercolor|scope],"
- + "#th[colspan|rowspan|width|height|align|valign|style|scope],"
- + "-div,"
- + "abbr,"
- + "sup,"
- + "",
- extended_valid_elements: "pre[style],"
- + "a[name|class|href|target|title|onclick|rel],"
- + "img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name|style],"
- + "iframe[src|title|byline|portrait|frameborder|width|height],"
- + "br[clearfix],"
- + "h2[class<clearfix],h3[class<clearfix],h4[class<clearfix],"
- + "ul[id|class<clearfix],ol[class<clearfix],"
- + "p[class],"
- + "div[class],"
- + "span[class],"
- + "td[style],"
- + "object[align<bottom?left?middle?right?top|archive|border|class|classid"
- + "|codebase|codetype|data|declare|dir<ltr?rtl|height|hspace|id|lang|name"
- + "|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove"
- + "|onmouseout|onmouseover|onmouseup|standby|style|tabindex|title|type|usemap"
- + "|vspace|width],"
- + "embed[name|src|type|allowscriptaccess|allowfullscreen|width|height],"
- +"param[id|name|type|value|valuetype<DATA?OBJECT?REF],",
- valid_children : ""
- + "h1/h2/h3/h4/h5/h6/a[%itrans_na],"
- + "table[thead|tbody|tfoot|tr|td],"
- + "strong/b/strike/s/u/p/div/em/i/td[%itrans|#text],"
- //+ "body[%btrans|#text]"
- + "",
- });
-
-}
+});
Modified: geany/templates/base.html
12 lines changed, 5 insertions(+), 7 deletions(-)
===================================================================
@@ -3,13 +3,11 @@
{% block top_menu %}
<div class="navbar navbar-inverse navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container">
- <img src="{{ STATIC_URL }}img/geany-36x36.png" class="brand">
- <a class="brand" href="{% url "home" %}">Geany</a>
- <div class="nav-collapse collapse">
- {% page_menu "pages/menus/dropdown.html" %}
- </div>
+ <div class="container">
+ <img src="{{ STATIC_URL }}img/geany-36x36.png" class="navbar-brand">
+ <a class="navbar-brand" href="{% url "home" %}">Geany</a>
+ <div class="navbar-collapse collapse">
+ {% page_menu "pages/menus/dropdown.html" %}
</div>
</div>
</div>
Modified: geany/templates/blog/blog_post_list.html
4 lines changed, 2 insertions(+), 2 deletions(-)
===================================================================
@@ -40,10 +40,10 @@
<div class="well">
<div class="row">
- <div class="span3">
+ <div class="col-md-3">
{% include "donate.html" %}
</div>
- <div class="offset2 span6">
+ <div class="col-md-offset-2 col-md-6">
{% include "twitter/tweets.html" %}
</div>
</div>
Modified: geany/templates/errors/error_base.html
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -15,7 +15,7 @@
{% block main %}
<div class="well">
<h3>Error:</h3>
- <p class="alert alert-error">
+ <p class="alert alert-danger">
{% block error_message %}
{% endblock %}
</p>
Modified: geany/templates/home.html
21 lines changed, 10 insertions(+), 11 deletions(-)
===================================================================
@@ -11,11 +11,10 @@
{% block bodyblock %}
- <!-- Main hero unit for a primary marketing message or call to action -->
- <div class="hero-unit">
+ <div class="jumbotron">
<h1>The Flyweight IDE</h1>
- <div id="GeanyScreenshots" class="carousel slide">
+ <div id="GeanyScreenshots" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
<li data-target="#GeanyScreenshots" data-slide-to="0" class="active"></li>
<li data-target="#GeanyScreenshots" data-slide-to="1"></li>
@@ -57,11 +56,11 @@
workflow. It runs on Windows, MacOS and Linux, is translated into
over 40 languages, and has built-in support for more than 50 programming
languages.
- <a href="{% url 'page' 'download/releases' %}" class="btn btn-primary">Download Geany {{ geany_latest_version.version }} »</a></p>
+ <a href="{% url 'page' 'download/releases' %}" class="btn btn-default btn-primary">Download Geany {{ geany_latest_version.version }} »</a></p>
</div>
<div class="row">
- <div class="span4">
+ <div class="col-md-4">
<h2>Fast & Small</h2>
<p>One the primary reasons for Geany's existence is that there
is a need for a decent, GUI, lightweight, cross-platform, flexible
@@ -69,9 +68,9 @@
requirements but fall short on others.
</p>
<p>Geany attempts to hit the sweet spot.</p>
- <p><a class="btn" href="{% url "page" "about/geany" %}">More Features »</a></p>
+ <p><a class="btn btn-default" href="{% url "page" "about/geany" %}">More Features »</a></p>
</div>
- <div class="span4">
+ <div class="col-md-4">
<h2>Great Community</h2>
<p>Geany is Good Ol' Fashioned
<a href="https://en.wikipedia.org/wiki/Free_software">Free Software</a>.
@@ -86,10 +85,10 @@
<a href="https://github.com/geany">Github</a>,
<a href="http://sourceforge.net/projects/geany/">SourceForge</a>, and
<a href="#">Google+</a>.</p>
- <p><a class="btn" href="{% url "page" "community/contribute" %}">Get Involved »</a></p>
- <p><a class="btn" href="{% url "page" "about/donate" %}">Donate »</a></p>
+ <p><a class="btn btn-default" href="{% url "page" "community/contribute" %}">Get Involved »</a></p>
+ <p><a class="btn btn-default" href="{% url "page" "about/donate" %}">Donate »</a></p>
</div>
- <div class="span4">
+ <div class="col-md-4">
<h2>RTFM</h2>
<p>Geany not only has an extensive <a href="{% url "page" "documentation/manual" %}">User Manual</a>
but also has a crowd-sourced <a href="http://wiki.geany.org/">Wiki</a> and full
@@ -97,7 +96,7 @@
<p>Hit us up on <a href="{% url "page" "community/mailing-lists" %}">The Mailing Lists</a> or
<a href="{% url "page" "community/irc" %}">IRC</a>
and we'll get you on track.</p>
- <p><a class="btn" href="{% url "page" "documentation/manual" %}">To The Docs! »</a></p>
+ <p><a class="btn btn-default" href="{% url "page" "documentation/manual" %}">To The Docs! »</a></p>
</div>
</div>
Modified: geany/templates/pages/menus/dropdown.html
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -3,7 +3,7 @@
{% if page_branch_in_menu %}
{% if branch_level == 0 %}
-<ul class="nav">
+<ul class="nav navbar-nav">
{% for page in page_branch %}
{% if page.in_menu %}
<li class="dropdown{% if page.is_current_or_ascendant %} active{% endif %}">
Modified: geany/templates/pages/support/irc.html
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -12,7 +12,7 @@
<div class="row">
{% for username in irc_userlist %}
- <div class="span2">{{ username }}</div>
+ <div class="col-md-2">{{ username }}</div>
{% if forloop.counter|divisibleby:4 %}
</div>
Modified: geany/templates/skel.html
3 lines changed, 1 insertions(+), 2 deletions(-)
===================================================================
@@ -9,7 +9,7 @@
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<meta name="generator" content="Geany / Django / Mezzanine">
-<meta name="viewport" content="width=device-width">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="keywords" content="{% block meta_keywords %}{% endblock %}">
<meta name="description" content="{% block meta_description %}{% endblock %}">
<meta name="author" content="Geany development team"/>
@@ -24,7 +24,6 @@
padding-bottom: 40px;
}
</style>
-<link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap-responsive.css">
<link rel="stylesheet" href="{{ STATIC_URL }}css/main.css">
{% block extra_css %}{% endblock %}
{% endcompress %}
Modified: geany/templates/twitter/tweets.html
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -5,7 +5,7 @@
{% if tweets %}
<h3>{% trans "Recent Tweets" %}</h3>
-<ul class="unstyled tweets">
+<ul class="list-unstyled tweets">
{% for tweet in tweets %}
<li>
<img src="{{ tweet.profile_image_url }}" alt="">
Modified: geany/templatetags/geany_tags.py
11 lines changed, 11 insertions(+), 0 deletions(-)
===================================================================
@@ -70,3 +70,14 @@ def get_irc_userlist():
# remove newline characters
user_list = [username.strip() for username in user_list]
return sorted(user_list)
+
+
+#----------------------------------------------------------------------
+ at register.filter(name='add_css')
+def add_css(field, css):
+ # read existing CSS classes
+ css_classes = field.field.widget.attrs.get('class', u'')
+ # add new ones
+ css_classes = u'%s %s' % (css_classes, css)
+ # render the widget
+ return field.as_widget(attrs={'class': css_classes})
Modified: geany/urls.py
17 lines changed, 13 insertions(+), 4 deletions(-)
===================================================================
@@ -13,11 +13,11 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from django.conf.urls import patterns, include, url
+from django.conf.urls.i18n import i18n_patterns
from django.contrib import admin
from django.views.generic.base import TemplateView
-
-from mezzanine.conf import settings
from geany.sitemaps import GeanyDisplayableSitemap
+from mezzanine.conf import settings
from nightlybuilds.views import NightlyBuildsView
@@ -26,10 +26,19 @@
admin.autodiscover()
+urlpatterns = i18n_patterns("",
+ # Change the admin prefix here to use an alternate URL for the
+ # admin interface, which would be marginally more secure.
+ ("^admin/", include(admin.site.urls)),
+)
-urlpatterns = patterns("",
- url(r"^admin/", include(admin.site.urls)),
+if settings.USE_MODELTRANSLATION:
+ urlpatterns += patterns('',
+ url('^i18n/$', 'django.views.i18n.set_language', name='set_language'),
+ )
+# Geany patterns
+urlpatterns += patterns("",
# use our custom sitemap implementation
url(r"^sitemap\.xml$", 'django.contrib.sitemaps.views.sitemap', sitemaps),
Modified: geany/wsgi.py
18 lines changed, 18 insertions(+), 0 deletions(-)
===================================================================
@@ -0,0 +1,18 @@
+"""
+WSGI config for mez4proj project.
+
+It exposes the WSGI callable as a module-level variable named ``application``.
+
+For more information on this file, see
+https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/
+"""
+
+import os
+
+from django.core.wsgi import get_wsgi_application
+from mezzanine.utils.conf import real_project_name
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE",
+ "%s.settings" % real_project_name("geany"))
+
+application = get_wsgi_application()
Modified: manage.py
22 lines changed, 7 insertions(+), 15 deletions(-)
===================================================================
@@ -1,21 +1,13 @@
#!/usr/bin/env python
-# LICENCE: This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-import os, sys
+import os
+import sys
if __name__ == "__main__":
- os.environ.setdefault("DJANGO_SETTINGS_MODULE", "geany.settings")
+
+ from mezzanine.utils.conf import real_project_name
+
+ settings_module = "%s.settings" % real_project_name("geany")
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", settings_module)
from django.core.management import execute_from_command_line
Modified: nightlybuilds/templates/nightlybuilds.html
20 lines changed, 8 insertions(+), 12 deletions(-)
===================================================================
@@ -14,22 +14,18 @@
{% else %}
{# empty menu for nightly.geany.org #}
<div class="navbar navbar-inverse navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container">
- <img src="{{ STATIC_URL }}img/geany-36x36.png" class="brand">
- <a class="brand" href="http://www.geany.org/">Geany</a>
+ <div class="container">
+ <img src="{{ STATIC_URL }}img/geany-36x36.png" class="navbar-brand">
+ <a class="navbar-brand" href="http://www.geany.org/">Geany</a>
- <ul class="nav">
- <li><a href="/">Refresh</a></li>
- </ul>
- </div>
+ <ul class="nav navbar-nav">
+ <li><a href="/">Refresh</a></li>
+ </ul>
</div>
</div>
{% endif %}
{% endblock %}
-{% block top_search %}{% endblock %}
-
{% block main %}
<div class="well">
@@ -41,7 +37,7 @@
against GTK 2.16 to check for compatibility. The results, build logs and the corresponding
binary packages can be found below.</p>
-<table class="table table-striped table-bordered nightlybuilds">
+<table class="table table-bordered nightlybuilds">
<thead>
<tr>
<th></th>
@@ -58,7 +54,7 @@
</thead>
<tbody>
{% for build in nightlybuilds %}
- <tr class="{% if build.get_status %}success{% else %}error{% endif %}">
+ <tr class="{% if build.get_status %}success{% else %}danger{% endif %}">
<td class="centered_column">{% if build.get_status %}
<img src="{{ STATIC_URL }}img/icon-yes.gif" alt="{{ build.get_status_text }}" title="{{ build.get_status_text }}" />
{% else %}
Modified: pastebin/highlight.py
13 lines changed, 10 insertions(+), 3 deletions(-)
===================================================================
@@ -24,23 +24,30 @@
LEXER_LIST_ALL = sorted([(i[1][0], i[0]) for i in get_all_lexers()])
LEXER_LIST = (
+ ('nasm', 'Assembler'),
('bash', 'Bash'),
('c', 'C'),
+ ('cpp', 'C++'),
('css', 'CSS'),
('diff', 'Diff'),
('django', 'Django/Jinja'),
+ ('po', 'Gettext/Po'),
('html', 'HTML'),
+ ('ini', 'INI config file'),
('irc', 'IRC logs'),
+ ('java', 'Java'),
('js', 'JavaScript'),
+ ('json', 'JSON'),
+ ('lua', 'Lua'),
('perl', 'Perl'),
('php', 'PHP'),
- ('pycon', 'Python console session'),
- ('pytb', 'Python Traceback'),
('python', 'Python'),
- ('python3', 'Python 3'),
('rst', 'Restructured Text'),
+ ('ruby', 'Ruby'),
('sql', 'SQL'),
('text', 'Text only'),
+ ('vala', 'Vala'),
+ ('xml', 'XML'),
)
LEXER_DEFAULT = 'text'
Modified: pastebin/static/css/pastebin.css
97 lines changed, 34 insertions(+), 63 deletions(-)
===================================================================
@@ -1,6 +1,12 @@
+.badge {
+ font-weight: 200;
+}
+
+
/*
* Tabs
*/
+
.nav-tabs > li > a {
/* inactive tab */
background-color: rgb(220, 220, 220);
@@ -14,78 +20,44 @@
*/
-.new-snippet-form textarea {
- font-family: monospace;
- width: 100%;
+/*
+ * Snippet form
+ */
+form.new-snippet-form {
+ margin-bottom: 30px;
}
-.new-snippet-form .label {
- margin-top: 7px;
- margin-bottom: 7px;
- display: block;
+.new-snippet-form label {
+ font-weight: 200;
}
-.new-snippet-form .control-group ul {
+.new-snippet-form ul#id_expire_options {
margin-left: 5px;
margin-bottom: 0px;
-}
-
-.new-snippet-form .control-group ul li {
- list-style: none;
-}
-
-.new-snippet-form .control-group ul li label {
width: auto;
- padding-right: 15px;
}
-.new-snippet-form .control-group ul li input[type="radio"],
-.new-snippet-form .control-group ul li input[type="checkbox"] {
- margin: 0px;
-}
-
-.new-snippet-form select, input[type="file"] {
- height: inherit;
+.new-snippet-form ul#id_expire_options li {
+ list-style: none;
}
-.new-snippet-form input, .uneditable-input {
- width: 300px;
+.new-snippet-form ul#id_expire_options li input{
+ display: inline;
}
-input[type="file"],
-input[type="image"],
-input[type="submit"],
-input[type="reset"],
-input[type="button"],
-input[type="radio"],
-input[type="checkbox"] {
+.new-snippet-form ul#id_expire_options li label {
+ float: left;
+ margin-right: 10px;
+ padding-right: 15px;
width: auto;
}
-.form-horizontal .control-label {
- padding-top: 1px;
-}
-
-select,
-textarea,
-input[type="text"],
-input[type="password"],
-input[type="datetime"],
-input[type="datetime-local"],
-input[type="date"],
-input[type="month"],
-input[type="time"],
-input[type="week"],
-input[type="number"],
-input[type="email"],
-input[type="url"],
-input[type="search"],
-input[type="tel"],
-input[type="color"],
-.uneditable-input {
- padding-top: 1px;
- padding-bottom: 1px;
+.new-snippet-form ul#id_expire_options li input[type="radio"] {
+ margin: 0px;
}
+/*
+ * Snippet form
+ */
/*
@@ -111,7 +83,7 @@ div.snippet table {
font-family: monospace;
font-size: 12px;
height: 300px;
- width: 90%;
+ width: 100%;
}
/*
* Snippet
@@ -121,7 +93,6 @@ div.snippet table {
/*
* Embedded snippet list
*/
-
div #snippet_list {
margin-top: 25px;
}
@@ -136,16 +107,12 @@ div #snippet_list li {
list-style: none;
white-space: nowrap;
padding: 3px;
-}
-
-div #snippet_list span.badge {
- padding-top: 5px;
- padding-bottom: 5px;
+ width: 31%;
}
div #snippet_list a {
- color: #ffffff;
text-decoration: none;
+ width: 100%;
}
/*
* Embedded snippet list
@@ -155,6 +122,10 @@ div #snippet_list a {
/*
* Code
*/
+div.snippet {
+ margin-left: 25px;
+}
+
div.snippet ol {
padding: 1px;
border: 1px solid rgb(220, 220, 220);
Modified: pastebin/templates/pastebin/api.html
4 lines changed, 2 insertions(+), 2 deletions(-)
===================================================================
@@ -8,7 +8,7 @@
{% block main %}
<div class="well">
-<h2>API</h2>
+<h1>API</h1>
<p>The following Python code can be used as a simple command line client for this
Pastebin service:</p>
@@ -38,7 +38,7 @@
<p>Save this script in <code>/usr/local/bin/gpaste</code> and <code>chmod +x /usr/local/bin/gpaste/</code>.</p>
<p>Usage: <code>cat foo.txt | gpaste</code></p>
-<h3>Supported fields</h3>
+<h2>Supported fields</h2>
<p>The only mandatory field is <strong>content</strong> which should contain the text to be pasted.</p>
<p>Other accepted, optional fields are:
<table class="table table-striped table-bordered">
Modified: pastebin/templates/pastebin/base.html
36 lines changed, 17 insertions(+), 19 deletions(-)
===================================================================
@@ -14,26 +14,24 @@
{% url 'snippet_list' as url_snippet_list %}
<div class="navbar navbar-inverse navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container">
- <img src="{{ STATIC_URL }}img/geany-36x36.png" class="brand">
- <a class="brand" href="http://www.geany.org/">Geany</a>
+ <div class="container">
+ <img src="{{ STATIC_URL }}img/geany-36x36.png" class="navbar-brand">
+ <a class="navbar-brand" href="http://www.geany.org/">Geany</a>
- <ul class="nav">
- <li class="{% if request.path = url_home %} active{% endif %}">
- <a href="{{ url_home }}">New snippet</a>
- </li>
- <li class="{% if request.path = url_help %} active{% endif %}">
- <a href="{{ url_help }}">Help</a>
- </li>
- <li class="{% if request.path = url_api %} active{% endif %}">
- <a href="{{ url_api }}">API</a>
- </li>
- <li class="{% if request.path = url_snippet_list %} active{% endif %}">
- <a href="{{ url_snippet_list }}">Recent snippets</a>
- </li>
- </ul>
- </div>
+ <ul class="nav navbar-nav">
+ <li class="{% if request.path = url_home %} active{% endif %}">
+ <a href="{{ url_home }}">New snippet</a>
+ </li>
+ <li class="{% if request.path = url_help %} active{% endif %}">
+ <a href="{{ url_help }}">Help</a>
+ </li>
+ <li class="{% if request.path = url_api %} active{% endif %}">
+ <a href="{{ url_api }}">API</a>
+ </li>
+ <li class="{% if request.path = url_snippet_list %} active{% endif %}">
+ <a href="{{ url_snippet_list }}">Recent snippets</a>
+ </li>
+ </ul>
</div>
</div>
Modified: pastebin/templates/pastebin/help.html
5 lines changed, 3 insertions(+), 2 deletions(-)
===================================================================
@@ -6,8 +6,9 @@
{% block main %}
<div class="well">
+<h1>Frequently Asked Questions</h1>
-<h3>What is pastebin?</h3>
+<h2>What is pastebin?</h2>
<p>This pastebin is here to help you collaborate on debugging code snippets. If you're not familiar with the idea,
most people use it like this:</p>
<ul>
@@ -17,7 +18,7 @@
<li>someone responds by reading and perhaps submitting a modification of your code</li>
</ul>
-<h3>How can I delete a post?</h3>
+<h2>How can I delete a post?</h2>
<p>Your posted snippets are remembered in your session, you will be able to delete the snippet from the same browser you posted from -
simply view the post and click the "delete" link.</p>
<p>In other cases, contact us and we will delete it for you.</p>
Modified: pastebin/templates/pastebin/snippet_details.html
4 lines changed, 2 insertions(+), 2 deletions(-)
===================================================================
@@ -9,9 +9,9 @@
{% block main %}
<div class="well">
-<h2>
+<h1>
Snippet #{{ snippet.pk }}
-</h2>
+</h1>
<div class="snippet-options">
<abbr title="Time to life">TTL:</abbr> {{ snippet.expires|timeuntil_or_forever }}
Modified: pastebin/templates/pastebin/snippet_form.html
41 lines changed, 26 insertions(+), 15 deletions(-)
===================================================================
@@ -1,34 +1,45 @@
-{% load honeypot %}
+{% load geany_tags honeypot i18n mezzanine_tags %}
+{% load %}
-<form method="post" action="{% url 'home' %}" class="form-horizontal new-snippet-form">
-{% if snippet_form.non_field_errors %}
- <div class="alert alert-block alert-error">
+
+{% if snippet_form.non_field_errors or snippet_form.errors %}
+<div class="form-errors">
{% for error in snippet_form.non_field_errors %}
- <p>{{ error }}</p>
- {% endfor %}
- </div>
+ <div class="alert alert-danger non-field-error">{{ error }}</div>
+ {% empty %}
+ <div class="alert alert-danger field-error">{% trans "Please correct the errors below." %}</div>
+ {% endfor %}
+</div>
{% endif %}
+<form method="post" action="{% url 'home' %}" class="form-horizontal new-snippet-form" role="form">
+{% nevercache %}
{% csrf_token %}
+{% endnevercache %}
{% render_honeypot_field %}
{% for field in snippet_form %}
<div>
- <div class="control-group">
- {{ field.label_tag }}
- <div class="controls">
+ <div class="form-group input_{{ field.id_for_label }} {{ field.field.type }}
+ {% if field.errors %} has-error{% endif %}">
+ <label class="control-label col-sm-2" for="{{ field.auto_id }}">{{ field.label }}</label>
+ <div class="col-sm-10">
+ {{ field|add_css:"form-control input-sm" }}
{% if field.errors %}
- {% for error in field.errors %}
- <span class="label label-warning help-block">{{ error }}</span>
+ <p class="help-block">
+ {% for e in field.errors %}
+ {% if not forloop.first %} / {% endif %}{{ e }}
{% endfor %}
+ </p>
{% endif %}
- {{ field }}
</div>
</div>
</div>
{% endfor %}
-<div class="control-group">
+<div class="form-group">
<div class="controls">
- <input type="submit" value="Paste it" class="btn btn-primary"/>
+ <div class="col-sm-offset-2 col-sm-10">
+ <button type="submit" class="btn btn-primary">{% trans "Paste it" %}</button>
+ </div>
</div>
</div>
</form>
Modified: pastebin/templates/pastebin/snippet_list.html
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -7,7 +7,7 @@
{% block main %}
<div class="well">
- <h2>Latest {{ snippets_max }} snippets</h2>
+ <h1>Latest {{ snippets_max }} snippets</h1>
{% if snippet_list %}
{% for snippet in snippet_list %}
Modified: pastebin/templates/pastebin/snippet_list_embedded.html
15 lines changed, 14 insertions(+), 1 deletions(-)
===================================================================
@@ -1,9 +1,22 @@
+{% load i18n %}
+
+<h2>{% trans "Recent Snippets" %}</h2>
{% if snippet_list %}
<div id="snippet_list">
<ul>
{% for snippet in snippet_list %}
- <li><span class="badge"><a href="{{ snippet.get_absolute_url }}">#{{ snippet.pk }} by {% if snippet.author %}{{ snippet.author }}{% else %}Anonymous{% endif %} ({{ snippet.age }})</a></span></li>
+ <li>
+ <span >
+ <a href="{{ snippet.get_absolute_url }}" class="btn btn-default btn-xs active" role="button">
+ #{{ snippet.pk }} by {% if snippet.author %}{{ snippet.author }}{% else %}Anonymous{% endif %} ({{ snippet.age }})
+ </a>
+ </span>
+ </li>
+ {% if forloop.counter|divisibleby:3 %}
+ </ul>
+ <ul>
+ {% endif %}
{% endfor %}
</ul>
</div>
Modified: pastebin/templates/pastebin/snippet_new.html
9 lines changed, 8 insertions(+), 1 deletions(-)
===================================================================
@@ -1,5 +1,12 @@
{% extends "pastebin/base.html" %}
+{% block extra_js %}
+{{ block.super }}
+<script>
+$(function() {$('.mezzanine-form :input:visible:enabled:first').focus();});
+</script>
+{% endblock %}
+
{% block meta_title %}
New snippet | {{ block.super }}
@@ -8,7 +15,7 @@
{% block main %}
<div class="well">
- <h2>Paste a new snippet</h2>
+ <h1>Paste a new snippet</h1>
{% include "pastebin/snippet_form.html" %}
{% include "pastebin/snippet_list_embedded.html" %}
Modified: requirements.txt
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -1,6 +1,5 @@
Mezzanine
MySQL-python
-South
django-compressor
django-extensions
django-honeypot
@@ -12,5 +11,6 @@ pylibmc
pytz
setproctitle
+
# for development
django-debug-toolbar
Modified: static_docs/templates/pages/documentation/releasenotes.html
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -13,7 +13,7 @@
<h3>Older Releases</h3>
<div class="row">
{% for release in releases %}
- <div class="span2">
+ <div class="col-md-2">
<a href="{% url 'releasenotes_for_release' release.version %}">Geany {{ release.version }}</a>
</div>
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Commits
mailing list