From 81906f987c471be4f06bf589e6c6d3784c268378 Mon Sep 17 00:00:00 2001 From: Maksym Yatsenko Date: Mon, 23 Mar 2015 12:55:06 +0200 Subject: [PATCH] Remove obsolete patches from horizon specs Closes-Bug:#1435289 Change-Id: Ia9a5bffbb8b2c672cad2a0a52e2fbe061b503d0c --- ...t-access-the-net-while-building-docs.patch | 22 - .../0002-disable-debug-move-web-root.patch | 61 - ...location-to-tmp-and-also-add-localho.patch | 32 - ...a-customization-module-based-on-RHOS.patch | 260 - ...sphinx-and-remove-local-copy-of-doc-.patch | 1348 -- ...-files-and-checks-to-etc-openstack-d.patch | 25 - ...-files-and-checks-to-etc-openstack-d.patch | 32 - ...e-SECRET_KEY-secret_key_store-to-tmp.patch | 29 - .../0007-RCUE-navbar-and-login-screen.patch | 19323 ---------------- ...e-SECRET_KEY-secret_key_store-to-tmp.patch | 29 - rpm/SOURCES/0008-fix-flake8-issues.patch | 31 - ...008-fix-up-issues-with-customization.patch | 81 - ...runcate-the-logo-related-rhbz-877138.patch | 26 - ...009-remove-runtime-dep-to-python-pbr.patch | 33 - ...ange-password-link-to-the-RCUE-theme.patch | 26 - ...STORE-to-var-lib-openstack-dashboard.patch | 22 - rpm/SOURCES/0011-.less-replaced-in-rcue.patch | 26 - rpm/SOURCES/mos-disable-metering.patch | 13 - .../mos-fix-murano-savana-dashboard.patch | 22 - rpm/SPECS/python-django-horizon.spec | 20 - .../patches/add_juju_settings_panel.patch | 309 - trusty/debian/patches/fix-ubuntu-tests.patch | 40 - trusty/debian/patches/series | 4 - 23 files changed, 21814 deletions(-) delete mode 100644 rpm/SOURCES/0001-Don-t-access-the-net-while-building-docs.patch delete mode 100644 rpm/SOURCES/0002-disable-debug-move-web-root.patch delete mode 100644 rpm/SOURCES/0003-change-lockfile-location-to-tmp-and-also-add-localho.patch delete mode 100644 rpm/SOURCES/0004-Add-a-customization-module-based-on-RHOS.patch delete mode 100644 rpm/SOURCES/0005-Revert-Use-oslo.sphinx-and-remove-local-copy-of-doc-.patch delete mode 100644 rpm/SOURCES/0005-move-RBAC-policy-files-and-checks-to-etc-openstack-d.patch delete mode 100644 rpm/SOURCES/0006-move-RBAC-policy-files-and-checks-to-etc-openstack-d.patch delete mode 100644 rpm/SOURCES/0006-move-SECRET_KEY-secret_key_store-to-tmp.patch delete mode 100644 rpm/SOURCES/0007-RCUE-navbar-and-login-screen.patch delete mode 100644 rpm/SOURCES/0007-move-SECRET_KEY-secret_key_store-to-tmp.patch delete mode 100644 rpm/SOURCES/0008-fix-flake8-issues.patch delete mode 100644 rpm/SOURCES/0008-fix-up-issues-with-customization.patch delete mode 100644 rpm/SOURCES/0009-do-not-truncate-the-logo-related-rhbz-877138.patch delete mode 100644 rpm/SOURCES/0009-remove-runtime-dep-to-python-pbr.patch delete mode 100644 rpm/SOURCES/0010-Add-Change-password-link-to-the-RCUE-theme.patch delete mode 100644 rpm/SOURCES/0010-move-SECRET_KEYSTORE-to-var-lib-openstack-dashboard.patch delete mode 100644 rpm/SOURCES/0011-.less-replaced-in-rcue.patch delete mode 100644 rpm/SOURCES/mos-disable-metering.patch delete mode 100644 rpm/SOURCES/mos-fix-murano-savana-dashboard.patch delete mode 100644 trusty/debian/patches/add_juju_settings_panel.patch delete mode 100644 trusty/debian/patches/fix-ubuntu-tests.patch diff --git a/rpm/SOURCES/0001-Don-t-access-the-net-while-building-docs.patch b/rpm/SOURCES/0001-Don-t-access-the-net-while-building-docs.patch deleted file mode 100644 index 2d116d7..0000000 --- a/rpm/SOURCES/0001-Don-t-access-the-net-while-building-docs.patch +++ /dev/null @@ -1,22 +0,0 @@ -From 57e90a3ffea6ec7442b7b45c41f6d3c558a497da Mon Sep 17 00:00:00 2001 -From: Matthias Runge -Date: Fri, 5 Apr 2013 10:16:19 +0200 -Subject: [PATCH] Don't access the net while building docs (Note this hasn't - been submitted upstream) - ---- - doc/source/conf.py | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/doc/source/conf.py b/doc/source/conf.py -index 2961a7d..b1f7592 100644 ---- a/doc/source/conf.py -+++ b/doc/source/conf.py -@@ -153,7 +153,6 @@ write_autodoc_index() - # They can be extensions coming with Sphinx (named 'sphinx.ext.*') - # or your custom ones. - extensions = ['sphinx.ext.autodoc', -- 'sphinx.ext.intersphinx', - 'sphinx.ext.todo', - 'sphinx.ext.coverage', - 'sphinx.ext.pngmath', diff --git a/rpm/SOURCES/0002-disable-debug-move-web-root.patch b/rpm/SOURCES/0002-disable-debug-move-web-root.patch deleted file mode 100644 index f651699..0000000 --- a/rpm/SOURCES/0002-disable-debug-move-web-root.patch +++ /dev/null @@ -1,61 +0,0 @@ -From c56e21932ce33a1e709ea6b4cfa730f44edc3341 Mon Sep 17 00:00:00 2001 -From: Matthias Runge -Date: Fri, 5 Apr 2013 10:07:53 +0200 -Subject: [PATCH] disable debug, move web root - ---- - openstack_dashboard/local/local_settings.py.example | 2 +- - openstack_dashboard/settings.py | 10 ++++++---- - 2 files changed, 7 insertions(+), 5 deletions(-) - -diff --git a/openstack_dashboard/local/local_settings.py.example b/openstack_dashboard/local/local_settings.py.example -index 5a4efc6..0c72ccb 100644 ---- a/openstack_dashboard/local/local_settings.py.example -+++ b/openstack_dashboard/local/local_settings.py.example -@@ -4,7 +4,7 @@ from django.utils.translation import ugettext_lazy as _ - - from openstack_dashboard import exceptions - --DEBUG = True -+DEBUG = False - TEMPLATE_DEBUG = DEBUG - - # Required for Django 1.5. -diff --git a/openstack_dashboard/settings.py b/openstack_dashboard/settings.py -index cba10ab..aaf1c99 100644 ---- a/openstack_dashboard/settings.py -+++ b/openstack_dashboard/settings.py -@@ -31,7 +31,7 @@ warnings.formatwarning = lambda message, category, *args, **kwargs: \ - '%s: %s' % (category.__name__, message) - - ROOT_PATH = os.path.dirname(os.path.abspath(__file__)) --BIN_DIR = os.path.abspath(os.path.join(ROOT_PATH, '..', 'bin')) -+BIN_DIR = '/usr/bin' - - if ROOT_PATH not in sys.path: - sys.path.append(ROOT_PATH) -@@ -41,12 +41,13 @@ TEMPLATE_DEBUG = DEBUG - - SITE_BRANDING = 'OpenStack Dashboard' - --LOGIN_URL = '/auth/login/' --LOGOUT_URL = '/auth/logout/' -+WEBROOT = '/dashboard' -+LOGIN_URL = WEBROOT + '/auth/login/' -+LOGOUT_URL = WEBROOT + '/auth/logout/' - # LOGIN_REDIRECT_URL can be used as an alternative for - # HORIZON_CONFIG.user_home, if user_home is not set. - # Do not set it to '/home/', as this will cause circular redirect loop --LOGIN_REDIRECT_URL = '/' -+LOGIN_REDIRECT_URL = WEBROOT - - MEDIA_ROOT = os.path.abspath(os.path.join(ROOT_PATH, '..', 'media')) - MEDIA_URL = '/media/' -@@ -152,6 +153,7 @@ COMPRESS_ENABLED = True - COMPRESS_OUTPUT_DIR = 'dashboard' - COMPRESS_CSS_HASHING_METHOD = 'hash' - COMPRESS_PARSER = 'compressor.parser.HtmlParser' -+COMPRESS_OFFLINE = True - - INSTALLED_APPS = [ - 'openstack_dashboard', diff --git a/rpm/SOURCES/0003-change-lockfile-location-to-tmp-and-also-add-localho.patch b/rpm/SOURCES/0003-change-lockfile-location-to-tmp-and-also-add-localho.patch deleted file mode 100644 index 23be235..0000000 --- a/rpm/SOURCES/0003-change-lockfile-location-to-tmp-and-also-add-localho.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 657f4db5038d361e998219b1569fede4a0634cd6 Mon Sep 17 00:00:00 2001 -From: Matthias Runge -Date: Thu, 25 Jul 2013 11:32:38 +0200 -Subject: [PATCH] change lockfile location to '/tmp' and also add localhost to - ALLOWED_HOSTS - ---- - openstack_dashboard/local/local_settings.py.example | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/openstack_dashboard/local/local_settings.py.example b/openstack_dashboard/local/local_settings.py.example -index 0c72ccb..84a6ac2 100644 ---- a/openstack_dashboard/local/local_settings.py.example -+++ b/openstack_dashboard/local/local_settings.py.example -@@ -12,7 +12,7 @@ TEMPLATE_DEBUG = DEBUG - # with the list of host/domain names that the application can serve. - # For more information see: - # https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts --#ALLOWED_HOSTS = ['horizon.example.com', ] -+ALLOWED_HOSTS = ['horizon.example.com', 'localhost'] - - # Set SSL proxy settings: - # For Django 1.4+ pass this header from the proxy after terminating the SSL, -@@ -82,7 +82,7 @@ HORIZON_CONFIG = { - # the database creation workflow if so desired. - # HORIZON_CONFIG["password_autocomplete"] = "off" - --LOCAL_PATH = os.path.dirname(os.path.abspath(__file__)) -+LOCAL_PATH = '/tmp' - - # Set custom secret key: - # You can either set it to a specific value or you can let horizion generate a diff --git a/rpm/SOURCES/0004-Add-a-customization-module-based-on-RHOS.patch b/rpm/SOURCES/0004-Add-a-customization-module-based-on-RHOS.patch deleted file mode 100644 index 795924a..0000000 --- a/rpm/SOURCES/0004-Add-a-customization-module-based-on-RHOS.patch +++ /dev/null @@ -1,260 +0,0 @@ -From 39f91eda4f68019c506c0b364a54acc71e9a2b54 Mon Sep 17 00:00:00 2001 -From: Matthias Runge -Date: Thu, 14 Feb 2013 12:55:54 +0100 -Subject: [PATCH] Add a customization module based on RHOS - -Change-Id: I8622ffc8e31cf553315077070b2a696de1bd5081 - -Conflicts: - openstack_dashboard/settings.py ---- - openstack_dashboard/settings.py | 12 ++++- - openstack_dashboard_theme/__init__.py | 0 - openstack_dashboard_theme/models.py | 0 - .../static/dashboard/less/rhtheme.less | 55 ++++++++++++++++++++++ - .../templates/_stylesheets.html | 7 +++ - .../templates/auth/_login.html | 29 ++++++++++++ - .../templates/auth/login.html | 10 ++++ - .../templates/horizon/common/_sidebar.html | 35 ++++++++++++++ - openstack_dashboard_theme/templates/splash.html | 17 +++++++ - 9 files changed, 163 insertions(+), 2 deletions(-) - create mode 100644 openstack_dashboard_theme/__init__.py - create mode 100644 openstack_dashboard_theme/models.py - create mode 100644 openstack_dashboard_theme/static/dashboard/less/rhtheme.less - create mode 100644 openstack_dashboard_theme/templates/_stylesheets.html - create mode 100644 openstack_dashboard_theme/templates/auth/_login.html - create mode 100644 openstack_dashboard_theme/templates/auth/login.html - create mode 100644 openstack_dashboard_theme/templates/horizon/common/_sidebar.html - create mode 100644 openstack_dashboard_theme/templates/splash.html - -diff --git a/openstack_dashboard/settings.py b/openstack_dashboard/settings.py -index aaf1c99..e99a9af 100644 ---- a/openstack_dashboard/settings.py -+++ b/openstack_dashboard/settings.py -@@ -121,14 +121,13 @@ TEMPLATE_CONTEXT_PROCESSORS = ( - ) - - TEMPLATE_LOADERS = ( -- 'django.template.loaders.filesystem.Loader', - 'django.template.loaders.app_directories.Loader', - 'horizon.loaders.TemplateLoader' - ) - - TEMPLATE_DIRS = ( - os.path.join(ROOT_PATH, 'templates'), --) -+) - - STATICFILES_FINDERS = ( - 'compressor.finders.CompressorFinder', -@@ -169,6 +168,15 @@ INSTALLED_APPS = [ - 'openstack_auth', - ] - -+THEME_APP = 'openstack_dashboard_theme' -+ -+try: -+ __import__(THEME_APP) -+ INSTALLED_APPS = (THEME_APP,) + INSTALLED_APPS -+except: -+ pass -+ -+ - TEST_RUNNER = 'django_nose.NoseTestSuiteRunner' - AUTHENTICATION_BACKENDS = ('openstack_auth.backend.KeystoneBackend',) - MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage' -diff --git a/openstack_dashboard_theme/__init__.py b/openstack_dashboard_theme/__init__.py -new file mode 100644 -index 0000000..e69de29 -diff --git a/openstack_dashboard_theme/models.py b/openstack_dashboard_theme/models.py -new file mode 100644 -index 0000000..e69de29 -diff --git a/openstack_dashboard_theme/static/dashboard/less/rhtheme.less b/openstack_dashboard_theme/static/dashboard/less/rhtheme.less -new file mode 100644 -index 0000000..5350db3 ---- /dev/null -+++ b/openstack_dashboard_theme/static/dashboard/less/rhtheme.less -@@ -0,0 +1,55 @@ -+@import "/static/dashboard/less/horizon.less"; -+ -+/* Login Splash Page */ -+ -+#splash .rhlogin { -+ background: #fff url(/static/dashboard/img/rh-logo.png) no-repeat center 35px; -+ position: absolute; -+ top: 80px; -+ left: 50%; -+ margin: 0 0 0 -195px; -+ padding-top: 170px; -+ width: 390px; -+ border: 1px solid #e1e1e1; -+ max-height: none; -+ -webkit-border-radius: 6px; -+ -moz-border-radius: 6px; -+ border-radius: 6px; -+ -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); -+ -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); -+ box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); -+ -webkit-background-clip: padding-box; -+ -moz-background-clip: padding-box; -+ background-clip: padding-box; -+ -+ form { -+ .error { -+ width: 100%; -+ } -+ input { -+ width: 350px; -+ } -+ select { -+ width: 360px; -+ } -+ } -+} -+ -+h1.rhos { -+ width: 100%; -+ margin: 0; -+ background-color: #f5f5f5; -+ padding-bottom: 40px; -+} -+ -+h1.rhos a { -+ background: url(/static/dashboard/img/rh-logo.png) top left no-repeat; -+ display: block; -+ float: left; -+ width: 116px; -+ height: 123px; -+ text-indent: -9999px; -+ margin-left: 56px; -+ margin-top: 15px; -+ margin-bottom: 25px; -+} -diff --git a/openstack_dashboard_theme/templates/_stylesheets.html b/openstack_dashboard_theme/templates/_stylesheets.html -new file mode 100644 -index 0000000..88463e1 ---- /dev/null -+++ b/openstack_dashboard_theme/templates/_stylesheets.html -@@ -0,0 +1,7 @@ -+{% load compress %} -+ -+{% compress css %} -+ -+{% endcompress %} -+ -+ -diff --git a/openstack_dashboard_theme/templates/auth/_login.html b/openstack_dashboard_theme/templates/auth/_login.html -new file mode 100644 -index 0000000..1cb6036 ---- /dev/null -+++ b/openstack_dashboard_theme/templates/auth/_login.html -@@ -0,0 +1,29 @@ -+{% extends "horizon/common/_modal_form.html" %} -+{% load i18n %} -+{% load url from future %} -+ -+{% block modal-header %}{% trans "Log In" %}{% endblock %} -+{% block modal_class %}rhlogin{% if hide %}modal hide{% endif %}{% endblock %} -+ -+{% block form_action %}{% url 'login' %}{% endblock %} -+{% block autocomplete %}{{ HORIZON_CONFIG.password_autocomplete }}{% endblock %} -+ -+{% block modal-body %} -+
-+ {% if request.user.is_authenticated and 'next' in request.GET %} -+
-+

{% trans "You don't have permissions to access:" %}

-+

{{ request.GET.next }}

-+

{% trans "Login as different user or go back to" %} -+ {% trans "home page" %}

-+
-+
-+ {% endif %} -+ {% if next %}{% endif %} -+ {% include "horizon/common/_form_fields.html" %} -+
-+{% endblock %} -+ -+{% block modal-footer %} -+ -+{% endblock %} -diff --git a/openstack_dashboard_theme/templates/auth/login.html b/openstack_dashboard_theme/templates/auth/login.html -new file mode 100644 -index 0000000..6fa7746 ---- /dev/null -+++ b/openstack_dashboard_theme/templates/auth/login.html -@@ -0,0 +1,10 @@ -+{% extends "base.html" %} -+{% load i18n %} -+ -+{% block title %}{% trans "Login" %}{% endblock %} -+ -+{% block body_id %}splash{% endblock %} -+ -+{% block content %} -+ {% include 'auth/_login.html' %} -+{% endblock %} -diff --git a/openstack_dashboard_theme/templates/horizon/common/_sidebar.html b/openstack_dashboard_theme/templates/horizon/common/_sidebar.html -new file mode 100644 -index 0000000..5672846 ---- /dev/null -+++ b/openstack_dashboard_theme/templates/horizon/common/_sidebar.html -@@ -0,0 +1,35 @@ -+{% load branding horizon i18n %} -+ -+ -diff --git a/openstack_dashboard_theme/templates/splash.html b/openstack_dashboard_theme/templates/splash.html -new file mode 100644 -index 0000000..4a5cfe1 ---- /dev/null -+++ b/openstack_dashboard_theme/templates/splash.html -@@ -0,0 +1,17 @@ -+{% load i18n branding %} -+ -+ -+ -+ -+ -+ {% trans "Login" %} - {% site_branding %} -+ {% include "_stylesheets.html" %} -+ -+ -+
-+
-+ {% include 'auth/_login.html' %} -+
-+
-+ -+ diff --git a/rpm/SOURCES/0005-Revert-Use-oslo.sphinx-and-remove-local-copy-of-doc-.patch b/rpm/SOURCES/0005-Revert-Use-oslo.sphinx-and-remove-local-copy-of-doc-.patch deleted file mode 100644 index 94740bb..0000000 --- a/rpm/SOURCES/0005-Revert-Use-oslo.sphinx-and-remove-local-copy-of-doc-.patch +++ /dev/null @@ -1,1348 +0,0 @@ -From 9058dd457bf4ce116848c48cc9fdcd0319e77e84 Mon Sep 17 00:00:00 2001 -From: Matthias Runge -Date: Mon, 9 Sep 2013 13:51:19 +0200 -Subject: [PATCH] Revert "Use oslo.sphinx and remove local copy of doc theme" - -This reverts commit b6f7d8318bf909cc9989809127fc108e405fa400. ---- - doc/source/_static/.gitignore | 0 - doc/source/_static/basic.css | 416 +++++++++++++++++++++++++++++++++++++ - doc/source/_static/default.css | 230 ++++++++++++++++++++ - doc/source/_static/jquery.tweet.js | 154 ++++++++++++++ - doc/source/_static/nature.css | 245 ++++++++++++++++++++++ - doc/source/_static/tweaks.css | 95 +++++++++ - doc/source/_templates/.placeholder | 0 - doc/source/_theme/layout.html | 83 ++++++++ - doc/source/_theme/theme.conf | 4 + - doc/source/conf.py | 13 +- - test-requirements.txt | 1 - - 11 files changed, 1234 insertions(+), 7 deletions(-) - create mode 100644 doc/source/_static/.gitignore - create mode 100644 doc/source/_static/basic.css - create mode 100644 doc/source/_static/default.css - create mode 100644 doc/source/_static/jquery.tweet.js - create mode 100644 doc/source/_static/nature.css - create mode 100644 doc/source/_static/tweaks.css - create mode 100644 doc/source/_templates/.placeholder - create mode 100644 doc/source/_theme/layout.html - create mode 100644 doc/source/_theme/theme.conf - -diff --git a/doc/source/_static/.gitignore b/doc/source/_static/.gitignore -new file mode 100644 -index 0000000..e69de29 -diff --git a/doc/source/_static/basic.css b/doc/source/_static/basic.css -new file mode 100644 -index 0000000..d909ce3 ---- /dev/null -+++ b/doc/source/_static/basic.css -@@ -0,0 +1,416 @@ -+/** -+ * Sphinx stylesheet -- basic theme -+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+ */ -+ -+/* -- main layout ----------------------------------------------------------- */ -+ -+div.clearer { -+ clear: both; -+} -+ -+/* -- relbar ---------------------------------------------------------------- */ -+ -+div.related { -+ width: 100%; -+ font-size: 90%; -+} -+ -+div.related h3 { -+ display: none; -+} -+ -+div.related ul { -+ margin: 0; -+ padding: 0 0 0 10px; -+ list-style: none; -+} -+ -+div.related li { -+ display: inline; -+} -+ -+div.related li.right { -+ float: right; -+ margin-right: 5px; -+} -+ -+/* -- sidebar --------------------------------------------------------------- */ -+ -+div.sphinxsidebarwrapper { -+ padding: 10px 5px 0 10px; -+} -+ -+div.sphinxsidebar { -+ float: left; -+ width: 230px; -+ margin-left: -100%; -+ font-size: 90%; -+} -+ -+div.sphinxsidebar ul { -+ list-style: none; -+} -+ -+div.sphinxsidebar ul ul, -+div.sphinxsidebar ul.want-points { -+ margin-left: 20px; -+ list-style: square; -+} -+ -+div.sphinxsidebar ul ul { -+ margin-top: 0; -+ margin-bottom: 0; -+} -+ -+div.sphinxsidebar form { -+ margin-top: 10px; -+} -+ -+div.sphinxsidebar input { -+ border: 1px solid #98dbcc; -+ font-family: sans-serif; -+ font-size: 1em; -+} -+ -+img { -+ border: 0; -+} -+ -+/* -- search page ----------------------------------------------------------- */ -+ -+ul.search { -+ margin: 10px 0 0 20px; -+ padding: 0; -+} -+ -+ul.search li { -+ padding: 5px 0 5px 20px; -+ background-image: url(file.png); -+ background-repeat: no-repeat; -+ background-position: 0 7px; -+} -+ -+ul.search li a { -+ font-weight: bold; -+} -+ -+ul.search li div.context { -+ color: #888; -+ margin: 2px 0 0 30px; -+ text-align: left; -+} -+ -+ul.keywordmatches li.goodmatch a { -+ font-weight: bold; -+} -+ -+/* -- index page ------------------------------------------------------------ */ -+ -+table.contentstable { -+ width: 90%; -+} -+ -+table.contentstable p.biglink { -+ line-height: 150%; -+} -+ -+a.biglink { -+ font-size: 1.3em; -+} -+ -+span.linkdescr { -+ font-style: italic; -+ padding-top: 5px; -+ font-size: 90%; -+} -+ -+/* -- general index --------------------------------------------------------- */ -+ -+table.indextable td { -+ text-align: left; -+ vertical-align: top; -+} -+ -+table.indextable dl, table.indextable dd { -+ margin-top: 0; -+ margin-bottom: 0; -+} -+ -+table.indextable tr.pcap { -+ height: 10px; -+} -+ -+table.indextable tr.cap { -+ margin-top: 10px; -+ background-color: #f2f2f2; -+} -+ -+img.toggler { -+ margin-right: 3px; -+ margin-top: 3px; -+ cursor: pointer; -+} -+ -+/* -- general body styles --------------------------------------------------- */ -+ -+a.headerlink { -+ visibility: hidden; -+} -+ -+h1:hover > a.headerlink, -+h2:hover > a.headerlink, -+h3:hover > a.headerlink, -+h4:hover > a.headerlink, -+h5:hover > a.headerlink, -+h6:hover > a.headerlink, -+dt:hover > a.headerlink { -+ visibility: visible; -+} -+ -+div.body p.caption { -+ text-align: inherit; -+} -+ -+div.body td { -+ text-align: left; -+} -+ -+.field-list ul { -+ padding-left: 1em; -+} -+ -+.first { -+} -+ -+p.rubric { -+ margin-top: 30px; -+ font-weight: bold; -+} -+ -+/* -- sidebars -------------------------------------------------------------- */ -+ -+div.sidebar { -+ margin: 0 0 0.5em 1em; -+ border: 1px solid #ddb; -+ padding: 7px 7px 0 7px; -+ background-color: #ffe; -+ width: 40%; -+ float: right; -+} -+ -+p.sidebar-title { -+ font-weight: bold; -+} -+ -+/* -- topics ---------------------------------------------------------------- */ -+ -+div.topic { -+ border: 1px solid #ccc; -+ padding: 7px 7px 0 7px; -+ margin: 10px 0 10px 0; -+} -+ -+p.topic-title { -+ font-size: 1.1em; -+ font-weight: bold; -+ margin-top: 10px; -+} -+ -+/* -- admonitions ----------------------------------------------------------- */ -+ -+div.admonition { -+ margin-top: 10px; -+ margin-bottom: 10px; -+ padding: 7px; -+} -+ -+div.admonition dt { -+ font-weight: bold; -+} -+ -+div.admonition dl { -+ margin-bottom: 0; -+} -+ -+p.admonition-title { -+ margin: 0px 10px 5px 0px; -+ font-weight: bold; -+} -+ -+div.body p.centered { -+ text-align: center; -+ margin-top: 25px; -+} -+ -+/* -- tables ---------------------------------------------------------------- */ -+ -+table.docutils { -+ border: 0; -+ border-collapse: collapse; -+} -+ -+table.docutils td, table.docutils th { -+ padding: 1px 8px 1px 0; -+ border-top: 0; -+ border-left: 0; -+ border-right: 0; -+ border-bottom: 1px solid #aaa; -+} -+ -+table.field-list td, table.field-list th { -+ border: 0 !important; -+} -+ -+table.footnote td, table.footnote th { -+ border: 0 !important; -+} -+ -+th { -+ text-align: left; -+ padding-right: 5px; -+} -+ -+/* -- other body styles ----------------------------------------------------- */ -+ -+dl { -+ margin-bottom: 15px; -+} -+ -+dd p { -+ margin-top: 0px; -+} -+ -+dd ul, dd table { -+ margin-bottom: 10px; -+} -+ -+dd { -+ margin-top: 3px; -+ margin-bottom: 10px; -+ margin-left: 30px; -+} -+ -+dt:target, .highlight { -+ background-color: #fbe54e; -+} -+ -+dl.glossary dt { -+ font-weight: bold; -+ font-size: 1.1em; -+} -+ -+.field-list ul { -+ margin: 0; -+ padding-left: 1em; -+} -+ -+.field-list p { -+ margin: 0; -+} -+ -+.refcount { -+ color: #060; -+} -+ -+.optional { -+ font-size: 1.3em; -+} -+ -+.versionmodified { -+ font-style: italic; -+} -+ -+.system-message { -+ background-color: #fda; -+ padding: 5px; -+ border: 3px solid red; -+} -+ -+.footnote:target { -+ background-color: #ffa -+} -+ -+.line-block { -+ display: block; -+ margin-top: 1em; -+ margin-bottom: 1em; -+} -+ -+.line-block .line-block { -+ margin-top: 0; -+ margin-bottom: 0; -+ margin-left: 1.5em; -+} -+ -+/* -- code displays --------------------------------------------------------- */ -+ -+pre { -+ overflow: auto; -+} -+ -+td.linenos pre { -+ padding: 5px 0px; -+ border: 0; -+ background-color: transparent; -+ color: #aaa; -+} -+ -+table.highlighttable { -+ margin-left: 0.5em; -+} -+ -+table.highlighttable td { -+ padding: 0 0.5em 0 0.5em; -+} -+ -+tt.descname { -+ background-color: transparent; -+ font-weight: bold; -+ font-size: 1.2em; -+} -+ -+tt.descclassname { -+ background-color: transparent; -+} -+ -+tt.xref, a tt { -+ background-color: transparent; -+ font-weight: bold; -+} -+ -+h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { -+ background-color: transparent; -+} -+ -+/* -- math display ---------------------------------------------------------- */ -+ -+img.math { -+ vertical-align: middle; -+} -+ -+div.body div.math p { -+ text-align: center; -+} -+ -+span.eqno { -+ float: right; -+} -+ -+/* -- printout stylesheet --------------------------------------------------- */ -+ -+@media print { -+ div.document, -+ div.documentwrapper, -+ div.bodywrapper { -+ margin: 0 !important; -+ width: 100%; -+ } -+ -+ div.sphinxsidebar, -+ div.related, -+ div.footer, -+ #top-link { -+ display: none; -+ } -+} -diff --git a/doc/source/_static/default.css b/doc/source/_static/default.css -new file mode 100644 -index 0000000..c8091ec ---- /dev/null -+++ b/doc/source/_static/default.css -@@ -0,0 +1,230 @@ -+/** -+ * Sphinx stylesheet -- default theme -+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+ */ -+ -+@import url("basic.css"); -+ -+/* -- page layout ----------------------------------------------------------- */ -+ -+body { -+ font-family: sans-serif; -+ font-size: 100%; -+ background-color: #11303d; -+ color: #000; -+ margin: 0; -+ padding: 0; -+} -+ -+div.document { -+ background-color: #1c4e63; -+} -+ -+div.documentwrapper { -+ float: left; -+ width: 100%; -+} -+ -+div.bodywrapper { -+ margin: 0 0 0 230px; -+} -+ -+div.body { -+ background-color: #ffffff; -+ color: #000000; -+ padding: 0 20px 30px 20px; -+} -+ -+div.footer { -+ color: #ffffff; -+ width: 100%; -+ padding: 9px 0 9px 0; -+ text-align: center; -+ font-size: 75%; -+} -+ -+div.footer a { -+ color: #ffffff; -+ text-decoration: underline; -+} -+ -+div.related { -+ background-color: #133f52; -+ line-height: 30px; -+ color: #ffffff; -+} -+ -+div.related a { -+ color: #ffffff; -+} -+ -+div.sphinxsidebar { -+} -+ -+div.sphinxsidebar h3 { -+ font-family: 'Trebuchet MS', sans-serif; -+ color: #ffffff; -+ font-size: 1.4em; -+ font-weight: normal; -+ margin: 0; -+ padding: 0; -+} -+ -+div.sphinxsidebar h3 a { -+ color: #ffffff; -+} -+ -+div.sphinxsidebar h4 { -+ font-family: 'Trebuchet MS', sans-serif; -+ color: #ffffff; -+ font-size: 1.3em; -+ font-weight: normal; -+ margin: 5px 0 0 0; -+ padding: 0; -+} -+ -+div.sphinxsidebar p { -+ color: #ffffff; -+} -+ -+div.sphinxsidebar p.topless { -+ margin: 5px 10px 10px 10px; -+} -+ -+div.sphinxsidebar ul { -+ margin: 10px; -+ padding: 0; -+ color: #ffffff; -+} -+ -+div.sphinxsidebar a { -+ color: #98dbcc; -+} -+ -+div.sphinxsidebar input { -+ border: 1px solid #98dbcc; -+ font-family: sans-serif; -+ font-size: 1em; -+} -+ -+/* -- body styles ----------------------------------------------------------- */ -+ -+a { -+ color: #355f7c; -+ text-decoration: none; -+} -+ -+a:hover { -+ text-decoration: underline; -+} -+ -+div.body p, div.body dd, div.body li { -+ text-align: left; -+ line-height: 130%; -+} -+ -+div.body h1, -+div.body h2, -+div.body h3, -+div.body h4, -+div.body h5, -+div.body h6 { -+ font-family: 'Trebuchet MS', sans-serif; -+ background-color: #f2f2f2; -+ font-weight: normal; -+ color: #20435c; -+ border-bottom: 1px solid #ccc; -+ margin: 20px -20px 10px -20px; -+ padding: 3px 0 3px 10px; -+} -+ -+div.body h1 { margin-top: 0; font-size: 200%; } -+div.body h2 { font-size: 160%; } -+div.body h3 { font-size: 140%; } -+div.body h4 { font-size: 120%; } -+div.body h5 { font-size: 110%; } -+div.body h6 { font-size: 100%; } -+ -+a.headerlink { -+ color: #c60f0f; -+ font-size: 0.8em; -+ padding: 0 4px 0 4px; -+ text-decoration: none; -+} -+ -+a.headerlink:hover { -+ background-color: #c60f0f; -+ color: white; -+} -+ -+div.body p, div.body dd, div.body li { -+ text-align: left; -+ line-height: 130%; -+} -+ -+div.admonition p.admonition-title + p { -+ display: inline; -+} -+ -+div.admonition p { -+ margin-bottom: 5px; -+} -+ -+div.admonition pre { -+ margin-bottom: 5px; -+} -+ -+div.admonition ul, div.admonition ol { -+ margin-bottom: 5px; -+} -+ -+div.note { -+ background-color: #eee; -+ border: 1px solid #ccc; -+} -+ -+div.seealso { -+ background-color: #ffc; -+ border: 1px solid #ff6; -+} -+ -+div.topic { -+ background-color: #eee; -+} -+ -+div.warning { -+ background-color: #ffe4e4; -+ border: 1px solid #f66; -+} -+ -+p.admonition-title { -+ display: inline; -+} -+ -+p.admonition-title:after { -+ content: ":"; -+} -+ -+pre { -+ padding: 5px; -+ background-color: #eeffcc; -+ color: #333333; -+ line-height: 120%; -+ border: 1px solid #ac9; -+ border-left: none; -+ border-right: none; -+} -+ -+tt { -+ background-color: #ecf0f3; -+ padding: 0 1px 0 1px; -+ font-size: 0.95em; -+} -+ -+.warning tt { -+ background: #efc2c2; -+} -+ -+.note tt { -+ background: #d6d6d6; -+} -diff --git a/doc/source/_static/jquery.tweet.js b/doc/source/_static/jquery.tweet.js -new file mode 100644 -index 0000000..79bf0bd ---- /dev/null -+++ b/doc/source/_static/jquery.tweet.js -@@ -0,0 +1,154 @@ -+(function($) { -+ -+ $.fn.tweet = function(o){ -+ var s = { -+ username: ["seaofclouds"], // [string] required, unless you want to display our tweets. :) it can be an array, just do ["username1","username2","etc"] -+ list: null, //[string] optional name of list belonging to username -+ avatar_size: null, // [integer] height and width of avatar if displayed (48px max) -+ count: 3, // [integer] how many tweets to display? -+ intro_text: null, // [string] do you want text BEFORE your your tweets? -+ outro_text: null, // [string] do you want text AFTER your tweets? -+ join_text: null, // [string] optional text in between date and tweet, try setting to "auto" -+ auto_join_text_default: "i said,", // [string] auto text for non verb: "i said" bullocks -+ auto_join_text_ed: "i", // [string] auto text for past tense: "i" surfed -+ auto_join_text_ing: "i am", // [string] auto tense for present tense: "i was" surfing -+ auto_join_text_reply: "i replied to", // [string] auto tense for replies: "i replied to" @someone "with" -+ auto_join_text_url: "i was looking at", // [string] auto tense for urls: "i was looking at" http:... -+ loading_text: null, // [string] optional loading text, displayed while tweets load -+ query: null // [string] optional search query -+ }; -+ -+ if(o) $.extend(s, o); -+ -+ $.fn.extend({ -+ linkUrl: function() { -+ var returning = []; -+ var regexp = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi; -+ this.each(function() { -+ returning.push(this.replace(regexp,"$1")); -+ }); -+ return $(returning); -+ }, -+ linkUser: function() { -+ var returning = []; -+ var regexp = /[\@]+([A-Za-z0-9-_]+)/gi; -+ this.each(function() { -+ returning.push(this.replace(regexp,"@$1")); -+ }); -+ return $(returning); -+ }, -+ linkHash: function() { -+ var returning = []; -+ var regexp = / [\#]+([A-Za-z0-9-_]+)/gi; -+ this.each(function() { -+ returning.push(this.replace(regexp, ' #$1')); -+ }); -+ return $(returning); -+ }, -+ capAwesome: function() { -+ var returning = []; -+ this.each(function() { -+ returning.push(this.replace(/\b(awesome)\b/gi, '$1')); -+ }); -+ return $(returning); -+ }, -+ capEpic: function() { -+ var returning = []; -+ this.each(function() { -+ returning.push(this.replace(/\b(epic)\b/gi, '$1')); -+ }); -+ return $(returning); -+ }, -+ makeHeart: function() { -+ var returning = []; -+ this.each(function() { -+ returning.push(this.replace(/(<)+[3]/gi, "")); -+ }); -+ return $(returning); -+ } -+ }); -+ -+ function relative_time(time_value) { -+ var parsed_date = Date.parse(time_value); -+ var relative_to = (arguments.length > 1) ? arguments[1] : new Date(); -+ var delta = parseInt((relative_to.getTime() - parsed_date) / 1000); -+ var pluralize = function (singular, n) { -+ return '' + n + ' ' + singular + (n == 1 ? '' : 's'); -+ }; -+ if(delta < 60) { -+ return 'less than a minute ago'; -+ } else if(delta < (45*60)) { -+ return 'about ' + pluralize("minute", parseInt(delta / 60)) + ' ago'; -+ } else if(delta < (24*60*60)) { -+ return 'about ' + pluralize("hour", parseInt(delta / 3600)) + ' ago'; -+ } else { -+ return 'about ' + pluralize("day", parseInt(delta / 86400)) + ' ago'; -+ } -+ } -+ -+ function build_url() { -+ var proto = ('https:' == document.location.protocol ? 'https:' : 'http:'); -+ if (s.list) { -+ return proto+"//api.twitter.com/1/"+s.username[0]+"/lists/"+s.list+"/statuses.json?per_page="+s.count+"&callback=?"; -+ } else if (s.query == null && s.username.length == 1) { -+ return proto+'//twitter.com/status/user_timeline/'+s.username[0]+'.json?count='+s.count+'&callback=?'; -+ } else { -+ var query = (s.query || 'from:'+s.username.join('%20OR%20from:')); -+ return proto+'//search.twitter.com/search.json?&q='+query+'&rpp='+s.count+'&callback=?'; -+ } -+ } -+ -+ return this.each(function(){ -+ var list = $('