docs: Update docs and add release notes
refs: #1923 Change-Id: I89968ef130e85068eb20cfd2b81e414a16d243b8
This commit is contained in:
1 parent
2afef66e23
commit
b722b10127
33 files changed
+7338
-462
No files matched your search
+1
-1
@@ -3,4 +3,4 @@
|
||||
.lock*
|
||||
**/*.pyc
|
||||
build/
|
||||
|
||||
VERSION
|
||||
@@ -1,18 +1,19 @@
|
||||
#!/usr/bin/env python
|
||||
# encoding: utf-8
|
||||
# Hans-Martin von Gaudecker, 2012
|
||||
|
||||
# inspired by code by Hans-Martin von Gaudecker, 2012
|
||||
|
||||
import os
|
||||
from waflib import Node, Task, TaskGen, Errors, Logs, Build, Utils
|
||||
|
||||
class sphinx_build(Task.Task):
|
||||
color = 'BLUE'
|
||||
run_str = '${SPHINX_BUILD} -q -b ${BUILDERNAME} -d ${DOCTREEDIR} ${SRCDIR} ${OUTDIR}'
|
||||
run_str = '${SPHINX_BUILD} -D ${VERSION} -D ${RELEASE} -q -b ${BUILDERNAME} -d ${DOCTREEDIR} ${SRCDIR} ${OUTDIR}'
|
||||
|
||||
def __str__(self):
|
||||
env = self.env
|
||||
src_str = ' '.join([a.nice_path()for a in self.inputs])
|
||||
tgt_str = ' '.join([a.nice_path()for a in self.outputs])
|
||||
src_str = ' '.join([a.path_from(a.ctx.launch_node()) for a in self.inputs])
|
||||
tgt_str = ' '.join([a.path_from(a.ctx.launch_node()) for a in self.outputs])
|
||||
if self.outputs: sep = ' -> '
|
||||
else: sep = ''
|
||||
return'%s [%s]: %s%s%s\n'%(self.__class__.__name__.replace('_task',''),
|
||||
@@ -52,6 +53,8 @@ def apply_sphinx(self):
|
||||
task.env['SRCDIR'] = srcdir
|
||||
task.env['DOCTREEDIR'] = doctreedir
|
||||
task.env['OUTDIR'] = outdir.abspath()
|
||||
task.env['VERSION'] = "version=%s" % self.VERSION
|
||||
task.env['RELEASE'] = "release=%s" % self.VERSION
|
||||
|
||||
import imp
|
||||
confData = imp.load_source('sphinx_conf', conf.abspath())
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
Getting Started with NLSR
|
||||
=============================================
|
||||
|
||||
Getting Source
|
||||
--------------
|
||||
|
||||
- [Github NLSR repository](https://github.com/named-data/NLSR)
|
||||
|
||||
Installation instruction
|
||||
------------------------
|
||||
|
||||
- [Installation](https://github.com/named-data/NLSR/blob/master/docs/INSTALL.md)
|
||||
|
||||
Installing
|
||||
----------
|
||||
|
||||
To install NLSR from source:
|
||||
|
||||
- Install ndn-cxx according to [ndn-cxx installation instructions](http://named-data.net/doc/ndn-cxx/0.1.0/INSTALL.html)
|
||||
- Install nfd according to [nfd installation instructions](http://named-data.net/doc/NFD/current/INSTALL.html)
|
||||
- Install NLSR following [these instructions](https://github.com/named-data/NLSR/blob/master/docs/INSTALL.md)
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
After installing NLSR from source, you need to create a configuration file for
|
||||
NLSR. Please take a look at [nlsr.conf](https://github.com/named-data/NLSR/blob/master/nlsr.conf)
|
||||
for a sample configuration. For details on configuring a router, please refer to
|
||||
[build network topology](https://github.com/named-data/NLSR/blob/master/docs/TOPOLOGY.md)
|
||||
and for security configuration please refer to
|
||||
[NLSR's security configuration](https://github.com/named-data/NLSR/blob/master/docs/SECURITY.md)
|
||||
|
||||
Running
|
||||
-------
|
||||
|
||||
Run nlsr with the following command:
|
||||
|
||||
nlsr
|
||||
|
||||
NLSR will look for the default configuration file, nlsr.conf, in the current directory.
|
||||
|
||||
You can also run nlsr -f options as follows with the absolute path of the configuration file:
|
||||
|
||||
nlsr -f /nlsr/nlsr.conf
|
||||
@@ -0,0 +1,50 @@
|
||||
Getting Started with NLSR
|
||||
=========================
|
||||
|
||||
.. toctree::
|
||||
..
|
||||
|
||||
Getting Source
|
||||
--------------
|
||||
|
||||
- `Github NLSR repository <https://github.com/named-data/NLSR>`_
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
:doc:`INSTALL`
|
||||
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
After installing NLSR from source, you need to create a configuration file for
|
||||
NLSR. Please take a look at `nlsr.conf
|
||||
<https://github.com/named-data/NLSR/blob/master/nlsr.conf>`_ for a sample
|
||||
configuration. For details on configuring a router, please refer to
|
||||
:doc:`ROUTER-CONFIG`. For details on security configuration, please refer to
|
||||
:doc:`SECURITY-CONFIG`.
|
||||
|
||||
Running
|
||||
-------
|
||||
|
||||
Run nlsr with the following command:
|
||||
|
||||
::
|
||||
|
||||
nlsr
|
||||
|
||||
NLSR will look for the default configuration file, nlsr.conf, in the
|
||||
current directory.
|
||||
|
||||
You can also run ``nlsr -f`` with the absolute path of
|
||||
the configuration file:
|
||||
|
||||
::
|
||||
|
||||
nlsr -f /nlsr/nlsr.conf
|
||||
|
||||
To run NLSR as daemon, use the -d flag:
|
||||
|
||||
::
|
||||
|
||||
nlsr -d
|
||||
@@ -1,61 +0,0 @@
|
||||
NLSR Installation Instructions
|
||||
=============================
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
- [ndn-cxx library](https://github.com/named-data/ndn-cxx) and its requirements:
|
||||
|
||||
libcrypto
|
||||
libsqlite3
|
||||
libcrypto++
|
||||
pkg-config
|
||||
Boost libraries (>= 1.48)
|
||||
OSX Security framework (on OSX platform only)
|
||||
|
||||
Refer to [Getting started with ndn-cxx](http://named-data.net/doc/ndn-cxx/current/INSTALL.html) -for detailed installation instructions of the library.
|
||||
|
||||
|
||||
- [NFD](https://github.com/named-data/nfd) and its requirements:
|
||||
|
||||
Refer to [Getting started with NFD ](http://named-data.net/doc/NFD/current/getting-started.html)-for detailed installation and running instruction.
|
||||
|
||||
|
||||
- log4cxx library
|
||||
|
||||
On linux variants
|
||||
|
||||
sudo apt-get install liblog4cxx10-dev
|
||||
|
||||
On Mac OSx
|
||||
|
||||
sudo port install log4cxx
|
||||
|
||||
- protobuf
|
||||
|
||||
On Mac OSx
|
||||
|
||||
sudo port install protobuf-cpp
|
||||
|
||||
On linux variants
|
||||
|
||||
sudo apt-get install libprotobuf-dev protobuf-compiler
|
||||
|
||||
|
||||
Build
|
||||
-----
|
||||
|
||||
The following commands should be used to build NLSR:
|
||||
|
||||
./waf configure
|
||||
./waf
|
||||
sudo ./waf install
|
||||
|
||||
Refer to ./waf --help for more options that can be used during configure stage and
|
||||
how to properly configure and run NLSR.
|
||||
|
||||
If your pkgconfig path is not set properly you can do following before running `./waf configure`
|
||||
|
||||
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
|
||||
or
|
||||
export PKG_CONFIG_PATH=/path/to/pkgconfig/in/your/machine
|
||||
@@ -0,0 +1,66 @@
|
||||
NLSR Installation Instructions
|
||||
==============================
|
||||
|
||||
.. toctree::
|
||||
..
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
|
||||
- `NFD`_ and its requirements:
|
||||
|
||||
Refer to `Getting started with NFD`_ for detailed installation and running instruction.
|
||||
|
||||
- log4cxx library
|
||||
|
||||
On Linux:
|
||||
|
||||
::
|
||||
|
||||
sudo apt-get install liblog4cxx10-dev
|
||||
|
||||
On Mac OSx:
|
||||
|
||||
::
|
||||
|
||||
sudo port install log4cxx
|
||||
|
||||
- protobuf
|
||||
|
||||
On Linux:
|
||||
|
||||
::
|
||||
|
||||
sudo apt-get install libprotobuf-dev protobuf-compiler
|
||||
|
||||
On Mac OSx:
|
||||
|
||||
::
|
||||
|
||||
sudo port install protobuf-cpp
|
||||
|
||||
Build
|
||||
-----
|
||||
|
||||
The following commands should be used to build NLSR:
|
||||
|
||||
::
|
||||
|
||||
./waf configure
|
||||
./waf
|
||||
sudo ./waf install
|
||||
|
||||
Refer to ./waf –help for more options that can be used during the configure
|
||||
stage and how to properly configure NLSR.
|
||||
|
||||
If your pkgconfig path is not set properly you can do following before
|
||||
running ``./waf configure``
|
||||
|
||||
::
|
||||
|
||||
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/
|
||||
or
|
||||
export PKG_CONFIG_PATH=/path/to/pkgconfig/in/your/machine
|
||||
|
||||
.. _NFD: http://named-data.net/doc/NFD/current/
|
||||
.. _Getting started with NFD: http://named-data.net/doc/NFD/current/INSTALL.html
|
||||
@@ -0,0 +1,44 @@
|
||||
Release Notes
|
||||
==============
|
||||
|
||||
.. toctree::
|
||||
..
|
||||
|
||||
Version 0.1.0 is the initial release of NLSR, a routing protocol for NDN.
|
||||
|
||||
The main design goal of NLSR is to provide a routing protocol to
|
||||
populate `NFD`_’s FIB. NLSR calculates the routing table using link-state
|
||||
or hyperbolic routing and produces multiple faces for each reachable
|
||||
name prefix in a single authoritative domain.
|
||||
|
||||
The current features include:
|
||||
|
||||
- **Produce a list of ranked forwarding options for each name prefix to facilitate NDN’s adaptive forwarding strategies**
|
||||
|
||||
- **Name Prefix advertisement**
|
||||
|
||||
+ Advertise availability of data through the configured router
|
||||
|
||||
- **Use ChronoSync to synchronize routers' LSA sequence numbers and Interest/Data to retrieve LSAs**
|
||||
|
||||
- **Limit faces per prefix**
|
||||
|
||||
+ Configure maximum number of faces per prefix in NFD's FIB
|
||||
|
||||
- **Automatic NFD tunnel configuration and maintainance to neighbors**
|
||||
|
||||
- **Routing protocol**
|
||||
|
||||
+ Link State routing
|
||||
+ **Hyperbolic routing**
|
||||
|
||||
+ Calculates route cost based on a node's polar coordinates
|
||||
|
||||
- **Use a hierarchical trust model for routing within a single administrative domain**
|
||||
|
||||
- **NFD Forwarding Information Base (FIB) consistency**
|
||||
|
||||
+ Provides shortest path next hops for efficient forwarding
|
||||
+ Keeps NFD's FIB updated on node failure and recovery
|
||||
|
||||
.. _NFD: http://named-data.net/doc/NFD/current/
|
||||
@@ -1,57 +1,72 @@
|
||||
Example network and sample configuration:
|
||||
=========================================
|
||||
Router Configuration
|
||||
====================
|
||||
|
||||
Lets assume that three routers in the same network but at three different sites (
|
||||
memphis.edu, arizona.edu, and colostate.edu) are connected to each other to
|
||||
.. toctree::
|
||||
..
|
||||
|
||||
Example network and sample configuration
|
||||
----------------------------------------
|
||||
|
||||
Assume that three routers in the same network, but at three different sites
|
||||
(``memphis.edu``, ``arizona.edu``, and ``colostate.edu``), are connected to each other to
|
||||
construct the following topology:
|
||||
|
||||
-------------------------------------
|
||||
::
|
||||
|
||||
+-------------------------------------+
|
||||
| /ndn/edu/memphis/%C1.Router/router1 |
|
||||
-------------------------------------
|
||||
+-------------------------------------+
|
||||
/ 11 12\
|
||||
/ \
|
||||
route-cost = 25 / \ route-cost = 30
|
||||
/ \
|
||||
17 / \ 13
|
||||
------------------------------------- 7 10 --------------------------------------
|
||||
+-----------------------------------+ 7 10 +-------------------------------------+
|
||||
|/ndn/edu/arizona/%C1.Router/router3|-------------------|/ndn/edu/colostate/%C1.Router/router2|
|
||||
------------------------------------- route-cost = 28 --------------------------------------
|
||||
+-----------------------------------+ route-cost = 28 +-------------------------------------+
|
||||
|
||||
Figure: Network Topology
|
||||
|
||||
The number represents the connecting face id. For example, `/ndn/edu/memphis/%C1.Router/router1`
|
||||
is connected to `/ndn/edu/arizona/%C1.Router/router3` via face 11 and the route cost is 25.
|
||||
To reach `/ndn/edu/colostate/%C1.Router/router2` via face 12, the route cost is 30.
|
||||
The number represents the connecting face id. For example,
|
||||
``/ndn/edu/memphis/%C1.Router/router1`` is connected to
|
||||
``/ndn/edu/arizona/%C1.Router/router3`` via face 11 and the route cost is 25. To reach
|
||||
``/ndn/edu/colostate/%C1.Router/router2`` via face 12, the route cost is 30.
|
||||
|
||||
We will walk through setting up the faces and creating the configuration file for
|
||||
`/ndn/edu/memphis/%C1.Router/router1`.
|
||||
``/ndn/edu/memphis/%C1.Router/router1``.
|
||||
|
||||
Step 1. Ensure nfd is running
|
||||
-------------------------------
|
||||
|
||||
Step 1. Ensure nfd is running :
|
||||
----------------
|
||||
Type the following in the terminal:
|
||||
|
||||
"nfd-status -f"
|
||||
::
|
||||
|
||||
nfd-status -f
|
||||
|
||||
if you see `ERROR: error while connecting to the forwarder (No such file or directory)`
|
||||
message that means nfd is not running. Follow the instructions in [Getting started with NFD ](http://named-data.net/doc/NFD/current/getting-started.html) to run nfd.
|
||||
If you see ``ERROR: error while connecting to the forwarder (No such file or directory)``,
|
||||
``nfd`` is not running. Follow the instructions in `Getting started with NFD
|
||||
<http://named-data.net/doc/NFD/current/INSTALL.html>`_ to run nfd.
|
||||
|
||||
Step 2. Determining FaceUri:
|
||||
--------------------
|
||||
Lets assume that `/ndn/edu/arizona/%C1.Router/router3` has hostname `router3.arizona.edu`
|
||||
and `/ndn/edu/colostate/%C1.Router/router2` has ip address `79.123.10.145`, and that all
|
||||
routers in the network had agreed to sync data in name prefix `/ndn/nlsr/sync`.
|
||||
`/ndn/edu/memphis/%C1.Router/router1` will consider face uri `udp4://router3.arizona.edu` for
|
||||
router `/ndn/edu/arizona/%C1.Router/router3` and face uri `udp4://79.123.10.145` for router
|
||||
`/ndn/edu/colostate/%C1.Router/router2`.
|
||||
Step 2. Determining FaceUri
|
||||
---------------------------
|
||||
|
||||
Step 3: Creating configuration file:
|
||||
------------------------------------
|
||||
Now, lets assume that /ndn/memphis.edu/router1 wants to advertise three name
|
||||
prefixes that can be reached through it ( `/ndn/memphis/sports/basketball/grizzlies`,
|
||||
`/ndn/memphis/entertainment/blues`, `/ndn/news/memphis/politics/lutherking`). Now,
|
||||
the configuration file with minimum configuration commands will have the following
|
||||
commands
|
||||
Assume that ``/ndn/edu/arizona/%C1.Router/router3`` has hostname ``router3.arizona.edu``,
|
||||
``/ndn/edu/colostate/%C1.Router/router2`` has ip address ``79.123.10.145``, and that all
|
||||
routers in the network have agreed to sync data with name prefix ``/ndn/nlsr/sync``.
|
||||
``/ndn/edu/memphis/%C1.Router/router1`` will consider face uri
|
||||
``udp4://router3.arizona.edu`` for router ``/ndn/edu/arizona/%C1.Router/router3`` and face
|
||||
uri ``udp4://79.123.10.145`` for router ``/ndn/edu/colostate/%C1.Router/router2``.
|
||||
|
||||
Step 3: Creating configuration file
|
||||
-----------------------------------
|
||||
|
||||
Now, assume that ``/ndn/memphis.edu/router1`` wants to advertise three name prefixes
|
||||
(``/ndn/memphis/sports/basketball/grizzlies``, ``/ndn/memphis/entertainment/blues``,
|
||||
``/ndn/news/memphis/politics/lutherking``). The configuration file with minimum
|
||||
configuration commands follows:
|
||||
|
||||
::
|
||||
|
||||
; nlsr.conf starts here
|
||||
; the general section contains all the general settings for router
|
||||
@@ -112,8 +127,9 @@ commands
|
||||
}
|
||||
}
|
||||
|
||||
; the hyperbolic section contains the configuration settings of enabling a router to calculate
|
||||
; routing table using [hyperbolic routing table calculation](http://arxiv.org/abs/0805.1266) method
|
||||
; the hyperbolic section contains the configuration settings of enabling
|
||||
a router to calculate ; routing table using `hyperbolic routing table
|
||||
calculation`_ method
|
||||
|
||||
hyperbolic
|
||||
{
|
||||
@@ -142,8 +158,8 @@ commands
|
||||
|
||||
}
|
||||
|
||||
; the advertising section contains the configuration settings of the name prefixes
|
||||
; hosted by this router
|
||||
; the advertising section contains the configuration settings of the
|
||||
name prefixes ; hosted by this router
|
||||
|
||||
advertising
|
||||
{
|
||||
@@ -155,39 +171,44 @@ commands
|
||||
prefix /ndn/news/memphis/politics/lutherking
|
||||
}
|
||||
|
||||
; security configuration is discussed
|
||||
;[NLSR's security configuration](https://github.com/named-data/NLSR/blob/master/docs/SECURITY.md)
|
||||
; which will be also part of this configuration file here
|
||||
;
|
||||
; nlsr.conf end here
|
||||
.. note::
|
||||
|
||||
Step 4: Running NLSR in /ndn/memphis.edu/router1:
|
||||
Security configuration is discussed in :doc:`SECURITY-CONFIG`, which will be also part
|
||||
of this configuration file
|
||||
|
||||
Step 4: Running NLSR on /ndn/memphis.edu/router1
|
||||
-------------------------------------------------
|
||||
Assuming the configuration file is saved as nlsr.conf. Type the following to run
|
||||
nlsr
|
||||
|
||||
Assuming the configuration file is saved as ``nlsr.conf``, type the following to run nlsr:
|
||||
|
||||
::
|
||||
|
||||
$ nlsr -f nlsr.conf
|
||||
|
||||
NLSR will look for nlsr.conf in the current directory. If nlsr.conf is not in
|
||||
the corrent directory, please provide the absolute path with the file name as the
|
||||
value. If nlsr.conf resides in /home/ndnuser/configuration directory, type "nlsr
|
||||
-f /home/ndnuser/configuration/nlsr.conf" to run nlsr.
|
||||
NLSR will look for nlsr.conf in the current directory. If nlsr.conf is not in the current
|
||||
directory, please provide the absolute path with the file name as the value. If
|
||||
``nlsr.conf`` resides in ``/home/ndnuser/configuration`` directory, type ``nlsr -f
|
||||
/home/ndnuser/configuration/nlsr.conf`` to run nlsr.
|
||||
|
||||
The same process needs to be followed for router /ndn/arizona.edu/router3 and
|
||||
/ndn/colostate.edu/router2 to run NLSR on these routers.
|
||||
The same process needs to be followed for ``/ndn/arizona.edu/router3`` and
|
||||
``/ndn/colostate.edu/router2`` to run NLSR on these routers.
|
||||
|
||||
Expected Output:
|
||||
Expected Output
|
||||
----------------
|
||||
Assuming that all three routers are configured correctly and converged, nfd-status
|
||||
in `/ndn/edu/colostate/%C1.Router/router2` will have the following entries for the
|
||||
name advertised by `/ndn/edu/memphis/%C1.Router/router1`. This output can be
|
||||
seen by typing `nfd-status -b` in terminal
|
||||
|
||||
Assuming that all three routers are configured correctly and have converged, ``nfd-status`` in
|
||||
``/ndn/edu/colostate/%C1.Router/router2`` will have the following entries for the name
|
||||
advertised by ``/ndn/edu/memphis/%C1.Router/router1``:
|
||||
|
||||
FIB:
|
||||
|
||||
::
|
||||
|
||||
/ndn/memphis/sports/basketball/grizzlies nexthops={faceid=17 (cost=25), faceid=7 (cost=58)}
|
||||
/ndn/memphis/entertainment/blues nexthops={faceid=17 (cost=25), faceid=7 (cost=58)}
|
||||
/ndn/news/memphis/politics/lutherking nexthops={faceid=17 (cost=25), faceid=7 (cost=58)}
|
||||
|
||||
Please refer to the network figure for face id. Numbers at the end of each link
|
||||
correspond to face ids.
|
||||
This output can be seen by typing ``nfd-status -b`` in the terminal. Please refer to the
|
||||
network figure for face IDs.
|
||||
|
||||
.. _hyperbolic routing table calculation: http://arxiv.org/abs/0805.1266
|
||||
@@ -0,0 +1,62 @@
|
||||
Security Configuration
|
||||
=======================
|
||||
|
||||
.. toctree::
|
||||
..
|
||||
|
||||
The trust model of NLSR is semi-hierarchical. An example certificate signing hierarchy is:
|
||||
|
||||
::
|
||||
|
||||
root
|
||||
|
|
||||
+--------------+---------------+
|
||||
site1 site2
|
||||
| |
|
||||
+---------+---------+ +
|
||||
operator1 operator2 operator3
|
||||
| | |
|
||||
+-----+-----+ +----+-----+ +-----+-----+--------+
|
||||
router1 router2 router3 router4 router5 router6 router7
|
||||
| | | | | | |
|
||||
+ + + + + + +
|
||||
NLSR NSLR NSLR NSLR NSLR NSLR NSLR
|
||||
|
||||
Each entity’s name and corresponding certificate name follow the
|
||||
convention below:
|
||||
|
||||
======== ===================================================== ================================= ===============================================
|
||||
Entity Identity Name Example Certificate Name Example
|
||||
-------- ----------------------------------------------------- --------------------------------- -----------------------------------------------
|
||||
root /\<network\> /ndn /ndn/KEY/ksk-1/ID-CERT/%01
|
||||
site /\<network\>/\<site\> /ndn/edu/ucla /ndn/edu/ucla/KEY/ksk-2/ID-CERT/%01
|
||||
operator /\<network\>/\<site\>/%C1.Operator/\<operator-name\> /ndn/edu/ucla/%C1.Operator/op1 /ndn/edu/ucla/%C1.Operator/op1/KEY/ksk-3/ID-CERT/%01
|
||||
router /\<network\>/\<site\>/%C1.Router/\<router-name\> /ndn/edu/ucla/%C1.Router/rt1 /ndn/edu/ucla/%C1.Router/rt1/KEY/ksk-4/ID-CERT/%01
|
||||
NLSR /\<network\>/\<site\>/%C1.Router/\<router-name\>/NLSR /ndn/edu/ucla/%C1.Router/rt1/NLSR /ndn/edu/ucla/%C1.Router/rt1/NLSR/KEY/ksk-5/ID-CERT/%01
|
||||
======== ===================================================== ================================= ===============================================
|
||||
|
||||
Users should create keys according to the naming and signing hierarchies above.
|
||||
|
||||
Certificate Publishing
|
||||
----------------------
|
||||
|
||||
In a network, every router should have the root certificate configured as a trust
|
||||
anchor. For each site, at least one router should publish the site certificate, and at
|
||||
least one router should publish the certificate of the site operator. Each router should
|
||||
publish its own certificate. All this information should be explicitly specified in the
|
||||
nlsr.conf file. For example, the following configuration file indicates that NLSR should
|
||||
publish the site certificate and the router certificate:
|
||||
|
||||
::
|
||||
|
||||
...
|
||||
security
|
||||
{
|
||||
validator
|
||||
{
|
||||
...
|
||||
}
|
||||
cert-to-publish "site.cert" ; name of the file which contains the site certificate (optional).
|
||||
cert-to-publish "router.cert" ; name of the file which contains the router certificate (required).
|
||||
...
|
||||
}
|
||||
@@ -1,282 +0,0 @@
|
||||
##Trust Model For NLSR
|
||||
|
||||
The trust model of NLSR is semi-hierarchical.
|
||||
An example certificate signing hierarchy is:
|
||||
|
||||
root
|
||||
|
|
||||
+--------------+---------------+
|
||||
site1 site2
|
||||
| |
|
||||
+---------+---------+ +
|
||||
operator1 operator2 operator3
|
||||
| | |
|
||||
+-----+-----+ +----+-----+ +-----+-----+--------+
|
||||
router1 router2 router3 router4 router5 router6 router7
|
||||
| | | | | | |
|
||||
+ + + + + + +
|
||||
NLSR NSLR NSLR NSLR NSLR NSLR NSLR
|
||||
|
||||
Each entity's name and corresponding certificate name follow the convention below:
|
||||
|
||||
Entity | Identity Name | Example | Certificate Name Example
|
||||
-------- | ------------------------------------------------- | ------------------------------- | -----------------------------------------------
|
||||
root | /\<network\> | /ndn | /ndn/KEY/ksk-1/ID-CERT/%01
|
||||
site | /\<network\>/\<site\> | /ndn/edu/ucla | /ndn/edu/ucla/KEY/ksk-2/ID-CERT/%01
|
||||
operator | /\<network\>/\<site\>/%C1.Operator/\<operator-name\> | /ndn/edu/ucla/%C1.Operator/op1 | /ndn/edu/ucla/%C1.Operator/op1/KEY/ksk-3/ID-CERT/%01
|
||||
router | /\<network\>/\<site\>/%C1.Router/\<router-name\> | /ndn/edu/ucla/%C1.Router/rt1 | /ndn/edu/ucla/%C1.Router/rt1/KEY/ksk-4/ID-CERT/%01
|
||||
NLSR | /\<network\>/\<site\>/%C1.Router/\<router-name\>/NLSR | /ndn/edu/ucla/%C1.Router/rt1/NLSR | /ndn/edu/ucla/%C1.Router/rt1/NLSR/KEY/ksk-5/ID-CERT/%01
|
||||
|
||||
Users should create keys according to the naming and signing hierarchies above.
|
||||
|
||||
## Certificate Publishing
|
||||
|
||||
In a network, every router should have the root certificate configured as a trust anchor.
|
||||
For each site, at least one router should publish the site certificate, at least one router should publish the certificate of the site operator.
|
||||
Each router should publish its own certificate.
|
||||
All this information should be explicitly specified in nlsr.conf file.
|
||||
For example, the following configuration file indicates that NLSR should publish the site certificate and the router certificate:
|
||||
|
||||
...
|
||||
security
|
||||
{
|
||||
validator
|
||||
{
|
||||
...
|
||||
}
|
||||
cert-to-publish "site.cert" ; name of the file which contains the site certificate (optional).
|
||||
cert-to-publish "router.cert" ; name of the file which contains the router certificate (required).
|
||||
}
|
||||
|
||||
Note that when a new NLSR instance is created, it will create a new key for the instance; generating the certificate for the new NLSR key is handled internally in NLSR.
|
||||
Therefore, user does not have to explcitly create keys and certificate for each NLSR instance.
|
||||
|
||||
For key and certificate generation, please refer to the [ndnsec tool kit](http://named-data.net/doc/ndn-cxx/0.1.0/manpages/ndnsec.html).
|
||||
|
||||
## Example
|
||||
|
||||
Security Configuration: Every machine in network will have the same set of security rules to configure.
|
||||
However, different machine will have different configuration commands "cert-to-publish"
|
||||
depending on responsibility. Let us use the same topology used for example(https://github.com/named-data/NLSR/blob/master/docs/TOPOLOGY.md).
|
||||
|
||||
ndnsec-key-gen generates a key
|
||||
|
||||
Lets assume that `/ndn/memphis.edu/router1` is the router who is responsible as the memphis
|
||||
site router and also responsible as root which is the trust anchor of the network. So
|
||||
router in memphis will do the following key creation and signing.
|
||||
|
||||
NOTE: The first two steps may not apply to everyone as the root certificate and the site certificate are usually present at a testbed outside the scope of NLSR. These steps will help if you are testing an isolated testbed.
|
||||
|
||||
1. Create root key and self signed certificate with prefis `/ndn`
|
||||
$ndnsec-key-gen -n /ndn > root.cert
|
||||
This root.cert will be configured by "cert-to-publish" commands in nlsr.conf
|
||||
|
||||
2. Generate key for site prefix `/ndn/edu/memphis` and sign it by root key
|
||||
$ndnsec-key-gen -n /ndn/edu/memphis > selfsigned_site.cert
|
||||
$ndnsec-cert-gen -S 20140701000000 -E 20150701000000 -N "University of Memphis"
|
||||
-s /ndn -p /ndn/edu/memphis -r selfsigned_site.cert > site.cert
|
||||
|
||||
3. Generate key for operator and sign it by memphis site key. Lets assume that
|
||||
operator name in Memphis site is ndnuser, so the prefix is `/ndn/edu/memphis/%C1.O.N./ndnuser`
|
||||
$ndnsec-key-gen -n /ndn/edu/memphis/%C1.Operator/ndnuser > selfsigned_operator.cert
|
||||
$ndnsec-cert-gen -S 20140701000000 -E 20150701000000 -N "University of Memphis Operator"
|
||||
-s /ndn/edu/memphis -p /ndn/edu/memphis/%C1.Operator/ndnuser
|
||||
-r selfsigned_operator.cert > operator.cert
|
||||
|
||||
4. Generate key for router and sign it with operator's key
|
||||
$ndnsec-key-gen /ndn/edu/memphis/%C1.Router/router1 > selfsigned_router.cert
|
||||
$ndnsec-cert-gen -S 20140701000000 -E 20150701000000 -N "University of Memphis Router"
|
||||
-s /ndn/edu/memphis/%C1.Operator/ndnuser -p /ndn/edu/memphis/%C1.Router/router1
|
||||
-r selfsigned_router.cert > router.cert
|
||||
|
||||
|
||||
Key creation and signing is done for `/ndn/memphis.edu/router1`. In nlsr.conf
|
||||
this router will have this lines
|
||||
|
||||
cert-to-publish "root.cert"
|
||||
cert-to-publish "site.cert"
|
||||
cert-to-publish "operator.cert"
|
||||
cert-to-publish "router.cert"
|
||||
|
||||
Here is the entire security configuraion of the router1 (As seen in nlsr.conf. Note that only the semi-colons before the certs have been removed, rest is same)
|
||||
|
||||
security
|
||||
{
|
||||
validator
|
||||
{
|
||||
rule
|
||||
{
|
||||
id "NSLR Hello Rule"
|
||||
for data
|
||||
filter
|
||||
{
|
||||
type name
|
||||
regex ^[^<NLSR><INFO>]*<NLSR><INFO><><>$
|
||||
}
|
||||
checker
|
||||
{
|
||||
type customized
|
||||
sig-type rsa-sha256
|
||||
key-locator
|
||||
{
|
||||
type name
|
||||
hyper-relation
|
||||
{
|
||||
k-regex ^([^<KEY><NLSR>]*)<NLSR><KEY><ksk-.*><ID-CERT>$
|
||||
k-expand \\1
|
||||
h-relation equal
|
||||
p-regex ^([^<NLSR><INFO>]*)<NLSR><INFO><><>$
|
||||
p-expand \\1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rule
|
||||
{
|
||||
id "NSLR LSA Rule"
|
||||
for data
|
||||
filter
|
||||
{
|
||||
type name
|
||||
regex ^[^<NLSR><LSA>]*<NLSR><LSA>
|
||||
}
|
||||
checker
|
||||
{
|
||||
type customized
|
||||
sig-type rsa-sha256
|
||||
key-locator
|
||||
{
|
||||
type name
|
||||
hyper-relation
|
||||
{
|
||||
k-regex ^([^<KEY><NLSR>]*)<NLSR><KEY><ksk-.*><ID-CERT>$
|
||||
k-expand \\1
|
||||
h-relation equal
|
||||
p-regex ^([^<NLSR><LSA>]*)<NLSR><LSA>(<>*)<><><>$
|
||||
p-expand \\1\\2
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rule
|
||||
{
|
||||
id "NSLR Hierarchy Exception Rule"
|
||||
for data
|
||||
filter
|
||||
{
|
||||
type name
|
||||
regex ^[^<KEY><%C1.Router>]*<%C1.Router>[^<KEY><NLSR>]*<KEY><ksk-.*><ID-CERT><>$
|
||||
}
|
||||
checker
|
||||
{
|
||||
type customized
|
||||
sig-type rsa-sha256
|
||||
key-locator
|
||||
{
|
||||
type name
|
||||
hyper-relation
|
||||
{
|
||||
k-regex ^([^<KEY><%C1.Operator>]*)<%C1.Operator>[^<KEY>]*<KEY><ksk-.*><ID-CERT>$
|
||||
k-expand \\1
|
||||
h-relation equal
|
||||
p-regex ^([^<KEY><%C1.Router>]*)<%C1.Router>[^<KEY>]*<KEY><ksk-.*><ID-CERT><>$
|
||||
p-expand \\1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rule
|
||||
{
|
||||
id "NSLR Hierarchical Rule"
|
||||
for data
|
||||
filter
|
||||
{
|
||||
type name
|
||||
regex ^[^<KEY>]*<KEY><ksk-.*><ID-CERT><>$
|
||||
}
|
||||
checker
|
||||
{
|
||||
type hierarchical
|
||||
sig-type rsa-sha256
|
||||
}
|
||||
}
|
||||
|
||||
trust-anchor
|
||||
{
|
||||
type file
|
||||
file-name "root.cert"
|
||||
}
|
||||
}
|
||||
;cert-to-publish "root.cert" //optional, a file containing the root certificate. only the router
|
||||
//that is designated to publish root cert needs to specify this
|
||||
cert-to-publish "site.cert" //optional, a file containing the root certificate. only the router
|
||||
//that is designated to publish site cert need to specify this
|
||||
cert-to-publish "operator.cert" //optional, a file containing the root certificate. only the
|
||||
//router that is designated to publish operator cert need to
|
||||
//specify this
|
||||
cert-to-publish "router.cert" //required, a file containing the router certificate.
|
||||
}
|
||||
|
||||
Now lets see how `/ndn/colostate.edu/router2` will create and sign keys. Let assume
|
||||
that this router is responsible for hosting site keys and operator keys of colorado
|
||||
site.
|
||||
|
||||
2. Generate key for site prefix `/ndn/edu/colorado`
|
||||
$ndnsec-key-gen -n /ndn/edu/memphis > selfsigned_site.cert
|
||||
|
||||
Send this cert to Memphis site ( as in example Memphis is the root) and get
|
||||
it signed by root. After you get back the site please put it in your convenient
|
||||
certificate directory.
|
||||
|
||||
3. Generate key for operator and sign it by colorado site key. Lets assume that
|
||||
operator name in Colorado site is testop, so the prefix is `/ndn/edu/colorado/%C1.O.N./testop`
|
||||
$ndnsec-key-gen -n /ndn/edu/colorado/%C1.Operator/testop > unsigned_operator.cert
|
||||
$ndnsec-cert-gen -S 20140701000000 -E 20150701000000 -N "Colorado State University Operator"
|
||||
-s /ndn/edu/colorado -p /ndn/edu/colorado/%C1.Operator/testop
|
||||
-r selfsigned_operator.cert > operator.cert
|
||||
|
||||
4. Generate key for router and sign it with operator's key
|
||||
$ndnsec-key-gen /ndn/edu/colorado/%C1.Router/router2 > unsigned_router.cert
|
||||
$ndnsec-cert-gen -S 20140701000000 -E 20150701000000 -N "Colorado State University Router"
|
||||
-s /ndn/edu/colorado/%C1.Operator/testop -p /ndn/edu/colorado/%C1.Router/router2
|
||||
-r selfsigned_router.cert > router.cert
|
||||
|
||||
|
||||
Key creation and signing is done for `/ndn/edu/colorado/router2`. In nlsr.conf
|
||||
this router will have these lines
|
||||
|
||||
cert-to-publish "site.cert"
|
||||
cert-to-publish "operator.cert"
|
||||
cert-to-publish "router.cert"
|
||||
|
||||
(The rest of the security configuration is same as the other router.)
|
||||
|
||||
Colorado also need to bring the root.cert from Memphis and put it in the certificate
|
||||
directory as it is configured as trust anchor.
|
||||
|
||||
Now both Memphis and Colorado router is ready to run with security configuration.
|
||||
Arizona router will follow the same step as Colorado to configure security for NLSR.
|
||||
|
||||
|
||||
# Disabling Security in NLSR
|
||||
|
||||
To disable packet validation in NLSR, you need to change the configuration file
|
||||
in section: security.validator.trust-anchor
|
||||
|
||||
trust-anchor
|
||||
{
|
||||
type file
|
||||
file-name "root.cert"
|
||||
}
|
||||
|
||||
change the previous section in security configuration to below
|
||||
|
||||
trust-anchor
|
||||
{
|
||||
type any
|
||||
}
|
||||
|
||||
With this change, packets are still signed, but validation will be skipped.
|
||||
Whitespace-only changes.
+232
@@ -0,0 +1,232 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# NLSR - Named Data Link State Routing Protocol documentation build configuration file, created by
|
||||
# sphinx-quickstart on Sun Apr 6 19:58:22 2014.
|
||||
#
|
||||
# This file is execfile()d with the current directory set to its
|
||||
# containing dir.
|
||||
#
|
||||
# Note that not all possible configuration values are present in this
|
||||
# autogenerated file.
|
||||
#
|
||||
# All configuration values have a default; values that are commented out
|
||||
# serve to show the default.
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
# If extensions (or modules to document with autodoc) are in another directory,
|
||||
# add these directories to sys.path here. If the directory is relative to the
|
||||
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||
#sys.path.insert(0, os.path.abspath('.'))
|
||||
|
||||
# -- General configuration ------------------------------------------------
|
||||
|
||||
# If your documentation needs a minimal Sphinx version, state it here.
|
||||
#needs_sphinx = '1.0'
|
||||
|
||||
# Add any Sphinx extension module names here, as strings. They can be
|
||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||
# ones.
|
||||
extensions = [
|
||||
'sphinx.ext.todo',
|
||||
]
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
# The suffix of source filenames.
|
||||
source_suffix = '.rst'
|
||||
|
||||
# The encoding of source files.
|
||||
#source_encoding = 'utf-8-sig'
|
||||
|
||||
# The master toctree document.
|
||||
master_doc = 'index'
|
||||
|
||||
# General information about the project.
|
||||
project = u'NLSR - Named Data Link State Routing Protocol'
|
||||
copyright = u'2014, Named Data Networking Project'
|
||||
|
||||
# The version info for the project you're documenting, acts as replacement for
|
||||
# |version| and |release|, also used in various other places throughout the
|
||||
# built documents.
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
#language = None
|
||||
|
||||
# There are two options for replacing |today|: either, you set today to some
|
||||
# non-false value, then it is used:
|
||||
#today = ''
|
||||
# Else, today_fmt is used as the format for a strftime call.
|
||||
#today_fmt = '%B %d, %Y'
|
||||
|
||||
# List of patterns, relative to source directory, that match files and
|
||||
# directories to ignore when looking for source files.
|
||||
exclude_patterns = []
|
||||
|
||||
# The reST default role (used for this markup: `text`) to use for all
|
||||
# documents.
|
||||
#default_role = None
|
||||
|
||||
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||
#add_function_parentheses = True
|
||||
|
||||
# If true, the current module name will be prepended to all description
|
||||
# unit titles (such as .. function::).
|
||||
#add_module_names = True
|
||||
|
||||
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||
# output. They are ignored by default.
|
||||
#show_authors = False
|
||||
|
||||
# The name of the Pygments (syntax highlighting) style to use.
|
||||
pygments_style = 'sphinx'
|
||||
|
||||
# A list of ignored prefixes for module index sorting.
|
||||
#modindex_common_prefix = []
|
||||
|
||||
# If true, keep warnings as "system message" paragraphs in the built documents.
|
||||
#keep_warnings = False
|
||||
|
||||
|
||||
# -- Options for HTML output ----------------------------------------------
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
# html_theme = 'default'
|
||||
html_theme = 'named_data_theme'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
# documentation.
|
||||
#html_theme_options = {}
|
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
html_theme_path = ['./']
|
||||
|
||||
# The name for this set of Sphinx documents. If None, it defaults to
|
||||
# "<project> v<release> documentation".
|
||||
#html_title = None
|
||||
|
||||
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||
#html_short_title = None
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top
|
||||
# of the sidebar.
|
||||
#html_logo = None
|
||||
|
||||
# The name of an image file (within the static path) to use as favicon of the
|
||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||
# pixels large.
|
||||
#html_favicon = None
|
||||
|
||||
# Add any paths that contain custom static files (such as style sheets) here,
|
||||
# relative to this directory. They are copied after the builtin static files,
|
||||
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||
html_static_path = ['_static']
|
||||
|
||||
# Add any extra paths that contain custom files (such as robots.txt or
|
||||
# .htaccess) here, relative to this directory. These files are copied
|
||||
# directly to the root of the documentation.
|
||||
#html_extra_path = []
|
||||
|
||||
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||
# using the given strftime format.
|
||||
#html_last_updated_fmt = '%b %d, %Y'
|
||||
|
||||
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||
# typographically correct entities.
|
||||
#html_use_smartypants = True
|
||||
|
||||
# Custom sidebar templates, maps document names to template names.
|
||||
#html_sidebars = {}
|
||||
|
||||
# Additional templates that should be rendered to pages, maps page names to
|
||||
# template names.
|
||||
#html_additional_pages = {}
|
||||
|
||||
# If false, no module index is generated.
|
||||
#html_domain_indices = True
|
||||
|
||||
# If false, no index is generated.
|
||||
#html_use_index = True
|
||||
|
||||
# If true, the index is split into individual pages for each letter.
|
||||
#html_split_index = False
|
||||
|
||||
# If true, links to the reST sources are added to the pages.
|
||||
#html_show_sourcelink = True
|
||||
|
||||
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
||||
#html_show_sphinx = True
|
||||
|
||||
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
||||
#html_show_copyright = True
|
||||
|
||||
# If true, an OpenSearch description file will be output, and all pages will
|
||||
# contain a <link> tag referring to it. The value of this option must be the
|
||||
# base URL from which the finished HTML is served.
|
||||
#html_use_opensearch = ''
|
||||
|
||||
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
||||
html_file_suffix = ".html"
|
||||
|
||||
# Output file base name for HTML help builder.
|
||||
htmlhelp_basename = 'nlsr-docs'
|
||||
|
||||
|
||||
# -- Options for LaTeX output ---------------------------------------------
|
||||
|
||||
latex_elements = {
|
||||
# The paper size ('letterpaper' or 'a4paper').
|
||||
#'papersize': 'letterpaper',
|
||||
|
||||
# The font size ('10pt', '11pt' or '12pt').
|
||||
#'pointsize': '10pt',
|
||||
|
||||
# Additional stuff for the LaTeX preamble.
|
||||
#'preamble': '',
|
||||
}
|
||||
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title,
|
||||
# author, documentclass [howto, manual, or own class]).
|
||||
latex_documents = [
|
||||
('index', 'nlsr-docs.tex', u'NLSR - Named Data Link State Routing Protocol Documentation',
|
||||
u'Named Data Networking Project', 'manual'),
|
||||
]
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of
|
||||
# the title page.
|
||||
#latex_logo = None
|
||||
|
||||
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||
# not chapters.
|
||||
#latex_use_parts = False
|
||||
|
||||
# If true, show page references after internal links.
|
||||
#latex_show_pagerefs = False
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#latex_show_urls = False
|
||||
|
||||
# Documents to append as an appendix to all manuals.
|
||||
#latex_appendices = []
|
||||
|
||||
# If false, no module index is generated.
|
||||
#latex_domain_indices = True
|
||||
|
||||
|
||||
# -- Options for manual page output ---------------------------------------
|
||||
|
||||
# One entry per manual page. List of tuples
|
||||
# (source start file, name, description, authors, manual section).
|
||||
man_pages = [
|
||||
# ('manpages/nlsr', 'nlsr', u'Named Data Link State Routing Protocol Daemon', None, 1),
|
||||
]
|
||||
|
||||
|
||||
# If true, show URL addresses after external links.
|
||||
#man_show_urls = False
|
||||
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,62 @@
|
||||
NLSR - Named Data Link State Routing Protocol
|
||||
=============================================
|
||||
|
||||
NLSR is a routing protocol in NDN that populates NDN’s Forwarding Information Base. NLSR
|
||||
will continue to evolve alongside the Named Data Networking `protocol`_.
|
||||
|
||||
NLSR is an open and free software package licensed under the GPL 3.0 license and free to
|
||||
all Internet users and developers. For more information about the licensing details and
|
||||
limitations, refer to `COPYING.md`_.
|
||||
|
||||
NLSR is developed by the members of the `NSF-sponsored NDN project team`_. For more
|
||||
details, please refer to `AUTHORS.md`_. Bug reports and feedback are highly appreciated
|
||||
and can be made through the `Redmine site`_.
|
||||
|
||||
The main design goal of NLSR is to provide a routing protocol to populate NDN’s FIB. NLSR
|
||||
calculates the routing table using link-state or hyperbolic routing and produces multiple
|
||||
faces for each reachable name prefix in a single authoritative domain. NLSR will continue
|
||||
to evolve over time to include neighbor discovery and to become a full fledged
|
||||
inter-domain routing protocol for NDN. The project design is presented in full detail
|
||||
in the `NLSR Paper`_.
|
||||
|
||||
NLSR Documentation
|
||||
-------------------
|
||||
|
||||
.. toctree::
|
||||
:hidden:
|
||||
:maxdepth: 3
|
||||
|
||||
RELEASE-NOTES
|
||||
INSTALL
|
||||
GETTING-STARTED
|
||||
ROUTER-CONFIG
|
||||
SECURITY-CONFIG
|
||||
|
||||
- :doc:`INSTALL`
|
||||
- :doc:`GETTING-STARTED`
|
||||
- :doc:`ROUTER-CONFIG`
|
||||
- :doc:`SECURITY-CONFIG`
|
||||
- :doc:`RELEASE-NOTES`
|
||||
|
||||
Downloading
|
||||
---------------
|
||||
|
||||
- `Github NLSR repository`_
|
||||
|
||||
Additional information
|
||||
----------------------
|
||||
|
||||
- `NLSR Wiki`_
|
||||
|
||||
.. _protocol: http://named-data.net/doc/ndn-tlv/
|
||||
|
||||
.. _Github NLSR repository: https://github.com/named-data/NLSR
|
||||
|
||||
.. _NLSR Wiki: http://redmine.named-data.net/projects/nlsr/wiki/
|
||||
|
||||
.. _COPYING.md: https://github.com/named-data/NLSR/blob/master/COPYING.md
|
||||
.. _NSF-sponsored NDN project team: http://named-data.net/project/participants/
|
||||
.. _AUTHORS.md: https://github.com/named-data/NLSR/blob/master/AUTHORS.md
|
||||
.. _Redmine site: http://redmine.named-data.net/projects/nlsr
|
||||
|
||||
.. _NLSR Paper: http://conferences.sigcomm.org/sigcomm/2013/papers/icn/p15.pdf
|
||||
@@ -0,0 +1,96 @@
|
||||
{#
|
||||
named_data_theme/layout.html
|
||||
~~~~~~~~~~~~~~~~~
|
||||
#}
|
||||
{% extends "basic/layout.html" %}
|
||||
|
||||
{% block header %}
|
||||
<!--headercontainer-->
|
||||
<div id="header_container">
|
||||
|
||||
<!--header-->
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div id="logo">
|
||||
<a href="http://named-data.net" title="A Future Internet Architecture"><img src="http://named-data.net/wp-content/uploads/cropped-20130722_Logo2.png" alt="" /></a>
|
||||
</div><!--logo end-->
|
||||
</div>
|
||||
|
||||
<!--top menu-->
|
||||
<div class="nine columns" id="menu_container" >
|
||||
<h1><a href="{{ pathto(master_doc) }}">{{ shorttitle|e }}</a></h1>
|
||||
</div>
|
||||
</div>
|
||||
</div><!--header container end-->
|
||||
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="content-wrapper">
|
||||
<div class="content">
|
||||
<div class="document">
|
||||
{%- block document %}
|
||||
{{ super() }}
|
||||
{%- endblock %}
|
||||
</div>
|
||||
<div class="sidebar">
|
||||
{%- block sidebartoc %}
|
||||
<h3>{{ _('Table Of Contents') }}</h3>
|
||||
{{ toctree(includehidden=True) }}
|
||||
|
||||
<h3>{{ _('Additional documenation') }}</h3>
|
||||
<ul>
|
||||
<li class="toctree-l1"><a class="reference external" href="http://redmine.named-data.net/projects/nlsr/wiki">NLSR Wiki</a></li>
|
||||
<li class="toctree-l1"><a class="reference internal" href="doxygen/annotated.html">API documentation (doxygen)</a></li>
|
||||
</ul>
|
||||
{%- endblock %}
|
||||
{%- block sidebarsearch %}
|
||||
<h3 style="margin-top: 1.5em;">{{ _('Search') }}</h3>
|
||||
<form class="search" action="{{ pathto('search') }}" method="get">
|
||||
<input type="text" name="q" />
|
||||
<input type="submit" value="{{ _('Go') }}" />
|
||||
<input type="hidden" name="check_keywords" value="yes" />
|
||||
<input type="hidden" name="area" value="default" />
|
||||
</form>
|
||||
<p class="searchtip" style="font-size: 90%">
|
||||
{{ _('Enter search terms or a module, class or function name.') }}
|
||||
</p>
|
||||
{%- endblock %}
|
||||
</div>
|
||||
<div class="clearer"></div>
|
||||
</div>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}
|
||||
<div id="footer-container">
|
||||
<!--footer container-->
|
||||
<div class="row">
|
||||
</div><!-- footer container-->
|
||||
</div>
|
||||
|
||||
<div id="footer-info">
|
||||
<!--footer container-->
|
||||
<div class="row">
|
||||
<div class="twelve columns">
|
||||
|
||||
<div id="copyright">This research is partially supported by NSF (Award <a href="http://www.nsf.gov/awardsearch/showAward?AWD_ID=1040868" target="_blank>">CNS-1040868</a>)<br/><br/><a rel="license" href="http://creativecommons.org/licenses/by/3.0/deed.en_US" target="_blank">Creative Commons Attribution 3.0 Unported License</a> except where noted.</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div><!--footer info end-->
|
||||
|
||||
<script type="text/javascript">
|
||||
var _gaq = _gaq || [];
|
||||
_gaq.push(['_setAccount', 'UA-22320603-1']);
|
||||
_gaq.push(['_trackPageview']);
|
||||
(function() {
|
||||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||
})();
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
{% block relbar1 %}{% endblock %}
|
||||
{% block relbar2 %}{% endblock %}
|
||||
@@ -0,0 +1,24 @@
|
||||
<!-- start footer part -->
|
||||
<!--BEGIN GENERATE_TREEVIEW-->
|
||||
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
|
||||
<ul>
|
||||
$navpath
|
||||
<li class="footer">$generatedby
|
||||
<a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="$relpath$doxygen.png" alt="doxygen"/></a> $doxygenversion </li>
|
||||
</ul>
|
||||
</div>
|
||||
<!--END GENERATE_TREEVIEW-->
|
||||
<!--BEGIN !GENERATE_TREEVIEW-->
|
||||
<hr class="footer"/>
|
||||
<address class="footer"><small>
|
||||
$generatedby  <a href="http://www.doxygen.org/index.html">
|
||||
<img class="footer" src="$relpath$doxygen.png" alt="doxygen"/>
|
||||
</a> $doxygenversion
|
||||
</small></address>
|
||||
<!--END !GENERATE_TREEVIEW-->
|
||||
|
||||
<script type="text/javascript">
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,41 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
|
||||
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
|
||||
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
|
||||
<link href="$relpath$tabs.css" rel="stylesheet" type="text/css"/>
|
||||
<script type="text/javascript" src="$relpath$jquery.js"></script>
|
||||
<script type="text/javascript" src="$relpath$dynsections.js"></script>
|
||||
$treeview
|
||||
$search
|
||||
$mathjax
|
||||
<link href="$relpath$doxygen.css" rel="stylesheet" type="text/css"/>
|
||||
<link href="$relpath$named_data_doxygen.css" rel="stylesheet" type="text/css" />
|
||||
<link href="$relpath$favicon.ico" rel="shortcut icon" type="image/ico" />
|
||||
</head>
|
||||
<body>
|
||||
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
|
||||
|
||||
<!--BEGIN TITLEAREA-->
|
||||
<!--headercontainer-->
|
||||
<div id="header_container">
|
||||
|
||||
<!--header-->
|
||||
<div class="row">
|
||||
<div class="three columns">
|
||||
<div id="logo">
|
||||
<a href="http://named-data.net" title="A Future Internet Architecture"><img src="http://named-data.net/wp-content/uploads/cropped-20130722_Logo2.png" alt="" /></a>
|
||||
</div><!--logo end-->
|
||||
</div>
|
||||
|
||||
<!--top menu-->
|
||||
<div class="nine columns" id="menu_container" >
|
||||
<h1><a href="http://named-data.net/doc/NFD/$projectnumber/">$projectname $projectnumber documentation</a></h1>
|
||||
</div>
|
||||
</div>
|
||||
</div><!--header container end-->
|
||||
<!--END TITLEAREA-->
|
||||
|
||||
<!-- end header part -->
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 362 B |
@@ -0,0 +1,71 @@
|
||||
* {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
html { font-size: 62.5%; }
|
||||
|
||||
body {
|
||||
font-family: "Verdana", Arial, sans-serif;
|
||||
background-color: #eeeeec;
|
||||
color: #777;
|
||||
border-top: 4px solid #fd7800;
|
||||
}
|
||||
|
||||
body { background: white; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1; color: #222222; position: relative; -webkit-font-smoothing: antialiased; }
|
||||
|
||||
.clearer {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.left {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.right {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.line-block {
|
||||
display: block;
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.line-block .line-block {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
margin-left: 1.5em;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4 {
|
||||
font-family: "Georgia", "Times New Roman", serif;
|
||||
font-weight: normal;
|
||||
color: #3465a4;
|
||||
margin-bottom: .8em;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: #204a87;
|
||||
}
|
||||
|
||||
h2 {
|
||||
padding-bottom: .5em;
|
||||
border-bottom: 1px solid #3465a4;
|
||||
}
|
||||
|
||||
a.headerlink {
|
||||
visibility: hidden;
|
||||
color: #dddddd;
|
||||
padding-left: .3em;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
@@ -0,0 +1,459 @@
|
||||
* {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
html { font-size: 62.5%; }
|
||||
|
||||
body {
|
||||
font-family: {{ theme_bodyfont }};
|
||||
background-color: {{ theme_bgcolor }};
|
||||
color: #777;
|
||||
border-top: 4px solid #fd7800;
|
||||
}
|
||||
|
||||
body { background: white; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1; color: #222222; position: relative; -webkit-font-smoothing: antialiased; }
|
||||
|
||||
/* Page layout */
|
||||
|
||||
div.header, div.content, div.footer {
|
||||
width: 90%;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
div.header-wrapper {
|
||||
background: {{ theme_headerbg }};
|
||||
border-bottom: 3px solid #2e3436;
|
||||
}
|
||||
|
||||
|
||||
/* Default body styles */
|
||||
a {
|
||||
color: {{ theme_linkcolor }};
|
||||
}
|
||||
|
||||
div.bodywrapper a, div.footer a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.clearer {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.left {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.right {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.line-block {
|
||||
display: block;
|
||||
margin-top: 1em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.line-block .line-block {
|
||||
margin-top: 0;
|
||||
margin-bottom: 0;
|
||||
margin-left: 1.5em;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4 {
|
||||
font-family: {{ theme_headerfont }};
|
||||
font-weight: normal;
|
||||
color: {{ theme_headercolor2 }};
|
||||
margin-bottom: .8em;
|
||||
}
|
||||
|
||||
h1 {
|
||||
color: {{ theme_headercolor1 }};
|
||||
}
|
||||
|
||||
h2 {
|
||||
padding-bottom: .5em;
|
||||
border-bottom: 1px solid {{ theme_headercolor2 }};
|
||||
}
|
||||
|
||||
a.headerlink {
|
||||
visibility: hidden;
|
||||
color: #dddddd;
|
||||
padding-left: .3em;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
div.admonition {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
padding: 2px 7px 1px 7px;
|
||||
border-left: 0.2em solid black;
|
||||
}
|
||||
|
||||
p.admonition-title {
|
||||
margin: 0px 10px 5px 0px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
dt:target, .highlighted {
|
||||
background-color: #fbe54e;
|
||||
}
|
||||
|
||||
/* Header */
|
||||
|
||||
div.header {
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
div.header .headertitle {
|
||||
font-family: {{ theme_headerfont }};
|
||||
font-weight: normal;
|
||||
font-size: 180%;
|
||||
letter-spacing: .08em;
|
||||
margin-bottom: .8em;
|
||||
}
|
||||
|
||||
div.header .headertitle a {
|
||||
color: white;
|
||||
}
|
||||
|
||||
div.header div.rel {
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
div.header div.rel a {
|
||||
color: {{ theme_headerlinkcolor }};
|
||||
letter-spacing: .1em;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
p.logo {
|
||||
float: right;
|
||||
}
|
||||
|
||||
img.logo {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
|
||||
/* Content */
|
||||
div.content-wrapper {
|
||||
background-color: white;
|
||||
padding-top: 20px;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
div.document {
|
||||
width: 70%;
|
||||
float: left;
|
||||
}
|
||||
|
||||
div.body {
|
||||
padding-right: 2em;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
div.document h1 {
|
||||
line-height: 120%;
|
||||
}
|
||||
|
||||
div.document ul {
|
||||
margin-left: 1.5em;
|
||||
list-style-type: square;
|
||||
}
|
||||
|
||||
div.document dd {
|
||||
margin-left: 1.2em;
|
||||
margin-top: .4em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
div.document .section {
|
||||
margin-top: 1.7em;
|
||||
}
|
||||
div.document .section:first-child {
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
div.document div.highlight {
|
||||
padding: 3px;
|
||||
background-color: #eeeeec;
|
||||
border-top: 2px solid #dddddd;
|
||||
border-bottom: 2px solid #dddddd;
|
||||
margin-bottom: .8em;
|
||||
}
|
||||
|
||||
div.document h2 {
|
||||
margin-top: .7em;
|
||||
}
|
||||
|
||||
div.document p {
|
||||
margin-bottom: .5em;
|
||||
}
|
||||
|
||||
div.document li.toctree-l1 {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
div.document .descname {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.document .docutils.literal {
|
||||
background-color: #eeeeec;
|
||||
padding: 1px;
|
||||
}
|
||||
|
||||
div.document .docutils.xref.literal {
|
||||
background-color: transparent;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
div.document ol {
|
||||
margin: 1.5em;
|
||||
}
|
||||
|
||||
|
||||
/* Sidebar */
|
||||
|
||||
div.sidebar {
|
||||
width: 20%;
|
||||
float: right;
|
||||
font-size: .9em;
|
||||
}
|
||||
|
||||
div.sidebar a, div.header a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
div.sidebar a:hover, div.header a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
div.sidebar h3 {
|
||||
color: #2e3436;
|
||||
text-transform: uppercase;
|
||||
font-size: 130%;
|
||||
letter-spacing: .1em;
|
||||
}
|
||||
|
||||
div.sidebar ul {
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
div.sidebar li.toctree-l1 a {
|
||||
display: block;
|
||||
padding: 1px;
|
||||
border: 1px solid #dddddd;
|
||||
background-color: #eeeeec;
|
||||
margin-bottom: .4em;
|
||||
padding-left: 3px;
|
||||
color: #2e3436;
|
||||
}
|
||||
|
||||
div.sidebar li.toctree-l2 a {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
margin-left: 1em;
|
||||
border-bottom: 1px solid #dddddd;
|
||||
}
|
||||
|
||||
div.sidebar li.toctree-l3 a {
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
margin-left: 2em;
|
||||
border-bottom: 1px solid #dddddd;
|
||||
}
|
||||
|
||||
div.sidebar li.toctree-l2:last-child a {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
div.sidebar li.toctree-l1.current a {
|
||||
border-right: 5px solid {{ theme_headerlinkcolor }};
|
||||
}
|
||||
|
||||
div.sidebar li.toctree-l1.current li.toctree-l2 a {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
div.sidebar input[type="text"] {
|
||||
width: 170px;
|
||||
}
|
||||
|
||||
div.sidebar input[type="submit"] {
|
||||
width: 30px;
|
||||
}
|
||||
|
||||
|
||||
/* Footer */
|
||||
|
||||
div.footer-wrapper {
|
||||
background: {{ theme_footerbg }};
|
||||
border-top: 4px solid #babdb6;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
min-height: 80px;
|
||||
}
|
||||
|
||||
div.footer, div.footer a {
|
||||
color: #888a85;
|
||||
}
|
||||
|
||||
div.footer .right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
div.footer .left {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
|
||||
/* Styles copied from basic theme */
|
||||
|
||||
img.align-left, .figure.align-left, object.align-left {
|
||||
clear: left;
|
||||
float: left;
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
img.align-right, .figure.align-right, object.align-right {
|
||||
clear: right;
|
||||
float: right;
|
||||
margin-left: 1em;
|
||||
}
|
||||
|
||||
img.align-center, .figure.align-center, object.align-center {
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.align-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.align-center {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.align-right {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
/* -- 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;
|
||||
}
|
||||
|
||||
/* -- viewcode extension ---------------------------------------------------- */
|
||||
|
||||
.viewcode-link {
|
||||
float: right;
|
||||
}
|
||||
|
||||
.viewcode-back {
|
||||
float: right;
|
||||
font-family:: {{ theme_bodyfont }};
|
||||
}
|
||||
|
||||
div.viewcode-block:target {
|
||||
margin: -1px -3px;
|
||||
padding: 0 3px;
|
||||
background-color: #f4debf;
|
||||
border-top: 1px solid #ac9;
|
||||
border-bottom: 1px solid #ac9;
|
||||
}
|
||||
|
||||
td.linenos pre {
|
||||
padding: 5px 0px;
|
||||
border: 0;
|
||||
background-color: transparent;
|
||||
color: #aaa;
|
||||
margin-top: -10pt;
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 635 B |
@@ -0,0 +1,14 @@
|
||||
@import url("agogo.css");
|
||||
|
||||
pre {
|
||||
padding: 10px;
|
||||
background-color: #fafafa;
|
||||
color: #222;
|
||||
line-height: 1.2em;
|
||||
border: 2px solid #C6C9CB;
|
||||
font-size: 1.1em;
|
||||
/* margin: 1.5em 0 1.5em 0; */
|
||||
margin: 0;
|
||||
border-right-style: none;
|
||||
border-left-style: none;
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
+788
@@ -0,0 +1,788 @@
|
||||
.c-1, .c-2, .c-3, .c-4, .c-5, .c-6, .c-7, .c-8, .c-9, .c-10, .c-11, .c-12 { float: left; }
|
||||
|
||||
.c-1, .c-2, .c-3, .c-4, .c-5, .c-6, .c-7, .c-8, .c-9, .c-10, .c-11, .c-12 { position: relative; min-height: 1px; padding: 0 15px; }
|
||||
|
||||
.c-1 { width: 8.33333%; }
|
||||
|
||||
.c-2 { width: 16.66667%; }
|
||||
|
||||
.c-3 { width: 25%; }
|
||||
|
||||
.c-4 { width: 33.33333%; }
|
||||
|
||||
.c-5 { width: 41.66667%; }
|
||||
|
||||
.c-6 { width: 50%; }
|
||||
|
||||
.c-7 { width: 58.33333%; }
|
||||
|
||||
.c-8 { width: 66.66667%; }
|
||||
|
||||
.c-9 { width: 75%; }
|
||||
|
||||
.c-10 { width: 83.33333%; }
|
||||
|
||||
.c-11 { width: 91.66667%; }
|
||||
|
||||
.c-12 { width: 100%; }
|
||||
|
||||
/* Requires: normalize.css */
|
||||
/* Global Reset & Standards ---------------------- */
|
||||
* { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }
|
||||
|
||||
html { font-size: 62.5%; }
|
||||
|
||||
body { background: white; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1; color: #222222; position: relative; -webkit-font-smoothing: antialiased; }
|
||||
|
||||
/* Links ---------------------- */
|
||||
a { color: #fd7800; text-decoration: none; line-height: inherit; }
|
||||
|
||||
a:hover { color: #2795b6; }
|
||||
|
||||
a:focus { color: #fd7800; outline: none; }
|
||||
|
||||
p a, p a:visited { line-height: inherit; }
|
||||
|
||||
/* Misc ---------------------- */
|
||||
.left { float: left; }
|
||||
@media only screen and (max-width: 767px) { .left { float: none; } }
|
||||
|
||||
.right { float: right; }
|
||||
@media only screen and (max-width: 767px) { .right { float: none; } }
|
||||
|
||||
.text-left { text-align: left; }
|
||||
|
||||
.text-right { text-align: right; }
|
||||
|
||||
.text-center { text-align: center; }
|
||||
|
||||
.hide { display: none; }
|
||||
|
||||
.highlight { background: #ffff99; }
|
||||
|
||||
#googlemap img, object, embed { max-width: none; }
|
||||
|
||||
#map_canvas embed { max-width: none; }
|
||||
|
||||
#map_canvas img { max-width: none; }
|
||||
|
||||
#map_canvas object { max-width: none; }
|
||||
|
||||
/* Reset for strange margins by default on <figure> elements */
|
||||
figure { margin: 0; }
|
||||
|
||||
/* Base Type Styles Using Modular Scale ---------------------- */
|
||||
body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; font-size: 14px; direction: ltr; }
|
||||
|
||||
p { font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-size: 14px; line-height: 1.6; margin-bottom: 17px; }
|
||||
p.lead { font-size: 17.5px; line-height: 1.6; margin-bottom: 17px; }
|
||||
|
||||
aside p { font-size: 13px; line-height: 1.35; font-style: italic; }
|
||||
|
||||
h1, h2, h3, h4, h5, h6 { font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: bold; color: #222222; text-rendering: optimizeLegibility; line-height: 1.0; margin-bottom: 14px; margin-top: 14px; }
|
||||
h1 small, h2 small, h3 small, h4 small, h5 small, h6 small { font-size: 60%; color: #6f6f6f; line-height: 0; }
|
||||
|
||||
h1 { font-size: 24px; }
|
||||
|
||||
h2 { font-size: 18px; }
|
||||
|
||||
h3 { font-size: 14px; }
|
||||
|
||||
h4 { font-size: 12px; }
|
||||
|
||||
h5 { font-weight: bold; font-size: 12px; }
|
||||
|
||||
h6 { font-style: italic; font-size: 12px; }
|
||||
|
||||
hr { border: solid #c6c6c6; border-width: 1px 0 0; clear: both; margin: 22px 0 21px; height: 0; }
|
||||
|
||||
.subheader { line-height: 1.3; color: #6f6f6f; font-weight: 300; margin-bottom: 17px; }
|
||||
|
||||
em, i { font-style: italic; line-height: inherit; }
|
||||
|
||||
strong, b { font-weight: bold; line-height: inherit; }
|
||||
|
||||
small { font-size: 60%; line-height: inherit; }
|
||||
|
||||
code { font-weight: bold; background: #ffff99; }
|
||||
|
||||
/* Lists ---------------------- */
|
||||
ul, ol { font-size: 14px; line-height: 1.6; margin-bottom: 17px; list-style-position: inside; }
|
||||
|
||||
ul li ul, ul li ol { margin-left: 20px; margin-bottom: 0; }
|
||||
ul.square, ul.circle, ul.disc { margin-left: 17px; }
|
||||
ul.square { list-style-type: square; }
|
||||
ul.square li ul { list-style: inherit; }
|
||||
ul.circle { list-style-type: circle; }
|
||||
ul.circle li ul { list-style: inherit; }
|
||||
ul.disc { list-style-type: disc; }
|
||||
ul.disc li ul { list-style: inherit; }
|
||||
ul.no-bullet { list-style: none; }
|
||||
ul.large li { line-height: 21px; }
|
||||
|
||||
ol li ul, ol li ol { margin-left: 20px; margin-bottom: 0; }
|
||||
|
||||
/* Blockquotes ---------------------- */
|
||||
blockquote, blockquote p { line-height: 1.5; }
|
||||
|
||||
blockquote { margin: 0 0 17px; padding: 9px 20px 0 19px; }
|
||||
blockquote cite { display: block; font-size: 13pt; color: #555555; }
|
||||
blockquote cite:before { content: "\2014 \0020"; }
|
||||
blockquote cite a, blockquote cite a:visited { color: #555555; }
|
||||
|
||||
abbr, acronym { text-transform: uppercase; font-size: 90%; color: #222222; border-bottom: 1px solid #ddd; cursor: help; }
|
||||
|
||||
abbr { text-transform: none; }
|
||||
|
||||
/* Print styles. Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/ Credit to Paul Irish and HTML5 Boilerplate (html5boilerplate.com)
|
||||
*/
|
||||
.print-only { display: none !important; }
|
||||
|
||||
@media print { * { background: transparent !important; color: black !important; box-shadow: none !important; text-shadow: none !important; filter: none !important; -ms-filter: none !important; }
|
||||
/* Black prints faster: h5bp.com/s */
|
||||
a, a:visited { text-decoration: underline; }
|
||||
a[href]:after { content: " (" attr(href) ")"; }
|
||||
abbr[title]:after { content: " (" attr(title) ")"; }
|
||||
.ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }
|
||||
/* Don't show links for images, or javascript/internal links */
|
||||
pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
|
||||
thead { display: table-header-group; }
|
||||
/* h5bp.com/t */
|
||||
tr, img { page-break-inside: avoid; }
|
||||
img { max-width: 100% !important; }
|
||||
@page { margin: 0.5cm; }
|
||||
p, h2, h3 { orphans: 3; widows: 3; }
|
||||
h2, h3 { page-break-after: avoid; }
|
||||
.hide-on-print { display: none !important; }
|
||||
.print-only { display: block !important; } }
|
||||
/* Requires globals.css */
|
||||
/* Standard Forms ---------------------- */
|
||||
form { margin: 0 0 19.41641px; }
|
||||
|
||||
.row form .row { margin: 0 -6px; }
|
||||
.row form .row .column, .row form .row .columns { padding: 0 6px; }
|
||||
.row form .row.collapse { margin: 0; }
|
||||
.row form .row.collapse .column, .row form .row.collapse .columns { padding: 0; }
|
||||
|
||||
label { font-size: 14px; color: #4d4d4d; cursor: pointer; display: block; font-weight: 500; margin-bottom: 3px; }
|
||||
label.right { float: none; text-align: right; }
|
||||
label.inline { line-height: 32px; margin: 0 0 12px 0; }
|
||||
|
||||
@media only screen and (max-width: 767px) { label.right { text-align: left; } }
|
||||
.prefix, .postfix { display: block; position: relative; z-index: 2; text-align: center; width: 100%; padding-top: 0; padding-bottom: 0; height: 32px; line-height: 31px; }
|
||||
|
||||
a.button.prefix, a.button.postfix { padding-left: 0; padding-right: 0; text-align: center; }
|
||||
|
||||
span.prefix, span.postfix { background: #f2f2f2; border: 1px solid #cccccc; }
|
||||
|
||||
.prefix { left: 2px; -moz-border-radius-topleft: 2px; -webkit-border-top-left-radius: 2px; border-top-left-radius: 2px; -moz-border-radius-bottomleft: 2px; -webkit-border-bottom-left-radius: 2px; border-bottom-left-radius: 2px; overflow: hidden; }
|
||||
|
||||
.postfix { right: 2px; -moz-border-radius-topright: 2px; -webkit-border-top-right-radius: 2px; border-top-right-radius: 2px; -moz-border-radius-bottomright: 2px; -webkit-border-bottom-right-radius: 2px; border-bottom-right-radius: 2px; }
|
||||
|
||||
input[type="text"], input[type="password"], input[type="date"], input[type="datetime"], input[type="email"], input[type="number"], input[type="search"], input[type="tel"], input[type="time"], input[type="url"], textarea { font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; border: 1px solid #cccccc; -webkit-border-radius: 2px; -moz-border-radius: 2px; -ms-border-radius: 2px; -o-border-radius: 2px; border-radius: 2px; -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); color: rgba(0, 0, 0, 0.75); display: block; font-size: 14px; margin: 0 0 12px 0; padding: 6px; height: 32px; width: 100%; -webkit-transition: all 0.15s linear; -moz-transition: all 0.15s linear; -o-transition: all 0.15s linear; transition: all 0.15s linear; }
|
||||
input[type="text"].oversize, input[type="password"].oversize, input[type="date"].oversize, input[type="datetime"].oversize, input[type="email"].oversize, input[type="number"].oversize, input[type="search"].oversize, input[type="tel"].oversize, input[type="time"].oversize, input[type="url"].oversize, textarea.oversize { font-size: 17px; padding: 4px 6px; }
|
||||
input[type="text"]:focus, input[type="password"]:focus, input[type="date"]:focus, input[type="datetime"]:focus, input[type="email"]:focus, input[type="number"]:focus, input[type="search"]:focus, input[type="tel"]:focus, input[type="time"]:focus, input[type="url"]:focus, textarea:focus { background: #fafafa; outline: none !important; border-color: #b3b3b3; }
|
||||
input[type="text"][disabled], input[type="password"][disabled], input[type="date"][disabled], input[type="datetime"][disabled], input[type="email"][disabled], input[type="number"][disabled], input[type="search"][disabled], input[type="tel"][disabled], input[type="time"][disabled], input[type="url"][disabled], textarea[disabled] { background-color: #ddd; }
|
||||
|
||||
textarea { height: auto; }
|
||||
|
||||
select { width: 100%; }
|
||||
|
||||
/* Fieldsets */
|
||||
fieldset { border: solid 1px #ddd; border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; padding: 12px 12px 0; margin: 18px 0; }
|
||||
fieldset legend { font-weight: bold; background: white; padding: 0 3px; margin: 0; margin-left: -3px; }
|
||||
|
||||
/* Errors */
|
||||
.error input, input.error, .error textarea, textarea.error { border-color: #c60f13; background-color: rgba(198, 15, 19, 0.1); }
|
||||
|
||||
.error label, label.error { color: #c60f13; }
|
||||
|
||||
.error small, small.error { display: block; padding: 6px 4px; margin-top: -13px; margin-bottom: 12px; background: #c60f13; color: #fff; font-size: 12px; font-size: 1.2rem; font-weight: bold; -moz-border-radius-bottomleft: 2px; -webkit-border-bottom-left-radius: 2px; border-bottom-left-radius: 2px; -moz-border-radius-bottomright: 2px; -webkit-border-bottom-right-radius: 2px; border-bottom-right-radius: 2px; }
|
||||
|
||||
@media only screen and (max-width: 767px) { input[type="text"].one, input[type="password"].one, input[type="date"].one, input[type="datetime"].one, input[type="email"].one, input[type="number"].one, input[type="search"].one, input[type="tel"].one, input[type="time"].one, input[type="url"].one, textarea.one, .row textarea.one { width: 100% !important; }
|
||||
input[type="text"].two, .row input[type="text"].two, input[type="password"].two, .row input[type="password"].two, input[type="date"].two, .row input[type="date"].two, input[type="datetime"].two, .row input[type="datetime"].two, input[type="email"].two, .row input[type="email"].two, input[type="number"].two, .row input[type="number"].two, input[type="search"].two, .row input[type="search"].two, input[type="tel"].two, .row input[type="tel"].two, input[type="time"].two, .row input[type="time"].two, input[type="url"].two, .row input[type="url"].two, textarea.two, .row textarea.two { width: 100% !important; }
|
||||
input[type="text"].three, .row input[type="text"].three, input[type="password"].three, .row input[type="password"].three, input[type="date"].three, .row input[type="date"].three, input[type="datetime"].three, .row input[type="datetime"].three, input[type="email"].three, .row input[type="email"].three, input[type="number"].three, .row input[type="number"].three, input[type="search"].three, .row input[type="search"].three, input[type="tel"].three, .row input[type="tel"].three, input[type="time"].three, .row input[type="time"].three, input[type="url"].three, .row input[type="url"].three, textarea.three, .row textarea.three { width: 100% !important; }
|
||||
input[type="text"].four, .row input[type="text"].four, input[type="password"].four, .row input[type="password"].four, input[type="date"].four, .row input[type="date"].four, input[type="datetime"].four, .row input[type="datetime"].four, input[type="email"].four, .row input[type="email"].four, input[type="number"].four, .row input[type="number"].four, input[type="search"].four, .row input[type="search"].four, input[type="tel"].four, .row input[type="tel"].four, input[type="time"].four, .row input[type="time"].four, input[type="url"].four, .row input[type="url"].four, textarea.four, .row textarea.four { width: 100% !important; }
|
||||
input[type="text"].five, .row input[type="text"].five, input[type="password"].five, .row input[type="password"].five, input[type="date"].five, .row input[type="date"].five, input[type="datetime"].five, .row input[type="datetime"].five, input[type="email"].five, .row input[type="email"].five, input[type="number"].five, .row input[type="number"].five, input[type="search"].five, .row input[type="search"].five, input[type="tel"].five, .row input[type="tel"].five, input[type="time"].five, .row input[type="time"].five, input[type="url"].five, .row input[type="url"].five, textarea.five, .row textarea.five { width: 100% !important; }
|
||||
input[type="text"].six, .row input[type="text"].six, input[type="password"].six, .row input[type="password"].six, input[type="date"].six, .row input[type="date"].six, input[type="datetime"].six, .row input[type="datetime"].six, input[type="email"].six, .row input[type="email"].six, input[type="number"].six, .row input[type="number"].six, input[type="search"].six, .row input[type="search"].six, input[type="tel"].six, .row input[type="tel"].six, input[type="time"].six, .row input[type="time"].six, input[type="url"].six, .row input[type="url"].six, textarea.six, .row textarea.six { width: 100% !important; }
|
||||
input[type="text"].seven, .row input[type="text"].seven, input[type="password"].seven, .row input[type="password"].seven, input[type="date"].seven, .row input[type="date"].seven, input[type="datetime"].seven, .row input[type="datetime"].seven, input[type="email"].seven, .row input[type="email"].seven, input[type="number"].seven, .row input[type="number"].seven, input[type="search"].seven, .row input[type="search"].seven, input[type="tel"].seven, .row input[type="tel"].seven, input[type="time"].seven, .row input[type="time"].seven, input[type="url"].seven, .row input[type="url"].seven, textarea.seven, .row textarea.seven { width: 100% !important; }
|
||||
input[type="text"].eight, .row input[type="text"].eight, input[type="password"].eight, .row input[type="password"].eight, input[type="date"].eight, .row input[type="date"].eight, input[type="datetime"].eight, .row input[type="datetime"].eight, input[type="email"].eight, .row input[type="email"].eight, input[type="number"].eight, .row input[type="number"].eight, input[type="search"].eight, .row input[type="search"].eight, input[type="tel"].eight, .row input[type="tel"].eight, input[type="time"].eight, .row input[type="time"].eight, input[type="url"].eight, .row input[type="url"].eight, textarea.eight, .row textarea.eight { width: 100% !important; }
|
||||
input[type="text"].nine, .row input[type="text"].nine, input[type="password"].nine, .row input[type="password"].nine, input[type="date"].nine, .row input[type="date"].nine, input[type="datetime"].nine, .row input[type="datetime"].nine, input[type="email"].nine, .row input[type="email"].nine, input[type="number"].nine, .row input[type="number"].nine, input[type="search"].nine, .row input[type="search"].nine, input[type="tel"].nine, .row input[type="tel"].nine, input[type="time"].nine, .row input[type="time"].nine, input[type="url"].nine, .row input[type="url"].nine, textarea.nine, .row textarea.nine { width: 100% !important; }
|
||||
input[type="text"].ten, .row input[type="text"].ten, input[type="password"].ten, .row input[type="password"].ten, input[type="date"].ten, .row input[type="date"].ten, input[type="datetime"].ten, .row input[type="datetime"].ten, input[type="email"].ten, .row input[type="email"].ten, input[type="number"].ten, .row input[type="number"].ten, input[type="search"].ten, .row input[type="search"].ten, input[type="tel"].ten, .row input[type="tel"].ten, input[type="time"].ten, .row input[type="time"].ten, input[type="url"].ten, .row input[type="url"].ten, textarea.ten, .row textarea.ten { width: 100% !important; }
|
||||
input[type="text"].eleven, .row input[type="text"].eleven, input[type="password"].eleven, .row input[type="password"].eleven, input[type="date"].eleven, .row input[type="date"].eleven, input[type="datetime"].eleven, .row input[type="datetime"].eleven, input[type="email"].eleven, .row input[type="email"].eleven, input[type="number"].eleven, .row input[type="number"].eleven, input[type="search"].eleven, .row input[type="search"].eleven, input[type="tel"].eleven, .row input[type="tel"].eleven, input[type="time"].eleven, .row input[type="time"].eleven, input[type="url"].eleven, .row input[type="url"].eleven, textarea.eleven, .row textarea.eleven { width: 100% !important; }
|
||||
input[type="text"].twelve, .row input[type="text"].twelve, input[type="password"].twelve, .row input[type="password"].twelve, input[type="date"].twelve, .row input[type="date"].twelve, input[type="datetime"].twelve, .row input[type="datetime"].twelve, input[type="email"].twelve, .row input[type="email"].twelve, input[type="number"].twelve, .row input[type="number"].twelve, input[type="search"].twelve, .row input[type="search"].twelve, input[type="tel"].twelve, .row input[type="tel"].twelve, input[type="time"].twelve, .row input[type="time"].twelve, input[type="url"].twelve, .row input[type="url"].twelve, textarea.twelve, .row textarea.twelve { width: 100% !important; } }
|
||||
/* Custom Forms ---------------------- */
|
||||
form.custom { /* Custom input, disabled */ }
|
||||
form.custom span.custom { display: inline-block; width: 16px; height: 16px; position: relative; top: 2px; border: solid 1px #ccc; background: #fff; }
|
||||
form.custom span.custom.radio { -webkit-border-radius: 100px; -moz-border-radius: 100px; -ms-border-radius: 100px; -o-border-radius: 100px; border-radius: 100px; }
|
||||
form.custom span.custom.checkbox:before { content: ""; display: block; line-height: 0.8; height: 14px; width: 14px; text-align: center; position: absolute; top: 0; left: 0; font-size: 14px; color: #fff; }
|
||||
form.custom span.custom.radio.checked:before { content: ""; display: block; width: 8px; height: 8px; -webkit-border-radius: 100px; -moz-border-radius: 100px; -ms-border-radius: 100px; -o-border-radius: 100px; border-radius: 100px; background: #222; position: relative; top: 3px; left: 3px; }
|
||||
form.custom span.custom.checkbox.checked:before { content: "\00d7"; color: #222; }
|
||||
form.custom div.custom.dropdown { display: block; position: relative; width: auto; height: 28px; margin-bottom: 9px; margin-top: 2px; }
|
||||
form.custom div.custom.dropdown a.current { display: block; width: auto; line-height: 26px; min-height: 28px; padding: 0; padding-left: 6px; padding-right: 38px; border: solid 1px #ddd; color: #141414; background-color: #fff; white-space: nowrap; }
|
||||
form.custom div.custom.dropdown a.selector { position: absolute; width: 27px; height: 28px; display: block; right: 0; top: 0; border: solid 1px #ddd; }
|
||||
form.custom div.custom.dropdown a.selector:after { content: ""; display: block; content: ""; display: block; width: 0; height: 0; border: solid 5px; border-color: #aaaaaa transparent transparent transparent; position: absolute; left: 50%; top: 50%; margin-top: -2px; margin-left: -5px; }
|
||||
form.custom div.custom.dropdown:hover a.selector:after, form.custom div.custom.dropdown.open a.selector:after { content: ""; display: block; width: 0; height: 0; border: solid 5px; border-color: #222222 transparent transparent transparent; }
|
||||
form.custom div.custom.dropdown.open ul { display: block; z-index: 10; }
|
||||
form.custom div.custom.dropdown.small { width: 134px !important; }
|
||||
form.custom div.custom.dropdown.medium { width: 254px !important; }
|
||||
form.custom div.custom.dropdown.large { width: 434px !important; }
|
||||
form.custom div.custom.dropdown.expand { width: 100% !important; }
|
||||
form.custom div.custom.dropdown.open.small ul { width: 134px !important; }
|
||||
form.custom div.custom.dropdown.open.medium ul { width: 254px !important; }
|
||||
form.custom div.custom.dropdown.open.large ul { width: 434px !important; }
|
||||
form.custom div.custom.dropdown.open.expand ul { width: 100% !important; }
|
||||
form.custom div.custom.dropdown ul { position: absolute; width: auto; display: none; margin: 0; left: 0; top: 27px; margin: 0; padding: 0; background: #fff; background: rgba(255, 255, 255, 0.95); border: solid 1px #cccccc; }
|
||||
form.custom div.custom.dropdown ul li { color: #555; font-size: 13px; cursor: pointer; padding: 3px; padding-left: 6px; padding-right: 38px; min-height: 18px; line-height: 18px; margin: 0; white-space: nowrap; list-style: none; }
|
||||
form.custom div.custom.dropdown ul li.selected { background: #cdebf5; color: #000; }
|
||||
form.custom div.custom.dropdown ul li.selected:after { content: "\2013"; position: absolute; right: 10px; }
|
||||
form.custom div.custom.dropdown ul li:hover { background-color: #e3f4f9; color: #222; }
|
||||
form.custom div.custom.dropdown ul li:hover:after { content: "\2013"; position: absolute; right: 10px; color: #8ed3e7; }
|
||||
form.custom div.custom.dropdown ul li.selected:hover { background: #cdebf5; cursor: default; color: #000; }
|
||||
form.custom div.custom.dropdown ul li.selected:hover:after { color: #000; }
|
||||
form.custom div.custom.dropdown ul.show { display: block; }
|
||||
form.custom .custom.disabled { background-color: #ddd; }
|
||||
|
||||
/* Correct FF custom dropdown height */
|
||||
@-moz-document url-prefix() { form.custom div.custom.dropdown a.selector { height: 30px; } }
|
||||
|
||||
.lt-ie9 form.custom div.custom.dropdown a.selector { height: 30px; }
|
||||
|
||||
/* The Grid ---------------------- */
|
||||
.row { width: 1000px; max-width: 100%; min-width: 768px; margin: 0 auto; }
|
||||
.row .row { width: auto; max-width: none; min-width: 0; margin: 0 -15px; }
|
||||
.row.collapse .column, .row.collapse .columns { padding: 0; }
|
||||
.row .row { width: auto; max-width: none; min-width: 0; margin: 0 -15px; }
|
||||
.row .row.collapse { margin: 0; }
|
||||
|
||||
.column, .columns { float: left; min-height: 1px; padding: 0 15px; position: relative; }
|
||||
.column.centered, .columns.centered { float: none; margin: 0 auto; }
|
||||
|
||||
[class*="column"] + [class*="column"]:last-child { float: right; }
|
||||
|
||||
[class*="column"] + [class*="column"].end { float: left; }
|
||||
|
||||
.one, .row .one { width: 8.33333%; }
|
||||
|
||||
.two, .row .two { width: 16.66667%; }
|
||||
|
||||
.three, .row .three { width: 25%; }
|
||||
|
||||
.four, .row .four { width: 33.33333%; }
|
||||
|
||||
.five, .row .five { width: 41.66667%; }
|
||||
|
||||
.six, .row .six { width: 50%; }
|
||||
|
||||
.seven, .row .seven { width: 58.33333%; }
|
||||
|
||||
.eight, .row .eight { width: 66.66667%; }
|
||||
|
||||
.nine, .row .nine { width: 75%; }
|
||||
|
||||
.ten, .row .ten { width: 83.33333%; }
|
||||
|
||||
.eleven, .row .eleven { width: 91.66667%; }
|
||||
|
||||
.twelve, .row .twelve { width: 100%; }
|
||||
|
||||
.row .offset-by-one { margin-left: 8.33333%; }
|
||||
|
||||
.row .offset-by-two { margin-left: 16.66667%; }
|
||||
|
||||
.row .offset-by-three { margin-left: 25%; }
|
||||
|
||||
.row .offset-by-four { margin-left: 33.33333%; }
|
||||
|
||||
.row .offset-by-five { margin-left: 41.66667%; }
|
||||
|
||||
.row .offset-by-six { margin-left: 50%; }
|
||||
|
||||
.row .offset-by-seven { margin-left: 58.33333%; }
|
||||
|
||||
.row .offset-by-eight { margin-left: 66.66667%; }
|
||||
|
||||
.row .offset-by-nine { margin-left: 75%; }
|
||||
|
||||
.row .offset-by-ten { margin-left: 83.33333%; }
|
||||
|
||||
.push-two { left: 16.66667%; }
|
||||
|
||||
.pull-two { right: 16.66667%; }
|
||||
|
||||
.push-three { left: 25%; }
|
||||
|
||||
.pull-three { right: 25%; }
|
||||
|
||||
.push-four { left: 33.33333%; }
|
||||
|
||||
.pull-four { right: 33.33333%; }
|
||||
|
||||
.push-five { left: 41.66667%; }
|
||||
|
||||
.pull-five { right: 41.66667%; }
|
||||
|
||||
.push-six { left: 50%; }
|
||||
|
||||
.pull-six { right: 50%; }
|
||||
|
||||
.push-seven { left: 58.33333%; }
|
||||
|
||||
.pull-seven { right: 58.33333%; }
|
||||
|
||||
.push-eight { left: 66.66667%; }
|
||||
|
||||
.pull-eight { right: 66.66667%; }
|
||||
|
||||
.push-nine { left: 75%; }
|
||||
|
||||
.pull-nine { right: 75%; }
|
||||
|
||||
.push-ten { left: 83.33333%; }
|
||||
|
||||
.pull-ten { right: 83.33333%; }
|
||||
|
||||
img, object, embed { max-width: 100%; height: auto; }
|
||||
|
||||
object, embed { height: 100%; }
|
||||
|
||||
img { -ms-interpolation-mode: bicubic; }
|
||||
|
||||
#map_canvas img, .map_canvas img { max-width: none!important; }
|
||||
|
||||
/* Nicolas Gallagher's micro clearfix */
|
||||
.row { *zoom: 1; }
|
||||
.row:before, .row:after { content: ""; display: table; }
|
||||
.row:after { clear: both; }
|
||||
|
||||
/* Mobile Grid and Overrides ---------------------- */
|
||||
@media only screen and (max-width: 767px) { body { -webkit-text-size-adjust: none; -ms-text-size-adjust: none; width: 100%; min-width: 0; margin-left: 0; margin-right: 0; padding-left: 0; padding-right: 0; }
|
||||
.row { width: auto; min-width: 0; margin-left: 0; margin-right: 0; }
|
||||
.column, .columns { width: auto !important; float: none; }
|
||||
.column:last-child, .columns:last-child { float: none; }
|
||||
[class*="column"] + [class*="column"]:last-child { float: none; }
|
||||
.column:before, .columns:before, .column:after, .columns:after { content: ""; display: table; }
|
||||
.column:after, .columns:after { clear: both; }
|
||||
.offset-by-one, .offset-by-two, .offset-by-three, .offset-by-four, .offset-by-five, .offset-by-six, .offset-by-seven, .offset-by-eight, .offset-by-nine, .offset-by-ten { margin-left: 0 !important; }
|
||||
.push-two, .push-three, .push-four, .push-five, .push-six, .push-seven, .push-eight, .push-nine, .push-ten { left: auto; }
|
||||
.pull-two, .pull-three, .pull-four, .pull-five, .pull-six, .pull-seven, .pull-eight, .pull-nine, .pull-ten { right: auto; }
|
||||
/* Mobile 4-column Grid */
|
||||
.row .mobile-one { width: 25% !important; float: left; padding: 0 15px; }
|
||||
.row .mobile-one:last-child { float: right; }
|
||||
.row.collapse .mobile-one { padding: 0; }
|
||||
.row .mobile-two { width: 50% !important; float: left; padding: 0 15px; }
|
||||
.row .mobile-two:last-child { float: right; }
|
||||
.row.collapse .mobile-two { padding: 0; }
|
||||
.row .mobile-three { width: 75% !important; float: left; padding: 0 15px; }
|
||||
.row .mobile-three:last-child { float: right; }
|
||||
.row.collapse .mobile-three { padding: 0; }
|
||||
.row .mobile-four { width: 100% !important; float: left; padding: 0 15px; }
|
||||
.row .mobile-four:last-child { float: right; }
|
||||
.row.collapse .mobile-four { padding: 0; }
|
||||
.push-one-mobile { left: 25%; }
|
||||
.pull-one-mobile { right: 25%; }
|
||||
.push-two-mobile { left: 50%; }
|
||||
.pull-two-mobile { right: 50%; }
|
||||
.push-three-mobile { left: 75%; }
|
||||
.pull-three-mobile { right: 75%; } }
|
||||
/* Block Grids ---------------------- */
|
||||
/* These are 2-up, 3-up, 4-up and 5-up ULs, suited
|
||||
for repeating blocks of content. Add 'mobile' to
|
||||
them to switch them just like the layout grid
|
||||
(one item per line) on phones
|
||||
|
||||
For IE7/8 compatibility block-grid items need to be
|
||||
the same height. You can optionally uncomment the
|
||||
lines below to support arbitrary height, but know
|
||||
that IE7/8 do not support :nth-child.
|
||||
-------------------------------------------------- */
|
||||
.block-grid { display: block; overflow: hidden; padding: 0; }
|
||||
.block-grid > li { display: block; height: auto; float: left; }
|
||||
.block-grid.one-up { margin: 0; }
|
||||
.block-grid.one-up > li { width: 100%; padding: 0 0 15px; }
|
||||
.block-grid.two-up { margin: 0 -15px; }
|
||||
.block-grid.two-up > li { width: 50%; padding: 0 15px 15px; }
|
||||
.block-grid.two-up > li:nth-child(2n+1) { clear: both; }
|
||||
.block-grid.three-up { margin: 0 -12px; }
|
||||
.block-grid.three-up > li { width: 33.33%; padding: 0 12px 12px; }
|
||||
.block-grid.three-up > li:nth-child(3n+1) { clear: both; }
|
||||
.block-grid.four-up { margin: 0 -10px; }
|
||||
.block-grid.four-up > li { width: 25%; padding: 0 10px 10px; }
|
||||
.block-grid.four-up > li:nth-child(4n+1) { clear: both; }
|
||||
.block-grid.five-up { margin: 0 -8px; }
|
||||
.block-grid.five-up > li { width: 20%; padding: 0 8px 8px; }
|
||||
.block-grid.five-up > li:nth-child(5n+1) { clear: both; }
|
||||
|
||||
/* Mobile Block Grids */
|
||||
@media only screen and (max-width: 767px) { .block-grid.mobile > li { float: none; width: 100%; margin-left: 0; }
|
||||
.block-grid > li { clear: none !important; }
|
||||
.block-grid.mobile-two-up > li { width: 50%; }
|
||||
.block-grid.mobile-two-up > li:nth-child(2n+1) { clear: both; }
|
||||
.block-grid.mobile-three-up > li { width: 33.33%; }
|
||||
.block-grid.mobile-three-up > li:nth-child(3n+1) { clear: both !important; }
|
||||
.block-grid.mobile-four-up > li { width: 25%; }
|
||||
.block-grid.mobile-four-up > li:nth-child(4n+1) { clear: both; }
|
||||
.block-grid.mobile-five-up > li:nth-child(5n+1) { clear: both; } }
|
||||
/* Requires globals.css */
|
||||
/* Normal Buttons ---------------------- */
|
||||
.button { width: auto; background: #fd7800; border: 1px solid #ce6200; -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; color: white; cursor: pointer; display: inline-block; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-size: 14px; font-weight: bold; line-height: 1; margin: 0; outline: none; padding: 10px 20px 11px; position: relative; text-align: center; text-decoration: none; -webkit-transition: background-color 0.15s ease-in-out; -moz-transition: background-color 0.15s ease-in-out; -o-transition: background-color 0.15s ease-in-out; transition: background-color 0.15s ease-in-out; /* Hovers */ /* Sizes */ /* Colors */ /* Radii */ /* Layout */ /* Disabled ---------- */ }
|
||||
.button:hover { color: white; background-color: #ce6200; }
|
||||
.button:active { -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2) inset; -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2) inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2) inset; }
|
||||
.button:focus { -webkit-box-shadow: 0 0 4px #fd7800, 0 1px 0 rgba(255, 255, 255, 0.5) inset; -moz-box-shadow: 0 0 4px #fd7800, 0 1px 0 rgba(255, 255, 255, 0.5) inset; box-shadow: 0 0 4px #fd7800, 0 1px 0 rgba(255, 255, 255, 0.5) inset; color: white; }
|
||||
.button.large { font-size: 17px; padding: 15px 30px 16px; }
|
||||
.button.medium { font-size: 14px; }
|
||||
.button.small { font-size: 11px; padding: 7px 14px 8px; }
|
||||
.button.tiny { font-size: 10px; padding: 5px 10px 6px; }
|
||||
.button.expand { width: 100%; text-align: center; }
|
||||
.button.primary { background-color: #fd7800; border: 1px solid #1e728c; }
|
||||
.button.primary:hover { background-color: #2284a1; }
|
||||
.button.primary:focus { -webkit-box-shadow: 0 0 4px #fd7800, 0 1px 0 rgba(255, 255, 255, 0.5) inset; -moz-box-shadow: 0 0 4px #fd7800, 0 1px 0 rgba(255, 255, 255, 0.5) inset; box-shadow: 0 0 4px #fd7800, 0 1px 0 rgba(255, 255, 255, 0.5) inset; }
|
||||
.button.success { background-color: #5da423; border: 1px solid #396516; }
|
||||
.button.success:hover { background-color: #457a1a; }
|
||||
.button.success:focus { -webkit-box-shadow: 0 0 5px #5da423, 0 1px 0 rgba(255, 255, 255, 0.5) inset; -moz-box-shadow: 0 0 5px #5da423, 0 1px 0 rgba(255, 255, 255, 0.5) inset; box-shadow: 0 0 5px #5da423, 0 1px 0 rgba(255, 255, 255, 0.5) inset; }
|
||||
.button.alert { background-color: #c60f13; border: 1px solid #7f0a0c; }
|
||||
.button.alert:hover { background-color: #970b0e; }
|
||||
.button.alert:focus { -webkit-box-shadow: 0 0 4px #c60f13, 0 1px 0 rgba(255, 255, 255, 0.5) inset; -moz-box-shadow: 0 0 4px #c60f13, 0 1px 0 rgba(255, 255, 255, 0.5) inset; box-shadow: 0 0 4px #c60f13, 0 1px 0 rgba(255, 255, 255, 0.5) inset; }
|
||||
.button.secondary { background-color: #e9e9e9; color: #1d1d1d; border: 1px solid #c3c3c3; }
|
||||
.button.secondary:hover { background-color: #d0d0d0; }
|
||||
.button.secondary:focus { -webkit-box-shadow: 0 0 5px #e9e9e9, 0 1px 0 rgba(255, 255, 255, 0.5) inset; -moz-box-shadow: 0 0 5px #e9e9e9, 0 1px 0 rgba(255, 255, 255, 0.5) inset; box-shadow: 0 0 5px #e9e9e9, 0 1px 0 rgba(255, 255, 255, 0.5) inset; }
|
||||
.button.radius { -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; }
|
||||
.button.round { -webkit-border-radius: 1000px; -moz-border-radius: 1000px; -ms-border-radius: 1000px; -o-border-radius: 1000px; border-radius: 1000px; }
|
||||
.button.full-width { width: 100%; text-align: center; padding-left: 0px !important; padding-right: 0px !important; }
|
||||
.button.left-align { text-align: left; text-indent: 12px; }
|
||||
.button.disabled, .button[disabled] { opacity: 0.6; cursor: default; background: #fd7800; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; }
|
||||
.button.disabled :hover, .button[disabled] :hover { background: #fd7800; }
|
||||
.button.disabled.success, .button[disabled].success { background-color: #5da423; }
|
||||
.button.disabled.success:hover, .button[disabled].success:hover { background-color: #5da423; }
|
||||
.button.disabled.alert, .button[disabled].alert { background-color: #c60f13; }
|
||||
.button.disabled.alert:hover, .button[disabled].alert:hover { background-color: #c60f13; }
|
||||
.button.disabled.secondary, .button[disabled].secondary { background-color: #e9e9e9; }
|
||||
.button.disabled.secondary:hover, .button[disabled].secondary:hover { background-color: #e9e9e9; }
|
||||
|
||||
/* Don't use native buttons on iOS */
|
||||
input[type=submit].button, button.button { -webkit-appearance: none; }
|
||||
|
||||
@media only screen and (max-width: 767px) { .button { display: block; }
|
||||
button.button, input[type="submit"].button { width: 100%; padding-left: 0; padding-right: 0; } }
|
||||
/* Correct FF button padding */
|
||||
@-moz-document url-prefix() { button::-moz-focus-inner, input[type="reset"]::-moz-focus-inner, input[type="button"]::-moz-focus-inner, input[type="submit"]::-moz-focus-inner, input[type="file"] > input[type="button"]::-moz-focus-inner { border: none; padding: 0; }
|
||||
input[type="submit"].tiny.button { padding: 3px 10px 4px; }
|
||||
input[type="submit"].small.button { padding: 5px 14px 6px; }
|
||||
input[type="submit"].button, input[type=submit].medium.button { padding: 8px 20px 9px; }
|
||||
input[type="submit"].large.button { padding: 13px 30px 14px; } }
|
||||
|
||||
/* Buttons with Dropdowns ---------------------- */
|
||||
.button.dropdown { position: relative; padding-right: 44px; /* Sizes */ /* Triangles */ /* Flyout List */ /* Split Dropdown Buttons */ }
|
||||
.button.dropdown.large { padding-right: 60px; }
|
||||
.button.dropdown.small { padding-right: 28px; }
|
||||
.button.dropdown.tiny { padding-right: 20px; }
|
||||
.button.dropdown:after { content: ""; display: block; width: 0; height: 0; border: solid 6px; border-color: white transparent transparent transparent; position: absolute; top: 50%; right: 20px; margin-top: -2px; }
|
||||
.button.dropdown.large:after { content: ""; display: block; width: 0; height: 0; border: solid 7px; border-color: white transparent transparent transparent; margin-top: -3px; right: 30px; }
|
||||
.button.dropdown.small:after { content: ""; display: block; width: 0; height: 0; border: solid 5px; border-color: white transparent transparent transparent; margin-top: -2px; right: 14px; }
|
||||
.button.dropdown.tiny:after { content: ""; display: block; width: 0; height: 0; border: solid 4px; border-color: white transparent transparent transparent; margin-top: -1px; right: 10px; }
|
||||
.button.dropdown > ul { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; display: none; position: absolute; left: -1px; background: #fff; background: rgba(255, 255, 255, 0.95); list-style: none; margin: 0; padding: 0; border: 1px solid #cccccc; border-top: none; min-width: 100%; z-index: 40; }
|
||||
.button.dropdown > ul li { width: 100%; cursor: pointer; padding: 0; min-height: 18px; line-height: 18px; margin: 0; white-space: nowrap; list-style: none; }
|
||||
.button.dropdown > ul li a { display: block; color: #555; font-size: 13px; font-weight: normal; padding: 6px 14px; text-align: left; }
|
||||
.button.dropdown > ul li:hover { background-color: #e3f4f9; color: #222; }
|
||||
.button.dropdown > ul li.divider { min-height: 0; padding: 0; height: 1px; margin: 4px 0; background: #ededed; }
|
||||
.button.dropdown.up > ul { border-top: 1px solid #cccccc; border-bottom: none; }
|
||||
.button.dropdown ul.no-hover.show-dropdown { display: block !important; }
|
||||
.button.dropdown:hover > ul.no-hover { display: none; }
|
||||
.button.dropdown.split { padding: 0; position: relative; /* Sizes */ /* Triangle Spans */ /* Colors */ }
|
||||
.button.dropdown.split:after { display: none; }
|
||||
.button.dropdown.split:hover { background-color: #fd7800; }
|
||||
.button.dropdown.split.alert:hover { background-color: #c60f13; }
|
||||
.button.dropdown.split.success:hover { background-color: #5da423; }
|
||||
.button.dropdown.split.secondary:hover { background-color: #e9e9e9; }
|
||||
.button.dropdown.split > a { color: white; display: block; padding: 10px 50px 11px 20px; padding-left: 20px; padding-right: 50px; -webkit-transition: background-color 0.15s ease-in-out; -moz-transition: background-color 0.15s ease-in-out; -o-transition: background-color 0.15s ease-in-out; transition: background-color 0.15s ease-in-out; }
|
||||
.button.dropdown.split > a:hover { background-color: #2284a1; }
|
||||
.button.dropdown.split.large > a { padding: 15px 75px 16px 30px; padding-left: 30px; padding-right: 75px; }
|
||||
.button.dropdown.split.small > a { padding: 7px 35px 8px 14px; padding-left: 14px; padding-right: 35px; }
|
||||
.button.dropdown.split.tiny > a { padding: 5px 25px 6px 10px; padding-left: 10px; padding-right: 25px; }
|
||||
.button.dropdown.split > span { background-color: #fd7800; position: absolute; right: 0; top: 0; height: 100%; width: 30px; border-left: 1px solid #1e728c; -webkit-box-shadow: 1px 1px 0 rgba(255, 255, 255, 0.5) inset; -moz-box-shadow: 1px 1px 0 rgba(255, 255, 255, 0.5) inset; box-shadow: 1px 1px 0 rgba(255, 255, 255, 0.5) inset; -webkit-transition: background-color 0.15s ease-in-out; -moz-transition: background-color 0.15s ease-in-out; -o-transition: background-color 0.15s ease-in-out; transition: background-color 0.15s ease-in-out; }
|
||||
.button.dropdown.split > span:hover { background-color: #2284a1; }
|
||||
.button.dropdown.split > span:after { content: ""; display: block; width: 0; height: 0; border: solid 6px; border-color: white transparent transparent transparent; position: absolute; top: 50%; left: 50%; margin-left: -6px; margin-top: -2px; }
|
||||
.button.dropdown.split.secondary > span:after { content: ""; display: block; width: 0; height: 0; border: solid 6px; border-color: #1d1d1d transparent transparent transparent; }
|
||||
.button.dropdown.split.large span { width: 45px; }
|
||||
.button.dropdown.split.small span { width: 21px; }
|
||||
.button.dropdown.split.tiny span { width: 15px; }
|
||||
.button.dropdown.split.large span:after { content: ""; display: block; width: 0; height: 0; border: solid 7px; border-color: white transparent transparent transparent; margin-top: -3px; margin-left: -7px; }
|
||||
.button.dropdown.split.small span:after { content: ""; display: block; width: 0; height: 0; border: solid 4px; border-color: white transparent transparent transparent; margin-top: -1px; margin-left: -4px; }
|
||||
.button.dropdown.split.tiny span:after { content: ""; display: block; width: 0; height: 0; border: solid 3px; border-color: white transparent transparent transparent; margin-top: -1px; margin-left: -3px; }
|
||||
.button.dropdown.split.alert > span { background-color: #c60f13; border-left-color: #7f0a0c; }
|
||||
.button.dropdown.split.success > span { background-color: #5da423; border-left-color: #396516; }
|
||||
.button.dropdown.split.secondary > span { background-color: #e9e9e9; border-left-color: #c3c3c3; }
|
||||
.button.dropdown.split.secondary > a { color: #1d1d1d; }
|
||||
.button.dropdown.split.alert > a:hover, .button.dropdown.split.alert > span:hover { background-color: #970b0e; }
|
||||
.button.dropdown.split.success > a:hover, .button.dropdown.split.success > span:hover { background-color: #457a1a; }
|
||||
.button.dropdown.split.secondary > a:hover, .button.dropdown.split.secondary > span:hover { background-color: #d0d0d0; }
|
||||
|
||||
/* Button Groups ---------------------- */
|
||||
ul.button-group { list-style: none; padding: 0; margin: 0 0 12px; *zoom: 1; }
|
||||
ul.button-group:before, ul.button-group:after { content: ""; display: table; }
|
||||
ul.button-group:after { clear: both; }
|
||||
ul.button-group li { padding: 0; margin: 0 0 0 -1px; float: left; }
|
||||
ul.button-group li:first-child { margin-left: 0; }
|
||||
ul.button-group.radius li a.button, ul.button-group.radius li a.button.radius, ul.button-group.radius li a.button-rounded { -webkit-border-radius: 0px; -moz-border-radius: 0px; -ms-border-radius: 0px; -o-border-radius: 0px; border-radius: 0px; }
|
||||
ul.button-group.radius li:first-child a.button, ul.button-group.radius li:first-child a.button.radius { -moz-border-radius-left3px: 5px; -webkit-border-left-3px-radius: 5px; border-left-3px-radius: 5px; }
|
||||
ul.button-group.radius li:first-child a.button.rounded { -moz-border-radius-left1000px: 5px; -webkit-border-left-1000px-radius: 5px; border-left-1000px-radius: 5px; }
|
||||
ul.button-group.radius li:last-child a.button, ul.button-group.radius li:last-child a.button.radius { -moz-border-radius-right3px: 5px; -webkit-border-right-3px-radius: 5px; border-right-3px-radius: 5px; }
|
||||
ul.button-group.radius li:last-child a.button.rounded { -moz-border-radius-right1000px: 5px; -webkit-border-right-1000px-radius: 5px; border-right-1000px-radius: 5px; }
|
||||
ul.button-group.even a.button { width: 100%; }
|
||||
ul.button-group.even.two-up li { width: 50%; }
|
||||
ul.button-group.even.three-up li { width: 33.3%; }
|
||||
ul.button-group.even.three-up li:first-child { width: 33.4%; }
|
||||
ul.button-group.even.four-up li { width: 25%; }
|
||||
ul.button-group.even.five-up li { width: 20%; }
|
||||
|
||||
@media only screen and (max-width: 767px) { .button-group button.button, .button-group input[type="submit"].button { width: auto; padding: 10px 20px 11px; }
|
||||
.button-group button.button.large, .button-group input[type="submit"].button.large { padding: 15px 30px 16px; }
|
||||
.button-group button.button.medium, .button-group input[type="submit"].button.medium { padding: 10px 20px 11px; }
|
||||
.button-group button.button.small, .button-group input[type="submit"].button.small { padding: 7px 14px 8px; }
|
||||
.button-group button.button.tiny, .button-group input[type="submit"].button.tiny { padding: 5px 10px 6px; }
|
||||
.button-group.even button.button, .button-group.even input[type="submit"].button { width: 100%; padding-left: 0; padding-right: 0; } }
|
||||
div.button-bar { overflow: hidden; }
|
||||
div.button-bar ul.button-group { float: left; margin-right: 8px; }
|
||||
div.button-bar ul.button-group:last-child { margin-left: 0; }
|
||||
|
||||
/* CSS for jQuery Reveal Plugin Maintained for Foundation. foundation.zurb.com Free to use under the MIT license. http://www.opensource.org/licenses/mit-license.php */
|
||||
/* Reveal Modals ---------------------- */
|
||||
.reveal-modal-bg { position: fixed; height: 100%; width: 100%; background: #000; background: rgba(0, 0, 0, 0.45); z-index: 40; display: none; top: 0; left: 0; }
|
||||
|
||||
.reveal-modal { background: white; visibility: hidden; display: none; top: 100px; left: 50%; margin-left: -260px; width: 520px; position: absolute; z-index: 41; padding: 30px; -webkit-box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); -moz-box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); box-shadow: 0 0 10px rgba(0, 0, 0, 0.4); }
|
||||
.reveal-modal *:first-child { margin-top: 0; }
|
||||
.reveal-modal *:last-child { margin-bottom: 0; }
|
||||
.reveal-modal .close-reveal-modal { font-size: 22px; font-size: 2.2rem; line-height: .5; position: absolute; top: 8px; right: 11px; color: #aaa; text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.6); font-weight: bold; cursor: pointer; }
|
||||
.reveal-modal.small { width: 30%; margin-left: -15%; }
|
||||
.reveal-modal.medium { width: 40%; margin-left: -20%; }
|
||||
.reveal-modal.large { width: 60%; margin-left: -30%; }
|
||||
.reveal-modal.xlarge { width: 70%; margin-left: -35%; }
|
||||
.reveal-modal.expand { width: 90%; margin-left: -45%; }
|
||||
.reveal-modal .row { min-width: 0; margin-bottom: 10px; }
|
||||
|
||||
/* Mobile */
|
||||
@media only screen and (max-width: 767px) { .reveal-modal-bg { position: absolute; }
|
||||
.reveal-modal, .reveal-modal.small, .reveal-modal.medium, .reveal-modal.large, .reveal-modal.xlarge { width: 80%; top: 15px; left: 50%; margin-left: -40%; padding: 20px; height: auto; } }
|
||||
/* NOTES Close button entity is ×
|
||||
Example markup <div id="myModal" class="reveal-modal"> <h2>Awesome. I have it.</h2> <p class="lead">Your couch. I it's mine.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ultrices aliquet placerat. Duis pulvinar orci et nisi euismod vitae tempus lorem consectetur. Duis at magna quis turpis mattis venenatis eget id diam. </p> <a class="close-reveal-modal">×</a> </div> */
|
||||
/* Requires -globals.css -app.js */
|
||||
/* Tabs ---------------------- */
|
||||
dl.tabs { border-bottom: solid 1px #e6e6e6; display: block; height: 40px; padding: 0; margin-bottom: 20px; }
|
||||
dl.tabs.contained { margin-bottom: 0; }
|
||||
dl.tabs dt { color: #b3b3b3; cursor: default; display: block; float: left; font-size: 12px; height: 40px; line-height: 40px; padding: 0; padding-right: 9px; padding-left: 20px; width: auto; text-transform: uppercase; }
|
||||
dl.tabs dt:first-child { padding: 0; padding-right: 9px; }
|
||||
dl.tabs dd { display: block; float: left; padding: 0; margin: 0; }
|
||||
dl.tabs dd a { color: #6f6f6f; display: block; font-size: 14px; height: 40px; line-height: 40px; padding: 0px 23.8px; }
|
||||
dl.tabs dd a:focus { font-weight: bold; color: #fd7800; }
|
||||
dl.tabs dd.active { border-top: 3px solid #fd7800; margin-top: -3px; }
|
||||
dl.tabs dd.active a { cursor: default; color: #3c3c3c; background: #fff; border-left: 1px solid #e6e6e6; border-right: 1px solid #e6e6e6; font-weight: bold; }
|
||||
dl.tabs dd:first-child { margin-left: 0; }
|
||||
dl.tabs.vertical { height: auto; border-bottom: 1px solid #e6e6e6; }
|
||||
dl.tabs.vertical dt, dl.tabs.vertical dd { float: none; height: auto; }
|
||||
dl.tabs.vertical dd { border-left: 3px solid #cccccc; }
|
||||
dl.tabs.vertical dd a { background: #f2f2f2; border: none; border: 1px solid #e6e6e6; border-width: 1px 1px 0 0; color: #555; display: block; font-size: 14px; height: auto; line-height: 1; padding: 15px 20px; -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset; }
|
||||
dl.tabs.vertical dd.active { margin-top: 0; border-top: 1px solid #4d4d4d; border-left: 4px solid #1a1a1a; }
|
||||
dl.tabs.vertical dd.active a { background: #4d4d4d; border: none; color: #fff; height: auto; margin: 0; position: static; top: 0; -webkit-box-shadow: 0 0 0; -moz-box-shadow: 0 0 0; box-shadow: 0 0 0; }
|
||||
dl.tabs.vertical dd:first-child a.active { margin: 0; }
|
||||
dl.tabs.pill { border-bottom: none; margin-bottom: 10px; }
|
||||
dl.tabs.pill dd { margin-right: 10px; }
|
||||
dl.tabs.pill dd:last-child { margin-right: 0; }
|
||||
dl.tabs.pill dd a { -webkit-border-radius: 1000px; -moz-border-radius: 1000px; -ms-border-radius: 1000px; -o-border-radius: 1000px; border-radius: 1000px; background: #e6e6e6; height: 26px; line-height: 26px; color: #666; }
|
||||
dl.tabs.pill dd.active { border: none; margin-top: 0; }
|
||||
dl.tabs.pill dd.active a { background-color: #fd7800; border: none; color: #fff; }
|
||||
dl.tabs.pill.contained { border-bottom: solid 1px #eee; margin-bottom: 0; }
|
||||
dl.tabs.pill.two-up dd, dl.tabs.pill.three-up dd, dl.tabs.pill.four-up dd, dl.tabs.pill.five-up dd { margin-right: 0; }
|
||||
dl.tabs.two-up dt a, dl.tabs.two-up dd a, dl.tabs.three-up dt a, dl.tabs.three-up dd a, dl.tabs.four-up dt a, dl.tabs.four-up dd a, dl.tabs.five-up dt a, dl.tabs.five-up dd a { padding: 0 17px; text-align: center; overflow: hidden; }
|
||||
dl.tabs.two-up dt, dl.tabs.two-up dd { width: 50%; }
|
||||
dl.tabs.three-up dt, dl.tabs.three-up dd { width: 33.33%; }
|
||||
dl.tabs.four-up dt, dl.tabs.four-up dd { width: 25%; }
|
||||
dl.tabs.five-up dt, dl.tabs.five-up dd { width: 20%; }
|
||||
|
||||
ul.tabs-content { display: block; margin: 0 0 20px; padding: 0; }
|
||||
ul.tabs-content > li { display: none; }
|
||||
ul.tabs-content > li.active { display: block; }
|
||||
ul.tabs-content.contained { padding: 0; }
|
||||
ul.tabs-content.contained > li { border: solid 0 #e6e6e6; border-width: 0 1px 1px 1px; padding: 20px; }
|
||||
ul.tabs-content.contained.vertical > li { border-width: 1px 1px 1px 1px; }
|
||||
|
||||
.no-js ul.tabs-content > li { display: block; }
|
||||
|
||||
@media only screen and (max-width: 767px) { dl.tabs.mobile { width: auto; margin: 20px -20px 40px; height: auto; }
|
||||
dl.tabs.mobile dt, dl.tabs.mobile dd { float: none; height: auto; }
|
||||
dl.tabs.mobile dd a { display: block; width: auto; height: auto; padding: 18px 20px; line-height: 1; border: solid 0 #ccc; border-width: 1px 0 0; margin: 0; color: #555; background: #eee; font-size: 15px; font-size: 1.5rem; }
|
||||
dl.tabs.mobile dd a.active { height: auto; margin: 0; border-width: 1px 0 0; }
|
||||
.tabs.mobile { border-bottom: solid 1px #ccc; height: auto; }
|
||||
.tabs.mobile dd a { padding: 18px 20px; border: none; border-left: none; border-right: none; border-top: 1px solid #ccc; background: #fff; }
|
||||
.tabs.mobile dd a.active { border: none; background: #fd7800; color: #fff; margin: 0; position: static; top: 0; height: auto; }
|
||||
.tabs.mobile dd:first-child a.active { margin: 0; }
|
||||
dl.contained.mobile { margin-bottom: 0; }
|
||||
dl.contained.tabs.mobile dd a { padding: 18px 20px; }
|
||||
dl.tabs.mobile + ul.contained { margin-left: -20px; margin-right: -20px; border-width: 0 0 1px 0; } }
|
||||
/* Requires: globals.css */
|
||||
/* Table of Contents
|
||||
|
||||
:: Visibility
|
||||
:: Alerts
|
||||
:: Labels
|
||||
:: Tooltips
|
||||
:: Panels
|
||||
:: Accordion
|
||||
:: Side Nav
|
||||
:: Sub Nav
|
||||
:: Pagination
|
||||
:: Breadcrumbs
|
||||
:: Lists
|
||||
:: Link Lists
|
||||
:: Keystroke Chars
|
||||
:: Image Thumbnails
|
||||
:: Video
|
||||
:: Tables
|
||||
:: Microformats
|
||||
:: Progress Bars
|
||||
|
||||
*/
|
||||
/* Visibility Classes ---------------------- */
|
||||
/* Standard (large) display targeting */
|
||||
.show-for-small, .show-for-medium, .show-for-medium-down, .hide-for-large, .hide-for-large-up, .show-for-xlarge { display: none !important; }
|
||||
|
||||
.hide-for-xlarge, .show-for-large, .show-for-large-up, .hide-for-small, .hide-for-medium, .hide-for-medium-down { display: block !important; }
|
||||
|
||||
/* Very large display targeting */
|
||||
@media only screen and (min-width: 1441px) { .hide-for-small, .hide-for-medium, .hide-for-medium-down, .hide-for-large, .show-for-large-up, .show-for-xlarge { display: block !important; }
|
||||
.show-for-small, .show-for-medium, .show-for-medium-down, .show-for-large, .hide-for-large-up, .hide-for-xlarge { display: none !important; } }
|
||||
/* Medium display targeting */
|
||||
@media only screen and (max-width: 1279px) and (min-width: 768px) { .hide-for-small, .show-for-medium, .show-for-medium-down, .hide-for-large, .hide-for-large-up, .hide-for-xlarge { display: block !important; }
|
||||
.show-for-small, .hide-for-medium, .hide-for-medium-down, .show-for-large, .show-for-large-up, .show-for-xlarge { display: none !important; } }
|
||||
/* Small display targeting */
|
||||
@media only screen and (max-width: 767px) { .show-for-small, .hide-for-medium, .show-for-medium-down, .hide-for-large, .hide-for-large-up, .hide-for-xlarge { display: block !important; }
|
||||
.hide-for-small, .show-for-medium, .hide-for-medium-down, .show-for-large, .show-for-large-up, .show-for-xlarge { display: none !important; } }
|
||||
/* Orientation targeting */
|
||||
.show-for-landscape, .hide-for-portrait { display: block !important; }
|
||||
|
||||
.hide-for-landscape, .show-for-portrait { display: none !important; }
|
||||
|
||||
@media screen and (orientation: landscape) { .show-for-landscape, .hide-for-portrait { display: block !important; }
|
||||
.hide-for-landscape, .show-for-portrait { display: none !important; } }
|
||||
@media screen and (orientation: portrait) { .show-for-portrait, .hide-for-landscape { display: block !important; }
|
||||
.hide-for-portrait, .show-for-landscape { display: none !important; } }
|
||||
/* Touch-enabled device targeting */
|
||||
.show-for-touch { display: none !important; }
|
||||
|
||||
.hide-for-touch { display: block !important; }
|
||||
|
||||
.touch .show-for-touch { display: block !important; }
|
||||
|
||||
.touch .hide-for-touch { display: none !important; }
|
||||
|
||||
/* Specific overrides for elements that require something other than display: block */
|
||||
table.show-for-xlarge, table.show-for-large, table.hide-for-small, table.hide-for-medium { display: table !important; }
|
||||
|
||||
@media only screen and (max-width: 1279px) and (min-width: 768px) { .touch table.hide-for-xlarge, .touch table.hide-for-large, .touch table.hide-for-small, .touch table.show-for-medium { display: table !important; } }
|
||||
@media only screen and (max-width: 767px) { table.hide-for-xlarge, table.hide-for-large, table.hide-for-medium, table.show-for-small { display: table !important; } }
|
||||
/* Alerts ---------------------- */
|
||||
div.alert-box { display: block; padding: 6px 7px 7px; font-weight: bold; font-size: 14px; color: white; background-color: #fd7800; border: 1px solid rgba(0, 0, 0, 0.1); margin-bottom: 12px; -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; text-shadow: 0 -1px rgba(0, 0, 0, 0.3); position: relative; }
|
||||
div.alert-box.success { background-color: #5da423; color: #fff; text-shadow: 0 -1px rgba(0, 0, 0, 0.3); }
|
||||
div.alert-box.alert { background-color: #c60f13; color: #fff; text-shadow: 0 -1px rgba(0, 0, 0, 0.3); }
|
||||
div.alert-box.secondary { background-color: #e9e9e9; color: #505050; text-shadow: 0 1px rgba(255, 255, 255, 0.3); }
|
||||
div.alert-box a.close { color: #333; position: absolute; right: 4px; top: -1px; font-size: 17px; opacity: 0.2; padding: 4px; }
|
||||
div.alert-box a.close:hover, div.alert-box a.close:focus { opacity: 0.4; }
|
||||
|
||||
/* Labels ---------------------- */
|
||||
|
||||
|
||||
/* Tooltips ---------------------- */
|
||||
.has-tip { border-bottom: dotted 1px #cccccc; cursor: help; font-weight: bold; color: #333333; }
|
||||
.has-tip:hover { border-bottom: dotted 1px #196177; color: #fd7800; }
|
||||
.has-tip.tip-left, .has-tip.tip-right { float: none !important; }
|
||||
|
||||
.tooltip { display: none; background: black; background: rgba(0, 0, 0, 0.85); position: absolute; color: white; font-weight: bold; font-size: 12px; font-size: 1.2rem; padding: 5px; z-index: 999; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; line-height: normal; }
|
||||
.tooltip > .nub { display: block; width: 0; height: 0; border: solid 5px; border-color: transparent transparent black transparent; border-color: transparent transparent rgba(0, 0, 0, 0.85) transparent; position: absolute; top: -10px; left: 10px; }
|
||||
.tooltip.tip-override > .nub { border-color: transparent transparent black transparent !important; border-color: transparent transparent rgba(0, 0, 0, 0.85) transparent !important; top: -10px !important; }
|
||||
.tooltip.tip-top > .nub { border-color: black transparent transparent transparent; border-color: rgba(0, 0, 0, 0.85) transparent transparent transparent; top: auto; bottom: -10px; }
|
||||
.tooltip.tip-left, .tooltip.tip-right { float: none !important; }
|
||||
.tooltip.tip-left > .nub { border-color: transparent transparent transparent black; border-color: transparent transparent transparent rgba(0, 0, 0, 0.85); right: -10px; left: auto; }
|
||||
.tooltip.tip-right > .nub { border-color: transparent black transparent transparent; border-color: transparent rgba(0, 0, 0, 0.85) transparent transparent; right: auto; left: -10px; }
|
||||
.tooltip.noradius { -webkit-border-radius: 0; -moz-border-radius: 0; -ms-border-radius: 0; -o-border-radius: 0; border-radius: 0; }
|
||||
.tooltip.opened { color: #fd7800 !important; border-bottom: dotted 1px #196177 !important; }
|
||||
|
||||
.tap-to-close { display: block; font-size: 10px; font-size: 1rem; color: #888888; font-weight: normal; }
|
||||
|
||||
@media only screen and (max-width: 767px) { .tooltip { font-size: 14px; font-size: 1.4rem; line-height: 1.4; padding: 7px 10px 9px 10px; }
|
||||
.tooltip > .nub, .tooltip.top > .nub, .tooltip.left > .nub, .tooltip.right > .nub { border-color: transparent transparent black transparent; border-color: transparent transparent rgba(0, 0, 0, 0.85) transparent; top: -12px; left: 10px; } }
|
||||
/* Panels ---------------------- */
|
||||
.panel { background: #f2f2f2; border: solid 1px #e6e6e6; margin: 0 0 22px 0; padding: 20px; }
|
||||
.panel > :first-child { margin-top: 0; }
|
||||
.panel > :last-child { margin-bottom: 0; }
|
||||
.panel.callout { background: #fd7800; color: #fff; border-color: #2284a1; -webkit-box-shadow: inset 0px 1px 0px rgba(255, 255, 255, 0.5); -moz-box-shadow: inset 0px 1px 0px rgba(255, 255, 255, 0.5); box-shadow: inset 0px 1px 0px rgba(255, 255, 255, 0.5); }
|
||||
.panel.callout a { color: #fff; }
|
||||
.panel.callout .button { background: white; border: none; color: #fd7800; text-shadow: none; }
|
||||
.panel.callout .button:hover { background: rgba(255, 255, 255, 0.8); }
|
||||
.panel.radius { -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; }
|
||||
|
||||
/* Accordion ---------------------- */
|
||||
ul.accordion { margin: 0 0 22px 0; border-bottom: 1px solid #e9e9e9; }
|
||||
ul.accordion > li { list-style: none; margin: 0; padding: 0; border-top: 1px solid #e9e9e9; }
|
||||
ul.accordion > li .title { cursor: pointer; background: #f6f6f6; padding: 15px; margin: 0; position: relative; border-left: 1px solid #e9e9e9; border-right: 1px solid #e9e9e9; -webkit-transition: 0.15s background linear; -moz-transition: 0.15s background linear; -o-transition: 0.15s background linear; transition: 0.15s background linear; }
|
||||
ul.accordion > li .title h1, ul.accordion > li .title h2, ul.accordion > li .title h3, ul.accordion > li .title h4, ul.accordion > li .title h5 { margin: 0; }
|
||||
ul.accordion > li .title:after { content: ""; display: block; width: 0; height: 0; border: solid 6px; border-color: transparent #9d9d9d transparent transparent; position: absolute; right: 15px; top: 21px; }
|
||||
ul.accordion > li .content { display: none; padding: 15px; }
|
||||
ul.accordion > li.active { border-top: 3px solid #fd7800; }
|
||||
ul.accordion > li.active .title { background: white; padding-top: 13px; }
|
||||
ul.accordion > li.active .title:after { content: ""; display: block; width: 0; height: 0; border: solid 6px; border-color: #9d9d9d transparent transparent transparent; }
|
||||
ul.accordion > li.active .content { background: white; display: block; border-left: 1px solid #e9e9e9; border-right: 1px solid #e9e9e9; }
|
||||
|
||||
/* Side Nav ---------------------- */
|
||||
ul.side-nav { display: block; list-style: none; margin: 0; padding: 17px 0; }
|
||||
ul.side-nav li { display: block; list-style: none; margin: 0 0 7px 0; }
|
||||
ul.side-nav li a { display: block; }
|
||||
ul.side-nav li.active a { color: #4d4d4d; font-weight: bold; }
|
||||
ul.side-nav li.divider { border-top: 1px solid #e6e6e6; height: 0; padding: 0; }
|
||||
|
||||
/* Sub Navs http://www.zurb.com/article/292/how-to-create-simple-and-effective-sub-na ---------------------- */
|
||||
dl.sub-nav { display: block; width: auto; overflow: hidden; margin: -4px 0 18px; margin-right: 0; margin-left: -9px; padding-top: 4px; }
|
||||
dl.sub-nav dt, dl.sub-nav dd { float: left; display: inline; margin-left: 9px; margin-bottom: 10px; }
|
||||
dl.sub-nav dt { color: #999; font-weight: normal; }
|
||||
dl.sub-nav dd a { text-decoration: none; -webkit-border-radius: 1000px; -moz-border-radius: 1000px; -ms-border-radius: 1000px; -o-border-radius: 1000px; border-radius: 1000px; }
|
||||
dl.sub-nav dd.active a { font-weight: bold; background: #fd7800; color: #fff; padding: 3px 9px; cursor: default; }
|
||||
|
||||
/* Pagination ---------------------- */
|
||||
ul.pagination { display: block; height: 24px; margin-left: -5px; }
|
||||
ul.pagination li { float: left; display: block; height: 24px; color: #999; font-size: 14px; margin-left: 5px; }
|
||||
ul.pagination li a { display: block; padding: 1px 7px 1px; color: #555; }
|
||||
ul.pagination li:hover a, ul.pagination li a:focus { background: #e6e6e6; }
|
||||
ul.pagination li.unavailable a { cursor: default; color: #999; }
|
||||
ul.pagination li.unavailable:hover a, ul.pagination li.unavailable a:focus { background: transparent; }
|
||||
ul.pagination li.current a { background: #fd7800; color: white; font-weight: bold; cursor: default; }
|
||||
ul.pagination li.current a:hover { background: #fd7800; }
|
||||
|
||||
/* Breadcrums ---------------------- */
|
||||
ul.breadcrumbs { display: block; background: #f6f6f6; padding: 6px 10px 7px; border: 1px solid #e9e9e9; -webkit-border-radius: 2px; -moz-border-radius: 2px; -ms-border-radius: 2px; -o-border-radius: 2px; border-radius: 2px; overflow: hidden; }
|
||||
ul.breadcrumbs li { margin: 0; padding: 0 12px 0 0; float: left; list-style: none; }
|
||||
ul.breadcrumbs li a, ul.breadcrumbs li span { text-transform: uppercase; font-size: 11px; font-size: 1.1rem; padding-left: 12px; }
|
||||
ul.breadcrumbs li:first-child a, ul.breadcrumbs li:first-child span { padding-left: 0; }
|
||||
ul.breadcrumbs li:before { content: "/"; color: #aaa; }
|
||||
ul.breadcrumbs li:first-child:before { content: " "; }
|
||||
ul.breadcrumbs li.current a { cursor: default; color: #333; }
|
||||
ul.breadcrumbs li:hover a, ul.breadcrumbs li a:focus { text-decoration: underline; }
|
||||
ul.breadcrumbs li.current:hover a, ul.breadcrumbs li.current a:focus { text-decoration: none; }
|
||||
ul.breadcrumbs li.unavailable a { color: #999; }
|
||||
ul.breadcrumbs li.unavailable:hover a, ul.breadcrumbs li.unavailable a:focus { text-decoration: none; color: #999; cursor: default; }
|
||||
|
||||
/* Link List */
|
||||
ul.link-list { margin: 0 0 17px -22px; padding: 0; list-style: none; overflow: hidden; }
|
||||
ul.link-list li { list-style: none; float: left; margin-left: 22px; display: block; }
|
||||
ul.link-list li a { display: block; }
|
||||
|
||||
/* Keytroke Characters ---------------------- */
|
||||
.keystroke, kbd { font-family: "Consolas", "Menlo", "Courier", monospace; font-size: 13px; padding: 2px 4px 0px; margin: 0; background: #ededed; border: solid 1px #dbdbdb; -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; }
|
||||
|
||||
/* Image Thumbnails ---------------------- */
|
||||
.th { display: block; }
|
||||
.th img { display: block; border: solid 4px #fff; -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2); -moz-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2); box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.2); -webkit-border-radius: 3px; -moz-border-radius: 3px; -ms-border-radius: 3px; -o-border-radius: 3px; border-radius: 3px; -webkit-transition-property: border, box-shadow; -moz-transition-property: border, box-shadow; -o-transition-property: border, box-shadow; transition-property: border, box-shadow; -webkit-transition-duration: 300ms; -moz-transition-duration: 300ms; -o-transition-duration: 300ms; transition-duration: 300ms; }
|
||||
.th:hover img { -webkit-box-shadow: 0 0 6px 1px rgba(43, 166, 203, 0.5); -moz-box-shadow: 0 0 6px 1px rgba(43, 166, 203, 0.5); box-shadow: 0 0 6px 1px rgba(43, 166, 203, 0.5); }
|
||||
|
||||
/* Video - Mad props to http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/ ---------------------- */
|
||||
.flex-video { position: relative; padding-top: 25px; padding-bottom: 67.5%; height: 0; margin-bottom: 16px; overflow: hidden; }
|
||||
.flex-video.widescreen { padding-bottom: 57.25%; }
|
||||
.flex-video.vimeo { padding-top: 0; }
|
||||
.flex-video iframe, .flex-video object, .flex-video embed, .flex-video video { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
|
||||
@@ -0,0 +1,776 @@
|
||||
@import url("base.css");
|
||||
|
||||
@import url("foundation.css");
|
||||
|
||||
table {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
pre {
|
||||
padding: 10px;
|
||||
background-color: #fafafa;
|
||||
color: #222;
|
||||
line-height: 1.0em;
|
||||
border: 2px solid #C6C9CB;
|
||||
font-size: 0.9em;
|
||||
/* margin: 1.5em 0 1.5em 0; */
|
||||
margin: 0;
|
||||
border-right-style: none;
|
||||
border-left-style: none;
|
||||
}
|
||||
|
||||
/* General */
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
a:link {
|
||||
text-decoration: none;
|
||||
}
|
||||
a:visited {
|
||||
text-decoration: none;
|
||||
}
|
||||
a:active,
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
h1,h2,h3,h4,h5,h6 {
|
||||
color: #000;
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
h1 { font-weight: normal; font-size: 24px; line-height: 24px; }
|
||||
h2 { font-weight: normal; font-size: 18px; line-height: 18px; }
|
||||
h3 { font-weight: bold; font-size: 18px; line-height: 18px; }
|
||||
h4 { font-weight: normal; font-size: 18px; line-height: 178px; }
|
||||
|
||||
hr {
|
||||
background-color: #c6c6c6;
|
||||
border:0;
|
||||
height: 1px;
|
||||
margin-bottom: 18px;
|
||||
clear:both;
|
||||
}
|
||||
|
||||
div.hr {
|
||||
height: 1px;
|
||||
background: #c6c6c6;
|
||||
}
|
||||
|
||||
div.hr2 {
|
||||
height: 1px;
|
||||
background: #c6c6c6;
|
||||
}
|
||||
|
||||
div.hr hr, div.hr2 hr {
|
||||
display: none;
|
||||
}
|
||||
|
||||
p {
|
||||
padding: 0 0 0.5em;
|
||||
line-height:1.6em;
|
||||
}
|
||||
ul {
|
||||
list-style: square;
|
||||
margin: 0 0 18px 0;
|
||||
}
|
||||
ol {
|
||||
list-style: decimal;
|
||||
margin: 0 0 18px 1.5em;
|
||||
}
|
||||
ol ol {
|
||||
list-style:upper-alpha;
|
||||
}
|
||||
ol ol ol {
|
||||
list-style:lower-roman;
|
||||
}
|
||||
ol ol ol ol {
|
||||
list-style:lower-alpha;
|
||||
}
|
||||
ul ul,
|
||||
ol ol,
|
||||
ul ol,
|
||||
ol ul {
|
||||
margin-bottom:0;
|
||||
}
|
||||
dl {
|
||||
margin:0 0 24px 0;
|
||||
}
|
||||
dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
dd {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
strong {
|
||||
font-weight: bold;
|
||||
color: #000;
|
||||
}
|
||||
cite,
|
||||
em,
|
||||
i {
|
||||
font-style: italic;
|
||||
border: none;
|
||||
}
|
||||
big {
|
||||
font-size: 131.25%;
|
||||
}
|
||||
ins {
|
||||
background: #FFFFCC;
|
||||
border: none;
|
||||
color: #333;
|
||||
}
|
||||
del {
|
||||
text-decoration: line-through;
|
||||
color: #555;
|
||||
}
|
||||
blockquote {
|
||||
font-style: italic;
|
||||
padding: 0 3em;
|
||||
}
|
||||
blockquote cite,
|
||||
blockquote em,
|
||||
blockquote i {
|
||||
font-style: normal;
|
||||
}
|
||||
pre {
|
||||
background: #f7f7f7;
|
||||
color: #222;
|
||||
padding: 1.5em;
|
||||
}
|
||||
abbr,
|
||||
acronym {
|
||||
border-bottom: 1px solid #666;
|
||||
cursor: help;
|
||||
}
|
||||
ins {
|
||||
text-decoration: none;
|
||||
}
|
||||
sup,
|
||||
sub {
|
||||
height: 0;
|
||||
line-height: 1;
|
||||
vertical-align: baseline;
|
||||
position: relative;
|
||||
font-size: 10px;
|
||||
}
|
||||
sup {
|
||||
bottom: 1ex;
|
||||
}
|
||||
sub {
|
||||
top: .5ex;
|
||||
}
|
||||
|
||||
p,
|
||||
ul,
|
||||
ol,
|
||||
dd,
|
||||
hr {
|
||||
margin-bottom:10px;
|
||||
}
|
||||
ul ul,
|
||||
ol ol,
|
||||
ul ol,
|
||||
ol ul {
|
||||
margin-bottom:0;
|
||||
}
|
||||
pre,
|
||||
kbd,
|
||||
tt,
|
||||
var {
|
||||
}
|
||||
code {
|
||||
font-size: 13px;
|
||||
}
|
||||
strong,
|
||||
b,
|
||||
dt,
|
||||
th {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
|
||||
/* main_container */
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
#wrapper {
|
||||
padding: 0px 0px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
/* header*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
#search-header{
|
||||
margin-top:15px;
|
||||
padding-bottom:13px;
|
||||
}
|
||||
|
||||
#search-header #search{
|
||||
background: #222;
|
||||
|
||||
}
|
||||
|
||||
#search-header #search #s{
|
||||
background: #222;
|
||||
font-size:12px;
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
#header_container{
|
||||
padding-bottom: 25px;
|
||||
padding-top: 0px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
#header {
|
||||
|
||||
}
|
||||
|
||||
#header2 {
|
||||
|
||||
}
|
||||
|
||||
#content_container{
|
||||
padding-top: 15px;
|
||||
}
|
||||
|
||||
#left-col {
|
||||
padding: 10px 20px;
|
||||
padding-left: 0px;
|
||||
background: #fff;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*footer*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
|
||||
#footer {
|
||||
padding: 5px 20px;
|
||||
background: #ddd;
|
||||
}
|
||||
|
||||
#footer-container{
|
||||
padding: 5px 20px;
|
||||
background: #303030;
|
||||
border-top: 8px solid #000;
|
||||
font-size:11px;
|
||||
}
|
||||
|
||||
#footer-info {
|
||||
color:#ccc;
|
||||
text-align:left;
|
||||
background: #1b1b1b;
|
||||
padding: 20px 0;
|
||||
}
|
||||
|
||||
|
||||
#footer-info a{
|
||||
text-decoration:none;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#footer-info a:hover{
|
||||
color: #ebebeb;
|
||||
}
|
||||
|
||||
#copyright{float: left;}
|
||||
|
||||
.scroll-top {
|
||||
text-align:right;
|
||||
}
|
||||
|
||||
#footer-widget{
|
||||
padding: 8px 0px 8px 0px;
|
||||
color:#6f6f6f;
|
||||
}
|
||||
|
||||
#footer-widget #search {
|
||||
width:120px;
|
||||
height:28px;
|
||||
background: #222;
|
||||
margin-left: 0px;
|
||||
position: relative;
|
||||
border: 1px solid #666;
|
||||
}
|
||||
|
||||
#footer-widget #search #s {
|
||||
width:110px;
|
||||
height:23px;
|
||||
border:0px;
|
||||
margin-left:7px;
|
||||
margin-right:10px;
|
||||
margin-top:3px;
|
||||
color:#fff;
|
||||
display: inline;
|
||||
background: #222;
|
||||
float: left;
|
||||
}
|
||||
|
||||
#footer-widget #calendar_wrap {
|
||||
padding: 8px 0px;
|
||||
}
|
||||
|
||||
#footer-widget #wp-calendar td{
|
||||
padding:2px;
|
||||
}
|
||||
|
||||
|
||||
#footer-widget .textwidget {
|
||||
padding: 5px 0px;
|
||||
line-height: 23px;
|
||||
}
|
||||
|
||||
|
||||
#footer-widget .widget_tag_cloud a{
|
||||
text-decoration: none;
|
||||
margin: 5px;
|
||||
line-height: 24px;
|
||||
margin-left: 0px;
|
||||
color: #6f6f6f;
|
||||
}
|
||||
|
||||
#footer-widget .widget_tag_cloud a:hover{
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#footer-widget .widget-container ul li a {
|
||||
color:#fd7800;
|
||||
}
|
||||
|
||||
#footer-widget .widget-container ul li a:hover {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
#footer-widget .widget-container h3 {
|
||||
color: #a5a5a5;
|
||||
text-transform: uppercase;
|
||||
margin-bottom: 0px;
|
||||
padding-top: 10px;
|
||||
padding-left: 0px;
|
||||
font-size: 25px;
|
||||
padding-bottom: 8px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#footer-widget .widget-container ul li {
|
||||
padding: 5px 0px;
|
||||
background: none;
|
||||
}
|
||||
|
||||
#footer-widget ul {
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
#footer-bar1 {
|
||||
padding-right: 40px;
|
||||
}
|
||||
#footer-bar2 {
|
||||
padding-right: 40px;
|
||||
}
|
||||
#footer-bar3 {
|
||||
}
|
||||
#footer-bar4 {
|
||||
}
|
||||
|
||||
span#follow-box{
|
||||
position: absolute;
|
||||
right: 100px;
|
||||
}
|
||||
|
||||
span#follow-box img{
|
||||
margin: 0 2px;
|
||||
}
|
||||
|
||||
/*logo*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
#logo {
|
||||
margin: 0px 0px 0px 0px;
|
||||
}
|
||||
|
||||
#logo2 {
|
||||
margin: 0px 0px 0px 0px;
|
||||
}
|
||||
|
||||
#logo img{
|
||||
border: none;
|
||||
}
|
||||
|
||||
#logo2{
|
||||
text-decoration: none;
|
||||
font-size: 42px;
|
||||
letter-spacing: -1pt;
|
||||
font-weight: bold;
|
||||
font-family:arial, "Times New Roman", Times, serif;
|
||||
text-align: left;
|
||||
line-height: 57px;
|
||||
padding-left: 0px;
|
||||
}
|
||||
|
||||
#logo2 a, #slogan{
|
||||
color: #fd7800;
|
||||
}
|
||||
|
||||
#slogan{
|
||||
text-align: left;
|
||||
padding-left: 0px;
|
||||
}
|
||||
|
||||
/*search*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
#search {
|
||||
width:180px;
|
||||
height:28px;
|
||||
border: 1px solid #ccc;
|
||||
margin-left: 10px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#sidebar #search {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
#search #searchsubmit {
|
||||
background:url(images/go-btn.png) no-repeat top right;
|
||||
width:28px;
|
||||
height:28px;
|
||||
border:0px;
|
||||
position:absolute;
|
||||
right: -35px;
|
||||
}
|
||||
|
||||
#search #s {
|
||||
width:170px;
|
||||
height:23px;
|
||||
border:0px;
|
||||
margin-left:7px;
|
||||
margin-right:10px;
|
||||
margin-top:3px;
|
||||
color:#000;
|
||||
display: inline;
|
||||
float: left;
|
||||
}
|
||||
|
||||
/*menu bar*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
#menu_container{
|
||||
padding-top: 0px;
|
||||
}
|
||||
|
||||
|
||||
/*responsive menu*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
/* default style */
|
||||
.selectnav { display: none; }
|
||||
|
||||
/* small screen */
|
||||
@media screen and (max-width: 600px) {
|
||||
.js #nav { display: none; }
|
||||
.js #nav2 { display: none; }
|
||||
.js .selectnav { display: block; }
|
||||
}
|
||||
|
||||
|
||||
/*welcome*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
#welcome_container h1{
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
/*homepage boxes*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
#box_container{
|
||||
padding-top: 35px;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.box-head {
|
||||
float: left;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
.box-head img{
|
||||
|
||||
}
|
||||
|
||||
.title-head{
|
||||
padding-top:2px;
|
||||
}
|
||||
|
||||
.title-box{
|
||||
color: #333;
|
||||
line-height: 15px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.title-box h1 {
|
||||
font-size: 18px;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.box-content {
|
||||
float: left;
|
||||
padding-top: 10px;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
|
||||
/* POST */
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
|
||||
.post {
|
||||
overflow: hidden;
|
||||
|
||||
}
|
||||
|
||||
.post-shadow{
|
||||
background: url("images/post_shadow.png") no-repeat bottom;
|
||||
height: 9px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.post ol{
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
.post ul {
|
||||
margin-left: 15px;
|
||||
}
|
||||
.post-entry ul { margin: 0 0 10px 10px; }
|
||||
.post-entry ul li {
|
||||
display: block;
|
||||
margin: 5px 0;
|
||||
padding: 0 0 0 20px;
|
||||
/*background: url(images/bullet.png) no-repeat 0 7px;*/
|
||||
}
|
||||
|
||||
.post-entry ol {
|
||||
list-style: decimal;
|
||||
margin: 0 0 18px 1.6em;
|
||||
}
|
||||
.post-entry ol li {
|
||||
list-style: decimal;
|
||||
}
|
||||
|
||||
.post-entry {
|
||||
padding-bottom: 10px;
|
||||
padding-top: 10px;
|
||||
overflow: hidden;
|
||||
|
||||
}
|
||||
|
||||
.post-head {
|
||||
margin-bottom: 5px;
|
||||
padding-top: 15px;
|
||||
}
|
||||
|
||||
.post-head h1 a, .post-head h1 {
|
||||
text-decoration:none;
|
||||
color:#000;
|
||||
margin: 0px;
|
||||
font-size: 27px;
|
||||
}
|
||||
|
||||
.post-head h1 a:hover {
|
||||
color:#777;
|
||||
}
|
||||
|
||||
|
||||
.post-head-notfound h1, .post-head-404 h1, .post-head-archive h1, .post-head-search h1 {
|
||||
margin-bottom: 10px;
|
||||
font-weight:normal;
|
||||
text-decoration:none;
|
||||
color:#000;
|
||||
font-size: 27px;
|
||||
}
|
||||
|
||||
.post-thumb img {
|
||||
border: 0px solid #ebebeb;
|
||||
}
|
||||
|
||||
.post-entry img{
|
||||
margin-bottom: 10px;
|
||||
height:auto;
|
||||
max-width:100% !important;
|
||||
}
|
||||
|
||||
.meta-data{
|
||||
line-height: 16px;
|
||||
padding: 6px 3px;
|
||||
margin-bottom: 3px;
|
||||
font-size: 11px;
|
||||
border-bottom: 1px solid #e9e9e9;
|
||||
}
|
||||
|
||||
.meta-data a{
|
||||
color: #fd7800;
|
||||
}
|
||||
|
||||
.meta-data a:hover{
|
||||
color: #777;
|
||||
}
|
||||
|
||||
.read-more {
|
||||
color: #000;
|
||||
background: #fff;
|
||||
padding: 4px 8px;
|
||||
border-radius: 3px;
|
||||
display: inline-block;
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
text-transform: capitalize;
|
||||
cursor: pointer;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.read-more:hover{
|
||||
background: #fff;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.clear {
|
||||
clear:both;
|
||||
}
|
||||
|
||||
.sticky {
|
||||
|
||||
}
|
||||
|
||||
/* content */
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
#content_container table {
|
||||
border: 1px solid #e7e7e7;
|
||||
margin: 0 -1px 24px 0;
|
||||
text-align: left;
|
||||
width: 100%;
|
||||
|
||||
}
|
||||
#content_container tr th,
|
||||
#content_container thead th {
|
||||
color: #888;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
line-height: 18px;
|
||||
padding: 9px 10px;
|
||||
}
|
||||
#content_container tr td {
|
||||
|
||||
padding: 6px 10px;
|
||||
}
|
||||
#content_container tr.odd td {
|
||||
background: #f2f7fc;
|
||||
}
|
||||
|
||||
/*--navigation--*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
.navigation {
|
||||
float: left;
|
||||
width: 100%;
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
|
||||
.navigation .alignleft a {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.navigation .alignright a {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#nav-single {
|
||||
overflow:hidden;
|
||||
margin-top:20px;
|
||||
margin-bottom:10px;
|
||||
}
|
||||
.nav-previous {
|
||||
float: left;
|
||||
width: 50%;
|
||||
}
|
||||
.nav-next {
|
||||
float: right;
|
||||
text-align: right;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
/*--sub head and breadcrumbs--*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
#subhead_container{
|
||||
padding: 7px 0px;
|
||||
}
|
||||
|
||||
#subhead h1{
|
||||
color: #000;
|
||||
padding-top: 10px;
|
||||
padding-left: 0px;
|
||||
font-size: 30px;
|
||||
}
|
||||
|
||||
#breadcrumbs {
|
||||
padding-left: 25px;
|
||||
margin-bottom: 15px;
|
||||
color: #9e9e9e;
|
||||
margin:0 auto;
|
||||
width: 964px;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
#breadcrumbs a{
|
||||
text-decoration: none;
|
||||
color: #9e9e9e;
|
||||
}
|
||||
|
||||
/*Alignments */
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
.alignleft,
|
||||
img.alignleft {
|
||||
display: inline;
|
||||
float: left;
|
||||
margin-right: 22px;
|
||||
margin-top: 9px;
|
||||
}
|
||||
|
||||
.alignright,
|
||||
img.alignright {
|
||||
display: inline;
|
||||
float: right;
|
||||
margin-left: 22px;
|
||||
margin-top: 8px;
|
||||
}
|
||||
.aligncenter,
|
||||
img.aligncenter {
|
||||
clear: both;
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.alignleft,
|
||||
.alignright,
|
||||
.aligncenter,
|
||||
img.alignleft,
|
||||
img.alignright,
|
||||
img.aligncenter
|
||||
{
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
|
||||
a img.aligncenter {
|
||||
display:block;
|
||||
margin-left:auto;
|
||||
margin-right:auto;
|
||||
}
|
||||
|
||||
img { -webkit-box-sizing: content-box; -moz-box-sizing: content-box; box-sizing: content-box; }
|
||||
@@ -0,0 +1,813 @@
|
||||
@import url("base.css");
|
||||
|
||||
@import url("foundation.css");
|
||||
|
||||
table {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
pre {
|
||||
padding: 10px;
|
||||
background-color: #fafafa;
|
||||
color: #222;
|
||||
/* line-height: 1.0em; */
|
||||
border: 2px solid #C6C9CB;
|
||||
font-size: 0.9em;
|
||||
/* margin: 1.5em 0 1.5em 0; */
|
||||
margin: 0;
|
||||
border-right-style: none;
|
||||
border-left-style: none;
|
||||
}
|
||||
|
||||
/* General */
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
a:link {
|
||||
text-decoration: none;
|
||||
}
|
||||
a:visited {
|
||||
text-decoration: none;
|
||||
}
|
||||
a:active,
|
||||
a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
h1,h2,h3,h4,h5,h6 {
|
||||
color: #000;
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
|
||||
h1 { font-weight: bold; font-size: 24px; }
|
||||
h2 { font-weight: bold; font-size: 18px; }
|
||||
h3 { font-weight: bold; font-size: 16px; }
|
||||
h4 { font-weight: bold; font-size: 14px; }
|
||||
|
||||
hr {
|
||||
background-color: #c6c6c6;
|
||||
border:0;
|
||||
height: 1px;
|
||||
margin-bottom: 18px;
|
||||
clear:both;
|
||||
}
|
||||
|
||||
div.hr {
|
||||
height: 1px;
|
||||
background: #c6c6c6;
|
||||
}
|
||||
|
||||
div.hr2 {
|
||||
height: 1px;
|
||||
background: #c6c6c6;
|
||||
}
|
||||
|
||||
div.hr hr, div.hr2 hr {
|
||||
display: none;
|
||||
}
|
||||
|
||||
p {
|
||||
padding: 0;
|
||||
line-height:1.6em;
|
||||
}
|
||||
ul {
|
||||
list-style: square;
|
||||
margin: 0 0 18px 0;
|
||||
}
|
||||
ol {
|
||||
list-style: decimal;
|
||||
margin: 0 0 18px 1.5em;
|
||||
}
|
||||
ol ol {
|
||||
list-style:upper-alpha;
|
||||
}
|
||||
ol ol ol {
|
||||
list-style:lower-roman;
|
||||
}
|
||||
ol ol ol ol {
|
||||
list-style:lower-alpha;
|
||||
}
|
||||
ul ul,
|
||||
ol ol,
|
||||
ul ol,
|
||||
ol ul {
|
||||
margin-bottom:0;
|
||||
}
|
||||
dl {
|
||||
margin:0 0 24px 0;
|
||||
}
|
||||
dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
dd {
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
strong {
|
||||
font-weight: bold;
|
||||
color: #000;
|
||||
}
|
||||
cite,
|
||||
em,
|
||||
i {
|
||||
font-style: italic;
|
||||
border: none;
|
||||
}
|
||||
big {
|
||||
font-size: 131.25%;
|
||||
}
|
||||
ins {
|
||||
background: #FFFFCC;
|
||||
border: none;
|
||||
color: #333;
|
||||
}
|
||||
del {
|
||||
text-decoration: line-through;
|
||||
color: #555;
|
||||
}
|
||||
blockquote {
|
||||
padding: 0 3em;
|
||||
}
|
||||
blockquote cite,
|
||||
blockquote em,
|
||||
blockquote i {
|
||||
font-style: normal;
|
||||
}
|
||||
pre {
|
||||
background: #f7f7f7;
|
||||
color: #222;
|
||||
padding: 1.5em;
|
||||
}
|
||||
abbr,
|
||||
acronym {
|
||||
border-bottom: 1px solid #666;
|
||||
cursor: help;
|
||||
}
|
||||
ins {
|
||||
text-decoration: none;
|
||||
}
|
||||
sup,
|
||||
sub {
|
||||
height: 0;
|
||||
line-height: 1;
|
||||
vertical-align: baseline;
|
||||
position: relative;
|
||||
font-size: 10px;
|
||||
}
|
||||
sup {
|
||||
bottom: 1ex;
|
||||
}
|
||||
sub {
|
||||
top: .5ex;
|
||||
}
|
||||
|
||||
p,
|
||||
ul,
|
||||
ol,
|
||||
dd,
|
||||
hr {
|
||||
margin-bottom:10px;
|
||||
}
|
||||
ul ul,
|
||||
ol ol,
|
||||
ul ol,
|
||||
ol ul {
|
||||
margin-bottom:0;
|
||||
}
|
||||
pre,
|
||||
kbd,
|
||||
tt,
|
||||
var {
|
||||
}
|
||||
code {
|
||||
font-size: 13px;
|
||||
}
|
||||
strong,
|
||||
b,
|
||||
dt,
|
||||
th {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
|
||||
/* main_container */
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
#wrapper {
|
||||
padding: 0px 0px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
/* header*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
#search-header{
|
||||
margin-top:15px;
|
||||
padding-bottom:13px;
|
||||
}
|
||||
|
||||
#search-header #search{
|
||||
background: #222;
|
||||
|
||||
}
|
||||
|
||||
#search-header #search #s{
|
||||
background: #222;
|
||||
font-size:12px;
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
#header_container{
|
||||
padding-bottom: 25px;
|
||||
padding-top: 0px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
#header {
|
||||
|
||||
}
|
||||
|
||||
#header2 {
|
||||
|
||||
}
|
||||
|
||||
#content_container{
|
||||
padding-top: 15px;
|
||||
}
|
||||
|
||||
#left-col {
|
||||
padding: 10px 20px;
|
||||
padding-left: 0px;
|
||||
background: #fff;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*footer*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
|
||||
#footer {
|
||||
padding: 5px 20px;
|
||||
background: #ddd;
|
||||
}
|
||||
|
||||
#footer-container{
|
||||
padding: 5px 20px;
|
||||
background: #303030;
|
||||
border-top: 8px solid #000;
|
||||
font-size:11px;
|
||||
}
|
||||
|
||||
#footer-info {
|
||||
color:#ccc;
|
||||
text-align:left;
|
||||
background: #1b1b1b;
|
||||
padding: 20px 0;
|
||||
}
|
||||
|
||||
|
||||
#footer-info a{
|
||||
text-decoration:none;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#footer-info a:hover{
|
||||
color: #ebebeb;
|
||||
}
|
||||
|
||||
#copyright{float: left;}
|
||||
|
||||
.scroll-top {
|
||||
text-align:right;
|
||||
}
|
||||
|
||||
#footer-widget{
|
||||
padding: 8px 0px 8px 0px;
|
||||
color:#6f6f6f;
|
||||
}
|
||||
|
||||
#footer-widget #search {
|
||||
width:120px;
|
||||
height:28px;
|
||||
background: #222;
|
||||
margin-left: 0px;
|
||||
position: relative;
|
||||
border: 1px solid #666;
|
||||
}
|
||||
|
||||
#footer-widget #search #s {
|
||||
width:110px;
|
||||
height:23px;
|
||||
border:0px;
|
||||
margin-left:7px;
|
||||
margin-right:10px;
|
||||
margin-top:3px;
|
||||
color:#fff;
|
||||
display: inline;
|
||||
background: #222;
|
||||
float: left;
|
||||
}
|
||||
|
||||
#footer-widget #calendar_wrap {
|
||||
padding: 8px 0px;
|
||||
}
|
||||
|
||||
#footer-widget #wp-calendar td{
|
||||
padding:2px;
|
||||
}
|
||||
|
||||
|
||||
#footer-widget .textwidget {
|
||||
padding: 5px 0px;
|
||||
line-height: 23px;
|
||||
}
|
||||
|
||||
|
||||
#footer-widget .widget_tag_cloud a{
|
||||
text-decoration: none;
|
||||
margin: 5px;
|
||||
line-height: 24px;
|
||||
margin-left: 0px;
|
||||
color: #6f6f6f;
|
||||
}
|
||||
|
||||
#footer-widget .widget_tag_cloud a:hover{
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#footer-widget .widget-container ul li a {
|
||||
color:#fd7800;
|
||||
}
|
||||
|
||||
#footer-widget .widget-container ul li a:hover {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
#footer-widget .widget-container h3 {
|
||||
color: #a5a5a5;
|
||||
text-transform: uppercase;
|
||||
margin-bottom: 0px;
|
||||
padding-top: 10px;
|
||||
padding-left: 0px;
|
||||
font-size: 25px;
|
||||
padding-bottom: 8px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#footer-widget .widget-container ul li {
|
||||
padding: 5px 0px;
|
||||
background: none;
|
||||
}
|
||||
|
||||
#footer-widget ul {
|
||||
margin-left: 0px;
|
||||
}
|
||||
|
||||
#footer-bar1 {
|
||||
padding-right: 40px;
|
||||
}
|
||||
#footer-bar2 {
|
||||
padding-right: 40px;
|
||||
}
|
||||
#footer-bar3 {
|
||||
}
|
||||
#footer-bar4 {
|
||||
}
|
||||
|
||||
span#follow-box{
|
||||
position: absolute;
|
||||
right: 100px;
|
||||
}
|
||||
|
||||
span#follow-box img{
|
||||
margin: 0 2px;
|
||||
}
|
||||
|
||||
/*logo*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
#logo {
|
||||
margin: 0px 0px 0px 0px;
|
||||
}
|
||||
|
||||
#logo2 {
|
||||
margin: 0px 0px 0px 0px;
|
||||
}
|
||||
|
||||
#logo img{
|
||||
border: none;
|
||||
}
|
||||
|
||||
#logo2{
|
||||
text-decoration: none;
|
||||
font-size: 42px;
|
||||
letter-spacing: -1pt;
|
||||
font-weight: bold;
|
||||
font-family:arial, "Times New Roman", Times, serif;
|
||||
text-align: left;
|
||||
line-height: 57px;
|
||||
padding-left: 0px;
|
||||
}
|
||||
|
||||
#logo2 a, #slogan{
|
||||
color: #fd7800;
|
||||
}
|
||||
|
||||
#slogan{
|
||||
text-align: left;
|
||||
padding-left: 0px;
|
||||
}
|
||||
|
||||
/*search*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
#search {
|
||||
width:180px;
|
||||
height:28px;
|
||||
border: 1px solid #ccc;
|
||||
margin-left: 10px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#sidebar #search {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
#search #searchsubmit {
|
||||
background:url(images/go-btn.png) no-repeat top right;
|
||||
width:28px;
|
||||
height:28px;
|
||||
border:0px;
|
||||
position:absolute;
|
||||
right: -35px;
|
||||
}
|
||||
|
||||
#search #s {
|
||||
width:170px;
|
||||
height:23px;
|
||||
border:0px;
|
||||
margin-left:7px;
|
||||
margin-right:10px;
|
||||
margin-top:3px;
|
||||
color:#000;
|
||||
display: inline;
|
||||
float: left;
|
||||
}
|
||||
|
||||
/*menu bar*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
#menu_container{
|
||||
padding-top: 0px;
|
||||
}
|
||||
|
||||
|
||||
/*responsive menu*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
/* default style */
|
||||
.selectnav { display: none; }
|
||||
|
||||
/* small screen */
|
||||
@media screen and (max-width: 600px) {
|
||||
.js #nav { display: none; }
|
||||
.js #nav2 { display: none; }
|
||||
.js .selectnav { display: block; }
|
||||
}
|
||||
|
||||
|
||||
/*welcome*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
#welcome_container h1{
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
/*homepage boxes*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
#box_container{
|
||||
padding-top: 35px;
|
||||
padding-bottom: 15px;
|
||||
}
|
||||
|
||||
.box-head {
|
||||
float: left;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
.box-head img{
|
||||
|
||||
}
|
||||
|
||||
.title-head{
|
||||
padding-top:2px;
|
||||
}
|
||||
|
||||
.title-box{
|
||||
color: #333;
|
||||
line-height: 15px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.title-box h1 {
|
||||
font-size: 18px;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.box-content {
|
||||
float: left;
|
||||
padding-top: 10px;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
|
||||
/* POST */
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
|
||||
.post {
|
||||
overflow: hidden;
|
||||
|
||||
}
|
||||
|
||||
.post-shadow{
|
||||
background: url("images/post_shadow.png") no-repeat bottom;
|
||||
height: 9px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.post ol{
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
.post ul {
|
||||
margin-left: 15px;
|
||||
}
|
||||
.post-entry ul { margin: 0 0 10px 10px; }
|
||||
.post-entry ul li {
|
||||
display: block;
|
||||
margin: 5px 0;
|
||||
padding: 0 0 0 20px;
|
||||
/*background: url(images/bullet.png) no-repeat 0 7px;*/
|
||||
}
|
||||
|
||||
.post-entry ol {
|
||||
list-style: decimal;
|
||||
margin: 0 0 18px 1.6em;
|
||||
}
|
||||
.post-entry ol li {
|
||||
list-style: decimal;
|
||||
}
|
||||
|
||||
.post-entry {
|
||||
padding-bottom: 10px;
|
||||
padding-top: 10px;
|
||||
overflow: hidden;
|
||||
|
||||
}
|
||||
|
||||
.post-head {
|
||||
margin-bottom: 5px;
|
||||
padding-top: 15px;
|
||||
}
|
||||
|
||||
.post-head h1 a, .post-head h1 {
|
||||
text-decoration:none;
|
||||
color:#000;
|
||||
margin: 0px;
|
||||
font-size: 27px;
|
||||
}
|
||||
|
||||
.post-head h1 a:hover {
|
||||
color:#777;
|
||||
}
|
||||
|
||||
|
||||
.post-head-notfound h1, .post-head-404 h1, .post-head-archive h1, .post-head-search h1 {
|
||||
margin-bottom: 10px;
|
||||
font-weight:normal;
|
||||
text-decoration:none;
|
||||
color:#000;
|
||||
font-size: 27px;
|
||||
}
|
||||
|
||||
.post-thumb img {
|
||||
border: 0px solid #ebebeb;
|
||||
}
|
||||
|
||||
.post-entry img{
|
||||
margin-bottom: 10px;
|
||||
height:auto;
|
||||
max-width:100% !important;
|
||||
}
|
||||
|
||||
.meta-data{
|
||||
line-height: 16px;
|
||||
padding: 6px 3px;
|
||||
margin-bottom: 3px;
|
||||
font-size: 11px;
|
||||
border-bottom: 1px solid #e9e9e9;
|
||||
}
|
||||
|
||||
.meta-data a{
|
||||
color: #fd7800;
|
||||
}
|
||||
|
||||
.meta-data a:hover{
|
||||
color: #777;
|
||||
}
|
||||
|
||||
.read-more {
|
||||
color: #000;
|
||||
background: #fff;
|
||||
padding: 4px 8px;
|
||||
border-radius: 3px;
|
||||
display: inline-block;
|
||||
font-size: 11px;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
text-transform: capitalize;
|
||||
cursor: pointer;
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.read-more:hover{
|
||||
background: #fff;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.clear {
|
||||
clear:both;
|
||||
}
|
||||
|
||||
.sticky {
|
||||
|
||||
}
|
||||
|
||||
/* content */
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
#content_container table {
|
||||
border: 1px solid #e7e7e7;
|
||||
margin: 0 -1px 24px 0;
|
||||
text-align: left;
|
||||
width: 100%;
|
||||
|
||||
}
|
||||
#content_container tr th,
|
||||
#content_container thead th {
|
||||
color: #888;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
line-height: 18px;
|
||||
padding: 9px 10px;
|
||||
}
|
||||
#content_container tr td {
|
||||
|
||||
padding: 6px 10px;
|
||||
}
|
||||
#content_container tr.odd td {
|
||||
background: #f2f7fc;
|
||||
}
|
||||
|
||||
/* sidebar*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
#sidebar {
|
||||
padding:0px 20px 20px 0px;
|
||||
}
|
||||
|
||||
#sidebar ul {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
#sidebar { word-wrap: break-word;}
|
||||
|
||||
|
||||
/*--navigation--*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
.navigation {
|
||||
float: left;
|
||||
width: 100%;
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
|
||||
.navigation .alignleft a {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.navigation .alignright a {
|
||||
float: right;
|
||||
}
|
||||
|
||||
#nav-single {
|
||||
overflow:hidden;
|
||||
margin-top:20px;
|
||||
margin-bottom:10px;
|
||||
}
|
||||
.nav-previous {
|
||||
float: left;
|
||||
width: 50%;
|
||||
}
|
||||
.nav-next {
|
||||
float: right;
|
||||
text-align: right;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
/*--slider--*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
#slider_container {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.flex-caption{
|
||||
background: #232323;
|
||||
color: #fff;
|
||||
padding: 7px;
|
||||
}
|
||||
|
||||
.flexslider p{
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
/*--sub head and breadcrumbs--*/
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
#subhead_container{
|
||||
padding: 7px 0px;
|
||||
}
|
||||
|
||||
#subhead h1{
|
||||
color: #000;
|
||||
padding-top: 10px;
|
||||
padding-left: 0px;
|
||||
font-size: 30px;
|
||||
}
|
||||
|
||||
#breadcrumbs {
|
||||
padding-left: 25px;
|
||||
margin-bottom: 15px;
|
||||
color: #9e9e9e;
|
||||
margin:0 auto;
|
||||
width: 964px;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
#breadcrumbs a{
|
||||
text-decoration: none;
|
||||
color: #9e9e9e;
|
||||
}
|
||||
|
||||
/*Alignments */
|
||||
/*////////////////////////////////////////////////////////////////////////////////////////////*/
|
||||
|
||||
.alignleft,
|
||||
img.alignleft {
|
||||
display: inline;
|
||||
float: left;
|
||||
margin-right: 22px;
|
||||
margin-top: 9px;
|
||||
}
|
||||
|
||||
.alignright,
|
||||
img.alignright {
|
||||
display: inline;
|
||||
float: right;
|
||||
margin-left: 22px;
|
||||
margin-top: 8px;
|
||||
}
|
||||
.aligncenter,
|
||||
img.aligncenter {
|
||||
clear: both;
|
||||
display: block;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.alignleft,
|
||||
.alignright,
|
||||
.aligncenter,
|
||||
img.alignleft,
|
||||
img.alignright,
|
||||
img.aligncenter
|
||||
{
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
|
||||
a img.aligncenter {
|
||||
display:block;
|
||||
margin-left:auto;
|
||||
margin-right:auto;
|
||||
}
|
||||
|
||||
|
||||
table {
|
||||
border-collapse:collapse;
|
||||
}
|
||||
table, th, td {
|
||||
border: 1px solid black;
|
||||
padding: 5px;
|
||||
}
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 134 B |
Binary file not shown.
|
After Width: | Height: | Size: 146 B |
@@ -0,0 +1,15 @@
|
||||
[theme]
|
||||
inherit = agogo
|
||||
stylesheet = named_data_style.css
|
||||
# pygments_style = sphinx
|
||||
|
||||
theme_bodyfont = "normal 12px Verdana, sans-serif"
|
||||
theme_bgcolor = "#ccc"
|
||||
|
||||
theme_documentwidth = "100%"
|
||||
theme_textalign = "left"
|
||||
|
||||
[options]
|
||||
|
||||
stickysidebar = true
|
||||
collapsiblesidebar = true
|
||||
+8
-3
@@ -25,6 +25,7 @@
|
||||
#include "nlsr.hpp"
|
||||
#include "conf-file-processor.hpp"
|
||||
#include "logger.hpp"
|
||||
#include "version.hpp"
|
||||
|
||||
using namespace nlsr;
|
||||
|
||||
@@ -35,20 +36,24 @@ main(int32_t argc, char** argv)
|
||||
std::string programName(argv[0]);
|
||||
nlsr.setConfFileName("nlsr.conf");
|
||||
int32_t opt;
|
||||
while ((opt = getopt(argc, argv, "df:h")) != -1) {
|
||||
while ((opt = getopt(argc, argv, "df:hV")) != -1) {
|
||||
switch (opt)
|
||||
{
|
||||
{
|
||||
case 'f':
|
||||
nlsr.setConfFileName(optarg);
|
||||
break;
|
||||
case 'd':
|
||||
nlsr.setIsDaemonProcess(true);
|
||||
break;
|
||||
case 'V':
|
||||
std::cout << NLSR_VERSION_BUILD_STRING << std::endl;
|
||||
return EXIT_SUCCESS;
|
||||
break;
|
||||
case 'h':
|
||||
default:
|
||||
nlsr.usage(programName);
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
ConfFileProcessor cfp(nlsr, nlsr.getConfFileName());
|
||||
if(!cfp.processConfFile()) {
|
||||
|
||||
+4
-3
@@ -283,9 +283,10 @@ Nlsr::usage(const string& progname)
|
||||
{
|
||||
std::cout << "Usage: " << progname << " [OPTIONS...]" << std::endl;
|
||||
std::cout << " NDN routing...." << std::endl;
|
||||
std::cout << " -d, --daemon Run in daemon mode" << std::endl;
|
||||
std::cout << " -f, --config_file Specify configuration file name" << std::endl;
|
||||
std::cout << " -h, --help Display this help message" << std::endl;
|
||||
std::cout << " -d Run in daemon mode" << std::endl;
|
||||
std::cout << " -f <FILE> Specify configuration file name" << std::endl;
|
||||
std::cout << " -V Display version information" << std::endl;
|
||||
std::cout << " -h Display this help message" << std::endl;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
|
||||
/**
|
||||
* Copyright (c) 2014 University of Memphis,
|
||||
* Regents of the University of California
|
||||
*
|
||||
* This file is part of NLSR (Named-data Link State Routing).
|
||||
* See AUTHORS.md for complete list of NLSR authors and contributors.
|
||||
*
|
||||
* NLSR is free software: you can redistribute it and/or modify it under the terms
|
||||
* of the GNU General Public License as published by the Free Software Foundation,
|
||||
* either version 3 of the License, or (at your option) any later version.
|
||||
*
|
||||
* NLSR 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
|
||||
**/
|
||||
|
||||
#ifndef NLSR_VERSION_HPP
|
||||
#define NLSR_VERSION_HPP
|
||||
|
||||
namespace nlsr {
|
||||
|
||||
/** NLSR version follows Semantic Versioning 2.0.0 specification
|
||||
* http://semver.org/
|
||||
*/
|
||||
|
||||
// To change version number, modify VERSION variable in top-level wscript.
|
||||
|
||||
/** \brief NLSR version represented as an integer
|
||||
*
|
||||
* MAJOR*1000000 + MINOR*1000 + PATCH
|
||||
*/
|
||||
#define NLSR_VERSION @VERSION@
|
||||
|
||||
/** \brief NLSR version represented as a string
|
||||
*
|
||||
* MAJOR.MINOR.PATCH
|
||||
*/
|
||||
#define NLSR_VERSION_STRING "@VERSION_STRING@"
|
||||
|
||||
/** \brief NLSR version string, including git commit information, if NLSR is build from
|
||||
* specific git commit
|
||||
*
|
||||
* NLSR_VERSION_BUILD_STRING is obtained using the following command (`NLSR-` prefix is
|
||||
* afterwards removed):
|
||||
*
|
||||
* `git describe --match 'NLSR-*'`
|
||||
*
|
||||
* When NLSR is built not from git, NLSR_VERSION_BUILD_STRING equals NLSR_VERSION_STRING
|
||||
*
|
||||
* MAJOR.MINOR.PATCH(-release-candidate-tag)(-(number-of-commits-since-tag)-COMMIT-HASH)
|
||||
*
|
||||
* Example, 0.1.0-rc1-1-g5c86570
|
||||
*/
|
||||
#define NLSR_VERSION_BUILD_STRING "@VERSION_BUILD@"
|
||||
|
||||
/// MAJOR version
|
||||
#define NLSR_VERSION_MAJOR @VERSION_MAJOR@
|
||||
/// MINOR version
|
||||
#define NLSR_VERSION_MINOR @VERSION_MINOR@
|
||||
/// PATCH version
|
||||
#define NLSR_VERSION_PATCH @VERSION_PATCH@
|
||||
|
||||
} // namespace nlsr
|
||||
|
||||
#endif // NLSR_VERSION_HPP
|
||||
@@ -19,10 +19,13 @@ You should have received a copy of the GNU General Public License along with
|
||||
NLSR, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
|
||||
"""
|
||||
|
||||
VERSION='1.0'
|
||||
NAME="NLSR"
|
||||
VERSION='0.1.0'
|
||||
NAME="nlsr"
|
||||
BUGREPORT = "http://redmine.named-data.net/projects/nlsr"
|
||||
URL = "http://named-data.net/doc/NLSR/"
|
||||
GIT_TAG_PREFIX = "NLSR-"
|
||||
|
||||
from waflib import Build, Logs, Utils, Task, TaskGen, Configure
|
||||
from waflib import Build, Logs, Utils, Task, TaskGen, Configure, Context
|
||||
from waflib.Tools import c_preproc
|
||||
|
||||
def options(opt):
|
||||
@@ -39,9 +42,10 @@ def options(opt):
|
||||
|
||||
|
||||
def configure(conf):
|
||||
conf.load("compiler_cxx gnu_dirs boost openssl")
|
||||
|
||||
conf.load('default-compiler-flags')
|
||||
conf.load(['compiler_cxx', 'gnu_dirs',
|
||||
'boost', 'openssl',
|
||||
'default-compiler-flags',
|
||||
'doxygen', 'sphinx_build'])
|
||||
|
||||
conf.check_cfg(package='libndn-cxx', args=['--cflags', '--libs'],
|
||||
uselib_store='NDN_CPP', mandatory=True)
|
||||
@@ -71,7 +75,24 @@ def configure(conf):
|
||||
conf.write_config_header('config.hpp')
|
||||
|
||||
|
||||
def build (bld):
|
||||
def build(bld):
|
||||
version(bld)
|
||||
|
||||
bld(features="subst",
|
||||
name='version',
|
||||
source='src/version.hpp.in',
|
||||
target='src/version.hpp',
|
||||
install_path=None,
|
||||
VERSION_STRING=VERSION_BASE,
|
||||
VERSION_BUILD=VERSION,
|
||||
VERSION=int(VERSION_SPLIT[0]) * 1000000 +
|
||||
int(VERSION_SPLIT[1]) * 1000 +
|
||||
int(VERSION_SPLIT[2]),
|
||||
VERSION_MAJOR=VERSION_SPLIT[0],
|
||||
VERSION_MINOR=VERSION_SPLIT[1],
|
||||
VERSION_PATCH=VERSION_SPLIT[2],
|
||||
)
|
||||
|
||||
nsync_objects = bld(
|
||||
target='nsync-objects',
|
||||
name='nsync-objects',
|
||||
@@ -103,3 +124,93 @@ def build (bld):
|
||||
if bld.env['WITH_TESTS']:
|
||||
bld.recurse('tests')
|
||||
bld.recurse('tests-integrated')
|
||||
|
||||
|
||||
def docs(bld):
|
||||
from waflib import Options
|
||||
Options.commands = ['doxygen', 'sphinx'] + Options.commands
|
||||
|
||||
def doxygen(bld):
|
||||
version(bld)
|
||||
|
||||
if not bld.env.DOXYGEN:
|
||||
Logs.error("ERROR: cannot build documentation (`doxygen' is not found in $PATH)")
|
||||
else:
|
||||
bld(features="subst",
|
||||
name="doxygen-conf",
|
||||
source="docs/doxygen.conf.in",
|
||||
target="docs/doxygen.conf",
|
||||
VERSION=VERSION_BASE,
|
||||
)
|
||||
|
||||
bld(features="doxygen",
|
||||
doxyfile='docs/doxygen.conf',
|
||||
use="doxygen-conf")
|
||||
|
||||
def sphinx(bld):
|
||||
version(bld)
|
||||
|
||||
if not bld.env.SPHINX_BUILD:
|
||||
bld.fatal("ERROR: cannot build documentation (`sphinx-build' is not found in $PATH)")
|
||||
else:
|
||||
bld(features="sphinx",
|
||||
outdir="docs",
|
||||
source=bld.path.ant_glob('docs/**/*.rst'),
|
||||
config="docs/conf.py",
|
||||
VERSION=VERSION_BASE)
|
||||
|
||||
def version(ctx):
|
||||
if getattr(Context.g_module, 'VERSION_BASE', None):
|
||||
return
|
||||
|
||||
Context.g_module.VERSION_BASE = Context.g_module.VERSION
|
||||
Context.g_module.VERSION_SPLIT = [v for v in VERSION_BASE.split('.')]
|
||||
|
||||
didGetVersion = False
|
||||
try:
|
||||
cmd = ['git', 'describe', '--always', '--match', '%s*' % GIT_TAG_PREFIX]
|
||||
p = Utils.subprocess.Popen(cmd, stdout=Utils.subprocess.PIPE,
|
||||
stderr=None, stdin=None)
|
||||
out = p.communicate()[0].strip()
|
||||
didGetVersion = (p.returncode == 0 and out != "")
|
||||
if didGetVersion:
|
||||
if out.startswith(GIT_TAG_PREFIX):
|
||||
Context.g_module.VERSION = out[len(GIT_TAG_PREFIX):]
|
||||
else:
|
||||
Context.g_module.VERSION = "%s-commit-%s" % (Context.g_module.VERSION_BASE, out)
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
versionFile = ctx.path.find_node('VERSION')
|
||||
|
||||
if not didGetVersion and versionFile is not None:
|
||||
try:
|
||||
Context.g_module.VERSION = versionFile.read()
|
||||
return
|
||||
except (OSError, IOError):
|
||||
pass
|
||||
|
||||
# version was obtained from git, update VERSION file if necessary
|
||||
if versionFile is not None:
|
||||
try:
|
||||
version = versionFile.read()
|
||||
if version == Context.g_module.VERSION:
|
||||
return # no need to update
|
||||
except (OSError, IOError):
|
||||
Logs.warn("VERSION file exists, but not readable")
|
||||
else:
|
||||
versionFile = ctx.path.make_node('VERSION')
|
||||
|
||||
if versionFile is None:
|
||||
return
|
||||
|
||||
try:
|
||||
versionFile.write(Context.g_module.VERSION)
|
||||
except (OSError, IOError):
|
||||
Logs.warn("VERSION file is not writeable")
|
||||
|
||||
def dist(ctx):
|
||||
version(ctx)
|
||||
|
||||
def distcheck(ctx):
|
||||
version(ctx)
|
||||
Reference in new issue
Block a user