Skip to content
This repository
Browse code

Initial commit.

  • Loading branch information...
commit 35fbe183ec27c27670e65ec2116e6c9c65b2d8e5 0 parents
Andraz Brodnik authored September 24, 2012
31  .gitignore
... ...
@@ -0,0 +1,31 @@
  1
+*.py[co]
  2
+
  3
+# Packages
  4
+*.egg
  5
+*.egg-info
  6
+dist
  7
+build
  8
+eggs
  9
+parts
  10
+bin
  11
+var
  12
+sdist
  13
+develop-eggs
  14
+.installed.cfg
  15
+
  16
+# Installer logs
  17
+pip-log.txt
  18
+
  19
+# Unit test / coverage reports
  20
+.coverage
  21
+.tox
  22
+
  23
+#Translations
  24
+*.mo
  25
+
  26
+#Mr Developer
  27
+.mr.developer.cfg
  28
+
  29
+# Grappelli
  30
+grappelli
  31
+admin
26  LICENSE
... ...
@@ -0,0 +1,26 @@
  1
+Copyright 2012 Kiberpipa.org. All rights reserved.
  2
+
  3
+Redistribution and use in source and binary forms, with or without modification, are
  4
+permitted provided that the following conditions are met:
  5
+
  6
+   1. Redistributions of source code must retain the above copyright notice, this list of
  7
+      conditions and the following disclaimer.
  8
+
  9
+   2. Redistributions in binary form must reproduce the above copyright notice, this list
  10
+      of conditions and the following disclaimer in the documentation and/or other materials
  11
+      provided with the distribution.
  12
+
  13
+THIS SOFTWARE IS PROVIDED BY KIBERPIPA.ORG ``AS IS'' AND ANY EXPRESS OR IMPLIED
  14
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  15
+FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KIBERPIPA.ORG OR
  16
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  17
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  18
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  19
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  20
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
  21
+ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  22
+
  23
+The views and conclusions contained in the software and documentation are those of the
  24
+authors and should not be interpreted as representing official policies, either expressed
  25
+or implied, of Kiberpipa.org.
  26
+
4  README.rst
Source Rendered
... ...
@@ -0,0 +1,4 @@
  1
+Installation
  2
+============
  3
+
  4
+``python bootstrap.py -d``
262  bootstrap.py
... ...
@@ -0,0 +1,262 @@
  1
+##############################################################################
  2
+#
  3
+# Copyright (c) 2006 Zope Foundation and Contributors.
  4
+# All Rights Reserved.
  5
+#
  6
+# This software is subject to the provisions of the Zope Public License,
  7
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
  8
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
  9
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  10
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
  11
+# FOR A PARTICULAR PURPOSE.
  12
+#
  13
+##############################################################################
  14
+"""Bootstrap a buildout-based project
  15
+
  16
+Simply run this script in a directory containing a buildout.cfg.
  17
+The script accepts buildout command-line options, so you can
  18
+use the -c option to specify an alternate configuration file.
  19
+"""
  20
+
  21
+import os, shutil, sys, tempfile, urllib, urllib2, subprocess
  22
+from optparse import OptionParser
  23
+
  24
+if sys.platform == 'win32':
  25
+    def quote(c):
  26
+        if ' ' in c:
  27
+            return '"%s"' % c  # work around spawn lamosity on windows
  28
+        else:
  29
+            return c
  30
+else:
  31
+    quote = str
  32
+
  33
+# See zc.buildout.easy_install._has_broken_dash_S for motivation and comments.
  34
+stdout, stderr = subprocess.Popen(
  35
+    [sys.executable, '-Sc',
  36
+     'try:\n'
  37
+     '    import ConfigParser\n'
  38
+     'except ImportError:\n'
  39
+     '    print 1\n'
  40
+     'else:\n'
  41
+     '    print 0\n'],
  42
+    stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
  43
+has_broken_dash_S = bool(int(stdout.strip()))
  44
+
  45
+# In order to be more robust in the face of system Pythons, we want to
  46
+# run without site-packages loaded.  This is somewhat tricky, in
  47
+# particular because Python 2.6's distutils imports site, so starting
  48
+# with the -S flag is not sufficient.  However, we'll start with that:
  49
+if not has_broken_dash_S and 'site' in sys.modules:
  50
+    # We will restart with python -S.
  51
+    args = sys.argv[:]
  52
+    args[0:0] = [sys.executable, '-S']
  53
+    args = map(quote, args)
  54
+    os.execv(sys.executable, args)
  55
+# Now we are running with -S.  We'll get the clean sys.path, import site
  56
+# because distutils will do it later, and then reset the path and clean
  57
+# out any namespace packages from site-packages that might have been
  58
+# loaded by .pth files.
  59
+clean_path = sys.path[:]
  60
+import site  # imported because of its side effects
  61
+sys.path[:] = clean_path
  62
+for k, v in sys.modules.items():
  63
+    if k in ('setuptools', 'pkg_resources') or (
  64
+        hasattr(v, '__path__') and
  65
+        len(v.__path__) == 1 and
  66
+        not os.path.exists(os.path.join(v.__path__[0], '__init__.py'))):
  67
+        # This is a namespace package.  Remove it.
  68
+        sys.modules.pop(k)
  69
+
  70
+is_jython = sys.platform.startswith('java')
  71
+
  72
+setuptools_source = 'http://peak.telecommunity.com/dist/ez_setup.py'
  73
+distribute_source = 'http://python-distribute.org/distribute_setup.py'
  74
+
  75
+
  76
+# parsing arguments
  77
+def normalize_to_url(option, opt_str, value, parser):
  78
+    if value:
  79
+        if '://' not in value:  # It doesn't smell like a URL.
  80
+            value = 'file://%s' % (
  81
+                urllib.pathname2url(
  82
+                    os.path.abspath(os.path.expanduser(value))),)
  83
+        if opt_str == '--download-base' and not value.endswith('/'):
  84
+            # Download base needs a trailing slash to make the world happy.
  85
+            value += '/'
  86
+    else:
  87
+        value = None
  88
+    name = opt_str[2:].replace('-', '_')
  89
+    setattr(parser.values, name, value)
  90
+
  91
+usage = '''\
  92
+[DESIRED PYTHON FOR BUILDOUT] bootstrap.py [options]
  93
+
  94
+Bootstraps a buildout-based project.
  95
+
  96
+Simply run this script in a directory containing a buildout.cfg, using the
  97
+Python that you want bin/buildout to use.
  98
+
  99
+Note that by using --setup-source and --download-base to point to
  100
+local resources, you can keep this script from going over the network.
  101
+'''
  102
+
  103
+parser = OptionParser(usage=usage)
  104
+parser.add_option("-v", "--version", dest="version",
  105
+                          help="use a specific zc.buildout version")
  106
+parser.add_option("-d", "--distribute",
  107
+                   action="store_true", dest="use_distribute", default=False,
  108
+                   help="Use Distribute rather than Setuptools.")
  109
+parser.add_option("--setup-source", action="callback", dest="setup_source",
  110
+                  callback=normalize_to_url, nargs=1, type="string",
  111
+                  help=("Specify a URL or file location for the setup file. "
  112
+                        "If you use Setuptools, this will default to " +
  113
+                        setuptools_source + "; if you use Distribute, this "
  114
+                        "will default to " + distribute_source + "."))
  115
+parser.add_option("--download-base", action="callback", dest="download_base",
  116
+                  callback=normalize_to_url, nargs=1, type="string",
  117
+                  help=("Specify a URL or directory for downloading "
  118
+                        "zc.buildout and either Setuptools or Distribute. "
  119
+                        "Defaults to PyPI."))
  120
+parser.add_option("--eggs",
  121
+                  help=("Specify a directory for storing eggs.  Defaults to "
  122
+                        "a temporary directory that is deleted when the "
  123
+                        "bootstrap script completes."))
  124
+parser.add_option("-t", "--accept-buildout-test-releases",
  125
+                  dest='accept_buildout_test_releases',
  126
+                  action="store_true", default=False,
  127
+                  help=("Normally, if you do not specify a --version, the "
  128
+                        "bootstrap script and buildout gets the newest "
  129
+                        "*final* versions of zc.buildout and its recipes and "
  130
+                        "extensions for you.  If you use this flag, "
  131
+                        "bootstrap and buildout will get the newest releases "
  132
+                        "even if they are alphas or betas."))
  133
+parser.add_option("-c", None, action="store", dest="config_file",
  134
+                   help=("Specify the path to the buildout configuration "
  135
+                         "file to be used."))
  136
+
  137
+options, args = parser.parse_args()
  138
+
  139
+# if -c was provided, we push it back into args for buildout's main function
  140
+if options.config_file is not None:
  141
+    args += ['-c', options.config_file]
  142
+
  143
+if options.eggs:
  144
+    eggs_dir = os.path.abspath(os.path.expanduser(options.eggs))
  145
+else:
  146
+    eggs_dir = tempfile.mkdtemp()
  147
+
  148
+if options.setup_source is None:
  149
+    if options.use_distribute:
  150
+        options.setup_source = distribute_source
  151
+    else:
  152
+        options.setup_source = setuptools_source
  153
+
  154
+if options.accept_buildout_test_releases:
  155
+    args.append('buildout:accept-buildout-test-releases=true')
  156
+args.append('bootstrap')
  157
+
  158
+try:
  159
+    import pkg_resources
  160
+    import setuptools  # A flag.  Sometimes pkg_resources is installed alone.
  161
+    if not hasattr(pkg_resources, '_distribute'):
  162
+        raise ImportError
  163
+except ImportError:
  164
+    ez_code = urllib2.urlopen(
  165
+        options.setup_source).read().replace('\r\n', '\n')
  166
+    ez = {}
  167
+    exec ez_code in ez
  168
+    setup_args = dict(to_dir=eggs_dir, download_delay=0)
  169
+    if options.download_base:
  170
+        setup_args['download_base'] = options.download_base
  171
+    if options.use_distribute:
  172
+        setup_args['no_fake'] = True
  173
+    ez['use_setuptools'](**setup_args)
  174
+    if 'pkg_resources' in sys.modules:
  175
+        reload(sys.modules['pkg_resources'])
  176
+    import pkg_resources
  177
+    # This does not (always?) update the default working set.  We will
  178
+    # do it.
  179
+    for path in sys.path:
  180
+        if path not in pkg_resources.working_set.entries:
  181
+            pkg_resources.working_set.add_entry(path)
  182
+
  183
+cmd = [quote(sys.executable),
  184
+       '-c',
  185
+       quote('from setuptools.command.easy_install import main; main()'),
  186
+       '-mqNxd',
  187
+       quote(eggs_dir)]
  188
+
  189
+if not has_broken_dash_S:
  190
+    cmd.insert(1, '-S')
  191
+
  192
+find_links = options.download_base
  193
+if not find_links:
  194
+    find_links = os.environ.get('bootstrap-testing-find-links')
  195
+if find_links:
  196
+    cmd.extend(['-f', quote(find_links)])
  197
+
  198
+if options.use_distribute:
  199
+    setup_requirement = 'distribute'
  200
+else:
  201
+    setup_requirement = 'setuptools'
  202
+ws = pkg_resources.working_set
  203
+setup_requirement_path = ws.find(
  204
+    pkg_resources.Requirement.parse(setup_requirement)).location
  205
+env = dict(
  206
+    os.environ,
  207
+    PYTHONPATH=setup_requirement_path)
  208
+
  209
+requirement = 'zc.buildout'
  210
+version = options.version
  211
+if version is None and not options.accept_buildout_test_releases:
  212
+    # Figure out the most recent final version of zc.buildout.
  213
+    import setuptools.package_index
  214
+    _final_parts = '*final-', '*final'
  215
+
  216
+    def _final_version(parsed_version):
  217
+        for part in parsed_version:
  218
+            if (part[:1] == '*') and (part not in _final_parts):
  219
+                return False
  220
+        return True
  221
+    index = setuptools.package_index.PackageIndex(
  222
+        search_path=[setup_requirement_path])
  223
+    if find_links:
  224
+        index.add_find_links((find_links,))
  225
+    req = pkg_resources.Requirement.parse(requirement)
  226
+    if index.obtain(req) is not None:
  227
+        best = []
  228
+        bestv = None
  229
+        for dist in index[req.project_name]:
  230
+            distv = dist.parsed_version
  231
+            if _final_version(distv):
  232
+                if bestv is None or distv > bestv:
  233
+                    best = [dist]
  234
+                    bestv = distv
  235
+                elif distv == bestv:
  236
+                    best.append(dist)
  237
+        if best:
  238
+            best.sort()
  239
+            version = best[-1].version
  240
+if version:
  241
+    requirement = '=='.join((requirement, version))
  242
+cmd.append(requirement)
  243
+
  244
+if is_jython:
  245
+    import subprocess
  246
+    exitcode = subprocess.Popen(cmd, env=env).wait()
  247
+else:  # Windows prefers this, apparently; otherwise we would prefer subprocess
  248
+    exitcode = os.spawnle(*([os.P_WAIT, sys.executable] + cmd + [env]))
  249
+if exitcode != 0:
  250
+    sys.stdout.flush()
  251
+    sys.stderr.flush()
  252
+    print ("An error occurred when trying to install zc.buildout. "
  253
+           "Look above this message for any errors that "
  254
+           "were output by easy_install.")
  255
+    sys.exit(exitcode)
  256
+
  257
+ws.add_entry(eggs_dir)
  258
+ws.require(requirement)
  259
+import zc.buildout.buildout
  260
+zc.buildout.buildout.main(args)
  261
+if not options.eggs:  # clean up temporary egg directory
  262
+    shutil.rmtree(eggs_dir)
61  buildout.cfg
... ...
@@ -0,0 +1,61 @@
  1
+# The main .ini section
  2
+[buildout]
  3
+
  4
+# The versions.cfg file is extended to this file.
  5
+extends =
  6
+    versions.cfg
  7
+# The most common extensions (plugins?)
  8
+# buildout-versions - it notifys you if the versions of dependecies are not pinpointed
  9
+# mr.developer - an extension that helps you manage sources fetched with revision managed systems
  10
+extensions =
  11
+    buildout-versions
  12
+    mr.developer
  13
+# Get the versions from versions section (extended from versions.cfg)
  14
+versions = versions
  15
+# Like --no-site-packages in virtualenv (do not use system packages)
  16
+include-site-packages = false
  17
+# Take the setup.py file from the main directory
  18
+develop = .
  19
+# <mr.developer option> automaticaly check-out the sources that are fetched with revision system
  20
+auto-checkout = *
  21
+
  22
+# which sections are recognized in this file
  23
+parts =
  24
+    bpython
  25
+    mkdir
  26
+    django
  27
+    fab
  28
+
  29
+# this option is needed in different recipes
  30
+eggs =
  31
+    bpython
  32
+    liby
  33
+    Fabric
  34
+    django-sentry
  35
+
  36
+# for this section see djangorecipe documentation
  37
+[django]
  38
+recipe = djangorecipe
  39
+eggs = ${buildout:eggs}
  40
+project = liby
  41
+projectegg = liby
  42
+settings = settings
  43
+
  44
+
  45
+[mkdir]
  46
+recipe = z3c.recipe.mkdir
  47
+paths = ${buildout:directory}/var
  48
+
  49
+# This section creates a bin/bpython that knows the eggs specified in the main section
  50
+[bpython]
  51
+recipe = zc.recipe.egg:scripts
  52
+eggs =
  53
+     ${buildout:eggs}
  54
+scripts = bpython
  55
+
  56
+# This script creates a fab binary (see fabric)
  57
+[fab]
  58
+recipe = zc.recipe.egg:scripts
  59
+eggs =
  60
+     ${buildout:eggs}
  61
+scripts = fab
0  liby/__init__.py
No changes.
0  liby/books/__init__.py
No changes.
24  liby/books/admin.py
... ...
@@ -0,0 +1,24 @@
  1
+from liby.books.models import Book, OnlineMaterial, Author, Genre, Publisher
  2
+from django.contrib import admin
  3
+
  4
+
  5
+class BookInline(admin.TabularInline):
  6
+    model = Book
  7
+    extra = 0
  8
+
  9
+
  10
+class OnlineInline(admin.TabularInline):
  11
+    model = OnlineMaterial
  12
+    extra = 0
  13
+
  14
+class MaterialAdmin(admin.ModelAdmin):
  15
+    inlines = [
  16
+        BookInline,
  17
+        OnlineInline,
  18
+    ]
  19
+
  20
+admin.site.register(Book)
  21
+admin.site.register(OnlineMaterial)
  22
+admin.site.register(Author, MaterialAdmin)
  23
+admin.site.register(Genre, MaterialAdmin)
  24
+admin.site.register(Publisher, MaterialAdmin)
49  liby/books/models.py
... ...
@@ -0,0 +1,49 @@
  1
+from django.db import models
  2
+
  3
+class Author(models.Model):
  4
+    """Model representing a book/smt author"""
  5
+    name = models.CharField(max_length=100)
  6
+
  7
+    def __unicode__(self):
  8
+            return self.name
  9
+
  10
+class Genre(models.Model):
  11
+    """
  12
+    Model representing a gendre.
  13
+    
  14
+    For example: drama, IT, horor
  15
+    """
  16
+    gendre_name = models.CharField(max_length=20)
  17
+
  18
+    def __unicode__(self):
  19
+            return self.gendre_name
  20
+
  21
+
  22
+class Publisher(models.Model):
  23
+    """Model representing a publisher"""
  24
+    name = models.CharField(max_length=100)
  25
+
  26
+    def __unicode__(self):
  27
+            return self.name
  28
+
  29
+class Item(models.Model):
  30
+    """Model representing a book or e-material."""
  31
+    title = models.CharField(max_length=100)
  32
+    author = models.ForeignKey(Author)
  33
+    pub_date = models.IntegerField('Year published', blank=True, null=True)
  34
+    publisher = models.ForeignKey(Publisher, blank=True, null=True)
  35
+    gendre = models.ForeignKey(Genre, blank=True, null=True)
  36
+
  37
+    def __unicode__(self):
  38
+            return "%s - %s" % (self.title, self.author)
  39
+
  40
+class OnlineMaterial(Item):
  41
+    """docstring for On"""
  42
+    link = models.URLField()
  43
+
  44
+
  45
+class Book(Item):
  46
+    """docstring for P"""
  47
+    reading_room_only = models.BooleanField(default=False)
  48
+    available = models.BooleanField(default=True)
  49
+    reserved = models.BooleanField(default=False)
1,058  liby/books/static/css/bootstrap-responsive.css
... ...
@@ -0,0 +1,1058 @@
  1
+/*!
  2
+ * Bootstrap Responsive v2.1.1
  3
+ *
  4
+ * Copyright 2012 Twitter, Inc
  5
+ * Licensed under the Apache License v2.0
  6
+ * http://www.apache.org/licenses/LICENSE-2.0
  7
+ *
  8
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
  9
+ */
  10
+
  11
+.clearfix {
  12
+  *zoom: 1;
  13
+}
  14
+
  15
+.clearfix:before,
  16
+.clearfix:after {
  17
+  display: table;
  18
+  line-height: 0;
  19
+  content: "";
  20
+}
  21
+
  22
+.clearfix:after {
  23
+  clear: both;
  24
+}
  25
+
  26
+.hide-text {
  27
+  font: 0/0 a;
  28
+  color: transparent;
  29
+  text-shadow: none;
  30
+  background-color: transparent;
  31
+  border: 0;
  32
+}
  33
+
  34
+.input-block-level {
  35
+  display: block;
  36
+  width: 100%;
  37
+  min-height: 30px;
  38
+  -webkit-box-sizing: border-box;
  39
+     -moz-box-sizing: border-box;
  40
+          box-sizing: border-box;
  41
+}
  42
+
  43
+.hidden {
  44
+  display: none;
  45
+  visibility: hidden;
  46
+}
  47
+
  48
+.visible-phone {
  49
+  display: none !important;
  50
+}
  51
+
  52
+.visible-tablet {
  53
+  display: none !important;
  54
+}
  55
+
  56
+.hidden-desktop {
  57
+  display: none !important;
  58
+}
  59
+
  60
+.visible-desktop {
  61
+  display: inherit !important;
  62
+}
  63
+
  64
+@media (min-width: 768px) and (max-width: 979px) {
  65
+  .hidden-desktop {
  66
+    display: inherit !important;
  67
+  }
  68
+  .visible-desktop {
  69
+    display: none !important ;
  70
+  }
  71
+  .visible-tablet {
  72
+    display: inherit !important;
  73
+  }
  74
+  .hidden-tablet {
  75
+    display: none !important;
  76
+  }
  77
+}
  78
+
  79
+@media (max-width: 767px) {
  80
+  .hidden-desktop {
  81
+    display: inherit !important;
  82
+  }
  83
+  .visible-desktop {
  84
+    display: none !important;
  85
+  }
  86
+  .visible-phone {
  87
+    display: inherit !important;
  88
+  }
  89
+  .hidden-phone {
  90
+    display: none !important;
  91
+  }
  92
+}
  93
+
  94
+@media (min-width: 1200px) {
  95
+  .row {
  96
+    margin-left: -30px;
  97
+    *zoom: 1;
  98
+  }
  99
+  .row:before,
  100
+  .row:after {
  101
+    display: table;
  102
+    line-height: 0;
  103
+    content: "";
  104
+  }
  105
+  .row:after {
  106
+    clear: both;
  107
+  }
  108
+  [class*="span"] {
  109
+    float: left;
  110
+    min-height: 1px;
  111
+    margin-left: 30px;
  112
+  }
  113
+  .container,
  114
+  .navbar-static-top .container,
  115
+  .navbar-fixed-top .container,
  116
+  .navbar-fixed-bottom .container {
  117
+    width: 1170px;
  118
+  }
  119
+  .span12 {
  120
+    width: 1170px;
  121
+  }
  122
+  .span11 {
  123
+    width: 1070px;
  124
+  }
  125
+  .span10 {
  126
+    width: 970px;
  127
+  }
  128
+  .span9 {
  129
+    width: 870px;
  130
+  }
  131
+  .span8 {
  132
+    width: 770px;
  133
+  }
  134
+  .span7 {
  135
+    width: 670px;
  136
+  }
  137
+  .span6 {
  138
+    width: 570px;
  139
+  }
  140
+  .span5 {
  141
+    width: 470px;
  142
+  }
  143
+  .span4 {
  144
+    width: 370px;
  145
+  }
  146
+  .span3 {
  147
+    width: 270px;
  148
+  }
  149
+  .span2 {
  150
+    width: 170px;
  151
+  }
  152
+  .span1 {
  153
+    width: 70px;
  154
+  }
  155
+  .offset12 {
  156
+    margin-left: 1230px;
  157
+  }
  158
+  .offset11 {
  159
+    margin-left: 1130px;
  160
+  }
  161
+  .offset10 {
  162
+    margin-left: 1030px;
  163
+  }
  164
+  .offset9 {
  165
+    margin-left: 930px;
  166
+  }
  167
+  .offset8 {
  168
+    margin-left: 830px;
  169
+  }
  170
+  .offset7 {
  171
+    margin-left: 730px;
  172
+  }
  173
+  .offset6 {
  174
+    margin-left: 630px;
  175
+  }
  176
+  .offset5 {
  177
+    margin-left: 530px;
  178
+  }
  179
+  .offset4 {
  180
+    margin-left: 430px;
  181
+  }
  182
+  .offset3 {
  183
+    margin-left: 330px;
  184
+  }
  185
+  .offset2 {
  186
+    margin-left: 230px;
  187
+  }
  188
+  .offset1 {
  189
+    margin-left: 130px;
  190
+  }
  191
+  .row-fluid {
  192
+    width: 100%;
  193
+    *zoom: 1;
  194
+  }
  195
+  .row-fluid:before,
  196
+  .row-fluid:after {
  197
+    display: table;
  198
+    line-height: 0;
  199
+    content: "";
  200
+  }
  201
+  .row-fluid:after {
  202
+    clear: both;
  203
+  }
  204
+  .row-fluid [class*="span"] {
  205
+    display: block;
  206
+    float: left;
  207
+    width: 100%;
  208
+    min-height: 30px;
  209
+    margin-left: 2.564102564102564%;
  210
+    *margin-left: 2.5109110747408616%;
  211
+    -webkit-box-sizing: border-box;
  212
+       -moz-box-sizing: border-box;
  213
+            box-sizing: border-box;
  214
+  }
  215
+  .row-fluid [class*="span"]:first-child {
  216
+    margin-left: 0;
  217
+  }
  218
+  .row-fluid .span12 {
  219
+    width: 100%;
  220
+    *width: 99.94680851063829%;
  221
+  }
  222
+  .row-fluid .span11 {
  223
+    width: 91.45299145299145%;
  224
+    *width: 91.39979996362975%;
  225
+  }
  226
+  .row-fluid .span10 {
  227
+    width: 82.90598290598291%;
  228
+    *width: 82.8527914166212%;
  229
+  }
  230
+  .row-fluid .span9 {
  231
+    width: 74.35897435897436%;
  232
+    *width: 74.30578286961266%;
  233
+  }
  234
+  .row-fluid .span8 {
  235
+    width: 65.81196581196582%;
  236
+    *width: 65.75877432260411%;
  237
+  }
  238
+  .row-fluid .span7 {
  239
+    width: 57.26495726495726%;
  240
+    *width: 57.21176577559556%;
  241
+  }
  242
+  .row-fluid .span6 {
  243
+    width: 48.717948717948715%;
  244
+    *width: 48.664757228587014%;
  245
+  }
  246
+  .row-fluid .span5 {
  247
+    width: 40.17094017094017%;
  248
+    *width: 40.11774868157847%;
  249
+  }
  250
+  .row-fluid .span4 {
  251
+    width: 31.623931623931625%;
  252
+    *width: 31.570740134569924%;
  253
+  }
  254
+  .row-fluid .span3 {
  255
+    width: 23.076923076923077%;
  256
+    *width: 23.023731587561375%;
  257
+  }
  258
+  .row-fluid .span2 {
  259
+    width: 14.52991452991453%;
  260
+    *width: 14.476723040552828%;
  261
+  }
  262
+  .row-fluid .span1 {
  263
+    width: 5.982905982905983%;
  264
+    *width: 5.929714493544281%;
  265
+  }
  266
+  .row-fluid .offset12 {
  267
+    margin-left: 105.12820512820512%;
  268
+    *margin-left: 105.02182214948171%;
  269
+  }
  270
+  .row-fluid .offset12:first-child {
  271
+    margin-left: 102.56410256410257%;
  272
+    *margin-left: 102.45771958537915%;
  273
+  }
  274
+  .row-fluid .offset11 {
  275
+    margin-left: 96.58119658119658%;
  276
+    *margin-left: 96.47481360247316%;
  277
+  }
  278
+  .row-fluid .offset11:first-child {
  279
+    margin-left: 94.01709401709402%;
  280
+    *margin-left: 93.91071103837061%;
  281
+  }
  282
+  .row-fluid .offset10 {
  283
+    margin-left: 88.03418803418803%;
  284
+    *margin-left: 87.92780505546462%;
  285
+  }
  286
+  .row-fluid .offset10:first-child {
  287
+    margin-left: 85.47008547008548%;
  288
+    *margin-left: 85.36370249136206%;
  289
+  }
  290
+  .row-fluid .offset9 {
  291
+    margin-left: 79.48717948717949%;
  292
+    *margin-left: 79.38079650845607%;
  293
+  }
  294
+  .row-fluid .offset9:first-child {
  295
+    margin-left: 76.92307692307693%;
  296
+    *margin-left: 76.81669394435352%;
  297
+  }
  298
+  .row-fluid .offset8 {
  299
+    margin-left: 70.94017094017094%;
  300
+    *margin-left: 70.83378796144753%;
  301
+  }
  302
+  .row-fluid .offset8:first-child {
  303
+    margin-left: 68.37606837606839%;
  304
+    *margin-left: 68.26968539734497%;
  305
+  }
  306
+  .row-fluid .offset7 {
  307
+    margin-left: 62.393162393162385%;
  308
+    *margin-left: 62.28677941443899%;
  309
+  }
  310
+  .row-fluid .offset7:first-child {
  311
+    margin-left: 59.82905982905982%;
  312
+    *margin-left: 59.72267685033642%;
  313
+  }
  314
+  .row-fluid .offset6 {
  315
+    margin-left: 53.84615384615384%;
  316
+    *margin-left: 53.739770867430444%;
  317
+  }
  318
+  .row-fluid .offset6:first-child {
  319
+    margin-left: 51.28205128205128%;
  320
+    *margin-left: 51.175668303327875%;
  321
+  }
  322
+  .row-fluid .offset5 {
  323
+    margin-left: 45.299145299145295%;
  324
+    *margin-left: 45.1927623204219%;
  325
+  }
  326
+  .row-fluid .offset5:first-child {
  327
+    margin-left: 42.73504273504273%;
  328
+    *margin-left: 42.62865975631933%;
  329
+  }
  330
+  .row-fluid .offset4 {
  331
+    margin-left: 36.75213675213675%;
  332
+    *margin-left: 36.645753773413354%;
  333
+  }
  334
+  .row-fluid .offset4:first-child {
  335
+    margin-left: 34.18803418803419%;
  336
+    *margin-left: 34.081651209310785%;
  337
+  }
  338
+  .row-fluid .offset3 {
  339
+    margin-left: 28.205128205128204%;
  340
+    *margin-left: 28.0987452264048%;
  341
+  }
  342
+  .row-fluid .offset3:first-child {
  343
+    margin-left: 25.641025641025642%;
  344
+    *margin-left: 25.53464266230224%;
  345
+  }
  346
+  .row-fluid .offset2 {
  347
+    margin-left: 19.65811965811966%;
  348
+    *margin-left: 19.551736679396257%;
  349
+  }
  350
+  .row-fluid .offset2:first-child {
  351
+    margin-left: 17.094017094017094%;
  352
+    *margin-left: 16.98763411529369%;
  353
+  }
  354
+  .row-fluid .offset1 {
  355
+    margin-left: 11.11111111111111%;
  356
+    *margin-left: 11.004728132387708%;
  357
+  }
  358
+  .row-fluid .offset1:first-child {
  359
+    margin-left: 8.547008547008547%;
  360
+    *margin-left: 8.440625568285142%;
  361
+  }
  362
+  input,
  363
+  textarea,
  364
+  .uneditable-input {
  365
+    margin-left: 0;
  366
+  }
  367
+  .controls-row [class*="span"] + [class*="span"] {
  368
+    margin-left: 30px;
  369
+  }
  370
+  input.span12,
  371
+  textarea.span12,
  372
+  .uneditable-input.span12 {
  373
+    width: 1156px;
  374
+  }
  375
+  input.span11,
  376
+  textarea.span11,
  377
+  .uneditable-input.span11 {
  378
+    width: 1056px;
  379
+  }
  380
+  input.span10,
  381
+  textarea.span10,
  382
+  .uneditable-input.span10 {
  383
+    width: 956px;
  384
+  }
  385
+  input.span9,
  386
+  textarea.span9,
  387
+  .uneditable-input.span9 {
  388
+    width: 856px;
  389
+  }
  390
+  input.span8,
  391
+  textarea.span8,
  392
+  .uneditable-input.span8 {
  393
+    width: 756px;
  394
+  }
  395
+  input.span7,
  396
+  textarea.span7,
  397
+  .uneditable-input.span7 {
  398
+    width: 656px;
  399
+  }
  400
+  input.span6,
  401
+  textarea.span6,
  402
+  .uneditable-input.span6 {
  403
+    width: 556px;
  404
+  }
  405
+  input.span5,
  406
+  textarea.span5,
  407
+  .uneditable-input.span5 {
  408
+    width: 456px;
  409
+  }
  410
+  input.span4,
  411
+  textarea.span4,
  412
+  .uneditable-input.span4 {
  413
+    width: 356px;
  414
+  }
  415
+  input.span3,
  416
+  textarea.span3,
  417
+  .uneditable-input.span3 {
  418
+    width: 256px;
  419
+  }
  420
+  input.span2,
  421
+  textarea.span2,
  422
+  .uneditable-input.span2 {
  423
+    width: 156px;
  424
+  }
  425
+  input.span1,
  426
+  textarea.span1,
  427
+  .uneditable-input.span1 {
  428
+    width: 56px;
  429
+  }
  430
+  .thumbnails {
  431
+    margin-left: -30px;
  432
+  }
  433
+  .thumbnails > li {
  434
+    margin-left: 30px;
  435
+  }
  436
+  .row-fluid .thumbnails {
  437
+    margin-left: 0;
  438
+  }
  439
+}
  440
+
  441
+@media (min-width: 768px) and (max-width: 979px) {
  442
+  .row {
  443
+    margin-left: -20px;
  444
+    *zoom: 1;
  445
+  }
  446
+  .row:before,
  447
+  .row:after {
  448
+    display: table;
  449
+    line-height: 0;
  450
+    content: "";
  451
+  }
  452
+  .row:after {
  453
+    clear: both;
  454
+  }
  455
+  [class*="span"] {
  456
+    float: left;
  457
+    min-height: 1px;
  458
+    margin-left: 20px;
  459
+  }
  460
+  .container,
  461
+  .navbar-static-top .container,
  462
+  .navbar-fixed-top .container,
  463
+  .navbar-fixed-bottom .container {
  464
+    width: 724px;
  465
+  }
  466
+  .span12 {
  467
+    width: 724px;
  468
+  }
  469
+  .span11 {
  470
+    width: 662px;
  471
+  }
  472
+  .span10 {
  473
+    width: 600px;
  474
+  }
  475
+  .span9 {
  476
+    width: 538px;
  477
+  }
  478
+  .span8 {
  479
+    width: 476px;
  480
+  }
  481
+  .span7 {
  482
+    width: 414px;
  483
+  }
  484
+  .span6 {
  485
+    width: 352px;
  486
+  }
  487
+  .span5 {
  488
+    width: 290px;
  489
+  }
  490
+  .span4 {
  491
+    width: 228px;
  492
+  }
  493
+  .span3 {
  494
+    width: 166px;
  495
+  }
  496
+  .span2 {
  497
+    width: 104px;
  498
+  }
  499
+  .span1 {
  500
+    width: 42px;
  501
+  }
  502
+  .offset12 {
  503
+    margin-left: 764px;
  504
+  }
  505
+  .offset11 {
  506
+    margin-left: 702px;
  507
+  }
  508
+  .offset10 {
  509
+    margin-left: 640px;
  510
+  }
  511
+  .offset9 {
  512
+    margin-left: 578px;
  513
+  }
  514
+  .offset8 {
  515
+    margin-left: 516px;
  516
+  }
  517
+  .offset7 {
  518
+    margin-left: 454px;
  519
+  }
  520
+  .offset6 {
  521
+    margin-left: 392px;
  522
+  }
  523
+  .offset5 {
  524
+    margin-left: 330px;
  525
+  }
  526
+  .offset4 {
  527
+    margin-left: 268px;
  528
+  }
  529
+  .offset3 {
  530
+    margin-left: 206px;
  531
+  }
  532
+  .offset2 {
  533
+    margin-left: 144px;
  534
+  }
  535
+  .offset1 {
  536
+    margin-left: 82px;
  537
+  }
  538
+  .row-fluid {
  539
+    width: 100%;
  540
+    *zoom: 1;
  541
+  }
  542
+  .row-fluid:before,
  543
+  .row-fluid:after {
  544
+    display: table;
  545
+    line-height: 0;
  546
+    content: "";
  547
+  }
  548
+  .row-fluid:after {
  549
+    clear: both;
  550
+  }
  551
+  .row-fluid [class*="span"] {
  552
+    display: block;
  553
+    float: left;
  554
+    width: 100%;
  555
+    min-height: 30px;
  556
+    margin-left: 2.7624309392265194%;
  557
+    *margin-left: 2.709239449864817%;
  558
+    -webkit-box-sizing: border-box;
  559
+       -moz-box-sizing: border-box;
  560
+            box-sizing: border-box;
  561
+  }
  562
+  .row-fluid [class*="span"]:first-child {
  563
+    margin-left: 0;
  564
+  }
  565
+  .row-fluid .span12 {
  566
+    width: 100%;
  567
+    *width: 99.94680851063829%;
  568
+  }
  569
+  .row-fluid .span11 {
  570
+    width: 91.43646408839778%;
  571
+    *width: 91.38327259903608%;
  572
+  }
  573
+  .row-fluid .span10 {
  574
+    width: 82.87292817679558%;
  575
+    *width: 82.81973668743387%;
  576
+  }
  577
+  .row-fluid .span9 {
  578
+    width: 74.30939226519337%;
  579
+    *width: 74.25620077583166%;
  580
+  }
  581
+  .row-fluid .span8 {
  582
+    width: 65.74585635359117%;
  583
+    *width: 65.69266486422946%;
  584
+  }
  585
+  .row-fluid .span7 {
  586
+    width: 57.18232044198895%;
  587
+    *width: 57.12912895262725%;
  588
+  }
  589
+  .row-fluid .span6 {
  590
+    width: 48.61878453038674%;
  591
+    *width: 48.56559304102504%;
  592
+  }
  593
+  .row-fluid .span5 {
  594
+    width: 40.05524861878453%;
  595
+    *width: 40.00205712942283%;
  596
+  }
  597
+  .row-fluid .span4 {
  598
+    width: 31.491712707182323%;
  599
+    *width: 31.43852121782062%;
  600
+  }
  601
+  .row-fluid .span3 {
  602
+    width: 22.92817679558011%;
  603
+    *width: 22.87498530621841%;
  604
+  }
  605
+  .row-fluid .span2 {
  606
+    width: 14.3646408839779%;
  607
+    *width: 14.311449394616199%;
  608
+  }
  609
+  .row-fluid .span1 {
  610
+    width: 5.801104972375691%;
  611
+    *width: 5.747913483013988%;
  612
+  }
  613
+  .row-fluid .offset12 {
  614
+    margin-left: 105.52486187845304%;
  615
+    *margin-left: 105.41847889972962%;
  616
+  }
  617
+  .row-fluid .offset12:first-child {
  618
+    margin-left: 102.76243093922652%;
  619
+    *margin-left: 102.6560479605031%;
  620
+  }
  621
+  .row-fluid .offset11 {
  622
+    margin-left: 96.96132596685082%;
  623
+    *margin-left: 96.8549429881274%;
  624
+  }
  625
+  .row-fluid .offset11:first-child {
  626
+    margin-left: 94.1988950276243%;
  627
+    *margin-left: 94.09251204890089%;
  628
+  }
  629
+  .row-fluid .offset10 {
  630
+    margin-left: 88.39779005524862%;
  631
+    *margin-left: 88.2914070765252%;
  632
+  }
  633
+  .row-fluid .offset10:first-child {
  634
+    margin-left: 85.6353591160221%;
  635
+    *margin-left: 85.52897613729868%;
  636
+  }
  637
+  .row-fluid .offset9 {
  638
+    margin-left: 79.8342541436464%;
  639
+    *margin-left: 79.72787116492299%;
  640
+  }
  641
+  .row-fluid .offset9:first-child {
  642
+    margin-left: 77.07182320441989%;
  643
+    *margin-left: 76.96544022569647%;
  644
+  }
  645
+  .row-fluid .offset8 {
  646
+    margin-left: 71.2707182320442%;
  647
+    *margin-left: 71.16433525332079%;
  648
+  }
  649
+  .row-fluid .offset8:first-child {
  650
+    margin-left: 68.50828729281768%;
  651
+    *margin-left: 68.40190431409427%;
  652
+  }
  653
+  .row-fluid .offset7 {
  654
+    margin-left: 62.70718232044199%;
  655
+    *margin-left: 62.600799341718584%;
  656
+  }
  657
+  .row-fluid .offset7:first-child {
  658
+    margin-left: 59.94475138121547%;
  659
+    *margin-left: 59.838368402492065%;
  660
+  }
  661
+  .row-fluid .offset6 {
  662
+    margin-left: 54.14364640883978%;
  663
+    *margin-left: 54.037263430116376%;
  664
+  }
  665
+  .row-fluid .offset6:first-child {
  666
+    margin-left: 51.38121546961326%;
  667
+    *margin-left: 51.27483249088986%;
  668
+  }
  669
+  .row-fluid .offset5 {
  670
+    margin-left: 45.58011049723757%;
  671
+    *margin-left: 45.47372751851417%;