From 09a6ff6d2c5e3f13287a43f45d0b6ae6e820340b Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Fri, 4 Nov 2011 15:41:13 +0700 Subject: [PATCH 001/519] Initial commit --- documentation/website/.gitignore | 1 + documentation/website/Makefile | 48 +++++ documentation/website/README.rst | 54 ++++++ documentation/website/make.bat | 63 +++++++ .../website/source/_static/favicon.ico | Bin 0 -> 1406 bytes .../source/_static/images/dylan-8caae6.png | Bin 0 -> 9107 bytes .../website/source/_templates/placeholder.txt | 0 .../website/source/about/examples/classes.rst | 35 ++++ .../about/examples/everything_value.rst | 39 ++++ .../about/examples/generic_functions.rst | 62 +++++++ .../examples/getters_setters_functions.rst | 66 +++++++ .../source/about/examples/hello_world.rst | 41 +++++ .../about/examples/keyword_arguments.rst | 46 +++++ .../source/about/examples/limited_types.rst | 54 ++++++ .../website/source/about/examples/macros.rst | 38 ++++ .../about/examples/multiple_return_values.rst | 96 ++++++++++ documentation/website/source/about/index.rst | 20 +++ .../website/source/community/index.rst | 59 ++++++ documentation/website/source/conf.py | 170 ++++++++++++++++++ .../website/source/documentation/index.rst | 3 + .../website/source/download/index.rst | 31 ++++ documentation/website/source/index.rst | 31 ++++ documentation/website/source/news/index.rst | 6 + .../website/source/news/recent.rst.inc | 16 ++ 24 files changed, 979 insertions(+) create mode 100644 documentation/website/.gitignore create mode 100644 documentation/website/Makefile create mode 100644 documentation/website/README.rst create mode 100644 documentation/website/make.bat create mode 100644 documentation/website/source/_static/favicon.ico create mode 100644 documentation/website/source/_static/images/dylan-8caae6.png create mode 100644 documentation/website/source/_templates/placeholder.txt create mode 100644 documentation/website/source/about/examples/classes.rst create mode 100644 documentation/website/source/about/examples/everything_value.rst create mode 100644 documentation/website/source/about/examples/generic_functions.rst create mode 100644 documentation/website/source/about/examples/getters_setters_functions.rst create mode 100644 documentation/website/source/about/examples/hello_world.rst create mode 100644 documentation/website/source/about/examples/keyword_arguments.rst create mode 100644 documentation/website/source/about/examples/limited_types.rst create mode 100644 documentation/website/source/about/examples/macros.rst create mode 100644 documentation/website/source/about/examples/multiple_return_values.rst create mode 100644 documentation/website/source/about/index.rst create mode 100644 documentation/website/source/community/index.rst create mode 100644 documentation/website/source/conf.py create mode 100644 documentation/website/source/documentation/index.rst create mode 100644 documentation/website/source/download/index.rst create mode 100644 documentation/website/source/index.rst create mode 100644 documentation/website/source/news/index.rst create mode 100644 documentation/website/source/news/recent.rst.inc diff --git a/documentation/website/.gitignore b/documentation/website/.gitignore new file mode 100644 index 0000000000..378eac25d3 --- /dev/null +++ b/documentation/website/.gitignore @@ -0,0 +1 @@ +build diff --git a/documentation/website/Makefile b/documentation/website/Makefile new file mode 100644 index 0000000000..0526e8eeb8 --- /dev/null +++ b/documentation/website/Makefile @@ -0,0 +1,48 @@ +# Makefile for Sphinx documentation +# + +# You can set these variables from the command line. +SPHINXOPTS = +SPHINXBUILD = sphinx-build +BUILDDIR = build + +# Internal variables. +ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(SPHINXOPTS) source +# the i18n builder cannot share the environment and doctrees with the others +I18NSPHINXOPTS = $(SPHINXOPTS) source + +.PHONY: help clean html gettext changes linkcheck + +all: html + +help: + @echo "Please use \`make ' where is one of" + @echo " html to make standalone HTML files" + @echo " gettext to make PO message catalogs" + @echo " changes to make an overview of all changed/added/deprecated items" + @echo " linkcheck to check all external links for integrity" + +clean: + -rm -rf $(BUILDDIR)/* + +html: + $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + +gettext: + $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale + @echo + @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." + +changes: + $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes + @echo + @echo "The overview file is in $(BUILDDIR)/changes." + +linkcheck: + $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck + @echo + @echo "Link check complete; look for any errors in the above output " \ + "or in $(BUILDDIR)/linkcheck/output.txt." + diff --git a/documentation/website/README.rst b/documentation/website/README.rst new file mode 100644 index 0000000000..f2b29e5365 --- /dev/null +++ b/documentation/website/README.rst @@ -0,0 +1,54 @@ +This is an early version of the new Open Dylan website. + +It is built using `Sphinx `_. All content is written using +ReStructured Text with Sphinx extensions. + +Preparation +=========== + +Before building this website, you will need a copy of Sphinx installed. +The easiest way to do this is to get it from the `Python Package Index +`_ or to use ``easy_install``:: + + easy_install -U Sphinx + +Building +======== + +Building the website is easy on a system with ``make``:: + + make + +If you are on Windows, there is a ``make.bat`` as well. It currently requires +that you run it with an argument:: + + make.bat html + +The generated site will be in ``build/html``. + +Link Validation +--------------- + +Sphinx also makes it easy to check that all of the links to external sites +are valid. You can run the link checker by:: + + make linkcheck + +Site Maintenance +================ + +New Binary Release +------------------ + +#. Update the appropriate info on the download page. +#. Add a recent news entry. (See below for notes on that.) + +New News Entry +-------------- + +#. Add it to ``source/news/recent.rst.inc`` +#. If there are too many entries in that file, move some + to ``source/news/index.rst``. +#. Confirm that the site's main page and news page both + look good / correct. + diff --git a/documentation/website/make.bat b/documentation/website/make.bat new file mode 100644 index 0000000000..ceaa3be2d5 --- /dev/null +++ b/documentation/website/make.bat @@ -0,0 +1,63 @@ +@ECHO OFF + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set BUILDDIR=build +set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% source +set I18NSPHINXOPTS=%SPHINXOPTS% source + +if "%1" == "" goto help + +if "%1" == "help" ( + :help + echo.Please use `make ^` where ^ is one of + echo. html to make standalone HTML files + echo. gettext to make PO message catalogs + echo. changes to make an overview over all changed/added/deprecated items + echo. linkcheck to check all external links for integrity + goto end +) + +if "%1" == "clean" ( + for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i + del /q /s %BUILDDIR%\* + goto end +) + +if "%1" == "html" ( + %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The HTML pages are in %BUILDDIR%/html. + goto end +) + +if "%1" == "gettext" ( + %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale + if errorlevel 1 exit /b 1 + echo. + echo.Build finished. The message catalogs are in %BUILDDIR%/locale. + goto end +) + +if "%1" == "changes" ( + %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes + if errorlevel 1 exit /b 1 + echo. + echo.The overview file is in %BUILDDIR%/changes. + goto end +) + +if "%1" == "linkcheck" ( + %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck + if errorlevel 1 exit /b 1 + echo. + echo.Link check complete; look for any errors in the above output ^ +or in %BUILDDIR%/linkcheck/output.txt. + goto end +) + +:end diff --git a/documentation/website/source/_static/favicon.ico b/documentation/website/source/_static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..47b927bb6462890978a667b5974602987b51baa2 GIT binary patch literal 1406 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 RU?%_o002ovPDHLkV1f`KxE=ri literal 0 HcmV?d00001 diff --git a/documentation/website/source/_templates/placeholder.txt b/documentation/website/source/_templates/placeholder.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/documentation/website/source/about/examples/classes.rst b/documentation/website/source/about/examples/classes.rst new file mode 100644 index 0000000000..06bd7af886 --- /dev/null +++ b/documentation/website/source/about/examples/classes.rst @@ -0,0 +1,35 @@ +*********************** +Classes & Instantiation +*********************** + +Dylan makes it easy to define classes. You don't normally need to +write constructors or accessor functions, which saves a lot of boring +typing. You can initialize slots (a.k.a. "fields", "member variables", +etc.) by providing a default value or expression in the slot spec and +the caller may override the value using keyword arguments. A small +percentage of classes still need "constructors", which can be defined +by overriding ``initialize``. + +.. code-block:: dylan + + define class () + slot serial-number :: = unique-serial-number(); + slot model-name :: , + required-init-keyword: model:; + slot has-sunroof? :: , + init-keyword: sunroof?:, + init-value: #f; + end class ; + + define variable *unique-serial-number* = 0; + + define function unique-serial-number() => (usn :: ) + let serial = *unique-serial-number*; + *unique-serial-number* := *unique-serial-number* + 1; + serial; + end function; + + define constant $blue-car = make(, model: "Viper"); + define constant $black-car = make(, model: "Town Car", sunroof?: #t); + define constant $red-car = make(, model: "F40", sunroof?: #f); + diff --git a/documentation/website/source/about/examples/everything_value.rst b/documentation/website/source/about/examples/everything_value.rst new file mode 100644 index 0000000000..2ac258b717 --- /dev/null +++ b/documentation/website/source/about/examples/everything_value.rst @@ -0,0 +1,39 @@ +********************* +Everything is a value +********************* + +Every Dylan statement or expression returns a value. Control +constructs and methods generally return the value of the last +expression in their body. + +``if`` returns a value so it may be used in return position: + +.. code-block:: dylan + + format-out("abs(x) = %d", if (x >= 0) x else -x end); + +Dylan methods return the value of the last expression in their body to +be evaluated. If there is no return value declaration for the generic +function then any number of values of type may be returned. +This function returns the string "foo": + +.. code-block:: dylan + + define method foo () + "foo" + end; + +Sometimes you write a function for which there is no useful return +value. In these cases it is sometimes useful (especially for external +APIs) to tell the compiler that no values are returned since it can +then give you warnings when callers expect a value. ``=> ()`` is the +way to say this: + +.. code-block:: dylan + + define method foo () => () + format-out("foo"); + end; + +See also, {{Parameter Lists}} and {{Code Examples}}. + diff --git a/documentation/website/source/about/examples/generic_functions.rst b/documentation/website/source/about/examples/generic_functions.rst new file mode 100644 index 0000000000..c828d818da --- /dev/null +++ b/documentation/website/source/about/examples/generic_functions.rst @@ -0,0 +1,62 @@ +***************** +Generic Functions +***************** + +Methods in Dylan aren't tied directly to a particular class like they are in many other languages. +Instead a method belongs to a generic function (GF). Which method actually gets called is +decided by the types of all of the required arguments passed to the GF. Consider the built-in +{{drm: add}} generic function: + +.. code-block:: dylan + + define open generic add (seq :: , new-element) => (new-seq :: ); + +This says that any method defined on {{drm: add}} must accept two required arguments. +The first argument must be a {{drm: }} and the second can be anything, since +no type was declared for it. The methods must return a single value which is a {{drm: }}. + +Also: + +#. The methods on this GF may not accept any optional (keyword) arguments. +#. The "open" adjective tells the compiler that other libraries may add methods to + this GF. + +If you try to define a method on ``add`` that breaks any of the above rules, you'll +get a warning from the compiler. + +Note that the ``define generic`` form doesn't contain any actual code; it merely +defines an API to which all other methods with the same name must conform. To +define a very general method on ``add`` we write this: + +.. code-block:: dylan + + define method add (seq :: , new-element) => (new-seq :: ) + concatenate-as(type-for-copy(seq), list(new-element), seq) + end; + +Now, let's say you decide it would be good to have a method specifically for +```` because you think it will be more efficient than the default implementation, +even though the default will do the right thing. You could write this: + +.. code-block:: dylan + + define method add (v :: , new-element) => (new-v :: ) + let new-vector = make(, size: v.size + 1); + map-into!(new-vector, identity, v); + new-vector[v.size] := new-element; + new-vector + end; + +(*Note that the above is just an example and isn't intended to be super-efficient.*) + +Now, if you use ``add(#[1, 2, 3], 4)`` the method for ```` will be called +because the first argument is a ````, and if you use ``add(#(1, 2, 3), 4)`` +then the first method will be called because the first argument is a ````, +which is a ```` but is not a ````. + +Very often, the compiler can figure out which method to call and so no run-time +overhead for dispatch is incurred in those cases. (The {{Open Dylan}} IDE has a +tool to show whether method dispatch was optimized.) + +Note that the second method above has a more specific return type. This +can aid in compiler optimization also. diff --git a/documentation/website/source/about/examples/getters_setters_functions.rst b/documentation/website/source/about/examples/getters_setters_functions.rst new file mode 100644 index 0000000000..033679c8ad --- /dev/null +++ b/documentation/website/source/about/examples/getters_setters_functions.rst @@ -0,0 +1,66 @@ +******************************* +Getters & Setters are functions +******************************* + +Many object-oriented languages encourage you to define a get_foo and +set_foo function for each member variable foo. These allow you to +control access to the variables and provide for future extensibility. +For example, set_foo could be modified to keep a table of values of foo. + +Dylan provides for this extensibility without having to write the +accessor functions up front. Consider a simple Dylan class: + +.. code-block:: dylan + + define class () + slot driver, required-init-keyword: driver:; + end; + +This creates two functions, driver and driver-setter. (You can prevent +driver-setter from being defined by using ``constant slot driver ...`` instead.) +Under normal circumstances, these two functions will be inlined and optimized +into direct accesses. + +Dylan provides some handy syntactic sugar to make these functions look +like members of a C structure: + +.. code-block:: dylan + + let car = make(, driver: "Frank"); + + // These two expressions return the same value. + car.driver; + driver(car); + + // These three statements perform the same assignment. + car.driver := "Sally"; + driver(car) := "Sally"; + driver-setter("Sally", car); + +If you later discover that you can't allow direct access to the driver +slot, you can rename the slot and create two explicit functions named +driver and driver-setter to replace it. The following example +maintains a hash table mapping drivers to their cars: + +.. code-block:: dylan + + define constant *driver-to-car-map* = make(); + + define class () + slot %driver, required-init-keyword: driver:; + end; + + define method initialize + (vehicle :: , #key, #all-keys) + *driver-to-car-map*[vehicle.%driver] := vehicle; + end; + + // The name "driver" would be exported as the public API. + define constant driver = %driver; + + define method driver-setter + (driver, vehicle :: ) => (value :: ) + *driver-to-car-map*[driver] := vehicle; + vehicle.%driver := driver; + end; + diff --git a/documentation/website/source/about/examples/hello_world.rst b/documentation/website/source/about/examples/hello_world.rst new file mode 100644 index 0000000000..07d7aebd84 --- /dev/null +++ b/documentation/website/source/about/examples/hello_world.rst @@ -0,0 +1,41 @@ +************* +Hello, World! +************* + +The canonical "Hello World" program in Dylan. + +File library.dylan: + +.. code-block::dylan + + Module: dylan-user + + define library hello + use io, import: { format-out }; + end; + + define module hello + use format-out; + end; + +File hello.dylan: + +.. code-block::dylan + + Module: hello + + format-out("Hello!\n"); + + +**How it works:** + +1. Every Dylan program defines a library and at least one module in + that library, and the simple Hello World program is no exception. + +#. Every source file must have a "Module" header to say which module + its definitions should be in. The library is defined in the pre-existing + "dylan-user" module. + +#. The top level expressions in each source file are executed in order + when the library is loaded, so there is no need for a "main" method + here. diff --git a/documentation/website/source/about/examples/keyword_arguments.rst b/documentation/website/source/about/examples/keyword_arguments.rst new file mode 100644 index 0000000000..ba29c13465 --- /dev/null +++ b/documentation/website/source/about/examples/keyword_arguments.rst @@ -0,0 +1,46 @@ +***************** +Keyword Arguments +***************** + +Keyword arguments are optional arguments that are passed by name. + +Keyword arguments do not take part in method dispatch. That is, they have no +role in determining which method of a generic function is actually called. + +Keyword arguments in method definitions must match the rules spelled out in the +generic function. + +Keyword arguments can be useful when you need to add occasionally-used +parameters to existing functions, similar to the way you can use default +parameter values in languages like C++. + +.. code-block:: dylan + + define function describe-list + (my-list :: , #key verbose?) => () + format(*standard-output*, "{a , size: %d", my-list.size); + if (verbose?) + format(*standard-output*, ", elements:"); + for (item in my-list) + format(*standard-output*, " %=", item); + end for; + end if; + format(*standard-output*, "}"); + end function; + +This method could be invoked in one of several ways. The first specifies no +keyword arguments, and exhibits the default behavior: + +.. code-block:: dylan + + describe-list(#(1, 2, 3)) + // prints "{a , size: 3}" + +Alternatively, the verbose? keyword argument could be used to indicate the +'verbose' behavior was desired: + +.. code-block:: dylan + + describe-list(#(5, 7, 3), verbose?: #t); + // prints "{a , size: 3, elements: 5 7 3}" + diff --git a/documentation/website/source/about/examples/limited_types.rst b/documentation/website/source/about/examples/limited_types.rst new file mode 100644 index 0000000000..5b01bed6e1 --- /dev/null +++ b/documentation/website/source/about/examples/limited_types.rst @@ -0,0 +1,54 @@ +************* +Limited Types +************* + +Limited types provide a way to define new, restricted types based on +existing types in a way that is different from subclassing. For example, +there is no built-in ```` type, but it could be defined as follows: + +.. code-block:: dylan + + define constant = limited(, min: 0, max: 255); + +Dylan compilers can often provide improved error checking and +optimizations for limited types. For example, this code could +generate a compile time error: + +.. code-block:: dylan + + define function add1 (b :: ) => (b2 :: ) b + 1 end; + add1(255); + +The set of limited types that are supported depends on the compiler. + +Collection classes can be limited to containing a specific type of +element: + +.. code-block:: dylan + + define constant = limited(, of: ); + +{{Open Dylan}} will optimize accesses into an ```` defined +as above. + +A Dylan compiler can avoid doing bounds checking or +type checking, and can use an efficient representation of the +vectors of floating point numbers for this code: + +.. code-block:: dylan + + define constant $audio-buffer-size = 2048; + define constant = + limited(, + of: , + size: $audio-buffer-size); + + define function mix-buffers + (input1 :: , input2 :: , + output :: ) + => () + for (i from 0 below $audio-buffer-size) + output[i] = 0.5 * input1[i] + 0.5 * input2[i]; + end; + end; + diff --git a/documentation/website/source/about/examples/macros.rst b/documentation/website/source/about/examples/macros.rst new file mode 100644 index 0000000000..7e3b6a7958 --- /dev/null +++ b/documentation/website/source/about/examples/macros.rst @@ -0,0 +1,38 @@ +****** +Macros +****** + +Dylan macros allow you to create new control constructs and other high-level forms. They can be used to automatically release resources, simplify class creation, or adapt Dylan for a specific problem domain. + +Let's say you find this code a little too verbose: + +.. code-block:: dylan + + if (test()) + f(x) + else + g(x) + end + +and you'd rather be able to write it this way: + +.. code-block:: dylan + + iff(test(), f(x), g(x)) + +You can't just write ``iff`` as a function because then both ``f(x)`` and ``g(x)`` will be evaluated. The following macro will do the trick: + +.. code-block:: dylan + + define macro iff + { iff(?test:expression, ?true:expression, ?false:expression) } + => { if (?test) ?true else ?false end } + end; + +See also: + +* `uncommon-dylan.dylan `_ has a version of the ``iff`` macro that also accepts the syntax ``iff(test(), f(x))``. Other macro examples in that file are ``inc!``, ``dec!``, and ``ignore-errors``. +* The `define table macro `_ in common-dylan is a simple example of making a new top-level "define" form. +* {{drm: Built-In_Macros_and_Special_Definitions, Built-in macros}} -- Many of the basic features of Dylan are implemented as macros. +* The {{drm: Macros}} chapter in the {{drm: Index, DRM}}. + diff --git a/documentation/website/source/about/examples/multiple_return_values.rst b/documentation/website/source/about/examples/multiple_return_values.rst new file mode 100644 index 0000000000..8a85fcf7bd --- /dev/null +++ b/documentation/website/source/about/examples/multiple_return_values.rst @@ -0,0 +1,96 @@ +********************** +Multiple Return Values +********************** + +Any Dylan expression may return multiple values and those values can +be captured by ``let``: + +.. code-block:: dylan + + let (integer, remainder) = round(3.2); + +``integer`` is bound to the ```` value 3 and ``remainder`` is +bound to the ```` value 0.2. + +---- + +Any function may return multiple values by calling the ``values`` +function in return position: + +.. code-block:: dylan + + define function parse-integer + (input :: , start :: ) + => (integer :: , _end :: ) + let index = start; + let integer = 0; + ...code that sets index and integer... + values(integer, index) + end; + +Call it like this: + +.. code-block:: dylan + + let (int, epos) = parse-integer(" 123 ", 1); + +or like this if you don't need the second value: + +.. code-block:: dylan + + let int = parse-integer(" 123 ", 1); + +Note that if you don't declare that the function returns multiple +values then the compiler may not generate code to return them. (One +hopes to receive a nice warning in that case.) Also, if you declare +multiple return values but don't return that many, #f will be returned +in place of the missing values. + +---- + +Sometimes you may have a ```` of known values and want to +bind them to variables temporarily: + +.. code-block:: dylan + + let point = #(100, 200, 300); + let (x, y, z) = apply(values, point); + +---- + +You may bind multiple trailing values to a single variable by using +``#rest``. In the following example ``more`` will be bound to ``#(3, +4, 5)``. + +.. code-block:: dylan + + let (first, second, #rest more) = values(1, 2, 3, 4, 5); + +---- + +Extra values are ignored and missing values are bound to #f: + +.. code-block:: dylan + + let (x, y) = values(1, 2, 3); + // x = 1, y = 2 + + + let (x, y, z) = values(1, 2); + // x = 1, y = 2, z = #f + +---- + +**Notes:** + +* Multiple value returns can be more efficient than returning a tuple, + as some other languages do, because the values can be returned on + the stack without the need to allocate memory for a tuple. +* There are implementation-defined limits on the number of values that + may be returned from a function. +* If you find yourself returning a large number of values (e.g. more + than 2 or 3) you may want to consider returning a single object with + slots instead. A rule of thumb is to think about whether it will be + common for the caller to only use the first value. But as always + there may be some cases where it's valid to ignore this rule. + diff --git a/documentation/website/source/about/index.rst b/documentation/website/source/about/index.rst new file mode 100644 index 0000000000..01aff5d46d --- /dev/null +++ b/documentation/website/source/about/index.rst @@ -0,0 +1,20 @@ +***** +About +***** + + +Examples: + +.. toctree:: + :maxdepth: 1 + + examples/hello_world + examples/everything_value + examples/classes + examples/generic_functions + examples/getters_setters_functions + examples/keyword_arguments + examples/limited_types + examples/macros + examples/multiple_return_values + diff --git a/documentation/website/source/community/index.rst b/documentation/website/source/community/index.rst new file mode 100644 index 0000000000..97071adadc --- /dev/null +++ b/documentation/website/source/community/index.rst @@ -0,0 +1,59 @@ +********* +Community +********* + +Here are some resources for keeping up with what's going on in the Dylan hacker +community... + +The #dylan IRC channel +====================== + +The #dylan channel on Freenode.net is where most of the day-to-day Dylan activity +takes place. Since Dylan hackers are spread around the world (New Zealand, +Germany, East and West coast USA, South America, ...) there's usually someone +online at all times of day. The channel is logged at +http://colabti.org/irclogger/irclogger_logs/dylan so you can always ask a +question and then check the logs for answers later. + +To discuss coding issues you can paste your code to the #dylan channel via +http://paste.lisp.org/new/dylan or any other pastebin site. See previous +pastes here: http://paste.lisp.org/list/dylan + +Newsgroup comp.lang.dylan +========================= + +This is the newsgroup dedicated to the discussion of Dylan. If you have a +question about the Dylan language or about something that will be of interest +to the Dylan community at large this is the preferred place for it. It is one +of the few ways that the world at large can see that there is activity in the +Dylan community and thus aids us in our quest for World Domination. +Announcements should be directed here, as well as to the announce@ list below. + +`comp.lang.dylan `_ can +be browsed and subscribed to using Google Groups if you do not have access +to a news server. + +Mailing Lists +============= + +There are several mailing lists. Which ones you join depends on your level of +interest and involvement: + +`hackers@lists.opendylan.org `_ (`Archives`__) + The public development list. This is a good place to start if you have + a question or would like to contribute. Lurkers are also welcome! + Very low traffic. + +`announce@lists.opendylan.org `_ (`Archives`__) + Find out about new releases! This is an extremely low-traffic list + reserved for announcements. If you subscribe to hackers@, you are on + this list. + +`chatter@lists.opendylan.org `_ (`Archives`__) + This list contains nothing but Git commit messages and Bugzilla output. + It's for developers who want to know everything that's going on. + + +__ https://lists.opendylan.org/pipermail/hackers/ +__ https://lists.opendylan.org/pipermail/announce/ +__ https://lists.opendylan.org/pipermail/chatter/ diff --git a/documentation/website/source/conf.py b/documentation/website/source/conf.py new file mode 100644 index 0000000000..0ee5387cf3 --- /dev/null +++ b/documentation/website/source/conf.py @@ -0,0 +1,170 @@ +# -*- coding: utf-8 -*- +# +# Open Dylan documentation build configuration file, created by +# sphinx-quickstart on Fri Nov 4 12:00:34 2011. +# +# 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, 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.intersphinx'] + +# 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'Open Dylan' +copyright = u'2011, Dylan Hackers' + +# 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 short X.Y version. +version = '1.0' +# The full version, including alpha/beta/rc tags. +release = '1.0' + +# 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 = [] + + +# -- 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 = 'agogo' + +# 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 +# " v documentation". +html_title = 'Open Dylan' + +# 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 = '_static/favicon.ico' + +# 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'] + +# 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 = False + +# If false, no index is generated. +html_use_index = False + +# 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 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 = None + +# Output file base name for HTML help builder. +htmlhelp_basename = 'OpenDylandoc' + +# Example configuration for intersphinx: refer to the Python standard library. +intersphinx_mapping = {'http://docs.python.org/': None} diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst new file mode 100644 index 0000000000..ae64e8db6c --- /dev/null +++ b/documentation/website/source/documentation/index.rst @@ -0,0 +1,3 @@ +************* +Documentation +************* diff --git a/documentation/website/source/download/index.rst b/documentation/website/source/download/index.rst new file mode 100644 index 0000000000..b81a252b99 --- /dev/null +++ b/documentation/website/source/download/index.rst @@ -0,0 +1,31 @@ +******** +Download +******** + +Binary Releases +=============== + ++--------------------+--------------------+--------------------+-------------+ +| Platform | Version | Date Released | Revision ID | ++====================+====================+====================+=============+ +| Windows (32 bit) | ... | ... | ... | ++--------------------+--------------------+--------------------+-------------+ +| Mac OS X (Intel) | ... | ... | ... | ++--------------------+--------------------+--------------------+-------------+ +| Mac OS X (PowerPC) | ... | ... | ... | ++--------------------+--------------------+--------------------+-------------+ +| Linux (x86) | ... | ... | ... | ++--------------------+--------------------+--------------------+-------------+ +| Linux (x86-64) | ... | ... | ... | ++--------------------+--------------------+--------------------+-------------+ +| FreeBSD (x86) | ... | ... | ... | ++--------------------+--------------------+--------------------+-------------+ +| FreeBSD (x86-64) | ... | ... | ... | ++--------------------+--------------------+--------------------+-------------+ + +Source Code +=========== + +All of our source code is available in the `"dylan-lang" organization on GitHub +`_. + diff --git a/documentation/website/source/index.rst b/documentation/website/source/index.rst new file mode 100644 index 0000000000..ed5a987958 --- /dev/null +++ b/documentation/website/source/index.rst @@ -0,0 +1,31 @@ +Welcome to Open Dylan! +====================== + + *Dylan is an advanced, object-oriented, dynamic language which + supports rapid program development. When needed, programs can be + optimized for more efficient execution by supplying more type + information to the compiler. Nearly all entities in Dylan + (including functions, classes, and basic data types such as + integers) are first class objects. Additionally Dylan supports + multiple inheritance, polymorphism, multiple dispatch, keyword + arguments, object introspection, macros, and many other advanced + features... --Peter Hinely* + +For more on the background and goals of the Dylan language, see the +excellent `Introduction to the Dylan Reference Manual `_. + +Recent News +=========== + +.. include:: news/recent.rst.inc + +.. toctree:: + :maxdepth: 1 + :hidden: + + About + News + Download + Documentation + Community + diff --git a/documentation/website/source/news/index.rst b/documentation/website/source/news/index.rst new file mode 100644 index 0000000000..9e7b88a60c --- /dev/null +++ b/documentation/website/source/news/index.rst @@ -0,0 +1,6 @@ +**** +News +**** + +.. include:: recent.rst.inc + diff --git a/documentation/website/source/news/recent.rst.inc b/documentation/website/source/news/recent.rst.inc new file mode 100644 index 0000000000..25d8d14460 --- /dev/null +++ b/documentation/website/source/news/recent.rst.inc @@ -0,0 +1,16 @@ +2011-11-15: + + **New website!** + + As part of recharging Open Dylan development, we've re-done the + website and cleaned up a lot of the old, out-dated material here. + + If you're looking for some of the old material, it can be found + over at ``_. + +2011-11-15: + + **Open Dylan 2011.0.3 released.** + + Put something here. + From 8efac44a9c67db330520a4ac80e942ae10f931d1 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Fri, 4 Nov 2011 20:30:18 -0400 Subject: [PATCH 002/519] easy_install requires sudo --- documentation/website/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/README.rst b/documentation/website/README.rst index f2b29e5365..4fa7988f2e 100644 --- a/documentation/website/README.rst +++ b/documentation/website/README.rst @@ -10,7 +10,7 @@ Before building this website, you will need a copy of Sphinx installed. The easiest way to do this is to get it from the `Python Package Index `_ or to use ``easy_install``:: - easy_install -U Sphinx + sudo easy_install -U Sphinx Building ======== From 4415ae9d96c4d75d9d1ae42a940480c0b6df6ff4 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Wed, 9 Nov 2011 23:41:04 +0700 Subject: [PATCH 003/519] Work in progress on a new theme. --- .../source/_themes/opendylan/layout.html | 96 +++++ .../css/bootstrap/1.4.0/bootstrap.min.css | 356 ++++++++++++++++++ .../opendylan/static/js/html5shim/html5.js | 4 + .../source/_themes/opendylan/theme.conf | 2 + documentation/website/source/conf.py | 4 +- 5 files changed, 460 insertions(+), 2 deletions(-) create mode 100644 documentation/website/source/_themes/opendylan/layout.html create mode 100644 documentation/website/source/_themes/opendylan/static/css/bootstrap/1.4.0/bootstrap.min.css create mode 100644 documentation/website/source/_themes/opendylan/static/js/html5shim/html5.js create mode 100644 documentation/website/source/_themes/opendylan/theme.conf diff --git a/documentation/website/source/_themes/opendylan/layout.html b/documentation/website/source/_themes/opendylan/layout.html new file mode 100644 index 0000000000..f5ca60668e --- /dev/null +++ b/documentation/website/source/_themes/opendylan/layout.html @@ -0,0 +1,96 @@ +{# + opendylan/layout.html + ~~~~~~~~~~~~~~~~~ + + :copyright: Copyright 2011 by the Dylan Hackers. + :license: MIT. +#} +{% extends "basic/layout.html" %} +{% set css_files = css_files + ['_static/css/bootstrap/1.4.0/bootstrap.min.css'] %} + +{% set navigation_bar = [ + ('index', 'Home'), + ('about/index', 'About'), + ('news/index', 'News'), + ('documentation/index', 'Documentation'), + ('community/index', 'Community'), + ('download/index', 'Download'), +] -%} +{% set active_page = pagename|default('index') -%} + +{% block extrahead %} + + +{% endblock %} + +{% block header %} +
+
+
+ Open Dylan + +
+
+
+{% endblock %} + +{% block content %} +
+ {% if pagename == 'index' %} +
+

Open Dylan is ... wonderful and awesome.

+

We'll put a nice image over there on the right.

+ +
+ {% endif %} + {%- block document %} + {{ super() }} + {%- endblock %} +
+
+{% endblock %} + +{% block footer %} +
+
+ {%- if show_source and has_source and sourcename %} + {{ _('Show Source') }} + {%- endif %} +
+ +
+ {%- if show_copyright %} + {%- if hasdoc('copyright') %} + {% trans path=pathto('copyright'), copyright=copyright|e %}© Copyright {{ copyright }}.{% endtrans %} + {%- else %} + {% trans copyright=copyright|e %}© Copyright {{ copyright }}.{% endtrans %} + {%- endif %} + {%- endif %} + {%- if last_updated %} + {% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %} + {%- endif %} + {%- if show_sphinx %} + {% trans sphinx_version=sphinx_version|e %}Created using Sphinx {{ sphinx_version }}.{% endtrans %} + {%- endif %} +
+
+
+{% endblock %} + +{% block relbar1 %}{% endblock %} +{% block relbar2 %}{% endblock %} diff --git a/documentation/website/source/_themes/opendylan/static/css/bootstrap/1.4.0/bootstrap.min.css b/documentation/website/source/_themes/opendylan/static/css/bootstrap/1.4.0/bootstrap.min.css new file mode 100644 index 0000000000..c8f9e23197 --- /dev/null +++ b/documentation/website/source/_themes/opendylan/static/css/bootstrap/1.4.0/bootstrap.min.css @@ -0,0 +1,356 @@ +html,body{margin:0;padding:0;} +h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,cite,code,del,dfn,em,img,q,s,samp,small,strike,strong,sub,sup,tt,var,dd,dl,dt,li,ol,ul,fieldset,form,label,legend,button,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;font-weight:normal;font-style:normal;font-size:100%;line-height:1;font-family:inherit;} +table{border-collapse:collapse;border-spacing:0;} +ol,ul{list-style:none;} +q:before,q:after,blockquote:before,blockquote:after{content:"";} +html{overflow-y:scroll;font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} +a:focus{outline:thin dotted;} +a:hover,a:active{outline:0;} +article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} +audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} +audio:not([controls]){display:none;} +sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;} +sup{top:-0.5em;} +sub{bottom:-0.25em;} +img{border:0;-ms-interpolation-mode:bicubic;} +button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;} +button,input{line-height:normal;*overflow:visible;} +button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;} +button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;} +input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;} +input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;} +textarea{overflow:auto;vertical-align:top;} +body{background-color:#ffffff;margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:18px;color:#404040;} +.container{width:940px;margin-left:auto;margin-right:auto;zoom:1;}.container:before,.container:after{display:table;content:"";zoom:1;} +.container:after{clear:both;} +.container-fluid{position:relative;min-width:940px;padding-left:20px;padding-right:20px;zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";zoom:1;} +.container-fluid:after{clear:both;} +.container-fluid>.sidebar{position:absolute;top:0;left:20px;width:220px;} +.container-fluid>.content{margin-left:240px;} +a{color:#0069d6;text-decoration:none;line-height:inherit;font-weight:inherit;}a:hover{color:#00438a;text-decoration:underline;} +.pull-right{float:right;} +.pull-left{float:left;} +.hide{display:none;} +.show{display:block;} +.row{zoom:1;margin-left:-20px;}.row:before,.row:after{display:table;content:"";zoom:1;} +.row:after{clear:both;} +.row>[class*="span"]{display:inline;float:left;margin-left:20px;} +.span1{width:40px;} +.span2{width:100px;} +.span3{width:160px;} +.span4{width:220px;} +.span5{width:280px;} +.span6{width:340px;} +.span7{width:400px;} +.span8{width:460px;} +.span9{width:520px;} +.span10{width:580px;} +.span11{width:640px;} +.span12{width:700px;} +.span13{width:760px;} +.span14{width:820px;} +.span15{width:880px;} +.span16{width:940px;} +.span17{width:1000px;} +.span18{width:1060px;} +.span19{width:1120px;} +.span20{width:1180px;} +.span21{width:1240px;} +.span22{width:1300px;} +.span23{width:1360px;} +.span24{width:1420px;} +.row>.offset1{margin-left:80px;} +.row>.offset2{margin-left:140px;} +.row>.offset3{margin-left:200px;} +.row>.offset4{margin-left:260px;} +.row>.offset5{margin-left:320px;} +.row>.offset6{margin-left:380px;} +.row>.offset7{margin-left:440px;} +.row>.offset8{margin-left:500px;} +.row>.offset9{margin-left:560px;} +.row>.offset10{margin-left:620px;} +.row>.offset11{margin-left:680px;} +.row>.offset12{margin-left:740px;} +.span-one-third{width:300px;} +.span-two-thirds{width:620px;} +.offset-one-third{margin-left:340px;} +.offset-two-thirds{margin-left:660px;} +p{font-size:13px;font-weight:normal;line-height:18px;margin-bottom:9px;}p small{font-size:11px;color:#bfbfbf;} +h1,h2,h3,h4,h5,h6{font-weight:bold;color:#404040;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:#bfbfbf;} +h1{margin-bottom:18px;font-size:30px;line-height:36px;}h1 small{font-size:18px;} +h2{font-size:24px;line-height:36px;}h2 small{font-size:14px;} +h3,h4,h5,h6{line-height:36px;} +h3{font-size:18px;}h3 small{font-size:14px;} +h4{font-size:16px;}h4 small{font-size:12px;} +h5{font-size:14px;} +h6{font-size:13px;color:#bfbfbf;text-transform:uppercase;} +ul,ol{margin:0 0 18px 25px;} +ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} +ul{list-style:disc;} +ol{list-style:decimal;} +li{line-height:18px;color:#808080;} +ul.unstyled{list-style:none;margin-left:0;} +dl{margin-bottom:18px;}dl dt,dl dd{line-height:18px;} +dl dt{font-weight:bold;} +dl dd{margin-left:9px;} +hr{margin:20px 0 19px;border:0;border-bottom:1px solid #eee;} +strong{font-style:inherit;font-weight:bold;} +em{font-style:italic;font-weight:inherit;line-height:inherit;} +.muted{color:#bfbfbf;} +blockquote{margin-bottom:18px;border-left:5px solid #eee;padding-left:15px;}blockquote p{font-size:14px;font-weight:300;line-height:18px;margin-bottom:0;} +blockquote small{display:block;font-size:12px;font-weight:300;line-height:18px;color:#bfbfbf;}blockquote small:before{content:'\2014 \00A0';} +address{display:block;line-height:18px;margin-bottom:18px;} +code,pre{padding:0 3px 2px;font-family:Monaco, Andale Mono, Courier New, monospace;font-size:12px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +code{background-color:#fee9cc;color:rgba(0, 0, 0, 0.75);padding:1px 3px;} +pre{background-color:#f5f5f5;display:block;padding:8.5px;margin:0 0 18px;line-height:18px;font-size:12px;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;white-space:pre;white-space:pre-wrap;word-wrap:break-word;} +form{margin-bottom:18px;} +fieldset{margin-bottom:18px;padding-top:18px;}fieldset legend{display:block;padding-left:150px;font-size:19.5px;line-height:1;color:#404040;*padding:0 0 5px 145px;*line-height:1.5;} +form .clearfix{margin-bottom:18px;zoom:1;}form .clearfix:before,form .clearfix:after{display:table;content:"";zoom:1;} +form .clearfix:after{clear:both;} +label,input,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:normal;} +label{padding-top:6px;font-size:13px;line-height:18px;float:left;width:130px;text-align:right;color:#404040;} +form .input{margin-left:150px;} +input[type=checkbox],input[type=radio]{cursor:pointer;} +input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;font-size:13px;line-height:18px;color:#808080;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +select{padding:initial;} +input[type=checkbox],input[type=radio]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;border:none;} +input[type=file]{background-color:#ffffff;padding:initial;border:initial;line-height:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +input[type=button],input[type=reset],input[type=submit]{width:auto;height:auto;} +select,input[type=file]{height:27px;*height:auto;line-height:27px;*margin-top:4px;} +select[multiple]{height:inherit;background-color:#ffffff;} +textarea{height:auto;} +.uneditable-input{background-color:#ffffff;display:block;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} +:-moz-placeholder{color:#bfbfbf;} +::-webkit-input-placeholder{color:#bfbfbf;} +input,textarea{-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;-webkit-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);} +input:focus,textarea:focus{outline:0;border-color:rgba(82, 168, 236, 0.8);-webkit-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);} +input[type=file]:focus,input[type=checkbox]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:1px dotted #666;} +form .clearfix.error>label,form .clearfix.error .help-block,form .clearfix.error .help-inline{color:#b94a48;} +form .clearfix.error input,form .clearfix.error textarea{color:#b94a48;border-color:#ee5f5b;}form .clearfix.error input:focus,form .clearfix.error textarea:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} +form .clearfix.error .input-prepend .add-on,form .clearfix.error .input-append .add-on{color:#b94a48;background-color:#fce6e6;border-color:#b94a48;} +form .clearfix.warning>label,form .clearfix.warning .help-block,form .clearfix.warning .help-inline{color:#c09853;} +form .clearfix.warning input,form .clearfix.warning textarea{color:#c09853;border-color:#ccae64;}form .clearfix.warning input:focus,form .clearfix.warning textarea:focus{border-color:#be9a3f;-webkit-box-shadow:0 0 6px #e5d6b1;-moz-box-shadow:0 0 6px #e5d6b1;box-shadow:0 0 6px #e5d6b1;} +form .clearfix.warning .input-prepend .add-on,form .clearfix.warning .input-append .add-on{color:#c09853;background-color:#d2b877;border-color:#c09853;} +form .clearfix.success>label,form .clearfix.success .help-block,form .clearfix.success .help-inline{color:#468847;} +form .clearfix.success input,form .clearfix.success textarea{color:#468847;border-color:#57a957;}form .clearfix.success input:focus,form .clearfix.success textarea:focus{border-color:#458845;-webkit-box-shadow:0 0 6px #9acc9a;-moz-box-shadow:0 0 6px #9acc9a;box-shadow:0 0 6px #9acc9a;} +form .clearfix.success .input-prepend .add-on,form .clearfix.success .input-append .add-on{color:#468847;background-color:#bcddbc;border-color:#468847;} +.input-mini,input.mini,textarea.mini,select.mini{width:60px;} +.input-small,input.small,textarea.small,select.small{width:90px;} +.input-medium,input.medium,textarea.medium,select.medium{width:150px;} +.input-large,input.large,textarea.large,select.large{width:210px;} +.input-xlarge,input.xlarge,textarea.xlarge,select.xlarge{width:270px;} +.input-xxlarge,input.xxlarge,textarea.xxlarge,select.xxlarge{width:530px;} +textarea.xxlarge{overflow-y:auto;} +input.span1,textarea.span1{display:inline-block;float:none;width:30px;margin-left:0;} +input.span2,textarea.span2{display:inline-block;float:none;width:90px;margin-left:0;} +input.span3,textarea.span3{display:inline-block;float:none;width:150px;margin-left:0;} +input.span4,textarea.span4{display:inline-block;float:none;width:210px;margin-left:0;} +input.span5,textarea.span5{display:inline-block;float:none;width:270px;margin-left:0;} +input.span6,textarea.span6{display:inline-block;float:none;width:330px;margin-left:0;} +input.span7,textarea.span7{display:inline-block;float:none;width:390px;margin-left:0;} +input.span8,textarea.span8{display:inline-block;float:none;width:450px;margin-left:0;} +input.span9,textarea.span9{display:inline-block;float:none;width:510px;margin-left:0;} +input.span10,textarea.span10{display:inline-block;float:none;width:570px;margin-left:0;} +input.span11,textarea.span11{display:inline-block;float:none;width:630px;margin-left:0;} +input.span12,textarea.span12{display:inline-block;float:none;width:690px;margin-left:0;} +input.span13,textarea.span13{display:inline-block;float:none;width:750px;margin-left:0;} +input.span14,textarea.span14{display:inline-block;float:none;width:810px;margin-left:0;} +input.span15,textarea.span15{display:inline-block;float:none;width:870px;margin-left:0;} +input.span16,textarea.span16{display:inline-block;float:none;width:930px;margin-left:0;} +input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#f5f5f5;border-color:#ddd;cursor:not-allowed;} +.actions{background:#f5f5f5;margin-top:18px;margin-bottom:18px;padding:17px 20px 18px 150px;border-top:1px solid #ddd;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;}.actions .secondary-action{float:right;}.actions .secondary-action a{line-height:30px;}.actions .secondary-action a:hover{text-decoration:underline;} +.help-inline,.help-block{font-size:13px;line-height:18px;color:#bfbfbf;} +.help-inline{padding-left:5px;*position:relative;*top:-5px;} +.help-block{display:block;max-width:600px;} +.inline-inputs{color:#808080;}.inline-inputs span{padding:0 2px 0 1px;} +.input-prepend input,.input-append input{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} +.input-prepend .add-on,.input-append .add-on{position:relative;background:#f5f5f5;border:1px solid #ccc;z-index:2;float:left;display:block;width:auto;min-width:16px;height:18px;padding:4px 4px 4px 5px;margin-right:-1px;font-weight:normal;line-height:18px;color:#bfbfbf;text-align:center;text-shadow:0 1px 0 #ffffff;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} +.input-prepend .active,.input-append .active{background:#a9dba9;border-color:#46a546;} +.input-prepend .add-on{*margin-top:1px;} +.input-append input{float:left;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} +.input-append .add-on{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin-right:0;margin-left:-1px;} +.inputs-list{margin:0 0 5px;width:100%;}.inputs-list li{display:block;padding:0;width:100%;} +.inputs-list label{display:block;float:none;width:auto;padding:0;margin-left:20px;line-height:18px;text-align:left;white-space:normal;}.inputs-list label strong{color:#808080;} +.inputs-list label small{font-size:11px;font-weight:normal;} +.inputs-list .inputs-list{margin-left:25px;margin-bottom:10px;padding-top:0;} +.inputs-list:first-child{padding-top:6px;} +.inputs-list li+li{padding-top:2px;} +.inputs-list input[type=radio],.inputs-list input[type=checkbox]{margin-bottom:0;margin-left:-20px;float:left;} +.form-stacked{padding-left:20px;}.form-stacked fieldset{padding-top:9px;} +.form-stacked legend{padding-left:0;} +.form-stacked label{display:block;float:none;width:auto;font-weight:bold;text-align:left;line-height:20px;padding-top:0;} +.form-stacked .clearfix{margin-bottom:9px;}.form-stacked .clearfix div.input{margin-left:0;} +.form-stacked .inputs-list{margin-bottom:0;}.form-stacked .inputs-list li{padding-top:0;}.form-stacked .inputs-list li label{font-weight:normal;padding-top:0;} +.form-stacked div.clearfix.error{padding-top:10px;padding-bottom:10px;padding-left:10px;margin-top:0;margin-left:-10px;} +.form-stacked .actions{margin-left:-20px;padding-left:20px;} +table{width:100%;margin-bottom:18px;padding:0;font-size:13px;border-collapse:collapse;}table th,table td{padding:10px 10px 9px;line-height:18px;text-align:left;} +table th{padding-top:9px;font-weight:bold;vertical-align:middle;} +table td{vertical-align:top;border-top:1px solid #ddd;} +table tbody th{border-top:1px solid #ddd;vertical-align:top;} +.condensed-table th,.condensed-table td{padding:5px 5px 4px;} +.bordered-table{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.bordered-table th+th,.bordered-table td+td,.bordered-table th+td{border-left:1px solid #ddd;} +.bordered-table thead tr:first-child th:first-child,.bordered-table tbody tr:first-child td:first-child{-webkit-border-radius:4px 0 0 0;-moz-border-radius:4px 0 0 0;border-radius:4px 0 0 0;} +.bordered-table thead tr:first-child th:last-child,.bordered-table tbody tr:first-child td:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0;} +.bordered-table tbody tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;} +.bordered-table tbody tr:last-child td:last-child{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0;} +table .span1{width:20px;} +table .span2{width:60px;} +table .span3{width:100px;} +table .span4{width:140px;} +table .span5{width:180px;} +table .span6{width:220px;} +table .span7{width:260px;} +table .span8{width:300px;} +table .span9{width:340px;} +table .span10{width:380px;} +table .span11{width:420px;} +table .span12{width:460px;} +table .span13{width:500px;} +table .span14{width:540px;} +table .span15{width:580px;} +table .span16{width:620px;} +.zebra-striped tbody tr:nth-child(odd) td,.zebra-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;} +.zebra-striped tbody tr:hover td,.zebra-striped tbody tr:hover th{background-color:#f5f5f5;} +table .header{cursor:pointer;}table .header:after{content:"";float:right;margin-top:7px;border-width:0 4px 4px;border-style:solid;border-color:#000 transparent;visibility:hidden;} +table .headerSortUp,table .headerSortDown{background-color:rgba(141, 192, 219, 0.25);text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);} +table .header:hover:after{visibility:visible;} +table .headerSortDown:after,table .headerSortDown:hover:after{visibility:visible;filter:alpha(opacity=60);-khtml-opacity:0.6;-moz-opacity:0.6;opacity:0.6;} +table .headerSortUp:after{border-bottom:none;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000;visibility:visible;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:alpha(opacity=60);-khtml-opacity:0.6;-moz-opacity:0.6;opacity:0.6;} +table .blue{color:#049cdb;border-bottom-color:#049cdb;} +table .headerSortUp.blue,table .headerSortDown.blue{background-color:#ade6fe;} +table .green{color:#46a546;border-bottom-color:#46a546;} +table .headerSortUp.green,table .headerSortDown.green{background-color:#cdeacd;} +table .red{color:#9d261d;border-bottom-color:#9d261d;} +table .headerSortUp.red,table .headerSortDown.red{background-color:#f4c8c5;} +table .yellow{color:#ffc40d;border-bottom-color:#ffc40d;} +table .headerSortUp.yellow,table .headerSortDown.yellow{background-color:#fff6d9;} +table .orange{color:#f89406;border-bottom-color:#f89406;} +table .headerSortUp.orange,table .headerSortDown.orange{background-color:#fee9cc;} +table .purple{color:#7a43b6;border-bottom-color:#7a43b6;} +table .headerSortUp.purple,table .headerSortDown.purple{background-color:#e2d5f0;} +.topbar{height:40px;position:fixed;top:0;left:0;right:0;z-index:10000;overflow:visible;}.topbar a{color:#bfbfbf;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);} +.topbar h3 a:hover,.topbar .brand:hover,.topbar ul .active>a{background-color:#333;background-color:rgba(255, 255, 255, 0.05);color:#ffffff;text-decoration:none;} +.topbar h3{position:relative;} +.topbar h3 a,.topbar .brand{float:left;display:block;padding:8px 20px 12px;margin-left:-20px;color:#ffffff;font-size:20px;font-weight:200;line-height:1;} +.topbar p{margin:0;line-height:40px;}.topbar p a:hover{background-color:transparent;color:#ffffff;} +.topbar form{float:left;margin:5px 0 0 0;position:relative;filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1;} +.topbar form.pull-right{float:right;} +.topbar input{background-color:#444;background-color:rgba(255, 255, 255, 0.3);font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:normal;font-weight:13px;line-height:1;padding:4px 9px;color:#ffffff;color:rgba(255, 255, 255, 0.75);border:1px solid #111;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.topbar input:-moz-placeholder{color:#e6e6e6;} +.topbar input::-webkit-input-placeholder{color:#e6e6e6;} +.topbar input:hover{background-color:#bfbfbf;background-color:rgba(255, 255, 255, 0.5);color:#ffffff;} +.topbar input:focus,.topbar input.focused{outline:0;background-color:#ffffff;color:#404040;text-shadow:0 1px 0 #ffffff;border:0;padding:5px 10px;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);} +.topbar-inner,.topbar .fill{background-color:#222;background-color:#222222;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222));background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);} +.topbar div>ul,.nav{display:block;float:left;margin:0 10px 0 0;position:relative;left:0;}.topbar div>ul>li,.nav>li{display:block;float:left;} +.topbar div>ul a,.nav a{display:block;float:none;padding:10px 10px 11px;line-height:19px;text-decoration:none;}.topbar div>ul a:hover,.nav a:hover{color:#ffffff;text-decoration:none;} +.topbar div>ul .active>a,.nav .active>a{background-color:#222;background-color:rgba(0, 0, 0, 0.5);} +.topbar div>ul.secondary-nav,.nav.secondary-nav{float:right;margin-left:10px;margin-right:0;}.topbar div>ul.secondary-nav .menu-dropdown,.nav.secondary-nav .menu-dropdown,.topbar div>ul.secondary-nav .dropdown-menu,.nav.secondary-nav .dropdown-menu{right:0;border:0;} +.topbar div>ul a.menu:hover,.nav a.menu:hover,.topbar div>ul li.open .menu,.nav li.open .menu,.topbar div>ul .dropdown-toggle:hover,.nav .dropdown-toggle:hover,.topbar div>ul .dropdown.open .dropdown-toggle,.nav .dropdown.open .dropdown-toggle{background:#444;background:rgba(255, 255, 255, 0.05);} +.topbar div>ul .menu-dropdown,.nav .menu-dropdown,.topbar div>ul .dropdown-menu,.nav .dropdown-menu{background-color:#333;}.topbar div>ul .menu-dropdown a.menu,.nav .menu-dropdown a.menu,.topbar div>ul .dropdown-menu a.menu,.nav .dropdown-menu a.menu,.topbar div>ul .menu-dropdown .dropdown-toggle,.nav .menu-dropdown .dropdown-toggle,.topbar div>ul .dropdown-menu .dropdown-toggle,.nav .dropdown-menu .dropdown-toggle{color:#ffffff;}.topbar div>ul .menu-dropdown a.menu.open,.nav .menu-dropdown a.menu.open,.topbar div>ul .dropdown-menu a.menu.open,.nav .dropdown-menu a.menu.open,.topbar div>ul .menu-dropdown .dropdown-toggle.open,.nav .menu-dropdown .dropdown-toggle.open,.topbar div>ul .dropdown-menu .dropdown-toggle.open,.nav .dropdown-menu .dropdown-toggle.open{background:#444;background:rgba(255, 255, 255, 0.05);} +.topbar div>ul .menu-dropdown li a,.nav .menu-dropdown li a,.topbar div>ul .dropdown-menu li a,.nav .dropdown-menu li a{color:#999;text-shadow:0 1px 0 rgba(0, 0, 0, 0.5);}.topbar div>ul .menu-dropdown li a:hover,.nav .menu-dropdown li a:hover,.topbar div>ul .dropdown-menu li a:hover,.nav .dropdown-menu li a:hover{background-color:#191919;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#292929), to(#191919));background-image:-moz-linear-gradient(top, #292929, #191919);background-image:-ms-linear-gradient(top, #292929, #191919);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #191919));background-image:-webkit-linear-gradient(top, #292929, #191919);background-image:-o-linear-gradient(top, #292929, #191919);background-image:linear-gradient(top, #292929, #191919);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#191919', GradientType=0);color:#ffffff;} +.topbar div>ul .menu-dropdown .active a,.nav .menu-dropdown .active a,.topbar div>ul .dropdown-menu .active a,.nav .dropdown-menu .active a{color:#ffffff;} +.topbar div>ul .menu-dropdown .divider,.nav .menu-dropdown .divider,.topbar div>ul .dropdown-menu .divider,.nav .dropdown-menu .divider{background-color:#222;border-color:#444;} +.topbar ul .menu-dropdown li a,.topbar ul .dropdown-menu li a{padding:4px 15px;} +li.menu,.dropdown{position:relative;} +a.menu:after,.dropdown-toggle:after{width:0;height:0;display:inline-block;content:"↓";text-indent:-99999px;vertical-align:top;margin-top:8px;margin-left:4px;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #ffffff;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;} +.menu-dropdown,.dropdown-menu{background-color:#ffffff;float:left;display:none;position:absolute;top:40px;z-index:900;min-width:160px;max-width:220px;_width:160px;margin-left:0;margin-right:0;padding:6px 0;zoom:1;border-color:#999;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:0 1px 1px;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.menu-dropdown li,.dropdown-menu li{float:none;display:block;background-color:none;} +.menu-dropdown .divider,.dropdown-menu .divider{height:1px;margin:5px 0;overflow:hidden;background-color:#eee;border-bottom:1px solid #ffffff;} +.topbar .dropdown-menu a,.dropdown-menu a{display:block;padding:4px 15px;clear:both;font-weight:normal;line-height:18px;color:#808080;text-shadow:0 1px 0 #ffffff;}.topbar .dropdown-menu a:hover,.dropdown-menu a:hover,.topbar .dropdown-menu a.hover,.dropdown-menu a.hover{background-color:#dddddd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#eeeeee), to(#dddddd));background-image:-moz-linear-gradient(top, #eeeeee, #dddddd);background-image:-ms-linear-gradient(top, #eeeeee, #dddddd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #eeeeee), color-stop(100%, #dddddd));background-image:-webkit-linear-gradient(top, #eeeeee, #dddddd);background-image:-o-linear-gradient(top, #eeeeee, #dddddd);background-image:linear-gradient(top, #eeeeee, #dddddd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#dddddd', GradientType=0);color:#404040;text-decoration:none;-webkit-box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);} +.open .menu,.dropdown.open .menu,.open .dropdown-toggle,.dropdown.open .dropdown-toggle{color:#ffffff;background:#ccc;background:rgba(0, 0, 0, 0.3);} +.open .menu-dropdown,.dropdown.open .menu-dropdown,.open .dropdown-menu,.dropdown.open .dropdown-menu{display:block;} +.tabs,.pills{margin:0 0 18px;padding:0;list-style:none;zoom:1;}.tabs:before,.pills:before,.tabs:after,.pills:after{display:table;content:"";zoom:1;} +.tabs:after,.pills:after{clear:both;} +.tabs>li,.pills>li{float:left;}.tabs>li>a,.pills>li>a{display:block;} +.tabs{border-color:#ddd;border-style:solid;border-width:0 0 1px;}.tabs>li{position:relative;margin-bottom:-1px;}.tabs>li>a{padding:0 15px;margin-right:2px;line-height:34px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.tabs>li>a:hover{text-decoration:none;background-color:#eee;border-color:#eee #eee #ddd;} +.tabs .active>a,.tabs .active>a:hover{color:#808080;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} +.tabs .menu-dropdown,.tabs .dropdown-menu{top:35px;border-width:1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;} +.tabs a.menu:after,.tabs .dropdown-toggle:after{border-top-color:#999;margin-top:15px;margin-left:5px;} +.tabs li.open.menu .menu,.tabs .open.dropdown .dropdown-toggle{border-color:#999;} +.tabs li.open a.menu:after,.tabs .dropdown.open .dropdown-toggle:after{border-top-color:#555;} +.pills a{margin:5px 3px 5px 0;padding:0 15px;line-height:30px;text-shadow:0 1px 1px #ffffff;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;}.pills a:hover{color:#ffffff;text-decoration:none;text-shadow:0 1px 1px rgba(0, 0, 0, 0.25);background-color:#00438a;} +.pills .active a{color:#ffffff;text-shadow:0 1px 1px rgba(0, 0, 0, 0.25);background-color:#0069d6;} +.pills-vertical>li{float:none;} +.tab-content>.tab-pane,.pill-content>.pill-pane,.tab-content>div,.pill-content>div{display:none;} +.tab-content>.active,.pill-content>.active{display:block;} +.breadcrumb{padding:7px 14px;margin:0 0 18px;background-color:#f5f5f5;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5));background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline;text-shadow:0 1px 0 #ffffff;} +.breadcrumb .divider{padding:0 5px;color:#bfbfbf;} +.breadcrumb .active a{color:#404040;} +.hero-unit{background-color:#f5f5f5;margin-bottom:30px;padding:60px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;} +.hero-unit p{font-size:18px;font-weight:200;line-height:27px;} +footer{margin-top:17px;padding-top:17px;border-top:1px solid #eee;} +.page-header{margin-bottom:17px;border-bottom:1px solid #ddd;-webkit-box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);-moz-box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);}.page-header h1{margin-bottom:8px;} +.btn.danger,.alert-message.danger,.btn.danger:hover,.alert-message.danger:hover,.btn.error,.alert-message.error,.btn.error:hover,.alert-message.error:hover,.btn.success,.alert-message.success,.btn.success:hover,.alert-message.success:hover,.btn.info,.alert-message.info,.btn.info:hover,.alert-message.info:hover{color:#ffffff;} +.btn .close,.alert-message .close{font-family:Arial,sans-serif;line-height:18px;} +.btn.danger,.alert-message.danger,.btn.error,.alert-message.error{background-color:#c43c35;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#c43c35 #c43c35 #882a25;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);} +.btn.success,.alert-message.success{background-color:#57a957;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#57a957 #57a957 #3d773d;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);} +.btn.info,.alert-message.info{background-color:#339bb9;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9));background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#339bb9 #339bb9 #22697d;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);} +.btn{cursor:pointer;display:inline-block;background-color:#e6e6e6;background-repeat:no-repeat;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);padding:5px 14px 6px;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);color:#333;font-size:13px;line-height:normal;border:1px solid #ccc;border-bottom-color:#bbb;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-webkit-transition:0.1s linear all;-moz-transition:0.1s linear all;-ms-transition:0.1s linear all;-o-transition:0.1s linear all;transition:0.1s linear all;}.btn:hover{background-position:0 -15px;color:#333;text-decoration:none;} +.btn:focus{outline:1px dotted #666;} +.btn.primary{color:#ffffff;background-color:#0064cd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));background-image:-moz-linear-gradient(top, #049cdb, #0064cd);background-image:-ms-linear-gradient(top, #049cdb, #0064cd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));background-image:-webkit-linear-gradient(top, #049cdb, #0064cd);background-image:-o-linear-gradient(top, #049cdb, #0064cd);background-image:linear-gradient(top, #049cdb, #0064cd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#0064cd #0064cd #003f81;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);} +.btn.active,.btn :active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);} +.btn.disabled{cursor:default;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=65);-khtml-opacity:0.65;-moz-opacity:0.65;opacity:0.65;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +.btn[disabled]{cursor:default;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=65);-khtml-opacity:0.65;-moz-opacity:0.65;opacity:0.65;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +.btn.large{font-size:15px;line-height:normal;padding:9px 14px 9px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} +.btn.small{padding:7px 9px 7px;font-size:11px;} +:root .alert-message,:root .btn{border-radius:0 \0;} +button.btn::-moz-focus-inner,input[type=submit].btn::-moz-focus-inner{padding:0;border:0;} +.close{float:right;color:#000000;font-size:20px;font-weight:bold;line-height:13.5px;text-shadow:0 1px 0 #ffffff;filter:alpha(opacity=25);-khtml-opacity:0.25;-moz-opacity:0.25;opacity:0.25;}.close:hover{color:#000000;text-decoration:none;filter:alpha(opacity=40);-khtml-opacity:0.4;-moz-opacity:0.4;opacity:0.4;} +.alert-message{position:relative;padding:7px 15px;margin-bottom:18px;color:#404040;background-color:#eedc94;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94));background-image:-moz-linear-gradient(top, #fceec1, #eedc94);background-image:-ms-linear-gradient(top, #fceec1, #eedc94);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94));background-image:-webkit-linear-gradient(top, #fceec1, #eedc94);background-image:-o-linear-gradient(top, #fceec1, #eedc94);background-image:linear-gradient(top, #fceec1, #eedc94);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#eedc94 #eedc94 #e4c652;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);border-width:1px;border-style:solid;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);}.alert-message .close{margin-top:1px;*margin-top:0;} +.alert-message a{font-weight:bold;color:#404040;} +.alert-message.danger p a,.alert-message.error p a,.alert-message.success p a,.alert-message.info p a{color:#ffffff;} +.alert-message h5{line-height:18px;} +.alert-message p{margin-bottom:0;} +.alert-message div{margin-top:5px;margin-bottom:2px;line-height:28px;} +.alert-message .btn{-webkit-box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);-moz-box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);} +.alert-message.block-message{background-image:none;background-color:#fdf5d9;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);padding:14px;border-color:#fceec1;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}.alert-message.block-message ul,.alert-message.block-message p{margin-right:30px;} +.alert-message.block-message ul{margin-bottom:0;} +.alert-message.block-message li{color:#404040;} +.alert-message.block-message .alert-actions{margin-top:5px;} +.alert-message.block-message.error,.alert-message.block-message.success,.alert-message.block-message.info{color:#404040;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} +.alert-message.block-message.error{background-color:#fddfde;border-color:#fbc7c6;} +.alert-message.block-message.success{background-color:#d1eed1;border-color:#bfe7bf;} +.alert-message.block-message.info{background-color:#ddf4fb;border-color:#c6edf9;} +.alert-message.block-message.danger p a,.alert-message.block-message.error p a,.alert-message.block-message.success p a,.alert-message.block-message.info p a{color:#404040;} +.pagination{height:36px;margin:18px 0;}.pagination ul{float:left;margin:0;border:1px solid #ddd;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} +.pagination li{display:inline;} +.pagination a{float:left;padding:0 14px;line-height:34px;border-right:1px solid;border-right-color:#ddd;border-right-color:rgba(0, 0, 0, 0.15);*border-right-color:#ddd;text-decoration:none;} +.pagination a:hover,.pagination .active a{background-color:#c7eefe;} +.pagination .disabled a,.pagination .disabled a:hover{background-color:transparent;color:#bfbfbf;} +.pagination .next a{border:0;} +.well{background-color:#f5f5f5;margin-bottom:20px;padding:19px;min-height:20px;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);} +.modal-backdrop{background-color:#000000;position:fixed;top:0;left:0;right:0;bottom:0;z-index:10000;}.modal-backdrop.fade{opacity:0;} +.modal-backdrop,.modal-backdrop.fade.in{filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;} +.modal{position:fixed;top:50%;left:50%;z-index:11000;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal .close{margin-top:7px;} +.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} +.modal.fade.in{top:50%;} +.modal-header{border-bottom:1px solid #eee;padding:5px 15px;} +.modal-body{padding:15px;} +.modal-body form{margin-bottom:0;} +.modal-footer{background-color:#f5f5f5;padding:14px 15px 15px;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;zoom:1;margin-bottom:0;}.modal-footer:before,.modal-footer:after{display:table;content:"";zoom:1;} +.modal-footer:after{clear:both;} +.modal-footer .btn{float:right;margin-left:5px;} +.modal .popover,.modal .twipsy{z-index:12000;} +.twipsy{display:block;position:absolute;visibility:visible;padding:5px;font-size:11px;z-index:1000;filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;}.twipsy.fade.in{filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;} +.twipsy.above .twipsy-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} +.twipsy.left .twipsy-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} +.twipsy.below .twipsy-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} +.twipsy.right .twipsy-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} +.twipsy-inner{padding:3px 8px;background-color:#000000;color:white;text-align:center;max-width:200px;text-decoration:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.twipsy-arrow{position:absolute;width:0;height:0;} +.popover{position:absolute;top:0;left:0;z-index:1000;padding:5px;display:none;}.popover.above .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} +.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} +.popover.below .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} +.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} +.popover .arrow{position:absolute;width:0;height:0;} +.popover .inner{background:#000000;background:rgba(0, 0, 0, 0.8);padding:3px;overflow:hidden;width:280px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);} +.popover .title{background-color:#f5f5f5;padding:9px 15px;line-height:1;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;border-bottom:1px solid #eee;} +.popover .content{background-color:#ffffff;padding:14px;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover .content p,.popover .content ul,.popover .content ol{margin-bottom:0;} +.fade{-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;opacity:0;}.fade.in{opacity:1;} +.label{padding:1px 3px 2px;font-size:9.75px;font-weight:bold;color:#ffffff;text-transform:uppercase;white-space:nowrap;background-color:#bfbfbf;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}.label.important{background-color:#c43c35;} +.label.warning{background-color:#f89406;} +.label.success{background-color:#46a546;} +.label.notice{background-color:#62cffc;} +.media-grid{margin-left:-20px;margin-bottom:0;zoom:1;}.media-grid:before,.media-grid:after{display:table;content:"";zoom:1;} +.media-grid:after{clear:both;} +.media-grid li{display:inline;} +.media-grid a{float:left;padding:4px;margin:0 0 18px 20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);}.media-grid a img{display:block;} +.media-grid a:hover{border-color:#0069d6;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} diff --git a/documentation/website/source/_themes/opendylan/static/js/html5shim/html5.js b/documentation/website/source/_themes/opendylan/static/js/html5shim/html5.js new file mode 100644 index 0000000000..cbb52a0dee --- /dev/null +++ b/documentation/website/source/_themes/opendylan/static/js/html5shim/html5.js @@ -0,0 +1,4 @@ +// iepp v2.1pre @jon_neal & @aFarkas github.com/aFarkas/iepp +// html5shiv @rem remysharp.com/html5-enabling-script +// Dual licensed under the MIT or GPL Version 2 licenses +/*@cc_on(function(a,b){function r(a){var b=-1;while(++b v documentation". From 6214f29d914869e4aa31693d336b91adbd39b36b Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Wed, 9 Nov 2011 23:41:24 +0700 Subject: [PATCH 004/519] Point to the old documentation for now so that there's content. --- .../website/source/documentation/index.rst | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index ae64e8db6c..5b2ff74013 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -1,3 +1,76 @@ ************* Documentation ************* + +Online Books +============ + +`Dylan Reference Manual +`_ (`Errata +`_) + + The official definition of the Dylan language and standard library. + +`Dylan Programming +`_ + + A good Dylan tutorial by several Harlequin employees. + +Guides +====== + +`Getting Started with Open Dylan +`_ + + Describes Open Dylan's interactive development environment. + +`Building Applications Using DUIM +`_ + + Describes how to use DUIM (Dylan User Interface Manager), + the portable window programming toolkit. + +`Developing Component Software with CORBA +`_ + + A tutorial and reference for CORBA interoperability using the Functional Developer ORB. + +References +========== + +`Common Dylan and Functional Extensions library reference +`_ + + Describes the Open Dylan implementation of the Dylan language, a + common set of Dylan libraries, and a library interchange mechanism. + The common libraries provide many language extensions, a threads + interface, and object finalization. + +`System and I/O library reference +`_ + + Describes Open Dylan's printing and output formatting modules, + a streams module, a sockets module, and modules providing an + interface to operating system features such as the file system, + time and date information, and the host machine environment. + +`DUIM library reference +`_ + + Describes the libraries forming DUIM (Dylan User Interface Manager), + the portable window programming toolkit. It complements + Building Applications Using DUIM. + +`C FFI and Win32 library reference +`_ + + Describes a foreign function interface library for interoperation + with C programs, and several libraries providing a low-level interface + to the Microsoft Win32 API. + +`OLE, COM, ActiveX and DBMS library reference +`_ + + Describes high and low level interfaces to COM, OLE, and + ActiveX component technology, and generic DBMS support, through + SQL with an ODBC backend. From 8826ca396797c3f184b65f25e4fa04909d652645 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Thu, 10 Nov 2011 00:02:07 +0700 Subject: [PATCH 005/519] Add scrollspy support to the topbar. --- .../source/_themes/opendylan/layout.html | 3 +- .../static/js/bootstrap-scrollspy.js | 107 ++++++++++++++++++ 2 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 documentation/website/source/_themes/opendylan/static/js/bootstrap-scrollspy.js diff --git a/documentation/website/source/_themes/opendylan/layout.html b/documentation/website/source/_themes/opendylan/layout.html index f5ca60668e..1a98189c57 100644 --- a/documentation/website/source/_themes/opendylan/layout.html +++ b/documentation/website/source/_themes/opendylan/layout.html @@ -7,6 +7,7 @@ #} {% extends "basic/layout.html" %} {% set css_files = css_files + ['_static/css/bootstrap/1.4.0/bootstrap.min.css'] %} +{% set script_files = script_files + ['_static/js/bootstrap-scrollspy.js'] %} {% set navigation_bar = [ ('index', 'Home'), @@ -30,7 +31,7 @@ {% endblock %} {% block header %} -
+
Open Dylan diff --git a/documentation/website/source/_themes/opendylan/static/js/bootstrap-scrollspy.js b/documentation/website/source/_themes/opendylan/static/js/bootstrap-scrollspy.js new file mode 100644 index 0000000000..29f7dd5740 --- /dev/null +++ b/documentation/website/source/_themes/opendylan/static/js/bootstrap-scrollspy.js @@ -0,0 +1,107 @@ +/* ============================================================= + * bootstrap-scrollspy.js v1.4.0 + * http://twitter.github.com/bootstrap/javascript.html#scrollspy + * ============================================================= + * Copyright 2011 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================== */ + + +!function ( $ ) { + + "use strict" + + var $window = $(window) + + function ScrollSpy( topbar, selector ) { + var processScroll = $.proxy(this.processScroll, this) + this.$topbar = $(topbar) + this.selector = selector || 'li > a' + this.refresh() + this.$topbar.delegate(this.selector, 'click', processScroll) + $window.scroll(processScroll) + this.processScroll() + } + + ScrollSpy.prototype = { + + refresh: function () { + this.targets = this.$topbar.find(this.selector).map(function () { + var href = $(this).attr('href') + return /^#\w/.test(href) && $(href).length ? href : null + }) + + this.offsets = $.map(this.targets, function (id) { + return $(id).offset().top + }) + } + + , processScroll: function () { + var scrollTop = $window.scrollTop() + 10 + , offsets = this.offsets + , targets = this.targets + , activeTarget = this.activeTarget + , i + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) + && this.activateButton( targets[i] ) + } + } + + , activateButton: function (target) { + this.activeTarget = target + + this.$topbar + .find(this.selector).parent('.active') + .removeClass('active') + + this.$topbar + .find(this.selector + '[href="' + target + '"]') + .parent('li') + .addClass('active') + } + + } + + /* SCROLLSPY PLUGIN DEFINITION + * =========================== */ + + $.fn.scrollSpy = function( options ) { + var scrollspy = this.data('scrollspy') + + if (!scrollspy) { + return this.each(function () { + $(this).data('scrollspy', new ScrollSpy( this, options )) + }) + } + + if ( options === true ) { + return scrollspy + } + + if ( typeof options == 'string' ) { + scrollspy[options]() + } + + return this + } + + $(document).ready(function () { + $('body').scrollSpy('[data-scrollspy] li > a') + }) + +}( window.jQuery || window.ender ); From 8dc26fa55503598a68b705cbd7cd76c90ca4e3e4 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Thu, 10 Nov 2011 22:20:30 +0700 Subject: [PATCH 006/519] Add a logo next to "Open Dylan" in the top bar. --- .../website/source/_themes/opendylan/layout.html | 5 +++++ .../opendylan/static/images/dylan-squares.png | Bin 0 -> 1803 bytes 2 files changed, 5 insertions(+) create mode 100644 documentation/website/source/_themes/opendylan/static/images/dylan-squares.png diff --git a/documentation/website/source/_themes/opendylan/layout.html b/documentation/website/source/_themes/opendylan/layout.html index 1a98189c57..731fcb7cc9 100644 --- a/documentation/website/source/_themes/opendylan/layout.html +++ b/documentation/website/source/_themes/opendylan/layout.html @@ -27,6 +27,10 @@ body { padding-top: 50px; } + .topbar .logo { + float: left; + padding: 5px 5px; + } {% endblock %} @@ -34,6 +38,7 @@
+ Open Dylan
-

-
+ +

- -

+

+
diff --git a/documentation/website/sphinx-extensions b/documentation/website/sphinx-extensions index cf0d61ae6f..94150b116c 160000 --- a/documentation/website/sphinx-extensions +++ b/documentation/website/sphinx-extensions @@ -1 +1 @@ -Subproject commit cf0d61ae6fd6963d90bec2e43fd60862edca6f19 +Subproject commit 94150b116c601edf83093aeb4b736de7c3de8291 From a25cf959dca6ef776ce9d2321b8d828054748856 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Wed, 23 Nov 2011 07:46:39 +0700 Subject: [PATCH 047/519] Switch to HTML5 doctype. --- documentation/website/source/_themes/opendylan/layout.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/documentation/website/source/_themes/opendylan/layout.html b/documentation/website/source/_themes/opendylan/layout.html index 6e5fba7d7b..b3c44b9f7f 100644 --- a/documentation/website/source/_themes/opendylan/layout.html +++ b/documentation/website/source/_themes/opendylan/layout.html @@ -6,6 +6,9 @@ :license: MIT. #} {% extends "basic/layout.html" %} +{% block doctype %} + +{% endblock %} {% set css_files = css_files + ['_static/opendylan.org/css/bootstrap/1.4.0/bootstrap.min.css', '_static/opendylan.org/css/opendylan.css'] -%} {% set script_files = script_files + ['_static/opendylan.org/js/bootstrap-scrollspy.js', From cd951865f648f5cc56c8029b3ae008edf187f813 Mon Sep 17 00:00:00 2001 From: Hannes Date: Tue, 22 Nov 2011 19:56:18 -0500 Subject: [PATCH 048/519] update submodule --- documentation/website/sphinx-extensions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/sphinx-extensions b/documentation/website/sphinx-extensions index 94150b116c..cf0d61ae6f 160000 --- a/documentation/website/sphinx-extensions +++ b/documentation/website/sphinx-extensions @@ -1 +1 @@ -Subproject commit 94150b116c601edf83093aeb4b736de7c3de8291 +Subproject commit cf0d61ae6fd6963d90bec2e43fd60862edca6f19 From 2c930f1dd1f9115ff6aaf6200bbeb1725a62ab0c Mon Sep 17 00:00:00 2001 From: Hannes Date: Sun, 27 Nov 2011 15:11:54 -0500 Subject: [PATCH 049/519] update publications site to include links to individual bib files --- .../_static/documentation/bachrach1999.bib | 6 +++ .../_static/documentation/bachrach2000.bib | 6 +++ .../_static/documentation/barrett1996.bib | 34 +++++++++++++++ .../_static/documentation/dumas1995.bib | 17 ++++++++ .../source/_static/documentation/kidd2001.bib | 8 ++++ .../_static/documentation/mehnert2007.bib | 17 ++++++++ .../_static/documentation/mehnert2009.bib | 8 ++++ .../_static/documentation/mehnert2010.bib | 17 ++++++++ .../_static/documentation/publications.bib | 11 ++++- .../source/documentation/publications.rst | 43 +++++++++++++++---- 10 files changed, 158 insertions(+), 9 deletions(-) create mode 100644 documentation/website/source/_static/documentation/bachrach1999.bib create mode 100644 documentation/website/source/_static/documentation/bachrach2000.bib create mode 100644 documentation/website/source/_static/documentation/barrett1996.bib create mode 100644 documentation/website/source/_static/documentation/dumas1995.bib create mode 100644 documentation/website/source/_static/documentation/kidd2001.bib create mode 100644 documentation/website/source/_static/documentation/mehnert2007.bib create mode 100644 documentation/website/source/_static/documentation/mehnert2009.bib create mode 100644 documentation/website/source/_static/documentation/mehnert2010.bib diff --git a/documentation/website/source/_static/documentation/bachrach1999.bib b/documentation/website/source/_static/documentation/bachrach1999.bib new file mode 100644 index 0000000000..0ec4868343 --- /dev/null +++ b/documentation/website/source/_static/documentation/bachrach1999.bib @@ -0,0 +1,6 @@ +@techreport{Bachrach:1999, + author = {Bachrach, Jonathan and Playford, Keith}, + title = {D-Expressions: Lisp Power, Dylan Style}, + year = {1999}, + source = {http://people.csail.mit.edu/jrb/Projects/dexprs.pdf}, +} diff --git a/documentation/website/source/_static/documentation/bachrach2000.bib b/documentation/website/source/_static/documentation/bachrach2000.bib new file mode 100644 index 0000000000..086a49f66c --- /dev/null +++ b/documentation/website/source/_static/documentation/bachrach2000.bib @@ -0,0 +1,6 @@ +@techreport{Bachrach:2000, + author = {Bachrach, Jonathan and Burke, Glemm}, + title = {Partial Dispatch: Optimizing Dynamically-Dispatched Multimethod Calls with Compile-Time Types and Runtime Feedback}, + year = {2000}, + source = {http://people.csail.mit.edu/jrb/Projects/pd.pdf}, +} diff --git a/documentation/website/source/_static/documentation/barrett1996.bib b/documentation/website/source/_static/documentation/barrett1996.bib new file mode 100644 index 0000000000..298be12c99 --- /dev/null +++ b/documentation/website/source/_static/documentation/barrett1996.bib @@ -0,0 +1,34 @@ +@article{Barrett:1996:MSL:236338.236343, + author = {Barrett, Kim and Cassels, Bob and Haahr, Paul and Moon, David A. and Playford, Keith and Withington, P. Tucker}, + title = {A monotonic superclass linearization for Dylan}, + journal = {SIGPLAN Not.}, + volume = {31}, + issue = {10}, + month = {October}, + year = {1996}, + issn = {0362-1340}, + pages = {69--82}, + numpages = {14}, + url = {http://doi.acm.org/10.1145/236338.236343}, + doi = {http://doi.acm.org/10.1145/236338.236343}, + acmid = {236343}, + publisher = {ACM}, + address = {New York, NY, USA}, +} + +@inproceedings{Barrett:1996:MSL:236337.236343, + author = {Barrett, Kim and Cassels, Bob and Haahr, Paul and Moon, David A. and Playford, Keith and Withington, P. Tucker}, + title = {A monotonic superclass linearization for Dylan}, + booktitle = {Proceedings of the 11th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications}, + series = {OOPSLA '96}, + year = {1996}, + isbn = {0-89791-788-X}, + location = {San Jose, California, United States}, + pages = {69--82}, + numpages = {14}, + url = {http://doi.acm.org/10.1145/236337.236343}, + doi = {http://doi.acm.org/10.1145/236337.236343}, + acmid = {236343}, + publisher = {ACM}, + address = {New York, NY, USA}, +} diff --git a/documentation/website/source/_static/documentation/dumas1995.bib b/documentation/website/source/_static/documentation/dumas1995.bib new file mode 100644 index 0000000000..302117c967 --- /dev/null +++ b/documentation/website/source/_static/documentation/dumas1995.bib @@ -0,0 +1,17 @@ +@article{Dumas:1995:DWP:203241.203253, + author = {Dumas, Joseph and Parsons, Paige}, + title = {Discovering the way programmers think about new programming environments}, + journal = {Commun. ACM}, + volume = {38}, + issue = {6}, + month = {June}, + year = {1995}, + issn = {0001-0782}, + pages = {45--56}, + numpages = {12}, + url = {http://doi.acm.org/10.1145/203241.203253}, + doi = {http://doi.acm.org/10.1145/203241.203253}, + acmid = {203253}, + publisher = {ACM}, + address = {New York, NY, USA}, +} \ No newline at end of file diff --git a/documentation/website/source/_static/documentation/kidd2001.bib b/documentation/website/source/_static/documentation/kidd2001.bib new file mode 100644 index 0000000000..71297ed4ee --- /dev/null +++ b/documentation/website/source/_static/documentation/kidd2001.bib @@ -0,0 +1,8 @@ +@techreport{Kidd:2001:ECG:867862, + author = {Kidd, Eric}, + title = {Efficient Compression of Generic Function Dispatch Tables}, + year = {2001}, + source = {http://www.ncstrl.org:8900/ncstrl/servlet/search?formname=detail\&id=oai%3Ancstrlh%3Adartmouthcs%3Ancstrl.dartmouthcs%2F%2FTR2001-404}, + publisher = {Dartmouth College}, + address = {Hanover, NH, USA}, +} diff --git a/documentation/website/source/_static/documentation/mehnert2007.bib b/documentation/website/source/_static/documentation/mehnert2007.bib new file mode 100644 index 0000000000..b8cfbf739f --- /dev/null +++ b/documentation/website/source/_static/documentation/mehnert2007.bib @@ -0,0 +1,17 @@ +@inproceedings{Mehnert:2007:DLM:1622123.1622148, + author = {Mehnert, Hannes and Bogk, Andreas}, + title = {A domain-specific language for manipulation of binary data in Dylan}, + booktitle = {Proceedings of the 2007 International Lisp Conference}, + series = {ILC '07}, + year = {2009}, + isbn = {978-1-59593-618-9}, + location = {Cambridge, United Kingdom}, + pages = {22:1--22:8}, + articleno = {22}, + numpages = {8}, + url = {http://doi.acm.org/10.1145/1622123.1622148}, + doi = {http://doi.acm.org/10.1145/1622123.1622148}, + acmid = {1622148}, + publisher = {ACM}, + address = {New York, NY, USA}, +} diff --git a/documentation/website/source/_static/documentation/mehnert2009.bib b/documentation/website/source/_static/documentation/mehnert2009.bib new file mode 100644 index 0000000000..9cca0cd829 --- /dev/null +++ b/documentation/website/source/_static/documentation/mehnert2009.bib @@ -0,0 +1,8 @@ +@inproceedings{Mehnert:2009, + author = {Mehnert, Hannes}, + title = {Automatically generated type-safe GTK+ binding for Dylan}, + booktitle = {Proceedings of the 2009 International Lisp Conference}, + series = {ILC '09}, + year = {2009}, + location = {Cambridge, MA, USA}, +} diff --git a/documentation/website/source/_static/documentation/mehnert2010.bib b/documentation/website/source/_static/documentation/mehnert2010.bib new file mode 100644 index 0000000000..57fa55898e --- /dev/null +++ b/documentation/website/source/_static/documentation/mehnert2010.bib @@ -0,0 +1,17 @@ +@inproceedings{Mehnert:2010:EDT:1869643.1869645, + author = {Mehnert, Hannes}, + title = {Extending Dylan's type system for better type inference and error detection}, + booktitle = {Proceedings of the 2010 international conference on Lisp}, + series = {ILC '10}, + year = {2010}, + isbn = {978-1-4503-0470-2}, + location = {Reno/Tahoe, Nevada, USA}, + pages = {1--10}, + numpages = {10}, + url = {http://doi.acm.org/10.1145/1869643.1869645}, + doi = {http://doi.acm.org/10.1145/1869643.1869645}, + acmid = {1869645}, + publisher = {ACM}, + address = {New York, NY, USA}, + keywords = {compilers, dylan, dynamic typing, generic functions, gradual typing, lisp, multimethods, multiple dispatch, object-orientation, static typing, type inference}, +} diff --git a/documentation/website/source/_static/documentation/publications.bib b/documentation/website/source/_static/documentation/publications.bib index 5dca1e198b..a52567fcd9 100644 --- a/documentation/website/source/_static/documentation/publications.bib +++ b/documentation/website/source/_static/documentation/publications.bib @@ -14,7 +14,16 @@ @inproceedings{Mehnert:2010:EDT:1869643.1869645 publisher = {ACM}, address = {New York, NY, USA}, keywords = {compilers, dylan, dynamic typing, generic functions, gradual typing, lisp, multimethods, multiple dispatch, object-orientation, static typing, type inference}, -} +} + +@inproceedings{Mehnert:2009, + author = {Mehnert, Hannes}, + title = {Automatically generated type-safe GTK+ binding for Dylan}, + booktitle = {Proceedings of the 2009 International Lisp Conference}, + series = {ILC '09}, + year = {2009}, + location = {Cambridge, MA, USA}, +} @inproceedings{Mehnert:2007:DLM:1622123.1622148, author = {Mehnert, Hannes and Bogk, Andreas}, diff --git a/documentation/website/source/documentation/publications.rst b/documentation/website/source/documentation/publications.rst index f49173c1b1..f6219d41f0 100644 --- a/documentation/website/source/documentation/publications.rst +++ b/documentation/website/source/documentation/publications.rst @@ -2,7 +2,11 @@ Publications about Dylan ************************ -`Extending Dylan's type system for better type inference and error detection - Hannes Mehnert - ILC 2010 `_ +**Extending Dylan's type system for better type inference and error +detection** +(by Hannes Mehnert at ILC 2010 +`pdf `__ +`bib <../_static/documentation/mehnert2010.bib>`__) Whereas dynamic typing enables rapid prototyping and easy experimentation, static typing provides early error detection and @@ -23,7 +27,10 @@ Publications about Dylan https://dl.acm.org/citation.cfm?id=1869643.1869645 -`Automatically generated type-safe GTK+ binding for Dylan - Hannes Mehnert - ILC 2009 `_ +**Automatically generated type-safe GTK+ binding for Dylan** +(by Hannes Mehnert at ILC 2009 +`pdf `__ +`bib <../_static/documentation/mehnert2009.bib>`__) We present an automated way to get language bindings for GTK+ for Dylan, an object-oriented functional programming language related @@ -33,7 +40,10 @@ Publications about Dylan is type-safe, no up- and downcasts are needed. -`A domain-specific language for manipulation of binary data in Dylan - Hannes Mehnert and Andreas Bogk - ILC 2007 `_ +**A domain-specific language for manipulation of binary data in Dylan** +(by Hannes Mehnert and Andreas Bogk at ILC 2007 +`pdf `__ +`bib <../_static/documentation/mehnert2007.bib>`__) We present a domain specific language for manipulation of binary data, or structured byte sequences, as they appear in everyday @@ -46,7 +56,10 @@ Publications about Dylan https://dl.acm.org/citation.cfm?id=1622123.1622148 -`Efficient Compression of Generic Function Dispatch Tables - Eric Kidd - Technical Report Dartmouth College Hanover, NH, USA ©2001 `_ +**Efficient Compression of Generic Function Dispatch Tables** +(by Eric Kidd - Technical Report Dartmouth College 2001 +`pdf `__ +`bib <../_static/documentation/kidd2001.bib>`__) A generic function is similar to an overloaded operator, but provides a way to select an appropriate behavior at run-time @@ -62,7 +75,10 @@ Publications about Dylan https://dl.acm.org/citation.cfm?id=867862 -`Partial Dispatch: Optimizing Dynamically-Dispatched Multimethod Calls with Compile-Time Types and Runtime Feedback - Jonathan Bachrach and Glenn Burke - Technical Report 2000 `_ +**Partial Dispatch: Optimizing Dynamically-Dispatched Multimethod Calls with Compile-Time Types and Runtime Feedback** +(by Jonathan Bachrach and Glenn Burke - Technical Report 2000 +`pdf `__ +`bib <../_static/documentation/bachrach2000.bib>`__) We presented an approach to gaining back complete class hierarchy information by delaying the construction of dispatch caches until @@ -79,7 +95,10 @@ Publications about Dylan components, multi-threaded runtime, incremental development, “pay as you go philosophy”, and interoperability with standard tools. -`D-Expressions: Lisp Power, Dylan Style - Jonathan Bachrach and Keith Playford - Technical Report 1999 `_ +**D-Expressions: Lisp Power, Dylan Style** +(by Jonathan Bachrach and Keith Playford - Technical Report 1999 +`pdf `__ +`bib <../_static/documentation/bachrach1999.bib>`__) This paper aims to demonstrate that it is possible for a language with a rich, conventional syntax to provide Lisp-style macro power @@ -90,7 +109,11 @@ Publications about Dylan syntax, the approach taken to describe and represent that syntax is distinctly Lisp-like in philosophy. -`A Monotonic Superclass Linearization for Dylan - Kim Barrett and Bob Cassels and Paul Haahr and David A. Moon and Keith Playford and P. Tucker Withington - OOPSLA 1996 `_ +**A Monotonic Superclass Linearization for Dylan** +(by Kim Barrett and Bob Cassels and Paul Haahr and David A. Moon and +Keith Playford and P. Tucker Withington at OOPSLA 1996 +`html `__ +`bib <../_static/documentation/barrett1996.bib>`__) Object-oriented languages with multiple inheritance and automatic conflict resolution typically use a linearization of superclasses @@ -110,7 +133,10 @@ Publications about Dylan https://dl.acm.org/citation.cfm?id=236337.236343 -`Discovering the way programmers think about new programming environments - Joseph Dumas and Paige Parsons - Communications of the ACM June 1995 `_ +**Discovering the way programmers think about new programming environments** +(by Joseph Dumas and Paige Parsons - Communications of the ACM June +1995 +`bib <../_static/documentation/dumas1995.bib>`__) An interesting usability study of a prototype development environment for the Dylan programming language is presented @@ -121,6 +147,7 @@ Publications about Dylan how effectively the prototype conveys these innovations to Dylan developers is also given, followed by some proposed improvements. + https://dl.acm.org/citation.cfm?id=203253 `Bibliography in bibtex format <../_static/documentation/publications.bib>`_ From 09be9e88619aac3897a6c038f5881cba7a31ca4f Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Thu, 1 Dec 2011 21:00:23 +0700 Subject: [PATCH 050/519] Update notice about upcoming releases to indicate first half of December rather than end of November. --- documentation/website/source/download/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/download/index.rst b/documentation/website/source/download/index.rst index 3b69fb9b4a..d0481d1114 100644 --- a/documentation/website/source/download/index.rst +++ b/documentation/website/source/download/index.rst @@ -6,7 +6,7 @@ Binary Releases =============== .. warning:: These builds are quite old. We're working hard to have new builds posted - soon, hopefully by the end of November, 2011. + soon, within the first half of December, 2011. Open Dylan IDE -------------- From 5f7fa50b16b5e1e28d3f81ea6cdeb2ceef9e3d87 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Thu, 1 Dec 2011 21:03:30 +0700 Subject: [PATCH 051/519] Link to the new Jenkins instance. --- documentation/website/source/download/index.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/documentation/website/source/download/index.rst b/documentation/website/source/download/index.rst index d0481d1114..f8a9344962 100644 --- a/documentation/website/source/download/index.rst +++ b/documentation/website/source/download/index.rst @@ -62,6 +62,8 @@ Source Code All of our source code is available in the `"dylan-lang" organization on GitHub `_. +We also have a `continuous build server `_. + .. _Windows (32 bit): http://opendylan.org/downloads/opendylan/1.0beta5/opendylan-1.0beta5-win32-r12284.exe .. _Mac OS X (Intel): http://opendylan.org/downloads/opendylan/1.0beta4/opendylan-1.0beta4-x86-darwin.tar.bz2 From a9cd0c9e13fa0af5c65ca4263b1db13c66b27947 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Fri, 9 Dec 2011 14:33:06 -0500 Subject: [PATCH 052/519] Remove mention of bugzilla --- documentation/website/source/community/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/community/index.rst b/documentation/website/source/community/index.rst index 8f69d20f6b..ccc47bb936 100644 --- a/documentation/website/source/community/index.rst +++ b/documentation/website/source/community/index.rst @@ -56,7 +56,7 @@ interest and involvement: this list. `chatter@lists.opendylan.org `_ (`Archives`__) - This list contains nothing but Git commit messages and Bugzilla output. + This list contains nothing but Git commit messages. It's for developers who want to know everything that's going on. From f57d075e1646a022f968e30700f773de2b370379 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Sat, 10 Dec 2011 02:32:57 -0500 Subject: [PATCH 053/519] Download links and announcement for new release: 2011.1 --- .../website/source/download/index.rst | 22 +-- .../source/news/2011/12/10/new_release.rst | 186 ++++++++++++++++++ .../website/source/news/recent.rst.inc | 7 + 3 files changed, 204 insertions(+), 11 deletions(-) create mode 100644 documentation/website/source/news/2011/12/10/new_release.rst diff --git a/documentation/website/source/download/index.rst b/documentation/website/source/download/index.rst index f8a9344962..2c66af1d3a 100644 --- a/documentation/website/source/download/index.rst +++ b/documentation/website/source/download/index.rst @@ -25,14 +25,14 @@ or the current .NET platform SDK installed. +-----------------------+--------------------+--------------------+-------------+ | Platform | Version | Date Released | Revision ID | +=======================+====================+====================+=============+ - | `Windows (32 bit)`_ | 1.0beta5 | June 21, 2009 | ... | + | `Windows (32 bit)`_ | 2011.1 | December 10, 2011 | 23f8ab5878 | +-----------------------+--------------------+--------------------+-------------+ Open Dylan Command Line Tools ----------------------------- The README file inside the tarball describes installation and basic -usage. The easiest way is extracting the tarball in /usr/local. The +usage. The easiest way is extracting the tarball in /opt. The Linux platform should have binutils installed, in order to allow linking. Note that these versions only have a command-line compiler and no IDE. @@ -43,15 +43,15 @@ and no IDE. +-----------------------+--------------------+--------------------+-------------+ | Platform | Version | Date Released | Revision ID | +=======================+====================+====================+=============+ - | `Mac OS X (Intel)`_ | 1.0beta4 | April 29, 2007 | ... | + | `Mac OS X (Intel)`_ | 2011.1 | December 10, 2011 | 23f8ab5878 | +-----------------------+--------------------+--------------------+-------------+ - | `Mac OS X (PowerPC)`_ | 1.0beta4 | July 10, 2007 | ... | + | `Mac OS X (PowerPC)`_ | 2011.1 | December 10, 2011 | 23f8ab5878 | +-----------------------+--------------------+--------------------+-------------+ - | `Linux (x86)`_ | 1.0beta5 | January 16, 2008 | ... | + | `Linux (x86)`_ | 2011.1 | December 10, 2011 | 23f8ab5878 | +-----------------------+--------------------+--------------------+-------------+ | `Linux (x86-64)`_ | 1.0beta5 | January 16, 2009 | ... | +-----------------------+--------------------+--------------------+-------------+ - | `FreeBSD (x86)`_ | 1.0beta4 | April 29, 2007 | ... | + | `FreeBSD (x86)`_ | 2011.1 | December 10, 2011 | 23f8ab5878 | +-----------------------+--------------------+--------------------+-------------+ | `FreeBSD (x86-64)`_ | 1.0beta5 | November 27, 2008 | ... | +-----------------------+--------------------+--------------------+-------------+ @@ -65,10 +65,10 @@ All of our source code is available in the `"dylan-lang" organization on GitHub We also have a `continuous build server `_. -.. _Windows (32 bit): http://opendylan.org/downloads/opendylan/1.0beta5/opendylan-1.0beta5-win32-r12284.exe -.. _Mac OS X (Intel): http://opendylan.org/downloads/opendylan/1.0beta4/opendylan-1.0beta4-x86-darwin.tar.bz2 -.. _Mac OS X (PowerPC): http://opendylan.org/downloads/opendylan/1.0beta4/opendylan-1.0beta4-ppc-darwin.dmg -.. _Linux (x86): http://opendylan.org/downloads/opendylan/1.0beta5/opendylan-1.0beta5-x86-linux.tar.bz2 +.. _Windows (32 bit): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-win32.exe +.. _Mac OS X (Intel): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-x86-darwin.tar.bz2 +.. _Mac OS X (PowerPC): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-ppc-darwin.tar.bz2 +.. _Linux (x86): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-x86-linux.tar.bz2 .. _Linux (x86-64): http://opendylan.org/downloads/opendylan/1.0beta5/opendylan-1.0beta5-x86_64-linux.tar.bz2 -.. _FreeBSD (x86): http://opendylan.org/downloads/opendylan/1.0beta4/opendylan-1.0beta4-x86-FreeBSD6.tar.bz2 +.. _FreeBSD (x86): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-x86-FreeBSD.tar.bz2 .. _FreeBSD (x86-64): http://opendylan.org/downloads/opendylan/1.0beta5/opendylan-1.0beta5-r11990-amd64-FreeBSD7.tar.bz2 diff --git a/documentation/website/source/news/2011/12/10/new_release.rst b/documentation/website/source/news/2011/12/10/new_release.rst new file mode 100644 index 0000000000..a523b98e64 --- /dev/null +++ b/documentation/website/source/news/2011/12/10/new_release.rst @@ -0,0 +1,186 @@ +:Author: Hannes Mehnert +:Date: 2011-12-10 02:00:00 + +Dear Dylan Hacker, +================== + +It is a pleasure for us to finally announce a release of Open Dylan. + +The last release with an announcement was beta4, in April 2007. Since +then we have decided to use another versioning scheme: $year.$count; +this release version is 2011.1. We will be doing more regular +releases and are already hard at work on 2012.1 for next month! + +One of the most important changes from the last four years is that the +remaining rights holders of Functional Objects (the original +developers of what became Open Dylan) agreed to re-license all of +their code for the compiler and runtime libraries under the MIT +license. + +We have also moved to GitHub: + + https://github.com/dylan-lang/ + +Another big effort was made to decrease the size of the code base in +order to improve its maintainability. In this release, compared to +(the unannounced) beta5, we removed about 1/3 of the code base, from +1,200,000 lines of code down to 850,000 (according to +https://www.ohloh.net/p/open-dylan). + +This is the first joint release on all major platforms: + +- Windows (32-bit only, this is the only platform with the IDE right now, native back-end) +- Mac OS X (32-bit, Intel (10.6+) and PPC (10.5) using the C back-end) +- Linux (32-bit (with the native back-end) and 64-bit (with the C back-end)) +- FreeBSD (32-bit only, native back-end) + +The C back-end currently does not support multi-threaded programs. + +We also developed a SLIME (http://common-lisp.net/project/slime/) +back-end, so you can develop in Emacs and get cross references, M-. +and arguments. + +The library functional-dylan has been phased out. It was mainly +importing and exporting dylan and common-dylan. Use dylan or +common-dylan as appropriate. + +The release also includes several bug fixes and improves error +reporting. However, many bugs and issues with error reporting +remain. Please report problems that you have in our issue tracker: + + https://github.com/dylan-lang/opendylan/issues + +You can get it from our website, http://opendylan.org/download/ . +On Windows there is an installer, on UNIX systems unpack into /opt. + + +Now follows a more detailed list of changes: + +Notable compiler changes +======================== + +The command-line compiler is now called dylan-compiler instead of +minimal-console-compiler (or opendylan). + +The 'remove build products' command has been renamed to 'clean', which +is more common and intuitive. + +We fixed the error reporting in several ways: cleanup handlers are +called correctly now (no "Attempting to build during another build!" +anymore). Also, when an error is caused, the reporting does not error. +Additionally warnings and errors from subprojects are now reported +(rather than only put into the log file). + +We support output of internal debug messages via a dylan-compiler +argument (internal-debug, set to a list of debug-targets, like +project-manager, linker,...). Additionally Harp, DFM and assembler +output of the compiler can be written to the build directory (via +harp, dfm, assembler command-line flags). + +The dylan-compiler supports -version and -shortversion flags. + +In Deuce, a buffer which is modified is now marked with an asterisk. + +On application shutdown, a list of closures is called, which can be +registered via register-application-exit-function. Also the GC is +properly shut down. + +The build system both on UNIX and Windows has lots of improvements and +is even less code. There is no longer support to checkout code via +CVS, though. + +The runtime lives in dylan-support.o, which is linked into libdylan, +rather than a _glue.o which was emitted for every application. The +system library contains offsets into C structures (like stat) for all +major platforms, including 64-bit versions. + +The function closure-size no longer lives in dfmc-execution, but in +dfmc-flow-graph. The library dfmc-execution was removed. + + +Library Improvements +==================== + +We consolidated file and standard-io under the same buffered +file-accessor. We also improved the run-application function, which +now can spawn asynchronous processes, redirect standard-input, +standard-output and standard-error, set the working directory and +environment variables. + +If write is interrupted (by EINTR), we call write again until it has +written all bytes. + +The function join now works on an empty sequence. + +The function position takes start and end keyword parameters, and its +performance was improved. + +A new function, integer-length, is now in common-dylan. + +The function directory-contents now returns the contents of the +directory. + +We now support a with-input-from-string macro in the streams module. + +A new library, ssl-network, wraps openssl and integrates into the +already existing network library. + +The element-setter for the forward-iteration-protocol of + has been fixed. + +Shift operations on machine words are inlined now. + +The class contains a slot with the error-code. + +Testworks has been vastly improved, and improved test suites are +provided for the Dylan library, common-dylan and jam. + + +Mac OS X +======== + +The support on Mac OS X improved immensely; the code which retrieves +the path to the running application now uses _NSGetExecutablePath. +Also, setting environment variables is now supported on Mac OS X. The +system library is renamed on Mac OS X to odsystem to prevent +interfering with the built-in System library. + + +Back-ends +========= + +In the native back-end we pass integer and floating point exceptions +to the Dylan runtime on Linux and FreeBSD platforms. + +In the C back-end we emit volatile for all the variables inside of a +bind-exit block which need to be volatile. + +We defer the back-end selection to the end of the compilation of the +compiler to reduce the compilation time for compiler hackers. + + +Removed code +============ + +The majority of the removed code was not used, on the one hand code +for the LispWorks emulator, on the other hand (half-finished) support +for outdated platforms: namely a native PPC backend, a half-finished +Java backend; Mac OS (Classic), IRIX, SunOS, Solaris and OSF3 platform +support. + +It also included the separation in three disjoint releases, basic, +enhanced and enterprise - which was useful back when the compiler was +developed commercially, but is no longer. + +The amount of applications for the command-line compiler has been +decreased from eight to four, namely dylan-compiler, dylan-environment +(including execution and debugging) and dylan-*-with-tools, which +includes the tools interface (remote debugging, scepter, OLE). + +Also, the old pentium-dw (DylanWorks) application was removed since it +is no longer used and is unnecesary.. + +We unified the dfmc-shell/command-shell and +environment-commands/commands libraries, which are the interactive +shell. (Previously the otherwise obsolete dfmc-shell was used in the +interactor). diff --git a/documentation/website/source/news/recent.rst.inc b/documentation/website/source/news/recent.rst.inc index b61671b5a5..827fe19607 100644 --- a/documentation/website/source/news/recent.rst.inc +++ b/documentation/website/source/news/recent.rst.inc @@ -1,4 +1,11 @@ +**New release: 2011.1** +*2011-12-10* + +We just released Open Dylan 2011.1 + +:doc:`Read more... ` + **New Documentation** *2011-11-22* From 0bfa7a726ed82e1939ca6d64e90760666a2026e8 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Sat, 10 Dec 2011 02:46:48 -0500 Subject: [PATCH 054/519] Remove 'outdated builds' warning, as noted by aglynn on IRC --- documentation/website/source/download/index.rst | 3 --- 1 file changed, 3 deletions(-) diff --git a/documentation/website/source/download/index.rst b/documentation/website/source/download/index.rst index 2c66af1d3a..96488436b2 100644 --- a/documentation/website/source/download/index.rst +++ b/documentation/website/source/download/index.rst @@ -5,9 +5,6 @@ Download Binary Releases =============== -.. warning:: These builds are quite old. We're working hard to have new builds posted - soon, within the first half of December, 2011. - Open Dylan IDE -------------- From 4f31509187a93b2ca3a668e7b1eadb4cfdc5e6b2 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Sat, 10 Dec 2011 03:37:36 -0500 Subject: [PATCH 055/519] Add a proper title, which shows up in RSS --- documentation/website/source/news/2011/12/10/new_release.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/documentation/website/source/news/2011/12/10/new_release.rst b/documentation/website/source/news/2011/12/10/new_release.rst index a523b98e64..31ff37f53f 100644 --- a/documentation/website/source/news/2011/12/10/new_release.rst +++ b/documentation/website/source/news/2011/12/10/new_release.rst @@ -1,8 +1,10 @@ :Author: Hannes Mehnert :Date: 2011-12-10 02:00:00 +Open Dylan 2011.1 released +========================== + Dear Dylan Hacker, -================== It is a pleasure for us to finally announce a release of Open Dylan. From 75903c7d465394a905c7011a95e24c187d718a1f Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Sat, 10 Dec 2011 22:17:58 -0500 Subject: [PATCH 056/519] Add links to branching model and note about commit messages --- documentation/website/source/community/index.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/documentation/website/source/community/index.rst b/documentation/website/source/community/index.rst index ccc47bb936..7b87ed3e22 100644 --- a/documentation/website/source/community/index.rst +++ b/documentation/website/source/community/index.rst @@ -10,6 +10,8 @@ Development - `All of our repositories on GitHub `_ - `Open bugs for Open Dylan `_ +- We use `Vincent Driessen's branching model `_, supported by `gitflow `_ +- We also emphasize `this note about git commit messages `_ The #dylan IRC channel ====================== From e4fd27b2046a3ee787e3e2e757e77f7f72be00e7 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Sat, 10 Dec 2011 22:18:36 -0500 Subject: [PATCH 057/519] Add links to x86_64-linux 2011.1 release --- documentation/website/source/download/index.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/website/source/download/index.rst b/documentation/website/source/download/index.rst index 96488436b2..b673406ca3 100644 --- a/documentation/website/source/download/index.rst +++ b/documentation/website/source/download/index.rst @@ -46,7 +46,7 @@ and no IDE. +-----------------------+--------------------+--------------------+-------------+ | `Linux (x86)`_ | 2011.1 | December 10, 2011 | 23f8ab5878 | +-----------------------+--------------------+--------------------+-------------+ - | `Linux (x86-64)`_ | 1.0beta5 | January 16, 2009 | ... | + | `Linux (x86-64)`_ | 2011.1 | December 11, 2011 | 23f8ab5878 | +-----------------------+--------------------+--------------------+-------------+ | `FreeBSD (x86)`_ | 2011.1 | December 10, 2011 | 23f8ab5878 | +-----------------------+--------------------+--------------------+-------------+ @@ -66,6 +66,6 @@ We also have a `continuous build server `_. .. _Mac OS X (Intel): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-x86-darwin.tar.bz2 .. _Mac OS X (PowerPC): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-ppc-darwin.tar.bz2 .. _Linux (x86): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-x86-linux.tar.bz2 -.. _Linux (x86-64): http://opendylan.org/downloads/opendylan/1.0beta5/opendylan-1.0beta5-x86_64-linux.tar.bz2 +.. _Linux (x86-64): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-x86_64-linux.tar.bz2 .. _FreeBSD (x86): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-x86-FreeBSD.tar.bz2 .. _FreeBSD (x86-64): http://opendylan.org/downloads/opendylan/1.0beta5/opendylan-1.0beta5-r11990-amd64-FreeBSD7.tar.bz2 From 0ef93149a90127510799f48d940a3489e6b30d6b Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Sun, 11 Dec 2011 00:50:54 -0500 Subject: [PATCH 058/519] Link to contribution chapter in Hacker's guide --- documentation/website/source/community/index.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/documentation/website/source/community/index.rst b/documentation/website/source/community/index.rst index 7b87ed3e22..c260768061 100644 --- a/documentation/website/source/community/index.rst +++ b/documentation/website/source/community/index.rst @@ -10,8 +10,7 @@ Development - `All of our repositories on GitHub `_ - `Open bugs for Open Dylan `_ -- We use `Vincent Driessen's branching model `_, supported by `gitflow `_ -- We also emphasize `this note about git commit messages `_ +- `How to contribute `_ The #dylan IRC channel ====================== From 8da3179a13e24dcd8e7bf660770702ba3b2462f5 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Sun, 11 Dec 2011 20:04:30 +0700 Subject: [PATCH 059/519] Add warning about running 32 bit OD on 64 bit Windows. This came up in a thread on reddit.com/r/programming. --- documentation/website/source/download/index.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/documentation/website/source/download/index.rst b/documentation/website/source/download/index.rst index b673406ca3..d8db6550b0 100644 --- a/documentation/website/source/download/index.rst +++ b/documentation/website/source/download/index.rst @@ -12,6 +12,11 @@ Open Dylan IDE to use the command line tools. The Windows IDE installer also includes the command line tools. +.. warning:: The 32 bit version of Open Dylan does NOT work on 64 bit Windows. + There is no workaround at this time, unfortunately. We hope to resolve this + in an upcoming release. + :class: alert-message warning + For installation, double-click on the installer, and follow instructions. You need to have either the PellesC linker or the linker of VC++ 6.0, 7.0 or the current .NET platform SDK installed. From 09cdf4082985992a5242585786c1bc2871239a0a Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sun, 11 Dec 2011 10:30:50 -0500 Subject: [PATCH 060/519] Remove unnecessary parens around comparison ops. --- .../website/source/documentation/cheatsheet.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/documentation/website/source/documentation/cheatsheet.rst b/documentation/website/source/documentation/cheatsheet.rst index d2746e2cd5..c19486cf58 100644 --- a/documentation/website/source/documentation/cheatsheet.rst +++ b/documentation/website/source/documentation/cheatsheet.rst @@ -88,12 +88,12 @@ Operators +=============+====================================+====================+ | Equality & | .. code-block:: dylan | * :drm:`<` | | Comparison | | * :drm:`>` | -| | (a < b) // a less than b? | * :drm:`=` | -| | (a > b) // a greater than b? | * :drm:`~=` | -| | (a = b) // a equal to b? | * :drm:`==` | -| | (a ~= b) // a not equal b | * :drm:`~==` | -| | (a == b) // a identical to b | | -| | (a ~== b) // a not identical to b | | +| | a < b // a less than b? | * :drm:`=` | +| | a > b // a greater than b? | * :drm:`~=` | +| | a = b // a equal to b? | * :drm:`==` | +| | a ~= b // a not equal b | * :drm:`~==` | +| | a == b // a identical to b | | +| | a ~== b // a not identical to b | | | | ~a // logical negation | | +-------------+------------------------------------+--------------------+ | Arithmetic | .. code-block:: dylan | * :drm:`+` | From 2408e45710af374a2f656d6444a4afac96b8e27c Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sun, 11 Dec 2011 19:47:11 -0500 Subject: [PATCH 061/519] Added string formatting and some changes to collections. --- .../source/documentation/cheatsheet.rst | 98 +++++++++++++------ 1 file changed, 69 insertions(+), 29 deletions(-) diff --git a/documentation/website/source/documentation/cheatsheet.rst b/documentation/website/source/documentation/cheatsheet.rst index c19486cf58..4d294b4c30 100644 --- a/documentation/website/source/documentation/cheatsheet.rst +++ b/documentation/website/source/documentation/cheatsheet.rst @@ -28,11 +28,15 @@ Literals +----------------+----------------------------------------+---------------------------+ | Strings | .. code-block:: dylan | | | | | * :drm:`` | -| | 'a' // A character | * :drm:`` | +| | 'a' // A character | | | | "Hello" // A simple string | | | | "Hello\n" // An escape sequence | | -| | #"hello" // A symbol, unique string | | -| | hello: // A symbol, keyword | | ++----------------+----------------------------------------+---------------------------+ +| Symbols | .. code-block:: dylan | * :drm:`` | +| | | | +| | #"hello" // A symbol | | +| | #"HELLO" // The same symbol | | +| | hello: // Again, in keyword syntax | | +----------------+----------------------------------------+---------------------------+ | Collections | .. code-block:: dylan | * :drm:`` | | | | * :drm:`` | @@ -83,29 +87,65 @@ Naming Conventions Operators ========= -+-------------+------------------------------------+--------------------+ -| Class | Dylan Syntax | Learn More... | -+=============+====================================+====================+ -| Equality & | .. code-block:: dylan | * :drm:`<` | -| Comparison | | * :drm:`>` | -| | a < b // a less than b? | * :drm:`=` | -| | a > b // a greater than b? | * :drm:`~=` | -| | a = b // a equal to b? | * :drm:`==` | -| | a ~= b // a not equal b | * :drm:`~==` | -| | a == b // a identical to b | | -| | a ~== b // a not identical to b | | -| | ~a // logical negation | | -+-------------+------------------------------------+--------------------+ -| Arithmetic | .. code-block:: dylan | * :drm:`+` | -| | | * :drm:`*` | -| | a + b // add a and b | * :drm:`-` | -| | a * b // mulitply a and b | * :drm:`/` | -| | a - b // subtract b from a | * :drm:`modulo` | -| | a / b // divide a by b | * :drm:`negative` | -| | modulo(a, b) // modulus of a by b | | -| | negative(a) // negative of a | | -+-------------+------------------------------------+--------------------+ -| Collection | .. code-block:: dylan | * :drm:`empty?` | -| | | | -| | my-list.empty? // is this empty? | | -+-------------+------------------------------------+--------------------+ ++--------------------+---------------------------------------+--------------------------+ +| Class | Dylan Syntax | Learn More... | ++====================+=======================================+==========================+ +| Equality & | .. code-block:: dylan | * :drm:`<` | +| Comparison | | * :drm:`>` | +| | a < b // a less than b? | * :drm:`=` | +| | a > b // a greater than b? | * :drm:`~=` | +| | a = b // a equal to b? | * :drm:`==` | +| | a ~= b // a not equal b | * :drm:`~==` | +| | a == b // a identical to b | | +| | a ~== b // a not identical to b | | +| | ~a // logical negation | | ++--------------------+---------------------------------------+--------------------------+ +| Arithmetic | .. code-block:: dylan | * :drm:`+` | +| | | * :drm:`*` | +| | a + b // add a and b | * :drm:`-` | +| | a * b // mulitply a and b | * :drm:`/` | +| | a - b // subtract b from a | * :drm:`modulo` | +| | a / b // divide a by b | * :drm:`negative` | +| | modulo(a, b) // modulus of a by b | | +| | negative(a) // negative of a | | ++--------------------+---------------------------------------+--------------------------+ +| :drm:`Collections` | .. code-block:: dylan | * :drm:`` | +| | | | +| | c[k] // elem. k of col. c | * :drm:`element` | +| | c[k] := x // set elem. k of col. c | * :drm:`element-setter` | +| | c.empty? // is c empty? | * :drm:`empty?` | +| | c.size // how big is c? | * :drm:`size` | ++--------------------+---------------------------------------+--------------------------+ +| Sequence | .. code-block:: dylan | * :drm:`` | +| | | | +| | add(c, x) // add x to copy of c | * :drm:`add` | +| | remove(c, x) // rem x from copy of c | * :drm:`remove` | +| | sort(c) // copy of c, sorted | * :drm:`sort` | +| | reverse(c) // copy of c, reversed | * :drm:`reverse` | ++--------------------+---------------------------------------+--------------------------+ + + +String Formatting +================= + ++-------------+------------------+-----------------------+ +| Directive | Argument Type | Description | ++=============+==================+=======================+ +| %d | | decimal number | ++-------------+------------------+-----------------------+ +| %b | | binary number | ++-------------+------------------+-----------------------+ +| %o | | octal number | ++-------------+------------------+-----------------------+ +| %x | | hexadecimal number | ++-------------+------------------+-----------------------+ +| %c | | character, no quotes | ++-------------+------------------+-----------------------+ +| %s | | string, no quotes | ++-------------+------------------+-----------------------+ +| %s | | condition message | ++-------------+------------------+-----------------------+ +| %= | | any object | ++-------------+------------------+-----------------------+ +| %% | None | literal % | ++-------------+------------------+-----------------------+ From 8be50ef80a7b70960b40e977b98b4869ae9c6b0f Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sun, 11 Dec 2011 20:35:40 -0500 Subject: [PATCH 062/519] Added TOC entry for String Formatting. --- documentation/website/source/documentation/cheatsheet.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/website/source/documentation/cheatsheet.rst b/documentation/website/source/documentation/cheatsheet.rst index 4d294b4c30..3db17403e9 100644 --- a/documentation/website/source/documentation/cheatsheet.rst +++ b/documentation/website/source/documentation/cheatsheet.rst @@ -5,6 +5,7 @@ Dylan Cheat Sheet * `Literals`_ * `Naming Conventions`_ * `Operators`_ +* `String Formatting`_ Literals ======== From ffa196f3b398b14b065c2b5290b66722099f06aa Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Mon, 12 Dec 2011 11:18:57 +0700 Subject: [PATCH 063/519] Fix warning about unfinished emphasis by escaping '*'. --- documentation/website/source/news/2011/12/10/new_release.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/news/2011/12/10/new_release.rst b/documentation/website/source/news/2011/12/10/new_release.rst index 31ff37f53f..6db283a19e 100644 --- a/documentation/website/source/news/2011/12/10/new_release.rst +++ b/documentation/website/source/news/2011/12/10/new_release.rst @@ -176,7 +176,7 @@ developed commercially, but is no longer. The amount of applications for the command-line compiler has been decreased from eight to four, namely dylan-compiler, dylan-environment -(including execution and debugging) and dylan-*-with-tools, which +(including execution and debugging) and dylan-\*-with-tools, which includes the tools interface (remote debugging, scepter, OLE). Also, the old pentium-dw (DylanWorks) application was removed since it From 9b12ea10a89cd869eca9096ccd3d830d2411de25 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Mon, 12 Dec 2011 11:26:40 +0700 Subject: [PATCH 064/519] Link to the newly added Intro to Dylan. --- documentation/website/source/documentation/index.rst | 6 ++++++ documentation/website/source/index.rst | 3 +++ 2 files changed, 9 insertions(+) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index 7b7348c220..f9b9de388a 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -19,6 +19,12 @@ Online Books Guides ====== +`An Introduction to Dylan `_ + + This tutorial is written primarily for those with solid programming + experience in C++ or another object-oriented static language. It + provides a gentler introduction to Dylan than does the DRM. + `Dylan Cheat Sheet `_ A cheat sheet to get you started with the basics of Dylan syntax. diff --git a/documentation/website/source/index.rst b/documentation/website/source/index.rst index 47743e1d3f..5b596989f1 100644 --- a/documentation/website/source/index.rst +++ b/documentation/website/source/index.rst @@ -4,6 +4,9 @@ Welcome to Open Dylan! For more on the background and goals of the Dylan language, see the excellent :drm:`Introduction to the Dylan Reference Manual `. +For an introduction to the basic concepts of the language, see our +`introduction to Dylan `_. + Recent News =========== From 44caebf205e413dc7ae87efe829de875ccc6f927 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Mon, 12 Dec 2011 15:06:33 +0700 Subject: [PATCH 065/519] Cheet -> Cheat --- documentation/website/source/_themes/opendylan/layout.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/_themes/opendylan/layout.html b/documentation/website/source/_themes/opendylan/layout.html index b3c44b9f7f..eef76776ff 100644 --- a/documentation/website/source/_themes/opendylan/layout.html +++ b/documentation/website/source/_themes/opendylan/layout.html @@ -20,7 +20,7 @@ ('documentation/index', 'Documentation', [ ('http://opendylan.org/books/drm/', true, 'Language Specification'), ('documentation/index', false, 'Guides & References'), - ('documentation/cheatsheet', false, 'Cheet Sheet') + ('documentation/cheatsheet', false, 'Cheat Sheet') ]), ('community/index', 'Community', []), ('download/index', 'Download', []), From 0b928ec1fef7834ae778ec7833521452b56471f3 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 12 Dec 2011 23:23:21 -0500 Subject: [PATCH 066/519] Add news item about dswank, including screencast --- .../news/2011/12/12/dswank-screenshot.png | Bin 0 -> 44218 bytes .../website/source/news/2011/12/12/dswank.rst | 64 ++++++++++++++++++ .../website/source/news/recent.rst.inc | 8 +++ 3 files changed, 72 insertions(+) create mode 100644 documentation/website/source/news/2011/12/12/dswank-screenshot.png create mode 100644 documentation/website/source/news/2011/12/12/dswank.rst diff --git a/documentation/website/source/news/2011/12/12/dswank-screenshot.png b/documentation/website/source/news/2011/12/12/dswank-screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..1ae91258cfc7051b26231accac97d7b7885ec4ca GIT binary patch literal 44218 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 literal 0 HcmV?d00001 diff --git a/documentation/website/source/news/2011/12/12/dswank.rst b/documentation/website/source/news/2011/12/12/dswank.rst new file mode 100644 index 0000000000..36e708cac9 --- /dev/null +++ b/documentation/website/source/news/2011/12/12/dswank.rst @@ -0,0 +1,64 @@ +:Author: Hannes Mehnert +:Date: 2011-12-12 23:30:00 + +Development inside of Emacs using SLIME +======================================= + +We have implemented a Dylan backend for SLIME using the Open Dylan +environment-protocols API to ease development of Dylan code on UNIX. +At present, cross references, locating definitions, retrieving +argument lists, compiling, warning reports and a class browser are +implemented. + +.. figure:: dswank-screenshot.png + :align: center + +.. raw:: html + +
+ +When successfully installed, just run M-x slime to get a shell. This +is the same as the dylan-compiler shell, you can also use the same +commands. + +When you program and hit '(' or ',' or ' ', you get the argument list +of the method you are calling. + +M-x slime-dylan-browse-superclasses will show the superclass hierarchy +of the current class. M-x slime-dylan-browse-subclasses displays the +subclass hierarchy. + ++-------------------+------------------------------------------+ +| Keyboard shortcut | Effect | ++===================+==========================================+ +|M-x slime |start slime | ++-------------------+------------------------------------------+ +| , change-package | select project (in the repl buffer) | ++-------------------+------------------------------------------+ +| M-. | jump to definition | ++-------------------+------------------------------------------+ +| M-, | jump backwards | ++-------------------+------------------------------------------+ +| C-c C-k | compile project | ++-------------------+------------------------------------------+ +| C-c C-w C-a | who specializes? | ++-------------------+------------------------------------------+ +| C-c C-w C-r | who references? | ++-------------------+------------------------------------------+ +| C-c C-w C-b | who binds? | ++-------------------+------------------------------------------+ +| C-c C-w C-c | who calls? | ++-------------------+------------------------------------------+ + +Dswank uses the Open Dylan project registry, so make sure +OPEN_DYLAN_USER_REGISTRIES is set properly before starting Emacs. + + +Installation +============ + +You need the following pieces: + + * `SLIME `_ - since the CVS is a moving target, this is a safe version to use (February 2011 snapshot) + * `dylan-mode `_, and extend your ~/.emacs as documented in README) + * dswank itself is shipped with the 2011.1 release diff --git a/documentation/website/source/news/recent.rst.inc b/documentation/website/source/news/recent.rst.inc index 827fe19607..2688968767 100644 --- a/documentation/website/source/news/recent.rst.inc +++ b/documentation/website/source/news/recent.rst.inc @@ -1,4 +1,12 @@ +**Dswank - a SLIME back-end** +*2011-12-12* + +We developed a back-end for SLIME, the superior lisp interaction +mode for emacs. + +:doc:`Read more... ` + **New release: 2011.1** *2011-12-10* From a49169f293b91db2cf3641d412beec22b3090fb8 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Tue, 13 Dec 2011 16:13:22 -0500 Subject: [PATCH 067/519] Add links to pdf versions --- documentation/website/source/documentation/index.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index f9b9de388a..c44cdee97c 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -20,6 +20,7 @@ Guides ====== `An Introduction to Dylan `_ +[`pdf `__] This tutorial is written primarily for those with solid programming experience in C++ or another object-oriented static language. It @@ -31,15 +32,18 @@ Guides `Getting Started with Open Dylan `_ +[`pdf `__] Describes Open Dylan's interactive development environment. `Dylan Style Guide `_ +[`pdf `__] Notes and thoughts on how to format your Dylan code. `Building Applications Using DUIM `_ +[`pdf `__] Describes how to use DUIM (Dylan User Interface Manager), the portable window programming toolkit. @@ -51,6 +55,7 @@ Guides `Open Dylan Hacker's Guide `_ +[`pdf `__] A work in progress to help out people who are hacking on Open Dylan itself. @@ -65,6 +70,7 @@ References `Common Dylan and Functional Extensions library reference `_ +[`pdf `__] Describes the Open Dylan implementation of the Dylan language, a common set of Dylan libraries, and a library interchange mechanism. @@ -73,6 +79,7 @@ References `System and I/O library reference `_ +[`pdf `__] Describes Open Dylan's printing and output formatting modules, a streams module, a sockets module, and modules providing an @@ -88,6 +95,7 @@ References `C FFI and Win32 library reference `_ +[`pdf `__] Describes a foreign function interface library for interoperation with C programs, and several libraries providing a low-level interface From 5b81d52bc81c9ef258ae53826276810720c6daff Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Wed, 14 Dec 2011 10:30:43 +0700 Subject: [PATCH 068/519] Move COM / CORBA docs to out-dated section. --- .../website/source/documentation/index.rst | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index c44cdee97c..ceab3cf7a1 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -48,11 +48,6 @@ Guides Describes how to use DUIM (Dylan User Interface Manager), the portable window programming toolkit. -`Developing Component Software with CORBA -`_ - - A tutorial and reference for CORBA interoperability using the Functional Developer ORB. - `Open Dylan Hacker's Guide `_ [`pdf `__] @@ -101,6 +96,14 @@ References with C programs, and several libraries providing a low-level interface to the Microsoft Win32 API. +Old, Out of Date Documentation +============================== + +`Developing Component Software with CORBA +`_ + + A tutorial and reference for CORBA interoperability using the Open Dylan ORB. + `OLE, COM, ActiveX and DBMS library reference `_ From 2eb6b2acc59c86d50b4eb7d3511ddfa2fc52f7f2 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Wed, 14 Dec 2011 10:47:06 +0700 Subject: [PATCH 069/519] Link to the new versions of the docs where they exist. Links to the old versions are retained as 'old HTML'. --- .../website/source/documentation/index.rst | 23 +++++++++---------- 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index ceab3cf7a1..a7e71054ec 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -30,9 +30,9 @@ Guides A cheat sheet to get you started with the basics of Dylan syntax. -`Getting Started with Open Dylan -`_ +`Getting Started with Open Dylan `_ [`pdf `__] +[`old HTML `__] Describes Open Dylan's interactive development environment. @@ -41,15 +41,14 @@ Guides Notes and thoughts on how to format your Dylan code. -`Building Applications Using DUIM -`_ +`Building Applications Using DUIM `_ [`pdf `__] +[`old HTML `__] Describes how to use DUIM (Dylan User Interface Manager), the portable window programming toolkit. -`Open Dylan Hacker's Guide -`_ +`Open Dylan Hacker's Guide `_ [`pdf `__] A work in progress to help out people who are hacking on Open Dylan itself. @@ -63,18 +62,18 @@ Publications References ========== -`Common Dylan and Functional Extensions library reference -`_ +`Common Dylan and Functional Extensions library reference `_ [`pdf `__] +[`old HTML `__] Describes the Open Dylan implementation of the Dylan language, a common set of Dylan libraries, and a library interchange mechanism. The common libraries provide many language extensions, a threads interface, and object finalization. -`System and I/O library reference -`_ +`System and I/O library reference `_ [`pdf `__] +[`old HTML `__] Describes Open Dylan's printing and output formatting modules, a streams module, a sockets module, and modules providing an @@ -88,9 +87,9 @@ References the portable window programming toolkit. It complements Building Applications Using DUIM. -`C FFI and Win32 library reference -`_ +`C FFI and Win32 library reference `_ [`pdf `__] +[`old HTML `__] Describes a foreign function interface library for interoperation with C programs, and several libraries providing a low-level interface From 23146df526727174f2f6acd8eacbee7d3f3345aa Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Wed, 14 Dec 2011 10:48:05 +0700 Subject: [PATCH 070/519] Remove reference to 'Functional Extensions'. --- documentation/website/source/documentation/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index a7e71054ec..2ec26eac6c 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -62,7 +62,7 @@ Publications References ========== -`Common Dylan and Functional Extensions library reference `_ +`Common Dylan library reference `_ [`pdf `__] [`old HTML `__] From f0d55101cbc84c1c9667e3c9cbd806bd75a2596d Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Wed, 14 Dec 2011 11:05:10 +0700 Subject: [PATCH 071/519] Renamed directory. --- documentation/website/source/documentation/index.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index 2ec26eac6c..cdf5a21050 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -71,8 +71,8 @@ References The common libraries provide many language extensions, a threads interface, and object finalization. -`System and I/O library reference `_ -[`pdf `__] +`System and I/O library reference `_ +[`pdf `__] [`old HTML `__] Describes Open Dylan's printing and output formatting modules, From 038f5fb00f58e4d96ca159d263a18e6698bafea5 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Wed, 14 Dec 2011 11:14:00 +0700 Subject: [PATCH 072/519] Add warning about documentation being in the middle of updating. --- documentation/website/source/documentation/index.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index cdf5a21050..ee781b52d6 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -2,6 +2,12 @@ Documentation ************* +.. warning:: We are in the process of converting over to a new documentation + publishing system. Some documents are not entirely correct yet. We've + retained links to the 'Old HTML' where relevant. These will be going away + in the near future. + :class: alert-message warning + Online Books ============ From 056606431c503f00a33987a945cea9b37964fdc8 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Thu, 15 Dec 2011 15:22:04 +0700 Subject: [PATCH 073/519] Experiment with a new layout for the documentation page. --- .../website/source/documentation/index.rst | 124 +++++++++++++----- 1 file changed, 94 insertions(+), 30 deletions(-) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index ee781b52d6..a9ae59f3f7 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -8,22 +8,20 @@ Documentation in the near future. :class: alert-message warning -Online Books -============ +.. raw:: html -`Dylan Reference Manual -`_ (`Errata -`_) +
From 3dc82fd835e6d9b88a8be7a0d589af7adc3099fc Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Thu, 15 Dec 2011 15:58:30 +0700 Subject: [PATCH 074/519] No more dropdown menu for the documentation section. --- .../source/_themes/opendylan/layout.html | 37 +++++-------------- 1 file changed, 9 insertions(+), 28 deletions(-) diff --git a/documentation/website/source/_themes/opendylan/layout.html b/documentation/website/source/_themes/opendylan/layout.html index eef76776ff..37c781b289 100644 --- a/documentation/website/source/_themes/opendylan/layout.html +++ b/documentation/website/source/_themes/opendylan/layout.html @@ -11,19 +11,14 @@ {% endblock %} {% set css_files = css_files + ['_static/opendylan.org/css/bootstrap/1.4.0/bootstrap.min.css', '_static/opendylan.org/css/opendylan.css'] -%} -{% set script_files = script_files + ['_static/opendylan.org/js/bootstrap-scrollspy.js', - '_static/opendylan.org/js/bootstrap-dropdown.js'] -%} +{% set script_files = script_files + ['_static/opendylan.org/js/bootstrap-scrollspy.js'] -%} {% set navigation_bar = [ - ('index', 'Home', []), - ('about/index', 'About', []), - ('news/index', 'News', []), - ('documentation/index', 'Documentation', [ - ('http://opendylan.org/books/drm/', true, 'Language Specification'), - ('documentation/index', false, 'Guides & References'), - ('documentation/cheatsheet', false, 'Cheat Sheet') - ]), - ('community/index', 'Community', []), - ('download/index', 'Download', []), + ('index', 'Home'), + ('about/index', 'About'), + ('news/index', 'News'), + ('documentation/index', 'Documentation'), + ('community/index', 'Community'), + ('download/index', 'Download'), ] -%} {% set active_page = pagename|default('index') -%} @@ -42,22 +37,8 @@ Open Dylan
From 2a4c723aa3c18bb23f453992c83fb901b5aafcbb Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Thu, 15 Dec 2011 20:08:28 +0700 Subject: [PATCH 075/519] Add Paul Haahr's 1995 essay 'Procedural Dylan' with his permission. --- .../articles/procedural-dylan/1-distance.rst | 226 ++++++++ .../articles/procedural-dylan/2-quadratic.rst | 235 ++++++++ .../procedural-dylan/3-dot-product.rst | 524 ++++++++++++++++++ .../articles/procedural-dylan/index.rst | 29 + documentation/website/source/index.rst | 1 + documentation/website/source/news/index.rst | 29 +- 6 files changed, 1041 insertions(+), 3 deletions(-) create mode 100644 documentation/website/source/articles/procedural-dylan/1-distance.rst create mode 100644 documentation/website/source/articles/procedural-dylan/2-quadratic.rst create mode 100644 documentation/website/source/articles/procedural-dylan/3-dot-product.rst create mode 100644 documentation/website/source/articles/procedural-dylan/index.rst diff --git a/documentation/website/source/articles/procedural-dylan/1-distance.rst b/documentation/website/source/articles/procedural-dylan/1-distance.rst new file mode 100644 index 0000000000..65dcab076b --- /dev/null +++ b/documentation/website/source/articles/procedural-dylan/1-distance.rst @@ -0,0 +1,226 @@ +A Simple Function: Distance +--------------------------- + +To get the flavor of the language, let us first consider a few simple +Pascal subroutines and their equivalents in Dylan. Here we have a Pascal +function for calculating the distance between two points in a two +dimensional plane, using the Pythagorean theorem: + +.. code-block:: pascal + + function distance(x1: real; y1: real; x2: real; y2: real): real; + begin + distance := sqrt((x2-x1) * (x2-x1) + (y2-y1) * (y2-y1)) + end; + +and here's an equivalent function in Dylan: + +.. code-block:: dylan + + define method distance (x1 :: , y1 :: , x2 :: , y2 :: ) + => distance :: ; + sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) + end method distance; + +Let's first look at the syntactic differences between the two functions. +First, Pascal introduces the definition with the keyword ``function`` +where Dylan uses the phrase ``define method``. ``Define`` is used in +Dylan when defining all *module variables*, which are the equivalent of +program variables, types, functions, and procedures in Pascal. We'll see +later why Dylan calls this function a *method*; for now, it is useful to +think of methods in Dylan as the same as functions in Pascal. + +The next thing to notice is that Dylan uses the double colon symbol +(``::``) to separate variables from their types; we'll see later that a +single colon is used for another purpose, which is why the double colon +is used in type declarations. Also note that the Dylan program has a +space between the variable name and the double colon. + +The next important difference between the two examples is that the name +of the type, ``real``, is enclosed in "angle brackets" (the less-than +and greater-than signs) in the Dylan version. The reason for this is +that, unlike in Pascal, types and variables live in the same *name +space* in Dylan. For example, in Pascal, one can have a type named +``list`` and a variable named ``list`` at the same time, and the meaning +of the identifier ``list`` refers to one or the other depending on +context. In Dylan, there isn't always enough context to know whether +something is a type or value -- and, in fact, types *are* values in +Dylan -- so a convention is used to separate types from non-types in +order to avoid confusion and name clashes. That convention is putting +angle brackets around the names of types. (C programmers face a similar +problem, and at least two distinct conventions have evolved: using +identifiers with the first letter capitalized or with a suffix of ``_t`` +for type names.) + +The convention for type names brings up another difference between Dylan +and Pascal: What characters are legal in names? Pascal, C, and many +traditional languages restrict the set of characters allowed in names to +the letters, digits, and perhaps a few graphical characters, such as the +underscore or dollar sign. Dylan is more flexible: all those characters +are legal, but so are many graphical characters, such as hyphens, +asterisks, question marks, exclamation marks, and, as we have seen, the +greater-than and less-than signs. The general rule is that a Dylan +identifier can't start with a digit and should contain at least one +letter, but any characters that don't otherwise have special meaning are +allowed. + +This flexibility does come at some cost: because the character set for +variable names overlaps with the character set for operators, we need to +put spaces between variable names and operators. For example, +``x2 - x1`` is two two-character long variables separated by the minus +operator and means the same thing as it does in Pascal, but ``x2-x1`` is +a single five-character long variable name in Dylan. This may seem +confusing or awkward at first to programmers not used to putting space +between variables and operators, but it adds flexibility in the choice +of names. + +Now back to the example function. In Pascal, the return type of the +function is declared with a colon, just like the type of a variable, +where Dylan uses an arrow (``=>``) combined with what looks like a +variable declaration. The return description for our function says that +the function returns the distance, and that the result has the type +````. The name used in a return description is for documentation +purposes only. Upon reflection, one might come to the conclusion that +the name is unnecessary as documentation, since the function name should +describe the meaning of the return value. Later, we'll see a reason why +Dylan puts the name in the result. + +Let's skip the contents of the function body of the function for a +moment, and notice that Pascal surrounds the body with the words +``begin`` and ``end``. Dylan is similar, except that the word ``begin`` +is omitted. All methods must have bodies, so where it begins is +implicit: right after the declaration of parameters and return values. +The word ``method`` and the name of the method are repeated after the +word ``end``; both ``method`` and the name are optional after the +``end``, but I personally prefer to put them in, so I've done that here. +Individual styles vary, and people who think that the words after +``end`` clutter the program are free to leave them out. + +Now, let's look at the bodies of the functions. Aside from the spaces +separating the operators from the variable names in the Dylan version, +there is one major difference. In Pascal, the pseudo-variable with the +same name as the function, ``distance``, is assigned the value to return +from the function. In Dylan, on the other hand, the body is treated as +an expression, and the value of that expression is returned by the +function. If that body contains multiple statements or expressions +separated by semicolons, the function returns whatever the last +expression returns. (C is different from both Dylan and Pascal in this +regard: it uses the ``return`` statement to both return the value and +exit immediately from the function.) + +The last important detail to notice is that, aside from the issue of +spaces, the expression used to calculate the distance is the same in +both Dylan and Pascal. + +-------------- + +In Pascal, the programmer has to declare types for all variables, +parameters, and functions. In Dylan, type declarations may be omitted; +if no type is declared for a variable, any value may be used. Similarly, +the description of what a method returns may be left out. Thus a more +concise version of distance would be: + +.. code-block:: dylan + + define method distance (x1, y1, x2, y2) + sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) + end method distance; + +When used with four real numbers, this distance function produces the +same result as the original. But this version will work just as well on +integers. (In fact, the original version also works on integers, because +the type ```` is a *subtype* of ````; that is, all +integers are also reals, which matches our mathematical intuition. The +type ```` in Dylan corresponds more directly with Pascal's +``real`` type.) + +Since any value can be used as an argument to distance, what happens if +we use something which doesn't make sense, like +``distance(0, 0, 3, "four")``? The function starts as normal, but when +it tries to subtract ``0`` from ``"four"``, the program stops with an +error, since it makes no sense to subtract a number from a string. If +we had used the original version of the distance function, we would have +gotten the error when we tried to call distance. + +For now, we'll omit most type declarations in our Dylan examples. Later, +we'll see some of the reasons for using them other than catching errors. + +-------------- + +Looking back at the distance function, we see that the subtraction +``x2 - x1`` is done twice in order to multiple the result by itself; the +same is then done for the y values. To reduce the work that the function +does, we can store the results of the subtractions in local variables. +(Many compilers will do this kind of optimization -- known as *common +subexpression elimination* -- without requiring the code to be +rewritten.) In Pascal, that might look like: + +.. code-block:: pascal + + function distance(x1: real; y1: real; x2: real; y2: real): real; + var + deltaX, deltaY: real; + begin + deltaX := x2 - x1; + deltaY := y2 - y1; + distance := sqrt(deltaX * deltaX + deltaY * deltaY) + end; + +which could be written in Dylan as + +.. code-block:: dylan + + define method distance (x1, y1, x2, y2) + let delta-x = x2 - x1; + let delta-y = y2 - y1; + sqrt(delta-x * delta-x + delta-y * delta-y) + end method distance; + +First, we see that where Pascal puts the definition of the local +variables in a separate section of the function definition, Dylan puts +them in the body. Next, we see that the definition of the local +variables includes the initialization. In general, when you define a +variable in Dylan, you give it a value at the same time -- in this way, +you do not have to worry about initialized variables. + +Also notice that where, in Pascal, ``mixedCaseNames`` are often used to +separate words in long identifiers, Dylan conventionally uses +``hyphen-separated-names``. + +-------------- + +Another way to rewrite the distance function to only do the +subtractions once would be to abstract out the squaring operation as a +local function. In Pascal, this would look like: + +.. code-block:: pascal + + function distance(x1: real; y1: real; x2: real; y2: real): real; + function square(n: real): real; + begin + square := n * n + end; + begin + distance := sqrt(square(x2 - x1) + square(y2 - y1)) + end; + +which could be written in Dylan as + +.. code-block:: dylan + + define method distance (x1, y1, x2, y2) + local method square (n :: ) + n * n + end method square; + sqrt(square(x2 - x1) + square(y2 - y1)) + end method distance; + +Like local variables created with ``let``, local methods can appear +anywhere inside a body. + +-------------- + +`Next -- Conditions and Multiple Values: The Quadratic +Formula <2-quadratic.html>`_ + +Copyright © 1995 Paul Haahr. All rights reserved. diff --git a/documentation/website/source/articles/procedural-dylan/2-quadratic.rst b/documentation/website/source/articles/procedural-dylan/2-quadratic.rst new file mode 100644 index 0000000000..93f9565667 --- /dev/null +++ b/documentation/website/source/articles/procedural-dylan/2-quadratic.rst @@ -0,0 +1,235 @@ +Conditions and Multiple Values: The Quadratic Formula +----------------------------------------------------- + +Now we'll look at a slightly more complex function, one which finds the +roots of a quadratic equation. A Pascal version of such a function might +be: + +.. code-block:: pascal + + (* Solve quadratic equation, putting roots in root1 and root2 + and returning the number of roots found. *) + function solveQuadratic(a, b, c: real; var root1, root2: real): int; + var + discriminant: real; + sqrtDiscriminant: real; + begin + discriminant := b * b - 4.0 * a * c; + if discriminant < 0.0 then + solveQuadratic := 0 + else if discriminant = 0.0 then + begin + solveQuadratic := 1; + root1 := -b/(2.0 * a) + end + else + begin + solveQuadratic := 2; + sqrtDiscriminant := sqrt(discriminant); + root1 := (-b + sqrtDiscriminant)/(2.0 * a); + root2 := (-b - sqrtDiscriminant)/(2.0 * a) + end + end; + +There are a few things to note here. The first is the interface to the +function: since we want to return up to two separate numbers, but maybe +zero or one in the degenerate cases, we can't just use the normal +paradigm of returning the result, because Pascal lets functions accept +many values, but return only one. To work around this restriction, we +return an integer indicating how many roots there were, and use ``var`` +parameters (also known as *call by reference parameters*) to pass the +actual results from the function back to its caller. In order for this +mechanism to work, the function which calls ``solveQuadratic`` must +define two variables for receiving the results. The caller also has to +be careful not to use the variable ``root2`` if there was only one root +returned. Other approaches, such as returning a record containing the +roots and the number of roots found, are also possible. + +There are several other things worth mentioning. The local variable +``sqrtDiscriminant`` is defined for the entire function, even though it +is only used in the body of the second ``else`` clause. Because Pascal +is strongly typed and does not allow operations between integers and +real numbers, we have to write all the constants, even though they are +integers, as real numbers in decimal notation. Finally, we see that the +body of the first ``if`` clause does not have a ``begin`` and ``end`` +because it is a single statement. + +-------------- + +A Dylan function for the same operation would have a different +interface, at very least because Dylan does not have ``var`` +parameters. Here's one approach: + +.. code-block:: dylan + + // Solve quadratic equation, returning the roots + define method solve-quadratic(a, b, c) => (root1, root2); + let discriminant = b * b - 4 * a * c; + if (discriminant < 0) + values() + elseif (discriminant = 0) + values(- b / (2 * a)) + else + let sqrt-discriminant = sqrt(discriminant); + values((- b + sqrt-discriminant) / (2 * a), + (- b - sqrt-discriminant) / (2 * a)) + end if + end method solve-quadratic; + +The first thing we notice is the notation for comments. Dylan has two +forms of comments. The sequence ``//`` introduces a comment that +continues to the end of the line; all the intervening text is ignored by +the language. The sequence ``/*`` introduces a block comment that +encloses all the text up to a ``*/``; the enclosed text is ignored +except that pairs of ``/*`` and ``*/`` inside the comment are matched, +so block comments nest. The nesting property of block comments means +that it is safe to use ``/*`` and ``*/`` to comment out code even if +that code contains block comments. (Dylan shares this comment convention +with C++, except that in C++, block comments don't nest.) + +The most significant difference between this function and the Pascal +version is what it returns. For the Dylan function, the comment says +"returning the roots," and that is what it does. In Pascal, C, Fortran, +and, in fact, most programming languages, a function can take an +arbitrary number of arguments but the number of values returned can be +only zero or one. (In Pascal, a function returning no values is called a +procedure.) In Dylan, functions can return as many values as are +appropriate for the task at hand, just as they can accept as many +arguments as make sense. + +How does a function return multiple values? We saw earlier that a +function returns the value of the last expression that makes up its +body. There is a built-in function named values which returns all of its +arguments. By calling values as the last statement of a body, the +arguments passed to values are used as the value of the body. For +example, the following method could be used to return the sine and +cosine of an angle: + +.. code-block:: dylan + + define method sincos (angle) => (sin :: , cos :: ); + values(sin(angle), cos(angle)) + end method sincos; + +To use both values returned returned by ``sincos``, one uses a special +form of ``let`` which is said to *accept multiple values*: + +.. code-block:: dylan + + let (s, c) = sincos(theta); + ... + +Inside the body of the let, the variable s will hold the sine of theta +and c the cosine. Note, by the way, the return declaration for +``sincos`` indicates that the method returns two real numbers. The +reason that names are used in return declarations is to document which +value is which in the case of multiple-value returning functions. + +As a special but typical case, when you are calling a function that +returns more than one value and you are only interested in the first +value, you don't have to bind the values with let, you can just use the +function as an expression. In fact, there is no difference between +calling a function that returns one value and calling a function that +returns multiple values if you only want the first value returned. + +Let's return to our quadratic equation solver. To see what the function +returns, we have to look for the last expression in the body. In this +case, the last statement is an ``if`` statement. In Dylan, an ``if`` +statement is an expression and can be used anywhere a value is expected. +The value of an if statement is the value of the body of the branch that +is taken. For example, in the simple case of: + +.. code-block:: dylan + + if (even?(n)) + "even" + else + "odd" + end if + +If the number ``n`` is even, the value of the if statement is the string +``"even"``; otherwise, the value is the string ``"odd"``. Incidentally, +Dylan is classified as an "expression language" because all statements +can return values and be used as expressions. + +In Pascal and C, one can construct a series of tests by putting if +statements in the ``else`` clause of another ``if`` statement. In Dylan +``elseif`` is one word and not two, and the ``elseif`` branch is +actually part of the if statement. There can be any number of ``elseif`` +clauses between the ``if`` clause and the optional ``else`` clause. + +In ``solve-quadratic``, the last statement of every branch of the ``if`` +statement is a call to ``values``. If the first test is true, ``values`` +is called with no arguments, so the function returns no values. If the +test for the ``elseif`` clause is true, the function returns one value, +the single root. (In this case, the call to values is unnecessary, but +it is useful as documentation to contrast with the cases where zero and +two values are returned.) Finally, if there are two roots, both are +returned. + +How is this function used? In particular, how does a caller determine +how many roots were found? If a caller is expecting more results than a +function returns, all the variables for which no value was returned are +given the false value. So, for example, we could write a function to +count the number of roots as + +.. code-block:: dylan + + define method number-of-quadratic-roots(a, b, c) + let (r1, r2) = solve-quadratic(a, b, c); + if (r2) + 2 + elseif (r1) + 1 + else + 0 + end if + end method number-of-quadratic-roots; + +-------------- + +Before we leave this example behind, let's look at another way to write +it in Dylan, keeping the same interface: + +.. code-block:: dylan + + // Solve quadratic equation, returning the roots + define method solve-quadratic(a, b, c) => (root1, root2); + let discriminant = b * b - 4 * a * c; + case + negative?(discriminant) => + values(); + zero?(discriminant) => + values(- b / (2 * a)); + otherwise => + let sqrt-discriminant = sqrt(discriminant); + values((- b + sqrt-discriminant) / (2 * a), + (- b - sqrt-discriminant) / (2 * a)) + end case + end method solve-quadratic; + +There are two differences here. First, the ``if`` statement has been +rewritten as a ``case`` statement. A ``case`` statement contains a +series of tests and bodies, separated by the arrow symbol. The tests are +checked in order and the clause that corresponds to the first test which +evaluates to true is run, and the value of that clause is used as the +result of the whole statement. The last test in a ``case`` statement may +be ``otherwise``: the ``otherwise`` clause is used if none of the tests +are true. ``Case`` statements are often easier to read than long chains +of ``elseif`` statements, but choosing one or the other is simply a matter +of personal style. + +Also, the tests have been changed from explicit comparisons with zero to +calls to function which do those tests. There is no real difference +between writing ``x < 0`` and ``negative?(x)``, but sometimes one form +is clearer than the other. A function which returns a boolean value is +called a *predicate* in Dylan, and, by convention, the names of +predicates end in question marks, as we can see from ``negative?`` and +``zero?``. + +-------------- + +`Back -- A Simple Function: Distance <1-distance.html>`_ + `Next -- Iteration and Sequences: Dot Product <3-dot-product.html>`_ + +Copyright © 1995 Paul Haahr. All rights reserved. diff --git a/documentation/website/source/articles/procedural-dylan/3-dot-product.rst b/documentation/website/source/articles/procedural-dylan/3-dot-product.rst new file mode 100644 index 0000000000..e54de6624a --- /dev/null +++ b/documentation/website/source/articles/procedural-dylan/3-dot-product.rst @@ -0,0 +1,524 @@ +Iteration and Sequences: Dot Product +------------------------------------ + +The next function we'll look at calculates the inner product, or *dot +product*, of two one-dimensional arrays of numbers. This is defined as +the sum of the pairwise products of numbers from the arrays. As an added +complication, we'll not fix the length of the arrays, so our Pascal +version will use conformant arrays, a late addition to the language. + +.. code-block:: pascal + + function dotProduct(x: array[xlo..xhi: integer] of real, + y: array[ylo..yhi: integer] of real): real; + var + i: integer; + sum: real; + begin + if (xhi - xlo <> yhi - ylo) + error("dotProduct: arrays of different lengths"); + sum := 0.0; + for i := xlo to xhi do + sum := sum + x[i] * y[i - xlo + ylo]; + dotProduct := sum + end; + +Because a dot product only makes sense for arrays of the same length, we +need to check that the arrays have the same length before proceeding. +Since Pascal has no built-in error-handling facilities, we've invented a +minimal interface -- a procedure named ``error`` which takes a string +description of the error -- that has to be implemented on every +different system using non-standard facilities. + +There is one other complication worth mentioning here. Since the two +arrays can have different lower bounds and the loop index ``i`` starts +at the value for the array ``x``, it has to be adjusted before being +used as a subscript for ``y``. + +-------------- + +Our first Dylan version of this function uses a while loop: + +.. code-block:: dylan + + define method dot-product (x, y) + if (size(x) ~= size(y)) + error("dot-product: arrays of different lengths") + end if; + let sum = 0; + let i = 0; + while (i < size(x)) + sum := sum + x[i] * y[i] + end while; + sum + end method dot-product; + +Let's first look at the syntactic differences. Other than using ``~=`` +for the "is not equal to" relationship, Dylan is very similar to Pascal +for the operations needed in this function. The operator ``:=`` is used +for assignment to an existing variable (as opposed to ``=``, which is +used for setting the initial value for a variable created with ``let``) +and the notation *array*``[``*index*``]`` is used for subscripting. As +with ``if``, the ``while`` statement is always ended with ``end``, and +no explicit ``begin`` is needed. + +The main difference between these two functions is in how they +manipulate the arrays. When declaring an array in Pascal, a programmer +specifies both the lower and upper bound; these bounds can be integers, +characters, or enumerated types. In this regard, Dylan is less flexible +than Pascal: arrays are always indexed with increasing integers starting +at zero. (Many other languages, such as C, share this restriction. +Fortran is similar, but it starts all arrays at one.) + +In standard Pascal, the length of all arrays must be known ahead of +time. The one exception to this is the conformant array feature of ISO +Pascal, where the bounds of the array are treated as an extra set of +parameters to a function which accepts an array as an argument. In +Dylan, all arrays carry with them their length, so we only have to +specify the size of an array when it is not already known, such as when +the array is first created. The function ``size`` is used to obtain the +length of the array. For any array ``a``, the valid indexes of the array +are from ``0`` to ``size(a) - 1``; that is, ``size(a)`` elements, +starting at zero. + +One more thing to note is that, in Pascal, we had to invent the +``error`` procedure and say that it is implemented in some +platform-dependent way. Our Dylan version also calls a function named +``error``, but this function is a part of the Dylan language. The full +behavior of ``error`` is rather complicated and beyond the scope of this +tutorial -- Dylan has a powerful exception handling and recovery +mechanism for dealing with and possibly correcting errors discovered +while a program is running -- but if you're running the program in a +debugger, a call to error will generally result in the debugger stopping +the program and reporting the message. + +-------------- + +The original Pascal version of this function used a ``for`` loop, which +has a direct equivalent in Dylan, as we see in this version of the +function: + +.. code-block:: dylan + + define method dot-product (x, y) + unless (size(x) = size(y)) + error("dot-product: arrays of different lengths") + end unless; + let sum = 0; + for (i :: from 0 to size(x) - 1) + sum := sum + x[i] * y[i] + end for; + sum + end method dot-product; + +We've changed the error check at the beginning of the function from an +``if`` statement to an ``unless``, which executes its body if the +condition is false. Sometimes, often with error checks, it is clearer to +write a conditional with ``unless`` than with an ``if`` that tests the +opposite condition. Note that there is no ``else`` clause for +``unless``; if you need to do one thing if something is true and another +if it is false, use ``if`` or ``case``. + +The ``for`` loop in Dylan takes several forms, one of which we see +above, which is called a *numeric for clause*. The syntax of ``for`` in +Dylan is similar to the ``while`` statement, except instead of a +condition inside parentheses, we have a clause that describes the loop. +A numeric for clause counts from a number to some other. In this case, +the for-clause counts from zero to one less than the size of the array. +The syntax of the clause is straightforward: + + ``variable from initial-value to bounding-value`` + +As in Pascal's ``for`` statement and unlike the ``while`` loop, the +initial value and the bounding value are evaluated exactly once, before +the first iteration of the loop. + +Unlike the Pascal ``for`` loop, Dylan's ``for`` defines the loop +variable -- ``i`` in this example -- as part of its job. That is, no +declaration of ``i`` outside the loop is needed or used. This also means +that the loop variable can't be used outside the body of the loop. (I +included a type declaration for ``i`` above, just to show that one could +be used; typically, it would be omitted.) + +-------------- + +The for loop above is not very typical Dylan code. If written first in +Dylan, it might look more like this, taking advantage of a few +constructs that don't correspond directly to ones in Pascal: + +.. code-block:: dylan + + define method dot-product (x, y) + let sum = 0; + for (i from 0 below x.size) + sum := sum + x[i] * y[i] + finally + sum + end for + end method dot-product; + +(We've eliminated the error check at the beginning of the function from +this and future versions, not because it is unnecessary, but because it +would stay the same -- there is no need to repeat it.) + +We see here a slight variation on numeric iteration. The word ``to`` in +the iteration clause has been changed to ``below``. While ``to`` means +all values between the initial value through, and including, the final +value, ``below`` means all those values from the initial value that are +less than, but not equal to, the bounding value. + +In addition to what we've seen here, numeric iteration clauses can use +the ``by`` keyword, which introduces an amount to count by, as in +Pascal. The ``by`` phrase can be omitted, as we've seen, in which case +the value is incremented by one each time through the loop. Also, we can +identify the ending condition with ``above``, the opposite of ``below``, +which means the loop runs while the values are greater than the bound. +The ending condition can even be omitted, which leaves a (potentially) +infinite loop -- something other than finishing the numeric iteration +would have to happen to terminate the loop. + +The value specified by ``below`` in the loop is also a new construct, +``x.size``. This is a Dylan shorthand for calling a function of one +argument. That is, *expression``.``function-name* is the same thing as +*function-name``(``expression``)``*. So the expression here is exactly +the same as ``size(x)``, just written somewhat differently. (The +hecklers in the audience might observe that it isn't much of a +shorthand: just one fewer character.) + +Pascal and C programmers, among others, are used to using the syntax +*expression*``.``*name* for referring to fields of a compound object +like a record. It makes sense to wonder why this notation was chosen for +something else in Dylan, especially when that something else -- calling +functions -- already had a perfectly reasonable syntax. The reason is +that calling a function in Dylan is the only way to access fields in +compound objects; we'll see more of this later. + +The last thing to note about this version of the function is that the +``for`` statement is the last one in the function, so the value returned +by ``dot-product`` is the value of the ``for``. What value does the loop +return? Normally, there is no meaningful value to return from a loop, so +an arbitrary one -- the false value -- was picked in Dylan. But +sometimes it's useful to return a value from a loop, and that's what the +``finally`` clause is for. After the ``for`` loop is done, all the +statements in the ``finally`` clause -- here it's just one expression -- +are evaluated, and the value of the last is returned. One detail worth +knowing is that the statements after ``finally`` are still part of the +``for`` statement, so the variable from the numeric iteration clause can +still be used. + +-------------- + +All our versions of ``dot-product`` so far have worked in basically the +same way: step through the arrays by counting from 0 to one less than +the size of the array, and doing something with each element in the +array. This is all we use the variable ``i`` for, and it's pretty common +that loop variables are used in this way. Dylan provides a very +convenient way of doing this kind of iteration, using what's known as a +*collection iteration clause*: + +.. code-block:: dylan + + define method dot-product (x, y) + let sum = 0; + for (xi in x, yi in y) + sum := sum + xi * yi + finally + sum + end for + end method dot-product; + +Here we've done away with the numeric iteration clause, and replaced it +with two collection iteration clauses. Note that a ``for`` loop may have +an arbitrary number of iteration clauses, and when any of them +completes, the loop is done. The iteration clause *variable* ``in`` +*expression*, where the expression is an array, means execute the loop +for each element in the array, from first to last, setting the variable +to each value in succession. Thus the first time the loop executes, +``xi`` holds the value ``x[0]`` and ``yi`` holds ``y[0]``; the second +time through, ``xi`` holds ``x[1]`` and ``yi`` holds ``y[1]``; and so +on. + +The use of multiple iteration clauses in a ``for`` is relatively common. +Note that a single loop can mix numeric and collection iteration clause, +along with a third form, general iteration, which we'll see later. The +important thing to realize is that the loop ends when *any* of the +clauses causes it to end. + +Again, we haven't declared types for the parameters ``x`` and ``y`` and +have just referred to them as arrays. This is inaccurate in two ways. +The first, and more minor, is that one-dimensional arrays are referred +to as *vectors* in Dylan. While the code will work on multi-dimensional +arrays, it doesn't really make mathematical sense except for vectors -- +there is no dot product of an array of two or more dimensions. + +The more important reason that describing the arguments to +``dot-product`` as arrays is wrong is that this function will work for +other types of arguments as well. Dylan has several different types +known collectively as *sequences*, all of which share several +properties: they hold a collection of objects which are numbered from +zero. Vectors are one kind of sequence; others are strings, linked +lists, ranges of numbers, and queues. The subscripting notation using +``[]``, the ``size`` function, and collection iteration clauses -- among +many other operations -- may be used with all sequences. + +Sequences are just one kind of *collection* in Dylan. A collection is a +kind of object which can hold other objects. The most commonly used +collection which isn't a sequence is a *table*, which is Dylan's +built-in version of a hash table. Where sequences use integers starting +at zero as indexes, tables can use any object. + +Collections are used extensively by most Dylan programs. This should not +be a surprise to people who know Pascal: many complex data structures in +Pascal programs are collections of other objects, usually built up from +arrays, linked lists, etc. One major difference is that where Pascal +only defines the array type, in Dylan there are a variety of existing +collection types to use. Moreover, there is powerful set of operations +predefined on collections and sequences; we'll see two of these in our +next version of ``dot-product``. + +Another aspect of collections is that users can define their own +collection types. Again, this is no surprise. What is different from +Pascal is that, when programmers follow a few rules when creating a new +kind of collection, it can be used with any of the predefined functions +that operate on collections. We'll see more about this in a later +section. + +Turning back to the example at hand, there is one more thing to +understand about using collection iteration clauses instead of numeric +iteration and indexing: the performance impact of the choice. When we +used numeric iteration, to calculate the dot-product we had to evaluate +``x[i]`` and ``y[i]`` each time through the loop. For vectors this makes +perfect sense, as indexing into a vector is an efficient operation. But +if ``x`` is a linked list, for example, finding ``x[i]`` requires +stepping through the first ``i - 1`` elements of the list, which makes +evaluating ``x[i]`` inside the loop an expensive operation. In more +precise terms, it changes the computational complexity of the function +from *O(n)* for vectors to *O(n^2)* for lists, where *n* is the length +of the arguments. + +On the other hand, collection iteration is designed to be efficient when +possible. For both linked lists and arrays, iterating through the +collection takes time proportional to the length of the list, so the +version of ``dot-product`` which uses collection iteration has *O(n)* +complexity for both vectors and lists. In general, one should use +collection iteration when iterating over the elements of a collection +without concern for what their index values are. + +-------------- + +Now let's take a look at a very different version of ``dot-product``, +this time using two built-in collection operations, ``reduce`` and +``map``: + +.. code-block:: dylan + + define method dot-product (x, y) + local method add(a, b) + a + b + end method add; + local method multiply(m, n) + m * n + end method mul; + let x*y-sequence = map(multiply, x, y); + reduce(add, 0, x*y-sequence) + end method dot-product; + +The thing to note about this function is that there is no explicit +iteration clause. Instead, the iteration is done by the built-in +functions. + +Let's carefully step through what this function does. First, it defines +two local functions -- ``add`` and ``mul`` -- which, respectively, add +and multiply their arguments. It then calls the function ``map``. +``Map`` is what is known as a *higher-order function*, which means it is +a function that takes a function as an argument. ``Map`` creates a new +collection from the results of calling a function on each element of one +or more existing collections. The first argument to ``map`` is the +function to use; all the other arguments are collections to draw +elements from. In this case, we've applied ``map`` to the function +``multiply`` and the two sequences which were arguments, so it produces +a sequence that has ``x[0] * y[0]`` as its first element, +``x[1] * y[1]`` as its second, and so on. (The resulting sequence is +only as long as the shorter of the original sequences. If one is longer, +only the elements which have corresponding members in the shorter +sequence are used. As above, we'll assume that the sequences are of the +same length.) + +The result of map, a sequence of the products of the elements of ``x`` +and ``y`` is then attached to the local variable named ``x*y-sequence``. +There's nothing special about the use of the asterisk in this name -- +it's just one of the characters which is legal in Dylan as part of a +name -- but sometimes it is convenient to name a variable with a +mathematical expression. + +Next, we call the function ``reduce``, which is also a higher-order +function. Where ``map`` applies a function to the elements of one or +more collections to produce a new collection, ``reduce`` combines the +elements of a collection with a function to produce a single value. +``Reduce`` takes three arguments: a function, an initial value, and a +collection. It keeps track of the result value, which starts off as the +initial value argument. For each element of the collection, it computes +the result of the function called with the value of the result so far +and the current element, and uses that as the next value of the result. +When every element of the collection has been seen, the value that has +been computed so far is retuned. + +In our call to ``reduce``, the function used for combining values is +``add``, which sums two numbers, and the initial value is ``0``, which +is the identity for addition. Therefore, this call to ``reduce`` +produces the sum of the members of a collection. In this case, the +collection being summed contains the products of the elements of the +arguments, so the result is the dot product. + +However, there is a potential drawback to using this approach for +implementing ``dot-product``: it might be less efficient than a version +that directly used a loop. The reason is that memory might have to be +allocated for the intermediary result ``x*y-sequence``, and allocating +that memory takes some time, as does freeing it when it is no longer in +use. (Dylan uses *garbage collection*, also known as *automatic storage +reclamation*, to free memory that isn't being used anymore, but whether +the programmer or the system does it, freeing the memory does take some +time. A full discussion of garbage collection is beyond the scope of +this essay.) So we potentially have a bigger (more memory) and slower +(more time) program. A very clever compiler could eliminate this use of +extra memory, perhaps by inlining the functions and rewriting them +internally as loops, but programmers concerned with efficiency probably +shouldn't count on such an optimization unless they know their compiler +very well. + +By the way, there is nothing special about higher-order functions: +anyone can write them. Here, for example, is a portable version of +``reduce``, which could be used if it wasn't already part of the +language: + +.. code-block:: dylan + + define method reduce + (function :: , initial, collection :: ) + => value; + let result = initial; + for (element in collection) + result := function(result, element) + finally + result + end for + end method reduce; + +This implementation is a direct translation into Dylan of the +description given above. For once, I've given types for the arguments, +because that's how the types are specified by the language definition. +The major difference from other functions we've seen so far is an +argument, ``function``, is used as a function, inside the ``for`` loop; +that works just as one might expect it to. + +-------------- + +The previous version of ``dot-product`` used three locally-bound +identifiers (``add``, ``multiply``, and ``x*y-sequence``) that were only +used once. As in Pascal, if an expression is used only once, there is no +need to associate it with a name. Unlike Pascal, though, functions in +Dylan are expressions, and can be created anonymously, that is, without +names. So we can rewrite ``dot-product`` as: + +.. code-block:: dylan + + define method dot-product (x, y) + reduce(method (a, b) a + b end, + 0, map(method (m, n) m * n end, x, y)) + end method dot-product; + +In this version of ``dot-product``, the function we use as the first +argument to ``reduce`` is the expression: + +.. code-block:: dylan + + method (a, b) + a + b + end + +This expression creates a method -- with exactly the same meaning as the +``add`` method from our previous version -- but doesn't give it a name. +Nonetheless, this method can be used anywhere ``add`` could have been. +Similarly, ``multiply`` has been changed to another anonymous method. + +We also eliminated the variable ``x*y-sequence``, substituting the +``map`` expression for it in the call to ``reduce``. The meaning of the +function hasn't changed, however, so the potential inefficiency of +allocating extra memory for the result of ``map`` remains. + +The full syntax for an anonymous method is + +.. code-block:: dylan + + method (arguments ...) => results ...; + body + end method + +and, as with all other methods, the description of the results and the +word ``method`` after ``end`` can be omitted. Since it doesn't have a +name, there is no name to put after the ``end method``. + +-------------- + +These examples of ``map`` and ``reduce`` have been somewhat artificial +in order to introduce the use of higher-order functions. A version of +``dot-product`` in Dylan would more likely be written as: + +.. code-block:: dylan + + define method dot-product (x, y) + reduce(\+, 0, map(\*, x, y)) + end method dot-product; + +In the previous two examples, we created a function which took two +arguments and added them. The first time it was named ``add``; the +second, it was anonymous and passed as the first argument to ``reduce``. +In fact, there is no real need to create such a function, because one +already exists: it's called ``+``. + +Because ``+`` is normally used as an operator in traditional arithmetic +notation, it is easy to forget that it's a function. In Pascal and C, in +fact, operators like ``+`` have different rules from functions and can't +just be used like any other function, but in Dylan they can. To avoid +syntactic confusion with ``+`` used as an operator, when, for example, +we refer to the function name in order to pass it as an argument to +another function we have to precede it with a backslash, as above. + +This function has the same result as the previous two, but we have +avoided introducing the intermediate functions and let ``map`` and +``reduce`` call ``*`` and ``+`` directly. + +This version of ``dot-product`` is very concise and, for a programmer +used to ``map`` and ``reduce``, easy to read. There are some very common +idioms in Dylan built around these and other operators. For example, +there is no built-in function to sum a sequence: ``reduce`` obviates the +need for it. + +The use of higher-order functions is usually associated with the +*functional* style of programming, which is identified with languages +such as Standard ML, Haskell, and some dialects of Lisp, notably Scheme. +In Dylan it is often convenient to use this style for parts of programs +-- often those dealing with operations on collections, as we've seen -- +and use other styles, such as object-oriented or procedural, in other +parts. One of the goals for Dylan is to support multiple styles, because +there is no one single, "right" way to structure a program. The +functional style is a useful one, and is well supported in Dylan; we'll +see more of it later. + +On the other hand, it is possible to take this approach to extremes and +write large, complicated expressions with no named intermediate values. +While some people enjoy writing large blocks of code that way, the +result is often an unreadable program. APL, another language which makes +pervasive use of higher-order functions, is often criticized for +encouraging a "write-only" programming style, with very complex +expressions. Introducing a few named values with ``let`` or splitting +one method into several that calculate different parts of a result can +often turn a large, hard-to-follow expression into something more +readable and maintainable. + +-------------- + +`Back -- Conditions and Multiple Values: The Quadratic +Formula <2-quadratic.html>`_ + +Copyright © 1995 Paul Haahr. All rights reserved. diff --git a/documentation/website/source/articles/procedural-dylan/index.rst b/documentation/website/source/articles/procedural-dylan/index.rst new file mode 100644 index 0000000000..e812937174 --- /dev/null +++ b/documentation/website/source/articles/procedural-dylan/index.rst @@ -0,0 +1,29 @@ +Procedural Dylan +================ + +or How to write Pascal programs in Dylan +---------------------------------------- + +Dylan is promoted as an object-oriented, dynamic language, but it also +offers a rich set of constructs for programming in other styles. This +essay explores Dylan from the perspective of a programmer used to +traditional procedural languages, such as Pascal or C, who may want to +use the facilities offered by Dylan development environments without +changing programming style or thinking in a different way. Also, some +features of Dylan which mesh well with the procedural programming style +but have no direct analogs in Pascal or C may make an appropriate +addition to one's bag of tricks. + +This essay is intended to be used as a tutorial introduction and not as +a complete reference work. To avoid bogging down the discussion, much +has been omitted and some details have been ignored. For more complete +information, see the `Dylan Reference Manual `__. + +.. toctree:: + :titlesonly: + + 1-distance + 2-quadratic + 3-dot-product + +Copyright © 1995 Paul Haahr. All rights reserved. diff --git a/documentation/website/source/index.rst b/documentation/website/source/index.rst index 5b596989f1..69072e7861 100644 --- a/documentation/website/source/index.rst +++ b/documentation/website/source/index.rst @@ -18,5 +18,6 @@ Recent News :glob: */* + articles/*/* news/*/*/*/* diff --git a/documentation/website/source/news/index.rst b/documentation/website/source/news/index.rst index 9e7b88a60c..52d6d7c2df 100644 --- a/documentation/website/source/news/index.rst +++ b/documentation/website/source/news/index.rst @@ -1,6 +1,29 @@ -**** -News -**** +*************** +News & Articles +*************** + +.. raw:: html + +
+
+ +

News

.. include:: recent.rst.inc +.. raw:: html + +
+
+ +

Articles

+ +`Procedural Dylan <../articles/procedural-dylan/index.html>`_ by Paul Haahr. + + This essay explores Dylan from the perspective of a programmer used to + traditional procedural languages, such as Pascal or C. + +.. raw:: html + +
+
From 06a5e49e0c3c6692655aeb15e8cb759df9291bd6 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Thu, 15 Dec 2011 20:23:39 +0700 Subject: [PATCH 076/519] Fix some formatting errors in 'Procedural Dylan'. --- .../source/articles/procedural-dylan/2-quadratic.rst | 3 +-- .../source/articles/procedural-dylan/3-dot-product.rst | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/documentation/website/source/articles/procedural-dylan/2-quadratic.rst b/documentation/website/source/articles/procedural-dylan/2-quadratic.rst index 93f9565667..a1e6545db2 100644 --- a/documentation/website/source/articles/procedural-dylan/2-quadratic.rst +++ b/documentation/website/source/articles/procedural-dylan/2-quadratic.rst @@ -229,7 +229,6 @@ predicates end in question marks, as we can see from ``negative?`` and -------------- -`Back -- A Simple Function: Distance <1-distance.html>`_ - `Next -- Iteration and Sequences: Dot Product <3-dot-product.html>`_ +`Back -- A Simple Function: Distance <1-distance.html>`_ | `Next -- Iteration and Sequences: Dot Product <3-dot-product.html>`_ Copyright © 1995 Paul Haahr. All rights reserved. diff --git a/documentation/website/source/articles/procedural-dylan/3-dot-product.rst b/documentation/website/source/articles/procedural-dylan/3-dot-product.rst index e54de6624a..c5e4834e24 100644 --- a/documentation/website/source/articles/procedural-dylan/3-dot-product.rst +++ b/documentation/website/source/articles/procedural-dylan/3-dot-product.rst @@ -58,7 +58,7 @@ for the "is not equal to" relationship, Dylan is very similar to Pascal for the operations needed in this function. The operator ``:=`` is used for assignment to an existing variable (as opposed to ``=``, which is used for setting the initial value for a variable created with ``let``) -and the notation *array*``[``*index*``]`` is used for subscripting. As +and the notation ``*array*[*index*]`` is used for subscripting. As with ``if``, the ``while`` statement is always ended with ``end``, and no explicit ``begin`` is needed. @@ -179,14 +179,14 @@ would have to happen to terminate the loop. The value specified by ``below`` in the loop is also a new construct, ``x.size``. This is a Dylan shorthand for calling a function of one -argument. That is, *expression``.``function-name* is the same thing as -*function-name``(``expression``)``*. So the expression here is exactly +argument. That is, ``expression.function-name`` is the same thing as +``function-name(expression)``. So the expression here is exactly the same as ``size(x)``, just written somewhat differently. (The hecklers in the audience might observe that it isn't much of a shorthand: just one fewer character.) Pascal and C programmers, among others, are used to using the syntax -*expression*``.``*name* for referring to fields of a compound object +``expression.name`` for referring to fields of a compound object like a record. It makes sense to wonder why this notation was chosen for something else in Dylan, especially when that something else -- calling functions -- already had a perfectly reasonable syntax. The reason is From ba1064f3927e24bbe173adcf94353ee844763313 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Thu, 15 Dec 2011 20:23:57 +0700 Subject: [PATCH 077/519] Add link to Procedural Dylan. --- .../website/source/documentation/index.rst | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index a9ae59f3f7..b2c2b3f56d 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -74,9 +74,20 @@ Documentation

Featured articles and blog postings.

+

Learning Dylan

+ +`Procedural Dylan <../articles/procedural-dylan/index.html>`_ by Paul Haahr. + + This essay explores Dylan from the perspective of a programmer used to + traditional procedural languages, such as Pascal or C. + +.. raw:: html +

Tools

-* `Development inside emacs using SLIME <../news/2011/12/12/dswank.html>`_ +`Development inside emacs using SLIME <../news/2011/12/12/dswank.html>`_ + + An exciting look at using SLIME and emacs for Dylan development. .. raw:: html From b05e00dd4b3f62f663143b9668d8334951e947c9 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Thu, 15 Dec 2011 20:24:42 +0700 Subject: [PATCH 078/519] Move the style guide link. --- documentation/website/source/documentation/index.rst | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index b2c2b3f56d..876a20aafc 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -34,11 +34,6 @@ Documentation A good, book length Dylan tutorial by several Harlequin employees. -`Dylan Style Guide `_ -[`pdf `__] - - Notes and thoughts on how to format your Dylan code. - `Getting Started with Open Dylan `_ [`pdf `__] [`old HTML `__] @@ -156,6 +151,12 @@ Documentation A work in progress to help out people who are hacking on Open Dylan itself. +`Dylan Style Guide `_ +[`pdf `__] + + Notes and thoughts on how to format your Dylan code. This is the style + guide that we aspire to adhere to in the Open Dylan sources. + .. raw:: html
From 78d512ded68f887599b4eeacd33ff80d522218d5 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 12 Dec 2011 00:09:01 -0500 Subject: [PATCH 079/519] Minor tweaks to cheatsheet. --- .../source/documentation/cheatsheet.rst | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/documentation/website/source/documentation/cheatsheet.rst b/documentation/website/source/documentation/cheatsheet.rst index 3db17403e9..7f79045eb1 100644 --- a/documentation/website/source/documentation/cheatsheet.rst +++ b/documentation/website/source/documentation/cheatsheet.rst @@ -29,7 +29,7 @@ Literals +----------------+----------------------------------------+---------------------------+ | Strings | .. code-block:: dylan | | | | | * :drm:`` | -| | 'a' // A character | | +| | 'a' // A character | * :drm:`` | | | "Hello" // A simple string | | | | "Hello\n" // An escape sequence | | +----------------+----------------------------------------+---------------------------+ @@ -49,6 +49,8 @@ Literals Naming Conventions ================== +These are *conventions* only; they have no semantic value to the compiler. + +-------------+-------------------------+--------------------------+ | Classes | Class names begin / end | .. code-block:: dylan | | | with angle brackets | | @@ -69,20 +71,18 @@ Naming Conventions | | ``let``. | | +-------------+-------------------------+--------------------------+ | Predicate | Predicate functions | .. code-block:: dylan | -| Functions | return true / false | | -| | values. They end in | even? | -| | ``?``. | instance? | +| Functions | return #t or #f. They | | +| | end in ``?``. | even? | +| | | instance? | +-------------+-------------------------+--------------------------+ -| Getters & | Getters return a value | .. code-block:: dylan | -| Setters | while setters allow you | | -| | modify that value. The | window.size := 3 | -| | compiler uses this | size-setter(3, window) | +| Getters & | Getters read a value | .. code-block:: dylan | +| Setters | while setters write a | | +| | value. Setter functions| window.size := 3 | +| | end in ``-setter``. | size-setter(3, window) | +| | The compiler uses this | | | | convention to find the | | | | function to call for | | | | ``:=``. | | -| | | | -| | Setter functions end | | -| | in ``-setter``. | | +-------------+-------------------------+--------------------------+ Operators From b2968f2d58be46c7316592a05f787a3d8321ee7b Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Thu, 15 Dec 2011 09:15:06 -0500 Subject: [PATCH 080/519] Tweak to string formatting table. --- documentation/website/source/documentation/cheatsheet.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/documentation/website/source/documentation/cheatsheet.rst b/documentation/website/source/documentation/cheatsheet.rst index 7f79045eb1..84adab5546 100644 --- a/documentation/website/source/documentation/cheatsheet.rst +++ b/documentation/website/source/documentation/cheatsheet.rst @@ -129,6 +129,8 @@ Operators String Formatting ================= +Example: ``format(stream, "%s:%d", host, port)`` + +-------------+------------------+-----------------------+ | Directive | Argument Type | Description | +=============+==================+=======================+ @@ -142,11 +144,9 @@ String Formatting +-------------+------------------+-----------------------+ | %c | | character, no quotes | +-------------+------------------+-----------------------+ -| %s | | string, no quotes | -+-------------+------------------+-----------------------+ -| %s | | condition message | +| %s | | "pretty" format | +-------------+------------------+-----------------------+ -| %= | | any object | +| %= | | "unique" format | +-------------+------------------+-----------------------+ | %% | None | literal % | +-------------+------------------+-----------------------+ From e296f69724460557f4ecf19dc7846216d8307f66 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Sat, 17 Dec 2011 09:58:03 +0700 Subject: [PATCH 081/519] Remove unused files. --- documentation/website/source/documentation/glossary.rst | 3 --- documentation/website/source/documentation/styleguide.rst | 3 --- documentation/website/source/documentation/tutorials.rst | 0 3 files changed, 6 deletions(-) delete mode 100644 documentation/website/source/documentation/glossary.rst delete mode 100644 documentation/website/source/documentation/styleguide.rst delete mode 100644 documentation/website/source/documentation/tutorials.rst diff --git a/documentation/website/source/documentation/glossary.rst b/documentation/website/source/documentation/glossary.rst deleted file mode 100644 index af8e510a06..0000000000 --- a/documentation/website/source/documentation/glossary.rst +++ /dev/null @@ -1,3 +0,0 @@ -******** -Glossary -******** diff --git a/documentation/website/source/documentation/styleguide.rst b/documentation/website/source/documentation/styleguide.rst deleted file mode 100644 index 828eb64e42..0000000000 --- a/documentation/website/source/documentation/styleguide.rst +++ /dev/null @@ -1,3 +0,0 @@ -*********** -Style Guide -*********** diff --git a/documentation/website/source/documentation/tutorials.rst b/documentation/website/source/documentation/tutorials.rst deleted file mode 100644 index e69de29bb2..0000000000 From 652604fe940ff54791803a2aac98480df9152b7b Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Sat, 17 Dec 2011 10:54:56 +0700 Subject: [PATCH 082/519] Begin to re-organize the main page of the website. --- documentation/website/source/index.rst | 39 ++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/documentation/website/source/index.rst b/documentation/website/source/index.rst index 69072e7861..5d566bec75 100644 --- a/documentation/website/source/index.rst +++ b/documentation/website/source/index.rst @@ -1,17 +1,44 @@ Welcome to Open Dylan! ====================== -For more on the background and goals of the Dylan language, see the -excellent :drm:`Introduction to the Dylan Reference Manual `. +.. raw:: html + +
+
-For an introduction to the basic concepts of the language, see our -`introduction to Dylan `_. +

Recent News

-Recent News -=========== +
+

Keep up to date by subscribing to our RSS + Feed or joining our + mailing lists.

+
.. include:: news/recent.rst.inc +.. raw:: html + +
+
+ +

Get Started

+ +
+

Just getting started with Open Dylan? We recommend that + you read the Introduction to + Dylan to get a feel for the language. After that, you can broaden + your knowledge with the Dylan Programming + book.

+
+ +For more on the background and goals of the Dylan language, see the +excellent :drm:`Introduction to the Dylan Reference Manual `. + +.. raw:: html + +
+
+ .. toctree:: :maxdepth: 1 :hidden: From 067ba684c9b56d28163d4be592824d6b76f99970 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Sat, 17 Dec 2011 11:00:57 +0700 Subject: [PATCH 083/519] Move the hero box out of the theme and into the index page. --- .../source/_themes/opendylan/layout.html | 17 ----------------- documentation/website/source/index.rst | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/documentation/website/source/_themes/opendylan/layout.html b/documentation/website/source/_themes/opendylan/layout.html index 37c781b289..f7660e36a5 100644 --- a/documentation/website/source/_themes/opendylan/layout.html +++ b/documentation/website/source/_themes/opendylan/layout.html @@ -56,23 +56,6 @@ {% block content %}
- {% if pagename == 'index' -%} -
-

Dylan is an advanced, object-oriented, dynamic language which - supports rapid program development. When needed, programs can be - optimized for more efficient execution by supplying more type - information to the compiler. Nearly all entities in Dylan - (including functions, classes, and basic data types such as - integers) are first class objects. Additionally Dylan supports - multiple inheritance, polymorphism, multiple dispatch, keyword - arguments, object introspection, macros, and many other advanced - features... --Peter Hinely

- -
- {% endif -%} {%- block document %} {{ super() }} {%- endblock %} diff --git a/documentation/website/source/index.rst b/documentation/website/source/index.rst index 5d566bec75..6f5c63a15b 100644 --- a/documentation/website/source/index.rst +++ b/documentation/website/source/index.rst @@ -3,6 +3,22 @@ Welcome to Open Dylan! .. raw:: html +
+

Dylan is an advanced, object-oriented, dynamic language which + supports rapid program development. When needed, programs can be + optimized for more efficient execution by supplying more type + information to the compiler. Nearly all entities in Dylan + (including functions, classes, and basic data types such as + integers) are first class objects. Additionally Dylan supports + multiple inheritance, polymorphism, multiple dispatch, keyword + arguments, object introspection, macros, and many other advanced + features... --Peter Hinely

+ +
+
From e3a8e0369bc95a48f75289a2c9837d928d9c12f0 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Sat, 17 Dec 2011 11:03:53 +0700 Subject: [PATCH 084/519] Add icon for RSS feed. --- .../website/source/_static/feed-icon-14x14.png | Bin 0 -> 689 bytes documentation/website/source/index.rst | 5 +++-- 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 documentation/website/source/_static/feed-icon-14x14.png diff --git a/documentation/website/source/_static/feed-icon-14x14.png b/documentation/website/source/_static/feed-icon-14x14.png new file mode 100644 index 0000000000000000000000000000000000000000..b3c949d2244f2c0c81d65e74719af2a1b56d06a3 GIT binary patch literal 689 zcmV;i0#5yjP)(tky!*UETcH-TCU7SrqEjJM#?B`_A)!p7(kFf9-P@=@15kkTkGK zgFusyy#KECqZzRdBLb=P?$(kUP;>kYTDeG&{|a+iOiRbI6nbQ)j#7bOf>iF=C+|_py<&Fo1F5cC*iEM?zZGC{ejNg4LWYp=S$L6Qaby6y zp$+F`250{%tU{Lg$5*ROH}y!1UKJS4*xqd7P(Y3JQF?lrnf?yerr%&6yGXLG1ur*B z{$&R1@Oj)yl@%rY5rh?j(j10Yz_DBs`AKFU_QnB;)(aqQmGi&ieOS|21^NP9UMpa< zU&p!f6RZ6Owp^X!EXA=0SbN&h?CrQK%Q3(=YBqqHD^9ZUM0Hxt-6-KT;>lf@j?Z+v zHm(}`>85I&E<7e}oz?6UwjAogowzGO8kSN7+2`b^$Az9L{K5*ko87EV45LT-`_##3 z>d3AGh@>=mbg34|6}+-gT9N+6Dr@44VEl44O&{&|w=qpbzC#iWMKa?5)>tI+KLQK@ Xq0QFqn(9Yl00000NkvXXu0mjfZ8t

Keep up to date by subscribing to our RSS - Feed or joining our - mailing lists.

+ Feed or + joining our mailing + lists.

.. include:: news/recent.rst.inc From b480bf2efffd2dde331c6122495aa3e5fce4f0b4 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Sat, 17 Dec 2011 11:04:29 +0700 Subject: [PATCH 085/519] Fix broken link. --- documentation/website/source/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/index.rst b/documentation/website/source/index.rst index 2af1c699c9..332fc4d32f 100644 --- a/documentation/website/source/index.rst +++ b/documentation/website/source/index.rst @@ -27,7 +27,7 @@ Welcome to Open Dylan!

Keep up to date by subscribing to our RSS Feed or - joining our mailing + joining our mailing lists.

From 968d33b0f2d82286c3ed12550ff76f82aed7fb1e Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Sat, 17 Dec 2011 11:09:24 +0700 Subject: [PATCH 086/519] Link to the mailman UI rather than just a request email address. --- documentation/website/source/community/index.rst | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/documentation/website/source/community/index.rst b/documentation/website/source/community/index.rst index c260768061..b3c3844504 100644 --- a/documentation/website/source/community/index.rst +++ b/documentation/website/source/community/index.rst @@ -46,23 +46,25 @@ Mailing Lists There are several mailing lists. Which ones you join depends on your level of interest and involvement: -`hackers@lists.opendylan.org `_ (`Archives`__) +`hackers@lists.opendylan.org`__ (`Archives`__) The public development list. This is a good place to start if you have a question or would like to contribute. Lurkers are also welcome! Very low traffic. -`announce@lists.opendylan.org `_ (`Archives`__) +`announce@lists.opendylan.org`__ (`Archives`__) Find out about new releases! This is an extremely low-traffic list reserved for announcements. If you subscribe to hackers@, you are on this list. -`chatter@lists.opendylan.org `_ (`Archives`__) +`chatter@lists.opendylan.org`__ (`Archives`__) This list contains nothing but Git commit messages. It's for developers who want to know everything that's going on. - +__ https://lists.opendylan.org/mailman/listinfo/hackers __ https://lists.opendylan.org/pipermail/hackers/ +__ https://lists.opendylan.org/mailman/listinfo/announce __ https://lists.opendylan.org/pipermail/announce/ +__ https://lists.opendylan.org/mailman/listinfo/chatter __ https://lists.opendylan.org/pipermail/chatter/ Social Media From 84ffe1ab1b65d4fb79a28826c9b38c3cf45c827d Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Sat, 17 Dec 2011 11:31:35 +0700 Subject: [PATCH 087/519] Improve formatting a bit. --- .../website/source/news/2011/12/12/dswank.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/documentation/website/source/news/2011/12/12/dswank.rst b/documentation/website/source/news/2011/12/12/dswank.rst index 36e708cac9..d1029844c9 100644 --- a/documentation/website/source/news/2011/12/12/dswank.rst +++ b/documentation/website/source/news/2011/12/12/dswank.rst @@ -17,15 +17,15 @@ implemented.
-When successfully installed, just run M-x slime to get a shell. This -is the same as the dylan-compiler shell, you can also use the same -commands. +When successfully installed, just run ``M-x slime`` to get a shell. +This is the same as the dylan-compiler shell, you can also use the +same commands. -When you program and hit '(' or ',' or ' ', you get the argument list -of the method you are calling. +When you program and hit ``(`` or ``,`` or ``(space)``, you get the +argument list of the method you are calling. -M-x slime-dylan-browse-superclasses will show the superclass hierarchy -of the current class. M-x slime-dylan-browse-subclasses displays the +``M-x slime-dylan-browse-superclasses`` will show the superclass hierarchy +of the current class. ``M-x slime-dylan-browse-subclasses`` displays the subclass hierarchy. +-------------------+------------------------------------------+ @@ -51,7 +51,7 @@ subclass hierarchy. +-------------------+------------------------------------------+ Dswank uses the Open Dylan project registry, so make sure -OPEN_DYLAN_USER_REGISTRIES is set properly before starting Emacs. +``OPEN_DYLAN_USER_REGISTRIES`` is set properly before starting Emacs. Installation @@ -60,5 +60,5 @@ Installation You need the following pieces: * `SLIME `_ - since the CVS is a moving target, this is a safe version to use (February 2011 snapshot) - * `dylan-mode `_, and extend your ~/.emacs as documented in README) + * `dylan-mode `_, and extend your ``~/.emacs`` as documented in README) * dswank itself is shipped with the 2011.1 release From c7c50a85632ad57ee0977d7ce9e6b0869e54830f Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Sat, 17 Dec 2011 11:35:50 +0700 Subject: [PATCH 088/519] Add button to go to news page. --- documentation/website/source/index.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/website/source/index.rst b/documentation/website/source/index.rst index 332fc4d32f..42443fdf5e 100644 --- a/documentation/website/source/index.rst +++ b/documentation/website/source/index.rst @@ -35,6 +35,7 @@ Welcome to Open Dylan! .. raw:: html +
From f0ec78b5701a1f9a85c790a5839769b4eb128321 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Sat, 17 Dec 2011 11:36:11 +0700 Subject: [PATCH 089/519] Improved recent news blurbs. --- .../website/source/news/recent.rst.inc | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/documentation/website/source/news/recent.rst.inc b/documentation/website/source/news/recent.rst.inc index 2688968767..b04b8c16a7 100644 --- a/documentation/website/source/news/recent.rst.inc +++ b/documentation/website/source/news/recent.rst.inc @@ -3,23 +3,32 @@ *2011-12-12* We developed a back-end for SLIME, the superior lisp interaction -mode for emacs. +mode for emacs. Now, you can browse the class hierarchy, get +argument lists, locate definitions, compile, view warnings and +more, all from within emacs! :doc:`Read more... ` **New release: 2011.1** *2011-12-10* -We just released Open Dylan 2011.1 +We just released Open Dylan 2011.1. This release is our first +since moving to GitHub and relicensing under a more liberal +license. It brings many bugfixes, inmproved platform support +and new features. :doc:`Read more... ` **New Documentation** *2011-11-22* -We're revitalizing our documentation. +We're revitalizing our documentation and moving to a new +publishing system. We'll soon be able to provide our +documentation in PDF and ePub as well as HTML, with it +looking much better and being more maintainable than +in the past. -:doc:`More... ` +:doc:`Read more... ` **Welcome to the New Website!** *2011-11-22* From d17dce2800c6f1b41b15d919c7a0282ecb5d70ab Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Sat, 17 Dec 2011 21:04:24 +0700 Subject: [PATCH 090/519] Adding Dustin's "Dylan Macro System" article rescued from the wiki. --- .../articles/macro-system/auxiliary-rules.rst | 388 ++++++++++++++++++ .../macro-system/background-overview.rst | 133 ++++++ .../source/articles/macro-system/faq-tips.rst | 123 ++++++ .../source/articles/macro-system/hygiene.rst | 127 ++++++ .../source/articles/macro-system/index.rst | 26 ++ .../articles/macro-system/macro-types.rst | 138 +++++++ .../macro-system/pattern-variables.rst | 296 +++++++++++++ .../source/articles/macro-system/patterns.rst | 165 ++++++++ .../articles/macro-system/substitutions.rst | 152 +++++++ 9 files changed, 1548 insertions(+) create mode 100644 documentation/website/source/articles/macro-system/auxiliary-rules.rst create mode 100644 documentation/website/source/articles/macro-system/background-overview.rst create mode 100644 documentation/website/source/articles/macro-system/faq-tips.rst create mode 100644 documentation/website/source/articles/macro-system/hygiene.rst create mode 100644 documentation/website/source/articles/macro-system/index.rst create mode 100644 documentation/website/source/articles/macro-system/macro-types.rst create mode 100644 documentation/website/source/articles/macro-system/pattern-variables.rst create mode 100644 documentation/website/source/articles/macro-system/patterns.rst create mode 100644 documentation/website/source/articles/macro-system/substitutions.rst diff --git a/documentation/website/source/articles/macro-system/auxiliary-rules.rst b/documentation/website/source/articles/macro-system/auxiliary-rules.rst new file mode 100644 index 0000000000..500860ff93 --- /dev/null +++ b/documentation/website/source/articles/macro-system/auxiliary-rules.rst @@ -0,0 +1,388 @@ +.. default-role:: samp +.. highlight:: dylan +.. _auxiliary-rules: + + +****************************** +Auxiliary Rules and Expansions +****************************** + +Auxiliary rules transform the code fragment contained in a pattern variable +before it is substituted into a template. + +Auxiliary rule sets follow the syntax described in `patterns`:ref: and have the +behaviors described on that page. They do not have the special elements like +`define` or `{modifiers}` shown in `macro-types`:ref:, but the macro type does +place certain *de facto* restrictions on what can appear in auxiliary rule +patterns: + +- `end` cannot usefully appear in patterns of a body-style definition macro or + a statement macro unless it is enclosed in bracketing characters. +- `;` cannot usefully appear in patterns of a list-style definition macro + unless enclosed in bracketing characters. + +An auxiliary rule set comes into play when a pattern variable matches a code +fragment and that pattern variable is named the same as the auxiliary rule set. +Usually, the pattern variable is a wildcard variable written without a +constraint, but the pattern variable can use any of the forms described in +`patterns`:ref:, including the `#key` and `??{name}:{constraint}` forms. + +After the pattern variable matches and is set to a code fragment, that code +fragment is matched against the rules of the auxiliary rule set. If a rule's +pattern matches the code fragment, that rule's template is expanded and replaces +the code fragment contained by the pattern variable. If no rules match the code +fragment, macro expansion fails. + +If the pattern variable named the same as the rule set is a ``??``-style pattern +variable, the process is similar, except each code fragment in the pattern +variable is individually matched and transformed by the auxiliary rules. + + +Expansion examples +================== + +Consider a macro [ver1]_ that makes it easier to generate version numbers. The +macro is called by [ver1-call]_ and expands to [ver1-exp]_. + +The `?type` pattern variable in line 1 of the macro definition matches ``alpha`` +in the call. After the variable matches, the `type:` auxiliary rule set in lines +4–7 rewrite the contents of the pattern variable according to the matching rule +in line 5. The matching rule expands to the string `"a"`, which replaces the +contents of the pattern variable. In the main rule's template (line 3), the +pattern variable (now containing `"a"` instead of `alpha`) is substituted into +the expansion. + +---------- + +.. [ver1] *Version macro* + + .. code-block:: dylan + :linenos: + + define macro version + { version(?number:expression, ?type:name) } + => { set-version(?number ?type) } + type: + { alpha } => { "a" } + { beta } => { "b" } + { release } => { } + end macro + +.. [ver1-call] *Macro call* + + .. code-block:: dylan + + version("1.2", alpha) + +.. [ver1-exp] *Macro expansion* + + .. code-block:: dylan + + set-version("1.2" "a") + +---------- + +Effect of constraints +--------------------- + +Now consider if the auxiliary rules were rewritten as [ver2]_. This macro might +be intended to create a version number like `"1.0a1"` if called by [ver2-call]_. +However, the macro will never succeed. `?type` in line 2 is constrained to +always be a simple name. None of the patterns in the `type:` auxiliary rule set +match a simple name (they all expect commas), so the macro expansion will fail. + +---------- + +.. [ver2] *Version macro 2* + + .. code-block:: dylan + :linenos: + :emphasize-lines: 5-7 + + define macro version + { version(?number:expression, ?type:name) } + => { set-version(?number ?type) } + type: + { alpha, ?n:expression } => { "a" ?n } + { beta, ?n:expression } => { "b" ?n } + { release, ?n:expression } => { } + end macro + +.. [ver2-call] *Macro call* + + .. code-block:: dylan + + version("1.0", alpha, "1") + +---------- + +Missing code fragments +---------------------- + +An auxiliary rule set can match against a missing code fragment. Consider the +following code which calls [ver1]_: + +.. code-block:: dylan + + version("1.0") + +With this macro call, the `?number` pattern variable would +contain `"1.0"` and `?type` would be empty, as described in +`final-items`:ref:. The macro would fail to match this code +fragment, since the `name`` constraint of the `?type` variable does not match +a missing code fragment. + +If we changed the macro definition to include a wildcard constraint [ver3]_, the +macro would still fail to match the code fragment because the `type:` +auxiliary rule set does not have a pattern that matches a missing code fragment. +We would also have to add that rule [ver4]_. + +---------- + +.. [ver3] *Macro with wildcard* + + .. code-block:: dylan + :linenos: + :emphasize-lines: 2 + + define macro version + { version(?number:expression, ?type:*) } + => { set-version(?number ?type) } + type: + { alpha } => { "a" } + { beta } => { "b" } + { release } => { } + end macro + +.. [ver4] *Macro with wildcard and empty pattern* + + .. code-block:: dylan + :linenos: + :emphasize-lines: 2,8 + + define macro version + { version(?number:expression, ?type:*) } + => { set-version(?number ?type) } + type: + { alpha } => { "a" } + { beta } => { "b" } + { release } => { } + { } => { } + end macro + +---------- + +Final exam +---------- + +Now suppose we wanted to support the syntax [ver5-call]_. This macro should +expand to [ver5-exp]_ to generate a version number like "1.042a". The macro +could be defined by the code [ver5]_. There are several interesting aspects to +this version of the macro that I would like to point out. + +Required and optional properties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The macro call must include the `major:` property, but the `rev:` and `type:` +properties are optional. `rev:` is optional because it is a ``??``-type pattern +variable, and `type:` is optional because the pattern variable includes a +default value. + +If the macro call did not include any `rev:` properties, the substitution for +`??rev, ...` would be empty. This would cause the comma after `"."` in line 3 to +vanish. If the macro call did not include `type:`, the substitution for +``?type`` in line 3 would be empty because the defaulted pattern variable +matches the pattern of the auxiliary rule in line 12, and the template for that +rule is empty. Because `?type` in line 3 would be empty, the comma after `??rev, +...` would vanish. + +Property symbols +^^^^^^^^^^^^^^^^ + +The `major:`, `rev:`, and `type:` auxiliary rule sets do not include the actual +`major:`, `rev:`, or `type:` symbols found in the macro call. This is because +``#key``-type pattern variables contain only the value parts of properties, not +the symbol parts. + +``??`` and ``?`` pattern variables +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The main rule and the `major:` auxiliary rule set both contain a pattern +variable named `rev`, though it is `??rev:expression` in the main rule (line 2) +and `?rev` in the auxiliary rule (line 5). Both pattern variables are +transformed by the `rev:` auxiliary rule in line 7 because both pattern +variables have the name "rev", but they are transformed differently because of +the different natures of the two pattern variables. + +In line 5, `?rev` is equivalent to `?rev:*`. The code fragment matched by that +wildcard is the code fragment contained by the pattern variable `?major` in line +2. This code fragment will be an expression, which will be matched and +transformed by the `rev:` rule and will replace `?major` in line 3. + +The `?rev` pattern variable in line 5 is a simple pattern variable that contains +only one code fragment. The `rev:` rule in line 7 transforms that fragment as +you would expect. + +However, the `??rev` pattern variable in line 2 is a `??`-type pattern variable +containing has zero or more code fragments, so the `rev:` rule transforms each +individually. The `??rev, ...` substitution in line 3 then joins each of the +transformed code fragments with a comma and includes the entire collection in +the macro expansion. + +Empty ``??`` pattern variables +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In line 2, the `?type` variable has a default. If the macro call +does not contain a `type:` property, the default provides a code fragment to +match against the `type:` auxiliary rule set. + +In contrast, the `??rev` variable does not have a default. If the call does not +include any `rev:` properties then the pattern variable will not contain a code +fragment. Since the `rev:` rule does not include an empty pattern, you might +expect the macro to fail. + +But the macro still works. The `rev:` rule will be applied to each code fragment +in `??rev` individually because it is a ``??``-type pattern variable. Since +there are no code fragments in `??rev`, the `rev:` is not even applied once, so +its lack of an empty pattern is irrelevant. + +---------- + +.. [ver5-call] *Complex syntax call* + + .. code-block:: dylan + + version(major: 1, rev: 0, rev: 4, rev: 2, type: alpha) + +.. [ver5-exp] *Complex expansion* + + .. code-block:: dylan + + set-version(concatenate("1", ".", "0", 4", "2", "a")) + +.. [ver5] *Complex macro definition* + + .. code-block:: dylan + :linenos: + + define macro version + { version(#key ?major:expression, ??rev:expression, ?type:name = none) } + => { set-version(concatenate(?major, ".", ??rev, ..., ?type)) } + major: + { ?rev } => { ?rev } + rev: + { ?:expression } => { format-to-string("%s", ?expression) } + type: + { alpha } => { "a" } + { beta } => { "b" } + { release } => { } + { none } => { } + end macro + +---------- + +Recursive expansion +=================== + +Any pattern variable named the same as an auxiliary rule is processed by that +rule. That includes pattern variables in the auxiliary rule itself. This +recursive behavior is useful for processing lists of items. + +The `...` pattern variable and substitution syntaxes draw attention to a +recursive rule. Using that syntax, the macros [rec1]_ and [rec2]_ are +equivalent. But I feel there is a good argument for avoiding that syntax for +clarity's sake. + +Tracing a call of the macro [rec1-call]_ shows how macro recursion works. + +1. The main rule pattern matches. ``?steps`` is set to ``north 5, east 3, south + 1, east 2``. +#. The contents of ``?steps`` is rewritten by the *steps* auxiliary rule set. + + a. The "north" rule is matched against ``north 5, east 3, south 1, east 2``. + The pattern is a comma-separated pattern, which matches the code fragment. + The word ``north`` and the token ``5`` match. As described in + `final-items`:ref:, the ``?steps`` pattern variable belonging to this + pattern-match operation is set to ``east 3, south 1, east 2``. + #. The contents of this rule's ``?steps`` variable is rewritten by the *steps* + auxiliary rule set. + + i. The "north," "south," and "west" rules fail to match against ``east 3, + south 1, east 2``. + #. The "east" rule matches and the ``?steps`` pattern variable of this + pattern-match operation (different from any other ``?steps`` variable + being dealt with) is set to ``south 1, east 2``. + #. ``?steps`` is rewritten by another pass through the *steps* rule set. + + 1. The "south" rule matches and its ``?steps`` is set to ``east 2``. + #. ``?steps`` is rewritten. + + a. The "north," "south," and "west" rules fail to match. + #. The "east" rule is matched against ``east 2``. The word ``east`` and + the token ``2`` match. The code fragment does not contain a comma, but + the pattern matches the code fragment without the comma per + `final-items`:ref:. The ``?steps`` pattern variable will contain an + empty code fragment. + #. Even though ``?steps`` contains an empty code fragment, it is still + rewritten by the *steps* auxiliary rule set. + + i. The "north," "south," "west," and "east" rules fail to match against + an empty code fragment. + #. The empty pattern matches. Its expansion is an empty fragment. + + #. The ``?steps`` pattern variable of the "east" rule is set to the + expansion of the auxiliary rule set, i.e., an empty fragment. + #. The rule's expansion is therefore ``x := x + 2``. + + #. The ``?steps`` pattern variable of the "south" rule is set to ``x := x + + 2``. + #. The rule's expansion is therefore ``y := y + 1; x := x + 2``. + + #. The ``?steps`` pattern variable of the "east" rule is set to ``y := y + 1; + x := x + 2``. + #. The rule's expansion is therefore ``x := x + 3; y := y + 1; x := x + 2`` + +…and so on. The key ideas to note are: + +- The rule set has to have a non-recursing rule (in this case, ``{ } => { }``) +- Each rule's matching and expansion has its own ``?token`` and ``?steps`` + pattern variable. + +---------- + +.. [rec1] *Recursive macro* + + .. code-block:: dylan + :linenos: + + define macro path + { path(?steps) } => { let x = 0; let y = 0; ?steps; values(x, y) } + steps: + { north ?:token, ?steps:* } => { y := y - ?token; ?steps } + { south ?:token, ?steps:* } => { y := y + ?token; ?steps } + { west ?:token, ?steps:* } => { x := x - ?token; ?steps } + { east ?:token, ?steps:* } => { x := x + ?token; ?steps } + { } => { } + end macro + +.. [rec2] *Recursive macro with ellipses* + + .. code-block:: dylan + :linenos: + :emphasize-lines: 4-7 + + define macro path + { path(?steps) } => { let x = 0; let y = 0; ?steps; values(x, y) } + steps: + { north ?:token, ... } => { y := y - ?token; ... } + { south ?:token, ... } => { y := y + ?token; ... } + { west ?:token, ... } => { x := x - ?token; ... } + { east ?:token, ... } => { x := x + ?token; ... } + { } => { } + end macro + +.. [rec1-call] *Recursive macro call* + + .. code-block:: dylan + + let (x, y) = path(north 5, east 3, south 1, east 2) diff --git a/documentation/website/source/articles/macro-system/background-overview.rst b/documentation/website/source/articles/macro-system/background-overview.rst new file mode 100644 index 0000000000..2aef3a5227 --- /dev/null +++ b/documentation/website/source/articles/macro-system/background-overview.rst @@ -0,0 +1,133 @@ +.. default-role:: dfn +.. highlight:: dylan +.. _background-overview: + + +*********************** +Background and Overview +*********************** + +Macros work on the basis of code fragments. The macro system +does not understand code fragments; it just substitutes some fragments for other +fragments. Once the macro system has substituted and arrange all the code +fragments, they are compiled into executable code. + +Because the macro system parses and generates code fragments, it can recognize +the difference between a string containing a macro name and an actual invocation +of a macro. Macros are not affected by such syntactical issues; strings and +other expressions are treated as opaque units. + +The following are all examples of elementary code fragments, or `parsed +fragments`. These combine to form the larger code fragments upon which macros +operate. + +.. code-block:: none + + 'a' + "end times" + 35.552 + 3/4 + (3 + 7) + #t + #"red" + red: + cinnamon + == + #[1, 2, 3] + as(...) + list.size + + +Anatomy and terms +================= + +Macros have `main rules` and `auxiliary rules`. Each of the main or auxiliary +rules has a `pattern` and a `template`. Patterns are matched against the code +fragments of your source code. A main rule is matched against the code fragment +that comprises the entire macro call. An auxiliary rule is matched against parts +of that code fragment. The matched code is then replaced by the template. + +A pattern can contain code fragments and `pattern variables`. If a code +fragment in the source code matches what is in the pattern, parts of that code +fragment may be pulled out into pattern variables. The rest is discarded. + +A template can contain other code fragments and `substitutions`. Substitutions +are placeholders; the contents of a pattern variable are processed and inserted +into the template in place of every corresponding substitution. The template's +combined fragments and substitutions form the macro's `expansion`, which +replaces the original code fragment. + +This happens recursively: after a macro is expanded, its expansion is scanned +for additional macro call code fragments, and those are expanded in turn. Macros +are recognized by way of a `distinguishing word` and a certain syntactic style. + +Let us examine a function macro [defn]_. This macro might be called by the code +[orig]_, but the actual call fragment [frag]_ is what the parser will attempt to +match. The macro's expansion will be [exp]_ and the original code will then +become [new]_. + +Here are the parts of the macro: + +- The distinguishing word is ``table``. Whenever the compiler sees ``table(…)``, + it will expand this macro rather than creating a call to a function named + "table". +- The main rules are in lines 2–4. +- The macro has one set of auxiliary rules in lines 6–9. A set of auxiliary + rules has a title written as a symbol. This set of auxiliary rules is titled + ``table-contents:`` (or, alternatively, ``#"table-contents"``). +- The pattern of the first main rule is in line 2. +- The template of the first main rule is in line 3. +- The patterns in this macro include the pattern variables ``?table-class``, + ``?table-contents``, ``?rest``, ``?key``, and ``?value``. +- The substitutions in this macro include those same names. + +Note that the expansion [new]_ is surrounded by ``begin`` and ``end``. Macro +expansions are always surrounded by a begin…end block. This helps with macro +hygiene (i.e. preventing bindings outside of a macro call from being affected by +bindings used in a macro's expansion). I discuss hygiene `later `:ref:. + +---------- + +.. [defn] *Definition* + + .. code-block:: dylan + :linenos: + + define macro table + { table(?table-class:expression, ?table-contents) } + => { let ht = make(?table-class); ?table-contents; ht; } + { table(?rest:*) } => { table(
+
- The official definition of the Dylan language and standard library. +

Learning Dylan

-`Dylan Programming -`_ - - A good Dylan tutorial by several Harlequin employees. - -Guides -====== +
+

Just getting started with Open Dylan? We recommend that + you read the Introduction to Dylan + to get a feel for the language. After that, you can broaden + your knowledge with the Dylan Programming + book.

+
`An Introduction to Dylan `_ [`pdf `__] @@ -32,9 +30,14 @@ Guides experience in C++ or another object-oriented static language. It provides a gentler introduction to Dylan than does the DRM. -`Dylan Cheat Sheet `_ +`Dylan Programming `_ - A cheat sheet to get you started with the basics of Dylan syntax. + A good, book length Dylan tutorial by several Harlequin employees. + +`Dylan Style Guide `_ +[`pdf `__] + + Notes and thoughts on how to format your Dylan code. `Getting Started with Open Dylan `_ [`pdf `__] @@ -42,11 +45,6 @@ Guides Describes Open Dylan's interactive development environment. -`Dylan Style Guide `_ -[`pdf `__] - - Notes and thoughts on how to format your Dylan code. - `Building Applications Using DUIM `_ [`pdf `__] [`old HTML `__] @@ -54,19 +52,49 @@ Guides Describes how to use DUIM (Dylan User Interface Manager), the portable window programming toolkit. -`Open Dylan Hacker's Guide `_ -[`pdf `__] +.. raw:: html - A work in progress to help out people who are hacking on Open Dylan itself. +
+

Cheat Sheets

+ +
+

Quick one-page sheets for common tasks.

+
+ +`Dylan Cheat Sheet `_ + + A cheat sheet to get you started with the basics of Dylan syntax. -Publications -============ +.. raw:: html -`See publications page `_ +
+

Articles

+
+

Featured articles and blog postings.

+
-References -========== +

Tools

+ +* `Development inside emacs using SLIME <../news/2011/12/12/dswank.html>`_ + +.. raw:: html + +
+
+ +

References

+ +
+

These are some lengthier reference materials. While they + make for dry reading, they're full of invaluable information!

+
+ +`Dylan Reference Manual +`_ (`Errata +`_) + + The official definition of the Dylan language and standard library. `Common Dylan library reference `_ [`pdf `__] @@ -101,8 +129,39 @@ References with C programs, and several libraries providing a low-level interface to the Microsoft Win32 API. -Old, Out of Date Documentation -============================== +.. raw:: html + +
+

Open Dylan Developers

+ +
+

Notes and materials useful to those working on + Open Dylan itself or have an interest in the low + level details.

+
+ +`Open Dylan Hacker's Guide `_ +[`pdf `__] + + A work in progress to help out people who are hacking on Open Dylan itself. + +.. raw:: html + +
+

Publications

+ +`See our publications page `_. + +.. raw:: html + +
+

Archived Documentation

+ +
+

This is old documentation that we don't plan to + bring forward. Let us know if there's interest in this + material.

+
`Developing Component Software with CORBA `_ @@ -115,3 +174,8 @@ Old, Out of Date Documentation Describes high and low level interfaces to COM, OLE, and ActiveX component technology, and generic DBMS support, through SQL with an ODBC backend. + +.. raw:: html + +
+
, ?rest); } + + table-contents: + { } => { } + { ?key:expression => ?value:expression, ... } + => { ht[?key] := ?value; ... } + end macro table + +.. [orig] *Original code* + + .. code-block:: dylan + + let lights = table(, "red" => "stop", "green" => "go"); + +.. [frag] *Call fragment* + + .. code-block:: dylan + + table(, "red" => "stop", "green" => "go") + +.. [exp] *Expansion* + + .. code-block:: dylan + + let ht = make(); ht["red"] := "stop"; ht["green"] := "go"; ht; + +.. [new] *Replacement code* + + .. code-block:: dylan + + let lights = begin + let ht = make(); + ht["red"] := "stop"; ht["green"] := "go"; + ht; + end; diff --git a/documentation/website/source/articles/macro-system/faq-tips.rst b/documentation/website/source/articles/macro-system/faq-tips.rst new file mode 100644 index 0000000000..3ac48ec159 --- /dev/null +++ b/documentation/website/source/articles/macro-system/faq-tips.rst @@ -0,0 +1,123 @@ +.. default-role:: samp +.. highlight:: none +.. _faq-tips: + + +************ +FAQ and Tips +************ + + +General advice and troubleshooting +================================== + +- The best way to design a macro is: + 1. Come up with the best non-macro interface you can. + 2. Design the syntax of the macro call up front. + 3. Implement thah design. +- Gwydion Dylan sometimes has issues with trailing semi-colons or commas. In + general, don't include a separator at the end of a template. +- In both Gwydion Dylan and Open Dylan, the variable declaration for a variable + used in the lexical scope of a macro needs to be in that macro. The variable + cannot be declared in an auxiliary macro and exposed to the macro through the + `?=` mechanism. However, the variable can be declared in an auxiliary rule of + the macro. +- Ensure you haven't accidently given a pattern variable the same name as an + auxiliary rule set. + + +How can I combine multiple names into one? +========================================== + +This template will not work:: + + { define ?name-1 ## "-" ## ?name-2 ## "-function" () } + +What you want is easily done for the `?"{name}"` substitution form by taking +advantage of adjacent string concatenation:: + + { format-out(?"name-1" "-" ?"name-2" "-function") } + +But this will not work for the `?{name}` or `?#"{name}"` substitution forms. For +those, you have to use an auxiliary macro to construct a name. + + +How can I do macros that follow a BNF-like syntax? +================================================== + +Macros are designed to follow Dylan language conventions, so you may not be able +to support arbitrary BNF-based syntax. But here are some tricks to help with +common BNF forms. + +`{x}?` + An optional item can be handled by a wildcard pattern variable using an + auxiliary rule with two patterns:: + + x-opt: + { x } + { } + +`{x}? {y}? {z}?` + If there are several space-separated optional items, put them all in the + same auxiliary rule, since the upper rule can't have adjacent wildcard + pattern variables that call out to an individual auxiliary rule for each + item:: + + x-y-z-opts: + { x ... } + { y ... } + { z ... } + { } + +`{x}? | {x}(, {x})*` + This is a list that may have 0–*n* items. Handle this by calling out to an + auxiliary rule that calls itself recursively like so:: + + x-list: + { ?x:*, ?x-list:* } + { } + + Note that the calling rule needs to use a wildcard pattern variable to + collect the comma'd items for the `x-list:` rule set; this pattern + variable needs to be well-separated from the syntax that follows it by a + semicolon or intermediate word. + +`{x}(, {x})*` + This is a list that may have 1–*n* items. You simply cannot do this in the + general case; your best bet is design your macro to handle 0 items + gracefully and then use a 0-*n* list. + + The following does not work because `?{x}:*` allows an empty code + fragment, which allows 0 items:: + + x-list: + // Doesn't work + { ?x:*, ?x-list:* } + { ?x:* } + + Of course, if you can put a constraint on `?x`, it will work fine, but + remember that a secondary rule can't be used to provide a constraint in a + primary rule. + + +I can't make a bare list! +========================= + +A macro that makes a bare list can't do anything useful. For example, this will +not compile:: + + define macro setter-names + { setter-names(?names) } => { ?names } + names: + { ?:name, ... } => { ?name ## "-setter", ... } + end macro; + + vector(setter-names(alpha, beta, gamma, delta)) + +It does not compile because the expansion of `setter-names` is wrapped in a +begin…end:: + + vector(begin alpha-setter, beta-setter, gamma-setter, delta-setter end) + +This is invalid syntax. You need to do something with the list in the macro +itself. diff --git a/documentation/website/source/articles/macro-system/hygiene.rst b/documentation/website/source/articles/macro-system/hygiene.rst new file mode 100644 index 0000000000..987013889b --- /dev/null +++ b/documentation/website/source/articles/macro-system/hygiene.rst @@ -0,0 +1,127 @@ +.. default-role:: samp +.. highlight:: dylan +.. _hygiene: + + +******* +Hygiene +******* + +Let us say we have two macros A and B. The expansion of A calls B. The following +diagram shows the sources or lexical scopes of a binding used in the expansion +of A and B. + +.. code-block:: none + + +--------------------------------+ +-------------------------------------+ + | [1] Module or local scope of | | [4] Module containing definition of | + | the call to macro A | | macro A | + | | | | + | +--------------------------+ | +-------------------------------------+ + | | [2] Expansion of A | | + | | | | +-------------------------------------+ + | | +--------------------+ | | | [5] Module containing definition of | + | | | [3] Expansion of B | | | | macro B | + | | | | | | | | + | | +--------------------+ | | +-------------------------------------+ + | | | | + | +--------------------------+ | + | | + +--------------------------------+ + +Macro expansions are hygienic, meaning: + +- Bindings from boxes 2 or 4 are visible in box 2. +- Bindings from boxes 3 or 5 are visible in box 3. +- A binding from box 1 is not visible in box 2, but can be wrapped in a pattern + variable and manipulated in box 2. +- A binding from box 2 is not visible in box 3, but can be wrapped in a pattern + variable and manipulated in box 3. +- A binding from box 1 is not visible in box 3, but if box 2 wraps the binding + in a pattern variable and uses that pattern variable in the call of macro B, + and macro B wraps that pattern variable in a pattern variable of its own, then + box 3 can manipulate the binding via its pattern variable. + +New bindings created by `define` statements are not hygienic. Definition +processing occurs after all macros have been expanded. A class defined in box 3 +can be used in boxes 2 and 1 and exported from the module of box 1. If there is +another definition by that name in the other boxes, it is a duplicate definition +and an error is reported. + + +Breaking hygiene +================ + +A template can prefix a binding with `?=`. This makes the binding come from +and be visible in the macro's caller. This can be illustrated by an example from +`Dylan Programming`:title:. + +Say macro A is defined in box 4 as [rep]_. Code in box 1 can call the macro as +follows: + +.. code-block:: dylan + + let i = 0; + repeat + if (i == 100) stop!() end; + i := i + 1; + end + +The `?=stop!` substitution in line 3 of the macro expands (in box 2) to a +binding visible in boxes 1 and 2. In box 1, the binding is visible as `stop!`. +In box 2 (the expansion itself), the binding is visible as `?=stop!` and if it +were a function, the macro template could contain code fragments like this: + +.. code-block:: dylan + + ?=stop!(arg-1, arg-2) + +Note that a macro expansion cannot create a new binding visible outside of the +macro call in box 1. For example, given a macro like [dofoo]_, one might expect +the macro call [dofoo-call]_ would print "Hello" twice, but it will not work. +Because every macro expansion is implicitly surrounded by begin…end as described +in `background-overview`:ref:, the example expands into [dofoo-exp]_. After the +macro call, `foo` is no longer in scope. + +---------- + +.. [rep] *Repeat macro* + + .. code-block:: dylan + :linenos: + :emphasize-lines: 3 + + define macro repeat + { repeat ?:body end } + => { block (?=stop!) + local method again() ?body; again(); end; + again(); + end } + end macro + +.. [dofoo] *Do-then-foo macro* + + .. code-block:: dylan + :linenos: + + define macro do-then-foo + { do-then-foo(?:expression) ?:body end } + => { let ?=foo = ?expression; ?body } + end macro + +.. [dofoo-call] *Calling do-then-foo* + + .. code-block:: dylan + + do-then-foo("Hello\n") format-out(foo) end; + format-out(foo) + +.. [dofoo-exp] *Expansion of do-then-foo* + + .. code-block:: dylan + + begin + let foo = "Hello\n"; + format-out(foo) + end; + format-out(foo) diff --git a/documentation/website/source/articles/macro-system/index.rst b/documentation/website/source/articles/macro-system/index.rst new file mode 100644 index 0000000000..221d7f891c --- /dev/null +++ b/documentation/website/source/articles/macro-system/index.rst @@ -0,0 +1,26 @@ +###################### +The Dylan Macro System +###################### + +Dylan macros simplify boilerplate code and provide syntactic shorthand. They are +useful in small jobs within a particular file (e.g. making a series of +repetitive declarations) and for larger jobs (e.g. constructing a GUI through +creating and associating objects). Easy jobs are easy to do with macros, but the +complicated jobs get hard fast. + +This document describes how the Dylan macro system works and some techniques you +can use when writing your own macros. I gloss over some of the implementation +details and present this information more informally than the `Dylan +Reference Manual`:title: does. + +.. toctree:: + :maxdepth: 2 + + background-overview + macro-types + patterns + pattern-variables + substitutions + auxiliary-rules + hygiene + faq-tips diff --git a/documentation/website/source/articles/macro-system/macro-types.rst b/documentation/website/source/articles/macro-system/macro-types.rst new file mode 100644 index 0000000000..f471da0a19 --- /dev/null +++ b/documentation/website/source/articles/macro-system/macro-types.rst @@ -0,0 +1,138 @@ +.. default-role:: samp +.. highlight:: none +.. _macro-types: + + +*********** +Macro Types +*********** + +There are four types of macro. + +`Body-style definition macro`:dfn: + This kind of macro lets you create `define x … end` syntax. This is the + most popular kind of macro. This type of macro can only be used at the top + level of source code. + +`List-style definition macro`:dfn: + This kind of macro lets you create `define x …` syntax, such as `define + variable $pi`. + +`Statement macro`:dfn: + This kind of macro lets you create `do-something … end` syntax. Use this + kind of syntax to simplify blocks or to create new kinds of loops. It is + most commonly used to simplify resource management. + +`Function macro`:dfn: + This kind of macro lets you create `x(…)` syntax. Use this instead of a + function call if the syntax you want in the parentheses is more + complicated than a normal function call, or if there is additional setup + needed around a normal function call. + + +Main rules +========== + +The pattern of each main rule of a macro (and thus the way the macro is called) +must follow a specific syntactic style depending on the type of macro. + +When the Dylan compiler sees a macro call, it first finds the end of the call, +then expands the macro, then recursively expands any macro calls in the +expansion. The compiler is able to recognize inner macro calls along the way, +but if a code fragment *looks* like the end of a macro and is not part of an +inner macro call, the parser will assume that that code fragment *is* the end of +the macro. + + +Body-style definition macro +--------------------------- + +The main rules' patterns must follow this syntax, with optional parts in +brackets:: + + { define [MODIFIERS] DISTINGUISHING-WORD [NAME] + [BODY-PATTERNS] [;] + end } + +`{MODIFIERS}` + One or more words or pattern variables. + +`{NAME}` + A name or a pattern variable with a name constraint. + +`{BODY-PATTERNS}` + One or more sets of code fragments and pattern variables separated by + semicolons and/or commas. + +The parser will end the macro call at the first matching `end`. The final `end` +in each main rule is the only `end` that the macro's patterns can have. + +As a special case, the final `end` matches these code fragments:: + + end + end DISTINGUISHING-WORD + end DISTINGUISHING-WORD NAME + + +List-style definition macro +--------------------------- + +The main rules' patterns must follow this syntax, with optional parts in +brackets:: + + { define [MODIFIERS] DISTINGUISHING-WORD [LIST-PATTERNS] } + +`{MODIFIERS}` + One or more words or pattern variables. + +`{LIST-PATTERNS}` + One or more sets of code fragments and pattern variables separated by + commas. + +The parser will end the macro call at the first matching `;` or the end of the +enclosing source code. None of the macro's patterns can have a semicolon, and it +is probably better to avoid `?:body` or `?:case-body` pattern variables. + + +Statement macro +--------------- + +The main rules' patterns must follow this syntax, with optional parts in +brackets:: + + { DISTINGUISHING-WORD [`{BODY-PATTERNS}`] [;] end } + +`{BODY-PATTERNS}` + One or more sets of code fragments and pattern variables separated by + semicolons and/or commas. + +The parser will end the macro call at the first matching `end`. The final `end` +in each main rule is the only `end` that the macro's patterns can have. + +As a special case, the final `end` matches these code fragments:: + + end + end DISTINGUISHING-WORD + + +Function macro +-------------- + +The main rules' patterns must follow this syntax, with optional parts in +brackets:: + + { DISTINGUISHING-WORD ( [BODY-PATTERNS] ) } + +`{BODY-PATTERNS}` + One or more sets of code fragments and pattern variables separated by + semicolons and/or commas. + +The parser will end the macro call when it sees the closing parenthesis. Other +patterns in the macro can also include parentheses, so long as they are matched; +the parser understands nested parentheses. + +As a special case, function macros can be called using operator, slot access, or +element access syntax. The function macro has to accept expressions for its +`{BODY-PATTERN}` arguments like a normal function call in order to be used with +these syntaxes. + diff --git a/documentation/website/source/articles/macro-system/pattern-variables.rst b/documentation/website/source/articles/macro-system/pattern-variables.rst new file mode 100644 index 0000000000..15cd4afc1c --- /dev/null +++ b/documentation/website/source/articles/macro-system/pattern-variables.rst @@ -0,0 +1,296 @@ +.. default-role:: samp +.. highlight:: none +.. _pattern-variables: + + +***************** +Pattern Variables +***************** + +A macro pattern variables pulls out and transforms part of a code fragment. This +partial code fragment is then substituted into the macro's expansion. The +substitution can be altered in some ways, or intercepted and more extensively +transformed using auxiliary rules. + +Every pattern variable has a name and a `constraint`:dfn:. The constraint forces +the pattern variable to only match certain code fragments. If the pattern +variable cannot match, the pattern containing the variable will not match. +Unless the pattern variable has the wildcard (or `*`) constraint, it can only +match a code fragment that is part of the core language or a macro call; a +pattern variable cannot match a code fragment that is only legal with respect to +a given inner macro. An example of this is given in the discussion of the +`?:body` constraint below. + +The scope of a pattern variable is the rule that uses it. Other rules or +auxiliary rule sets cannot use the pattern variable. + +What follows is a categorized list of pattern variable syntaxes. + + +Simple pattern variables +======================== + +`?{name}:{constraint}` + This is the basic pattern variable. + +`?:{constraint}` + This is a pattern variable where its constraint is also its name. For + example, `?:expression` is equivalent to `?expression:expression`, + that is, a pattern variable named `expression` with a constraint of + `expression.` + +`?{name}:name` + This matches a name. + +`?{name}:token` + This matches a name, operator, or simple literal such as a string, character, + or number. It does not match vector literals or function calls. + +`?{name}:expression` + This matches any expression, including vector literals, function calls, + and begin…end blocks. + +`?{name}:variable` + This matches a variable name and optional specialization, for example, + `color` or `color :: `. + +`?{name}:name :: ?{specialization}:expression` + This matches a variable name and optional specialization, like + `?:variable`, but lets you get each part. If the code fragment just + has the name part, the substitution for `?{specialization}` will be + ``. Note that `?{specialization}` will not match every expression. It + will only match an expression that happens to be a type specialization. + + +.. _proplist-variables: + +Property list pattern variables +=============================== + +`#rest ?{name}:{constraint}` + This matches a property list where every value part meets the + constraint. If the constraint is `*`, any value part will match. The + substitution for `?{name}` is the entire property list code fragment, + including both the name and value parts of each property. + +`#key ?{prop-1}:{constraint}, ?{prop-2}:{constraint}` + This matches a property list that only includes the `{prop-1}:` and + `{prop-2}:` properties. If the property list includes any other + property such as `alpha:` or if either `{prop-1}:` or + `{prop-2}:` are missing, this pattern variable will not match. + Additionally, the properties' value parts have to meet the constraint. + If the constraint is `*`, any value part will match. + + The substitution for `?{prop-1}` is the value part of the `{prop-1}:` + property. + +`#key ??{prop-1}:{constraint}, ??{prop-2}:{constraint}` + This matches a property list that has several properties with a symbol + part of `{prop-1}:` or `{prop-2}:`. The substitution for + `??{prop-1}` is several code fragments, each being the value part of a + `{prop-1}:` property. The substitution may use a separator between each + code fragment as described in the `substitutions`:ref: section. + + For example, consider this pattern:: + + { #key ??my-key:name } + + It will match the following code fragment:: + + my-key: alpha, my-key: beta + + The substitution will be the following code fragment:: + + alpha beta + + If the property list did not include a `my-key:` property, the + substitution for `??my-key` would have been empty. + +`#key ?{prop}:{constraint}, #all-keys` + This matches a property list that contains `{prop}:`, but also matches + if the property list contains other properties in addition to + `{prop}:`. + + For example, consider this code fragment:: + + my-key: alpha, another-key: beta + + This pattern would not match it:: + + { #key ?my-key:name } + + However, this pattern would:: + + { #key ?my-key:name, #all-keys } + +`#key ?{prop}:{constraint} = {default-value}` + This matches a property list that contains `{prop}:`, but also matches + a property list that is missing that property. If the property is + missing, the substitution will be the default value given. + + The default value is not evaluated during macro expansion. Instead, it + is simply treated as a code fragment and substituted for `?{prop}` in + the template. The default value code fragment does not have to abide by + the pattern variable's constraint. For example, the following pattern is + valid even though `#f` is not a name:: + + { #key ?name:name = #f } + +`#key ??{prop}:{constraint} = {default-value}` + This matches a property list containing zero or more `{prop}:` + properties. If `{prop}:` properties are present, the substitution for + `??{prop}` will be a sequence of value parts as it is for the `#key + ??{prop}:{constraint}` pattern. However, if the property list does not + have any `{prop}:` properties, the substitution will be a sequence of + only one code fragment — the default value code fragment. + +`#rest {…}, #key {…}` + With these two syntaxes are combined, both match separately against the + same property list. + + +Body and macro pattern variables +================================ + +`?{name}:body` + This matches a series of semicolon-separated statement and expressions. + If the code fragment does not have any statements or expressions, the + substitution will be `#f`. The substitution will wrap the code + fragment in `begin` and `end` to make an expression. + + A `?:body` pattern variable matches statements and expressions in a + code fragment until it reaches some word, called an `intermediate word`. + You must ensure that all your `?:body` pattern variables are either + followed by a word, or followed by a pattern variable referring to an + auxiliary rule set whose rules all start with a word. Those word will + become the intermediate words that tells the parser to stop matching the + pattern variable. + + In this example, the `?:body` variable matches all code fragments up to + `endif`:: + + { if (?:expression) ?:body endif } + + In this example with auxiliary rules, the `?:body` variable matches + all code fragments up to `endif` or `else`:: + + { if (?:expression) ?:body ?else-or-end } + else-or-end: + { endif } + { else ?:body endif } + + In this example, the macro will not work because the `?:body` variable + is not necessarily followed by a word:: + + { when (?:expression) ?:body } + + A `?:body` pattern variable matches semicolons. It cannot be used in a + series of comma- or semicolon-separated sub-patterns, and cannot itself + be followed by a comma or semicolon in the pattern. The following will + not work:: + + { if (?:expression) ?:body; ?else-or-end } + + A `?:body` pattern variable does not match things that are not + statements or expressions. For example, the following pattern is + designed to be used with the above `if` macro:: + + { if-into (?:expression) ?:body => ?:name } => { let ?name = if (?expression) ?body } + + You might expect that you can use this macro on the following code:: + + if-into (x = #f) format-out("false") else x + 1 endif => x + + However, the `?:body` variable will not match the words `else` or + `endif` because they are not part of the core Dylan language. They are + not statements or expressions. Those words are actually an extension to + the language allowed by the `if` macro, but the `if` macro will never + see them because the `?:body` variable does not match or pass them on + to the `if` macro. To match arbitrary fragments for the `if` macro, the + `if-into` macro must use the wildcard `*` constraint instead. + +`?{name}:case-body` + This matches a list of cases separated by semicolons, where each case + consists of: a list of expressions, an arrow, and a body. For example, + this pattern variable would match the following:: + + "red" => "stop"; + "green", "blue" => "go"; + otherwise => error("I don't know what this means.") + + Since a case includes a body, a `?:case-body` pattern variable must be + followed with an intermediate word just like a `?:body` pattern + variable and cannot be followed by a comma or semicolon. + +`?{name}:macro` + This matches any macro call. This includes calls to definition macros, + which normally only appear at the top level source code. The + substitution will be the expanded macro, without the begin…end block + that normally surrounds macro expansions. + + While you can use the `?:expression` and `?:body` pattern variable + constraints to match function and statement macro calls, but they cannot + match definition macro calls, and their substitutions will include the + begin…end wrapper. + + +Wildcard pattern variables +========================== + +`?{name}:*` + Wildcard pattern variables match as many code fragments as can be + matched before the next comma, semicolon, or other pattern fragment in + the pattern. For example, consider the following pattern:: + + { ?many-things:* ?:name } + + `?many-things` will match everything up to but not including a name. + The substitution for `?many-things` will be everything except that + name name. If the code fragment only has a name, the substitution will + be empty. + + There can only be one wildcard pattern variable in a sub-pattern. Each + must be separated from other wildcard variables by a semicolon or comma. + For example, this is not a legal pattern:: + + { ?first:* ?second:* } + + However, this is:: + + { ?first:*, ?second:* } + + As a special case, main rules of definition macros can have wildcards in + both the `{MODIFIERS}` part and the `{LIST-PATTERN}` or `{BODY-PATTERN}` + part without an intervening comma or semicolon. This allows patterns + like the following that would normally not match:: + + { define ?modifiers:* collection ?:name ?contents:* end } + + Finally, consider this pattern:: + + { ?first:*, ?second:* } + + As described in `patterns`:ref:, it will match any of the following:: + + alpha, beta + alpha, beta, gamma + alpha, + alpha + + In all cases, the wildcard constraint on `?first` will match up to the + first comma in the code fragment. `?first` will contain `alpha`. + `?second` will contain nothing, `beta`, or `beta, gamma`. + + +Auxiliary rule set pattern variables +==================================== + +`?my-aux-rules` + This syntax can only be used when there is an auxiliary rule set named + the same as the pattern variable. It is equivalent to + `?my-aux-rule:*`. See `auxiliary-rules`:ref:. + +`...` + This syntax can only be used within an auxiliary rule set. If the rule + set is named `my-aux-rules`, `...` is equivalent to `?my-aux-rules:*`. + \ No newline at end of file diff --git a/documentation/website/source/articles/macro-system/patterns.rst b/documentation/website/source/articles/macro-system/patterns.rst new file mode 100644 index 0000000000..7387c4173b --- /dev/null +++ b/documentation/website/source/articles/macro-system/patterns.rst @@ -0,0 +1,165 @@ +.. default-role:: samp +.. highlight:: none +.. _patterns: + + +******** +Patterns +******** + +Pattern matching follows these basic rules: + +- Pattern-matching starts and ends with the main rule set. +- Patterns in a rule set are tried in order. If a pattern does not match the + code fragment, the next pattern is tried, and so on. If none of the patterns + in a rule set match, macro expansion fails. +- When determining whether a pattern matches a code fragment, the compiler will + not consider auxiliary rules. Any pattern variable corresponding to an + auxiliary rule matches like any other pattern variable with the same + constraint. +- If no patterns in an auxiliary rule set match, macro expansion fails. The + compiler does not backtrack and try a different earlier rule. + + +Subdivisions +============ + +A main rule pattern has elements like `define` and `end` as described in +`macro-types`:ref:, but in general, a pattern is a list of fragments or +pattern variables separated at the highest level by semicolons, then by commas. +That is, a pattern has this syntax:: + + FRAGMENTS, FRAGMENTS, …; FRAGMENTS, FRAGMENTS, …; … + +The parser matches each semicolon-separated sub-pattern individually, and only +then matches the comma-separated sub-patterns within. This can have surprising +side effects in combination with recursive auxiliary rules. + +A pattern can include a trailing comma or semicolon, but this is strictly +decorative. The pattern will match a trailing separator in the code fragment +whether or not the pattern contains a trailing separator. Keep this in mind. The +following patterns are equivalent:: + + { ?:name } + { ?:name; } + { ?:name, } + +Any of them will match any of these code fragments:: + + alpha + alpha, + alpha; + alpha,; + +You can use parentheses, curly brackets ("{…}"), and square brackets to nest +comma- or semicolon-separated patterns inside of other patterns, as in this +example:: + + { ?name:name, { ?true-expr:expression; ?false-expr:expression }, ?final:name } + +Such a pattern will only match a code fragment with matching bracket characters. +The above pattern will match [#]_ but not [#]_. + +---------- + +.. [#] + + .. code-block:: none + + alpha, {#t; #f;}, beta + +.. [#] + + .. code-block:: none + + alpha, (#t; #f;), beta + +---------- + + +.. _final-items: + +Final items +=========== + +A pattern with at least two list items treats the last item specially. For +example, the pattern [list1]_ will match any of the code fragments of [frags]_ +and set the pattern variables as follows: + +======== ======= ======= ======================= +Fragment ?item-1 ?item-2 ?item-3 +======== ======= ======= ======================= +Line 1 `alpha` `beta` `gamma` +Line 2 `alpha` `beta` +Line 3 `alpha` `beta` `gamma, delta, epsilon` +======== ======= ======= ======================= + +This special behavior is usually only relevant when the last item in the list is +a wildcard pattern variable (see `pattern-variables`:ref:). If the pattern were +[list2]_ instead, the only matching code fragment would be line 1, because +neither an empty fragment (from line 2) nor `gamma, delta, epsilon` (from line +3) match the `name` constraint of `?item-3`. + +---------- + +.. [list1] *Pattern ending in wildcard* + + .. code-block:: none + + { ?item-1:*, ?item-2:*, ?item-3:* } + +.. [list2] *Pattern ending in name* + + .. code-block:: none + + { ?item-1:*, ?item-2:*, ?item-3:name } + +.. [frags] *Code fragments* + + .. code-block:: none + :linenos: + + alpha, beta, gamma + alpha, beta + alpha, beta, gamma, delta, epsilon + +---------- + + +Property lists +============== + +The end of a comma-separated list of pattern fragments can include `#rest`, +`#key`, and `#all-keys`, as in this example:: + + { …, #rest ?keys:token, #key ?alpha:token, ?beta:token, #all-keys } + +If you write a pattern that contains `#all-keys`, you must also include `#key`. +There are several variations on this syntax; they are described in +`pattern-variables`:ref:. + +`#rest`, `#key`, and `#all-keys` must be the only pattern fragments in their +comma-separated sub-pattern, and that sub-pattern must be the last of several +comma-separated sub-patterns. Here are some examples of when it is or is not +valid to use this syntax in a pattern:: + + /* valid */ { #key ?alpha:token } + /* invalid */ { ?alpha:token #key ?beta:token } + /* valid */ { ?anything:*, #key ?alpha:token, #all-keys } + /* invalid */ { #key ?alpha:token, #all-keys, ?anything:* } + /* valid */ { #key ?alpha:token, #all-keys; ?anything:* } + /* invalid */ { #key ?alpha:token, #key ?beta-token } + /* valid */ { #key ?alpha:token; #key ?beta-token } + +This syntax is not used to match a code fragment that contains corresponding +literal `#rest`, `#key`, and `#all-keys` fragments. Instead, this syntax +matches a code fragment consisting of keyword/value pairs, called a `property +list`:dfn:. An example of a property list is:: + + alpha: "a", beta: "b" + +In this code fragment, `alpha:` and `beta:` are the symbol parts of the +property list and `"a"` and `"b"` are the value parts. + +If you want to match literal `#rest`, `#key`, or `#all-keys` fragments, escape +them in the pattern like `\#rest`, `\#key`, or `\#all-keys`. diff --git a/documentation/website/source/articles/macro-system/substitutions.rst b/documentation/website/source/articles/macro-system/substitutions.rst new file mode 100644 index 0000000000..1cb4a308e4 --- /dev/null +++ b/documentation/website/source/articles/macro-system/substitutions.rst @@ -0,0 +1,152 @@ +.. default-role:: samp +.. highlight:: none +.. _substitutions: + + +************* +Substitutions +************* + +Pattern variables contain code fragments, which can be inserted into the macro +expansion via a substitution. A substitution looks much like a pattern variable, +but it are on the template side of the rule and has different syntax forms. + +A template can only use pattern variables from its corresponding pattern. It +cannot use pattern variables from other rules' patterns. + +As a special case, if the template has a separator followed by any of the +substitution forms below, and the substituted code fragment is empty, the +preceding separator is removed. For example, consider this template:: + + { ?alpha, ?beta } + +If `?alpha` contains `a` and `?beta` is empty, the expansion will not be +[exp1]_, but will instead be [exp2]_. This special case applies with any of the +separators [seps]_ in place of the comma. + +---------- + +.. [exp1] *Expansion 1* + + .. code-block:: none + + a, + +.. [exp2] *Expansion 2* + + .. code-block:: none + + a + +.. [seps] *Separators* + + .. code-block:: none + + , ; + - * / ^ = == ~= ~== < <= > >= & | := + +---------- + + +Simple substitutions +==================== + +`?{name}` + This is the basic substitution. The pattern variable's code fragment is + inserted into the expansion according to the syntax used in the pattern, + as described in `pattern-variables`:ref:. + + +Conversion substitutions +======================== + +`?#"{name}"` + The pattern variable's code fragment, which must be a simple name, is + turned into a symbol and inserted into the expansion. + +`?"{name}"` + The pattern variable's code fragment, which must be a simple name, is + turned into a string and inserted into the expansion. + + +Concatenation substitutions +=========================== + +`"{prefix}" ## ?{name} ## "{suffix}"` + The prefix and suffix are added to the pattern variable's code fragment, + which must be a simple name. The result is inserted into the expansion. + Either the prefix or the suffix may be omitted. + + For example, consider a pattern variable, `?name-part`, that contains + the following code fragment:: + + alpha + + The pattern variable is used by the following template:: + + { ?name-part ## "-function" } + + The expansion will be the following code fragment:: + + alpha-function + +`"{prefix}" ## ?"{name}" ## "{suffix}"` + As above, but results in a string. In the above example, the resulting + code fragment would be the following:: + + "alpha-function" + +`"{prefix}" ## ?#"{name}" ## "{suffix}"` + As above, but results in a symbol. + + +List substitutions +================== + +`??{name} ...` + Used with a `??`-style pattern variable to make a list. Consider a + pattern variable, `??name-parts`, that contains the following code + fragments:: + + alpha beta gamma + + The pattern variable is referenced by the following template and + substitution:: + + { ??name-parts ... } + + The expansion will be the following code fragment:: + + alpha beta gamma + +`??{name}, ...` + As above, but the expansion would be the following:: + + alpha,beta,gamma + + Consider if `??name-parts` contained the following code fragment:: + + alpha + + The expansion would be the following, without any commas:: + + alpha + + Any of the separators [seps]_ may be used in place of a comma in the + tempate. + + +Auxiliary rule set substitution +=============================== + +`...` + This syntax can only be used within an auxiliary rule set. If the rule + set is named `my-aux-rules`, this syntax is equivalent to + `?my-aux-rules`. + + +Unhygienic reference +==================== + +`?={binding}` + This is not a substitution, but a way to refer to a binding in the + macro's caller. See `hygiene`:ref:. From 495b6088d0c654fe1fed1788df0ada257ba0cf5e Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sat, 17 Dec 2011 23:27:08 -0500 Subject: [PATCH 091/519] Common Dylan libary reference -> Core library reference. Grammar changes. --- .../website/source/documentation/index.rst | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index 876a20aafc..7fd6077f8a 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -27,8 +27,9 @@ Documentation [`pdf `__] This tutorial is written primarily for those with solid programming - experience in C++ or another object-oriented static language. It - provides a gentler introduction to Dylan than does the DRM. + experience in C++ or another object-oriented, static language. It + provides a gentler introduction to Dylan than does the Dylan Reference + Manual (DRM). `Dylan Programming `_ @@ -102,13 +103,13 @@ Documentation The official definition of the Dylan language and standard library. -`Common Dylan library reference `_ +`Core library reference `_ [`pdf `__] [`old HTML `__] Describes the Open Dylan implementation of the Dylan language, a - common set of Dylan libraries, and a library interchange mechanism. - The common libraries provide many language extensions, a threads + core set of Dylan libraries, and a library interchange mechanism. + The core libraries provide many language extensions, a threads interface, and object finalization. `System and I/O library reference `_ @@ -138,11 +139,11 @@ Documentation .. raw:: html
-

Open Dylan Developers

+

For Open Dylan Developers

Notes and materials useful to those working on - Open Dylan itself or have an interest in the low + Open Dylan itself or those who have an interest in the low level details.

From b866caf21803e8a90a423705622c6f899e945485 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Thu, 22 Dec 2011 10:58:40 -0500 Subject: [PATCH 092/519] Change SLIME to DIME --- .../website/source/news/2011/12/12/dswank.rst | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/documentation/website/source/news/2011/12/12/dswank.rst b/documentation/website/source/news/2011/12/12/dswank.rst index d1029844c9..7ee83c1c93 100644 --- a/documentation/website/source/news/2011/12/12/dswank.rst +++ b/documentation/website/source/news/2011/12/12/dswank.rst @@ -1,10 +1,10 @@ :Author: Hannes Mehnert :Date: 2011-12-12 23:30:00 -Development inside of Emacs using SLIME -======================================= +Development inside of Emacs using DIME +====================================== -We have implemented a Dylan backend for SLIME using the Open Dylan +We have implemented a Dylan backend for DIME using the Open Dylan environment-protocols API to ease development of Dylan code on UNIX. At present, cross references, locating definitions, retrieving argument lists, compiling, warning reports and a class browser are @@ -17,21 +17,21 @@ implemented.
-When successfully installed, just run ``M-x slime`` to get a shell. +When successfully installed, just run ``M-x dime`` to get a shell. This is the same as the dylan-compiler shell, you can also use the same commands. When you program and hit ``(`` or ``,`` or ``(space)``, you get the argument list of the method you are calling. -``M-x slime-dylan-browse-superclasses`` will show the superclass hierarchy -of the current class. ``M-x slime-dylan-browse-subclasses`` displays the +``M-x dime-dylan-browse-superclasses`` will show the superclass hierarchy +of the current class. ``M-x dime-dylan-browse-subclasses`` displays the subclass hierarchy. +-------------------+------------------------------------------+ | Keyboard shortcut | Effect | +===================+==========================================+ -|M-x slime |start slime | +|M-x dime |start dime | +-------------------+------------------------------------------+ | , change-package | select project (in the repl buffer) | +-------------------+------------------------------------------+ @@ -53,12 +53,12 @@ subclass hierarchy. Dswank uses the Open Dylan project registry, so make sure ``OPEN_DYLAN_USER_REGISTRIES`` is set properly before starting Emacs. +DIME is a fork of SLIME. Installation ============ You need the following pieces: - * `SLIME `_ - since the CVS is a moving target, this is a safe version to use (February 2011 snapshot) * `dylan-mode `_, and extend your ``~/.emacs`` as documented in README) * dswank itself is shipped with the 2011.1 release From 163c64668515f56a49ff345523547189fbe7baec Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Thu, 22 Dec 2011 11:36:03 -0500 Subject: [PATCH 093/519] More SLIME -> DIME --- documentation/website/source/documentation/index.rst | 4 ++-- documentation/website/source/news/recent.rst.inc | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index 7fd6077f8a..e302c3e7a7 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -81,9 +81,9 @@ Documentation

Tools

-`Development inside emacs using SLIME <../news/2011/12/12/dswank.html>`_ +`Development inside emacs using DIME <../news/2011/12/12/dswank.html>`_ - An exciting look at using SLIME and emacs for Dylan development. + An exciting look at using DIME and emacs for Dylan development. .. raw:: html diff --git a/documentation/website/source/news/recent.rst.inc b/documentation/website/source/news/recent.rst.inc index b04b8c16a7..fb1b5ba5b8 100644 --- a/documentation/website/source/news/recent.rst.inc +++ b/documentation/website/source/news/recent.rst.inc @@ -1,9 +1,9 @@ -**Dswank - a SLIME back-end** +**Dswank - emacs and SLIME** *2011-12-12* -We developed a back-end for SLIME, the superior lisp interaction -mode for emacs. Now, you can browse the class hierarchy, get +We developed DIME, the Dylan interaction mode for emacs, based +on SLIME. Now, you can browse the class hierarchy, get argument lists, locate definitions, compile, view warnings and more, all from within emacs! From d5da2166c41c2d0d659421548ba344e88431a253 Mon Sep 17 00:00:00 2001 From: Dustin Voss Date: Sat, 17 Dec 2011 19:11:06 -0800 Subject: [PATCH 094/519] Revised "Dylan Macro System" article. Fixed crappy code box formatting, added navigation, improved some content. --- .../articles/macro-system/auxiliary-rules.rst | 300 ++++++++++-------- .../macro-system/background-overview.rst | 43 ++- .../source/articles/macro-system/faq-tips.rst | 64 ++-- .../source/articles/macro-system/hygiene.rst | 101 +++--- .../source/articles/macro-system/index.rst | 12 +- .../articles/macro-system/macro-types.rst | 46 ++- .../macro-system/pattern-variables.rst | 28 +- .../source/articles/macro-system/patterns.rst | 43 ++- .../articles/macro-system/substitutions.rst | 25 +- documentation/website/source/conf.py | 2 +- .../website/source/documentation/index.rst | 5 + 11 files changed, 406 insertions(+), 263 deletions(-) diff --git a/documentation/website/source/articles/macro-system/auxiliary-rules.rst b/documentation/website/source/articles/macro-system/auxiliary-rules.rst index 500860ff93..3f4e85d2ac 100644 --- a/documentation/website/source/articles/macro-system/auxiliary-rules.rst +++ b/documentation/website/source/articles/macro-system/auxiliary-rules.rst @@ -1,18 +1,30 @@ +:copyright: Copyright © 2011 Dustin Voss, All Rights Reserved. + .. default-role:: samp .. highlight:: dylan -.. _auxiliary-rules: +.. sidebar:: Navigation + + :Next: :doc:`hygiene` + :Prev: :doc:`substitutions` + :Top: :doc:`index` + + .. contents:: + :local: ****************************** Auxiliary Rules and Expansions ****************************** +Auxiliary Rules +=============== + Auxiliary rules transform the code fragment contained in a pattern variable before it is substituted into a template. -Auxiliary rule sets follow the syntax described in `patterns`:ref: and have the +Auxiliary rule sets follow the syntax described in :doc:`patterns` and have the behaviors described on that page. They do not have the special elements like -`define` or `{modifiers}` shown in `macro-types`:ref:, but the macro type does +`define` or `{modifiers}` shown in :ref:`main-rules`, but the macro type does place certain *de facto* restrictions on what can appear in auxiliary rule patterns: @@ -25,7 +37,7 @@ An auxiliary rule set comes into play when a pattern variable matches a code fragment and that pattern variable is named the same as the auxiliary rule set. Usually, the pattern variable is a wildcard variable written without a constraint, but the pattern variable can use any of the forms described in -`patterns`:ref:, including the `#key` and `??{name}:{constraint}` forms. +:doc:`patterns`, including the `#key` and `??{name}:{constraint}` forms. After the pattern variable matches and is set to a code fragment, that code fragment is matched against the rules of the auxiliary rule set. If a rule's @@ -33,18 +45,29 @@ pattern matches the code fragment, that rule's template is expanded and replaces the code fragment contained by the pattern variable. If no rules match the code fragment, macro expansion fails. -If the pattern variable named the same as the rule set is a ``??``-style pattern +If the pattern variable named the same as the rule set is a `??`-style pattern variable, the process is similar, except each code fragment in the pattern variable is individually matched and transformed by the auxiliary rules. -Expansion examples -================== +Expansions +========== + +This section discusses expansions through a series of examples. The examples are +all variations of a function macro named `version` that builds a version number +in a specific format and sets it by calling a function `set-version`. The +`set-version` function is declared like this:: + + define function set-version (version-string :: ) => () -Consider a macro [ver1]_ that makes it easier to generate version numbers. The -macro is called by [ver1-call]_ and expands to [ver1-exp]_. -The `?type` pattern variable in line 1 of the macro definition matches ``alpha`` +Simple expansion +---------------- + +First, let us consider the macro definition `Definition 1`_. The macro is called +by `Call 1`_ and expands to `Expansion 1`_. + +The `?type` pattern variable in line 1 of the macro definition matches `alpha` in the call. After the variable matches, the `type:` auxiliary rule set in lines 4–7 rewrite the contents of the pattern variable according to the matching rule in line 5. The matching rule expands to the string `"a"`, which replaces the @@ -54,7 +77,7 @@ the expansion. ---------- -.. [ver1] *Version macro* +_`Definition 1`: .. code-block:: dylan :linenos: @@ -68,32 +91,35 @@ the expansion. { release } => { } end macro -.. [ver1-call] *Macro call* +_`Call 1`: .. code-block:: dylan - + version("1.2", alpha) -.. [ver1-exp] *Macro expansion* +_`Expansion 1`: .. code-block:: dylan - + set-version("1.2" "a") + .. tip:: Dylan compiles `"1.2" "a"` like `"1.2a"`. + ---------- Effect of constraints ---------------------- +^^^^^^^^^^^^^^^^^^^^^ -Now consider if the auxiliary rules were rewritten as [ver2]_. This macro might -be intended to create a version number like `"1.0a1"` if called by [ver2-call]_. -However, the macro will never succeed. `?type` in line 2 is constrained to -always be a simple name. None of the patterns in the `type:` auxiliary rule set -match a simple name (they all expect commas), so the macro expansion will fail. +Now consider if the auxiliary rules were rewritten as `Definition 2`_. This +macro is intended to be called by `Call 2`_ to create a version number like +`"1.0a1"`. However, the macro will never succeed. `?type` in line 2 is +constrained to always be a simple name. None of the patterns in the `type:` +auxiliary rule set match a simple name (they all expect commas), so the macro +expansion will fail. ---------- -.. [ver2] *Version macro 2* +_`Definition 2`: .. code-block:: dylan :linenos: @@ -108,7 +134,7 @@ match a simple name (they all expect commas), so the macro expansion will fail. { release, ?n:expression } => { } end macro -.. [ver2-call] *Macro call* +_`Call 2`: .. code-block:: dylan @@ -116,30 +142,30 @@ match a simple name (they all expect commas), so the macro expansion will fail. ---------- -Missing code fragments ----------------------- +Empty and missing code fragments +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ An auxiliary rule set can match against a missing code fragment. Consider the -following code which calls [ver1]_: +following code which calls either of the above `version` macros: .. code-block:: dylan version("1.0") -With this macro call, the `?number` pattern variable would -contain `"1.0"` and `?type` would be empty, as described in -`final-items`:ref:. The macro would fail to match this code -fragment, since the `name`` constraint of the `?type` variable does not match -a missing code fragment. +With this macro call, the `?number` pattern variable would contain `"1.0"` and +`?type` would be empty, as described in :ref:`final-items`. The macro would fail +to match this code fragment, since the `name` constraint of the `?type` +variable does not match a missing code fragment. -If we changed the macro definition to include a wildcard constraint [ver3]_, the -macro would still fail to match the code fragment because the `type:` -auxiliary rule set does not have a pattern that matches a missing code fragment. -We would also have to add that rule [ver4]_. +If we changed the macro definition to include a wildcard constraint, as in +`Definition 3`_, the macro would still fail to match the code fragment because +the `type:` auxiliary rule set does not have a pattern that matches a missing +code fragment. We would also have to add the rule highlighted in `Definition +4`_. ---------- -.. [ver3] *Macro with wildcard* +_`Definition 3`: .. code-block:: dylan :linenos: @@ -154,11 +180,11 @@ We would also have to add that rule [ver4]_. { release } => { } end macro -.. [ver4] *Macro with wildcard and empty pattern* +_`Definition 4`: .. code-block:: dylan :linenos: - :emphasize-lines: 2,8 + :emphasize-lines: 8 define macro version { version(?number:expression, ?type:*) } @@ -172,40 +198,72 @@ We would also have to add that rule [ver4]_. ---------- -Final exam + +Complex expansion +----------------- + +Now suppose we wanted to support the syntax `Call 5`_. This macro should expand +to `Expansion 5`_ to generate a version number like `"1.042a"`. The macro could +be defined by the code `Definition 5`_. + ---------- -Now suppose we wanted to support the syntax [ver5-call]_. This macro should -expand to [ver5-exp]_ to generate a version number like "1.042a". The macro -could be defined by the code [ver5]_. There are several interesting aspects to -this version of the macro that I would like to point out. +_`Definition 5`: -Required and optional properties -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + .. code-block:: dylan + :linenos: + + define macro version + { version(#key ?major:expression, ??rev:expression, ?type:name = none) } + => { set-version(concatenate(?major, ".", ??rev, ..., ?type)) } + major: + { ?rev } => { ?rev } + rev: + { ?:expression } => { format-to-string("%s", ?expression) } + type: + { alpha } => { "a" } + { beta } => { "b" } + { release } => { } + { none } => { } + end macro + +_`Call 5`: + + .. code-block:: dylan + + version(major: 1, rev: 0, rev: 4, rev: 2, type: alpha) + +_`Expansion 5`: + + .. code-block:: dylan + + set-version(concatenate("1", ".", "0", 4", "2", "a")) + +---------- + +Property lists and optional properties +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The macro call must include the `major:` property, but the `rev:` and `type:` -properties are optional. `rev:` is optional because it is a ``??``-type pattern +properties are optional. `rev:` is optional because it is a `??`-type pattern variable, and `type:` is optional because the pattern variable includes a default value. If the macro call did not include any `rev:` properties, the substitution for `??rev, ...` would be empty. This would cause the comma after `"."` in line 3 to vanish. If the macro call did not include `type:`, the substitution for -``?type`` in line 3 would be empty because the defaulted pattern variable +`?type` in line 3 would be empty because the defaulted pattern variable matches the pattern of the auxiliary rule in line 12, and the template for that rule is empty. Because `?type` in line 3 would be empty, the comma after `??rev, ...` would vanish. -Property symbols -^^^^^^^^^^^^^^^^ +You may have noted that the `major:`, `rev:`, and `type:` auxiliary rule sets do +not include the actual `major:`, `rev:`, or `type:` symbols found in the macro +call. This is because `#key`-type pattern variables contain only the value parts +of properties, not the symbol parts. -The `major:`, `rev:`, and `type:` auxiliary rule sets do not include the actual -`major:`, `rev:`, or `type:` symbols found in the macro call. This is because -``#key``-type pattern variables contain only the value parts of properties, not -the symbol parts. - -``??`` and ``?`` pattern variables -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +`??` and `?` pattern variables +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The main rule and the `major:` auxiliary rule set both contain a pattern variable named `rev`, though it is `??rev:expression` in the main rule (line 2) @@ -229,7 +287,7 @@ individually. The `??rev, ...` substitution in line 3 then joins each of the transformed code fragments with a comma and includes the entire collection in the macro expansion. -Empty ``??`` pattern variables +Empty `??` pattern variables ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ In line 2, the `?type` variable has a default. If the macro call @@ -242,115 +300,85 @@ fragment. Since the `rev:` rule does not include an empty pattern, you might expect the macro to fail. But the macro still works. The `rev:` rule will be applied to each code fragment -in `??rev` individually because it is a ``??``-type pattern variable. Since +in `??rev` individually because it is a `??`-type pattern variable. Since there are no code fragments in `??rev`, the `rev:` is not even applied once, so its lack of an empty pattern is irrelevant. ----------- - -.. [ver5-call] *Complex syntax call* - - .. code-block:: dylan - - version(major: 1, rev: 0, rev: 4, rev: 2, type: alpha) - -.. [ver5-exp] *Complex expansion* - - .. code-block:: dylan - - set-version(concatenate("1", ".", "0", 4", "2", "a")) - -.. [ver5] *Complex macro definition* - - .. code-block:: dylan - :linenos: - - define macro version - { version(#key ?major:expression, ??rev:expression, ?type:name = none) } - => { set-version(concatenate(?major, ".", ??rev, ..., ?type)) } - major: - { ?rev } => { ?rev } - rev: - { ?:expression } => { format-to-string("%s", ?expression) } - type: - { alpha } => { "a" } - { beta } => { "b" } - { release } => { } - { none } => { } - end macro - ----------- Recursive expansion -=================== +------------------- Any pattern variable named the same as an auxiliary rule is processed by that rule. That includes pattern variables in the auxiliary rule itself. This recursive behavior is useful for processing lists of items. The `...` pattern variable and substitution syntaxes draw attention to a -recursive rule. Using that syntax, the macros [rec1]_ and [rec2]_ are -equivalent. But I feel there is a good argument for avoiding that syntax for -clarity's sake. +recursive rule. Using that syntax, the macros `Definition 6`_ and `Definition +7`_ are equivalent. But I feel there is a good argument for avoiding that syntax +for clarity's sake. + +Tracing this call of the macro shows how macro recursion works:: + + let (x, y) = path(north 5, east 3, south 1, east 2) -Tracing a call of the macro [rec1-call]_ shows how macro recursion works. +The patterns and templates will be evaluated as follows: -1. The main rule pattern matches. ``?steps`` is set to ``north 5, east 3, south - 1, east 2``. -#. The contents of ``?steps`` is rewritten by the *steps* auxiliary rule set. +1. The main rule pattern matches. `?steps` is set to + `north 5, east 3, south 1, east 2`. +#. The contents of `?steps` is rewritten by the `steps:` auxiliary rule set. - a. The "north" rule is matched against ``north 5, east 3, south 1, east 2``. + a. The "north" rule is matched against `north 5, east 3, south 1, east 2`. The pattern is a comma-separated pattern, which matches the code fragment. - The word ``north`` and the token ``5`` match. As described in - `final-items`:ref:, the ``?steps`` pattern variable belonging to this - pattern-match operation is set to ``east 3, south 1, east 2``. - #. The contents of this rule's ``?steps`` variable is rewritten by the *steps* + The word `north` and the token `5` match. As described in + :ref:`final-items`, the `?steps` pattern variable belonging to this + pattern-match operation is set to `east 3, south 1, east 2`. + #. The contents of this rule's `?steps` variable is rewritten by the `steps:` auxiliary rule set. - i. The "north," "south," and "west" rules fail to match against ``east 3, - south 1, east 2``. - #. The "east" rule matches and the ``?steps`` pattern variable of this - pattern-match operation (different from any other ``?steps`` variable - being dealt with) is set to ``south 1, east 2``. - #. ``?steps`` is rewritten by another pass through the *steps* rule set. + i. The "north," "south," and "west" rules fail to match against + `east 3, south 1, east 2`. + #. The "east" rule matches and the `?steps` pattern variable of this + pattern-match operation (different from any other `?steps` variable + being dealt with) is set to `south 1, east 2`. + #. `?steps` is rewritten by another pass through the `steps:` rule set. - 1. The "south" rule matches and its ``?steps`` is set to ``east 2``. - #. ``?steps`` is rewritten. + 1. The "south" rule matches and its `?steps` is set to `east 2`. + #. `?steps` is rewritten. a. The "north," "south," and "west" rules fail to match. - #. The "east" rule is matched against ``east 2``. The word ``east`` and - the token ``2`` match. The code fragment does not contain a comma, but - the pattern matches the code fragment without the comma per - `final-items`:ref:. The ``?steps`` pattern variable will contain an + #. The "east" rule is matched against `east 2`. The word `east` and + the token `2` match. The code fragment does not contain a comma, + but the pattern matches the code fragment without the comma per + :ref:`final-items`. The `?steps` pattern variable will contain an empty code fragment. - #. Even though ``?steps`` contains an empty code fragment, it is still - rewritten by the *steps* auxiliary rule set. + #. Even though `?steps` contains an empty code fragment, it is still + rewritten by the `steps:` auxiliary rule set. - i. The "north," "south," "west," and "east" rules fail to match against - an empty code fragment. + i. The "north," "south," "west," and "east" rules fail to match + against an empty code fragment. #. The empty pattern matches. Its expansion is an empty fragment. - #. The ``?steps`` pattern variable of the "east" rule is set to the + #. The `?steps` pattern variable of the "east" rule is set to the expansion of the auxiliary rule set, i.e., an empty fragment. - #. The rule's expansion is therefore ``x := x + 2``. + #. The rule's expansion is therefore `x := x + 2`. - #. The ``?steps`` pattern variable of the "south" rule is set to ``x := x + - 2``. - #. The rule's expansion is therefore ``y := y + 1; x := x + 2``. + #. The `?steps` pattern variable of the "south" rule is set to + `x := x + 2`. + #. The rule's expansion is therefore `y := y + 1; x := x + 2`. - #. The ``?steps`` pattern variable of the "east" rule is set to ``y := y + 1; - x := x + 2``. - #. The rule's expansion is therefore ``x := x + 3; y := y + 1; x := x + 2`` + #. The `?steps` pattern variable of the "east" rule is set to + `y := y + 1; x := x + 2`. + #. The rule's expansion is therefore `x := x + 3; y := y + 1; x := x + 2` …and so on. The key ideas to note are: -- The rule set has to have a non-recursing rule (in this case, ``{ } => { }``) -- Each rule's matching and expansion has its own ``?token`` and ``?steps`` +- The rule set has to have a non-recursing rule (in this case, `{ } => { }`) +- Each rule's matching and expansion has its own `?token` and `?steps` pattern variable. ---------- -.. [rec1] *Recursive macro* +_`Definition 6`: .. code-block:: dylan :linenos: @@ -365,7 +393,7 @@ Tracing a call of the macro [rec1-call]_ shows how macro recursion works. { } => { } end macro -.. [rec2] *Recursive macro with ellipses* +_`Definition 7`: .. code-block:: dylan :linenos: @@ -380,9 +408,3 @@ Tracing a call of the macro [rec1-call]_ shows how macro recursion works. { east ?:token, ... } => { x := x + ?token; ... } { } => { } end macro - -.. [rec1-call] *Recursive macro call* - - .. code-block:: dylan - - let (x, y) = path(north 5, east 3, south 1, east 2) diff --git a/documentation/website/source/articles/macro-system/background-overview.rst b/documentation/website/source/articles/macro-system/background-overview.rst index 2aef3a5227..096192b500 100644 --- a/documentation/website/source/articles/macro-system/background-overview.rst +++ b/documentation/website/source/articles/macro-system/background-overview.rst @@ -1,6 +1,15 @@ +:copyright: Copyright © 2011 Dustin Voss, All Rights Reserved. + .. default-role:: dfn .. highlight:: dylan -.. _background-overview: +.. sidebar:: Navigation + + :Next: :doc:`macro-types` + :Prev: :doc:`index` + :Top: :doc:`index` + + .. contents:: + :local: *********************** @@ -58,13 +67,15 @@ combined fragments and substitutions form the macro's `expansion`, which replaces the original code fragment. This happens recursively: after a macro is expanded, its expansion is scanned -for additional macro call code fragments, and those are expanded in turn. Macros -are recognized by way of a `distinguishing word` and a certain syntactic style. +for additional macro call code fragments, and those are expanded in turn. The +parser recognizes a macro call code fragment by way of a `distinguishing word` +and the type of syntax associated with the macro (discussed further in +:doc:`macro-types`). -Let us examine a function macro [defn]_. This macro might be called by the code -[orig]_, but the actual call fragment [frag]_ is what the parser will attempt to -match. The macro's expansion will be [exp]_ and the original code will then -become [new]_. +Let us examine `Function Macro`_. This macro might be called by the code +`Original Code`_, but the actual call fragment `Call Fragment`_ is what the +parser will attempt to match. The macro's expansion will be `Expansion`_ and the +original code will then become `Replacement Code`_. Here are the parts of the macro: @@ -81,14 +92,14 @@ Here are the parts of the macro: ``?table-contents``, ``?rest``, ``?key``, and ``?value``. - The substitutions in this macro include those same names. -Note that the expansion [new]_ is surrounded by ``begin`` and ``end``. Macro -expansions are always surrounded by a begin…end block. This helps with macro -hygiene (i.e. preventing bindings outside of a macro call from being affected by -bindings used in a macro's expansion). I discuss hygiene `later `:ref:. +Note that the expansion is surrounded by ``begin`` and ``end``. Macro expansions +are always surrounded by a begin…end block. This helps with macro hygiene (i.e. +preventing bindings outside of a macro call from being affected by bindings used +in a macro's expansion). I discuss hygiene :doc:`here `. ---------- -.. [defn] *Definition* +_`Function Macro`: .. code-block:: dylan :linenos: @@ -104,25 +115,25 @@ bindings used in a macro's expansion). I discuss hygiene `later `:ref:. => { ht[?key] := ?value; ... } end macro table -.. [orig] *Original code* +_`Original Code`: .. code-block:: dylan let lights = table(, "red" => "stop", "green" => "go"); -.. [frag] *Call fragment* +_`Call Fragment`: .. code-block:: dylan table(, "red" => "stop", "green" => "go") -.. [exp] *Expansion* +_`Expansion`: .. code-block:: dylan let ht = make(); ht["red"] := "stop"; ht["green"] := "go"; ht; -.. [new] *Replacement code* +_`Replacement Code`: .. code-block:: dylan diff --git a/documentation/website/source/articles/macro-system/faq-tips.rst b/documentation/website/source/articles/macro-system/faq-tips.rst index 3ac48ec159..7328c4e810 100644 --- a/documentation/website/source/articles/macro-system/faq-tips.rst +++ b/documentation/website/source/articles/macro-system/faq-tips.rst @@ -1,13 +1,19 @@ .. default-role:: samp .. highlight:: none -.. _faq-tips: +.. sidebar:: Navigation + + :Next: + :Prev: :doc:`hygiene` + :Top: :doc:`index` + + .. contents:: + :local: ************ FAQ and Tips ************ - General advice and troubleshooting ================================== @@ -29,21 +35,22 @@ General advice and troubleshooting How can I combine multiple names into one? ========================================== -This template will not work:: +There is no real way to do this for names or symbols. The concatenating +substitution forms do not scale, so this template will not work:: { define ?name-1 ## "-" ## ?name-2 ## "-function" () } -What you want is easily done for the `?"{name}"` substitution form by taking -advantage of adjacent string concatenation:: +However, you can easily combine multiple names into a string by taking advantage +of adjacent string concatenation:: { format-out(?"name-1" "-" ?"name-2" "-function") } -But this will not work for the `?{name}` or `?#"{name}"` substitution forms. For -those, you have to use an auxiliary macro to construct a name. +Your best bet may be to do some sort of string-based introspection, or create +anonymous definitions stored in a table keyed by a string. -How can I do macros that follow a BNF-like syntax? -================================================== +How can I write macros that follow a BNF-like syntax? +===================================================== Macros are designed to follow Dylan language conventions, so you may not be able to support arbitrary BNF-based syntax. But here are some tricks to help with @@ -103,21 +110,34 @@ common BNF forms. I can't make a bare list! ========================= -A macro that makes a bare list can't do anything useful. For example, this will -not compile:: +A macro that makes a bare list (by which I mean a simple list of comma-separated +names) cannot do anything useful with it. Macros build cohesive code fragments, +and a bare list is not such a code fragment. - define macro setter-names - { setter-names(?names) } => { ?names } - names: - { ?:name, ... } => { ?name ## "-setter", ... } - end macro; - - vector(setter-names(alpha, beta, gamma, delta)) +For example, this will not compile:: + + define macro setter-names + { setter-names(?names) } => { ?names } + names: + { ?:name, ... } => { ?name ## "-setter", ... } + end macro; + + vector(setter-names(alpha, beta, gamma, delta)) It does not compile because the expansion of `setter-names` is wrapped in a -begin…end:: +begin…end, resulting in this invalid syntax:: + + vector(begin alpha-setter, beta-setter, gamma-setter, delta-setter end) - vector(begin alpha-setter, beta-setter, gamma-setter, delta-setter end) +Instead, do something with the list in the macro itself: -This is invalid syntax. You need to do something with the list in the macro -itself. +.. code-block:: dylan + :emphasize-lines: 2, 7 + + define macro setter-vector + { setter-vector(?names) } => { vector(?names) } + names: + { ?:name, ... } => { ?name ## "-setter", ... } + end macro; + + setter-vector(alpha, beta, gamma, delta) diff --git a/documentation/website/source/articles/macro-system/hygiene.rst b/documentation/website/source/articles/macro-system/hygiene.rst index 987013889b..4fb8301ce4 100644 --- a/documentation/website/source/articles/macro-system/hygiene.rst +++ b/documentation/website/source/articles/macro-system/hygiene.rst @@ -1,6 +1,15 @@ +:copyright: Copyright © 2011 Dustin Voss, All Rights Reserved. + .. default-role:: samp .. highlight:: dylan -.. _hygiene: +.. sidebar:: Navigation + + :Next: :doc:`faq-tips` + :Prev: :doc:`auxiliary-rules` + :Top: :doc:`index` + + .. contents:: + :local: ******* @@ -11,24 +20,38 @@ Let us say we have two macros A and B. The expansion of A calls B. The following diagram shows the sources or lexical scopes of a binding used in the expansion of A and B. -.. code-block:: none - - +--------------------------------+ +-------------------------------------+ - | [1] Module or local scope of | | [4] Module containing definition of | - | the call to macro A | | macro A | - | | | | - | +--------------------------+ | +-------------------------------------+ - | | [2] Expansion of A | | - | | | | +-------------------------------------+ - | | +--------------------+ | | | [5] Module containing definition of | - | | | [3] Expansion of B | | | | macro B | - | | | | | | | | - | | +--------------------+ | | +-------------------------------------+ - | | | | - | +--------------------------+ | - | | - +--------------------------------+ - +.. raw:: html + +
+   ╒═════════════════════════════════════╕
+   │ [1] Module or local scope of a call │    
+   │     to macro A                      │    
+   │                                     │    
+   │  ┌───────────────────────────────┐  │
+   │  │ [2] Expansion of A            │  │    
+   │  │                               │  │     
+   │  │  ┌─────────────────────────┐  │  │     
+   │  │  │ [3] Expansion of B      │  │  │     
+   │  │  │                         │  │  │     
+   │  │  └─────────────────────────┘  │  │     
+   │  │                               │  │ 
+   │  └───────────────────────────────┘  │ 
+   │                                     │ 
+   ╘═════════════════════════════════════╛
+
+   ╒═════════════════════════════════════╕
+   │ [4] Module containing definition of │
+   │     macro A                         │
+   │                                     │
+   ╘═════════════════════════════════════╛
+   
+   ╒═════════════════════════════════════╕
+   │ [5] Module containing definition of │
+   │     macro B                         │
+   │                                     │
+   ╘═════════════════════════════════════╛
+   
+ Macro expansions are hygienic, meaning: - Bindings from boxes 2 or 4 are visible in box 2. @@ -54,10 +77,10 @@ Breaking hygiene A template can prefix a binding with `?=`. This makes the binding come from and be visible in the macro's caller. This can be illustrated by an example from -`Dylan Programming`:title:. +:title:`Dylan Programming`. -Say macro A is defined in box 4 as [rep]_. Code in box 1 can call the macro as -follows: +Say macro A defined in box 4 is `Definition 1`_, and the macro call in box 1 is +the following: .. code-block:: dylan @@ -67,25 +90,25 @@ follows: i := i + 1; end -The `?=stop!` substitution in line 3 of the macro expands (in box 2) to a +The `?=stop!` substitution in line 3 of the macro becomes a reference to a binding visible in boxes 1 and 2. In box 1, the binding is visible as `stop!`. -In box 2 (the expansion itself), the binding is visible as `?=stop!` and if it -were a function, the macro template could contain code fragments like this: - -.. code-block:: dylan - - ?=stop!(arg-1, arg-2) - -Note that a macro expansion cannot create a new binding visible outside of the -macro call in box 1. For example, given a macro like [dofoo]_, one might expect -the macro call [dofoo-call]_ would print "Hello" twice, but it will not work. -Because every macro expansion is implicitly surrounded by begin…end as described -in `background-overview`:ref:, the example expands into [dofoo-exp]_. After the +In box 2 (the expansion itself), the binding is visible as `?=stop!` and can be +used like any other binding (e.g. `format-out`) as shown by the highlighted +line. + +Note that that a macro expansion cannot create a new binding visible outside of +the macro call itself (except by way of a top-level `define` statement). In +other words, box 2 cannot create a local binding for use elsewhere in box 1. + +For example, given the macro in `Definition 2`_, one might expect the macro call +in `Call 2`_ would print "Hello" twice, but the code does not compile. Because +every macro expansion is implicitly surrounded by begin…end as described in +:doc:`background-overview`, the example expands into `Expansion 2`_. After the macro call, `foo` is no longer in scope. ---------- -.. [rep] *Repeat macro* +_`Definition 1`: .. code-block:: dylan :linenos: @@ -99,7 +122,7 @@ macro call, `foo` is no longer in scope. end } end macro -.. [dofoo] *Do-then-foo macro* +_`Definition 2`: .. code-block:: dylan :linenos: @@ -109,14 +132,14 @@ macro call, `foo` is no longer in scope. => { let ?=foo = ?expression; ?body } end macro -.. [dofoo-call] *Calling do-then-foo* +_`Call 2`: .. code-block:: dylan do-then-foo("Hello\n") format-out(foo) end; format-out(foo) -.. [dofoo-exp] *Expansion of do-then-foo* +_`Expansion 2`: .. code-block:: dylan diff --git a/documentation/website/source/articles/macro-system/index.rst b/documentation/website/source/articles/macro-system/index.rst index 221d7f891c..6ef8b0a969 100644 --- a/documentation/website/source/articles/macro-system/index.rst +++ b/documentation/website/source/articles/macro-system/index.rst @@ -1,3 +1,11 @@ +:copyright: Copyright © 2011 Dustin Voss, All Rights Reserved. + +.. sectionauthor:: Dustin Voss +.. sidebar:: Navigation + + :Next: :doc:`background-overview` + + ###################### The Dylan Macro System ###################### @@ -10,8 +18,8 @@ complicated jobs get hard fast. This document describes how the Dylan macro system works and some techniques you can use when writing your own macros. I gloss over some of the implementation -details and present this information more informally than the `Dylan -Reference Manual`:title: does. +details and present this information more informally than the :title:`Dylan +Reference Manual` does. .. toctree:: :maxdepth: 2 diff --git a/documentation/website/source/articles/macro-system/macro-types.rst b/documentation/website/source/articles/macro-system/macro-types.rst index f471da0a19..600de06d66 100644 --- a/documentation/website/source/articles/macro-system/macro-types.rst +++ b/documentation/website/source/articles/macro-system/macro-types.rst @@ -1,6 +1,15 @@ +:copyright: Copyright © 2011 Dustin Voss, All Rights Reserved. + .. default-role:: samp .. highlight:: none -.. _macro-types: +.. sidebar:: Navigation + + :Next: :doc:`patterns` + :Prev: :doc:`background-overview` + :Top: :doc:`index` + + .. contents:: + :local: *********** @@ -11,8 +20,7 @@ There are four types of macro. `Body-style definition macro`:dfn: This kind of macro lets you create `define x … end` syntax. This is the - most popular kind of macro. This type of macro can only be used at the top - level of source code. + most popular kind of macro. `List-style definition macro`:dfn: This kind of macro lets you create `define x …` syntax, such as `define @@ -30,6 +38,36 @@ There are four types of macro. needed around a normal function call. +Macro definitions +================= + +All macros are defined by the `define macro` macro, which follows this general +syntax, with optional parts in brackets:: + + define macro MACRO-NAME + MAIN-RULE-SET + [AUXILIARY-RULE-SETS] + end macro MACRO-NAME + +`{MACRO-NAME}` + For statement and function macros, this is the macro's distinguishing + word. For body-style and list-style definition macros, though, it is the + distinguishing word plus `-definer`. + +`{MAIN-RULE-SET}` + One or more pattern/template pairs. The syntax that the patterns all + follow determine the type of the macro, and are described `below + `_. The patterns are matched in order; see :doc:`patterns`. + +`{AUXILIARY-RULE-SETS}` + One or more auxiliary rule sets, described in more detail in + :doc:`auxiliary-rules`. Each rule set has a name (which is syntactically a + symbol) and one or more pattern/template pairs. The name may be written as + `my-aux-ruleset:` or `#"my-aux-ruleset"`; both are the same. + + +.. _`main-rules`: + Main rules ========== @@ -100,7 +138,7 @@ Statement macro The main rules' patterns must follow this syntax, with optional parts in brackets:: - { DISTINGUISHING-WORD [`{BODY-PATTERNS}`] [;] end } + { DISTINGUISHING-WORD [BODY-PATTERNS] [;] end } `{BODY-PATTERNS}` One or more sets of code fragments and pattern variables separated by diff --git a/documentation/website/source/articles/macro-system/pattern-variables.rst b/documentation/website/source/articles/macro-system/pattern-variables.rst index 15cd4afc1c..222067e1f1 100644 --- a/documentation/website/source/articles/macro-system/pattern-variables.rst +++ b/documentation/website/source/articles/macro-system/pattern-variables.rst @@ -1,6 +1,15 @@ +:copyright: Copyright © 2011 Dustin Voss, All Rights Reserved. + .. default-role:: samp .. highlight:: none -.. _pattern-variables: +.. sidebar:: Navigation + + :Next: :doc:`substitutions` + :Prev: :doc:`patterns` + :Top: :doc:`index` + + .. contents:: + :local: ***************** @@ -89,7 +98,7 @@ Property list pattern variables part of `{prop-1}:` or `{prop-2}:`. The substitution for `??{prop-1}` is several code fragments, each being the value part of a `{prop-1}:` property. The substitution may use a separator between each - code fragment as described in the `substitutions`:ref: section. + code fragment as described in :doc:`substitutions`. For example, consider this pattern:: @@ -223,17 +232,18 @@ Body and macro pattern variables variable and cannot be followed by a comma or semicolon. `?{name}:macro` - This matches any macro call. This includes calls to definition macros, - which normally only appear at the top level source code. The - substitution will be the expanded macro, without the begin…end block - that normally surrounds macro expansions. + This matches any macro call. The substitution will be the expanded + macro, without the begin…end block that normally surrounds macro + expansions. While you can use the `?:expression` and `?:body` pattern variable - constraints to match function and statement macro calls, but they cannot + constraints to match function and statement macro calls, they cannot match definition macro calls, and their substitutions will include the begin…end wrapper. +.. _wildcard-variables: + Wildcard pattern variables ========================== @@ -270,7 +280,7 @@ Wildcard pattern variables { ?first:*, ?second:* } - As described in `patterns`:ref:, it will match any of the following:: + As described in :doc:`patterns`, it will match any of the following:: alpha, beta alpha, beta, gamma @@ -288,7 +298,7 @@ Auxiliary rule set pattern variables `?my-aux-rules` This syntax can only be used when there is an auxiliary rule set named the same as the pattern variable. It is equivalent to - `?my-aux-rule:*`. See `auxiliary-rules`:ref:. + `?my-aux-rule:*`. See :doc:`auxiliary-rules`. `...` This syntax can only be used within an auxiliary rule set. If the rule diff --git a/documentation/website/source/articles/macro-system/patterns.rst b/documentation/website/source/articles/macro-system/patterns.rst index 7387c4173b..3e5c4b112d 100644 --- a/documentation/website/source/articles/macro-system/patterns.rst +++ b/documentation/website/source/articles/macro-system/patterns.rst @@ -1,6 +1,15 @@ +:copyright: Copyright © 2011 Dustin Voss, All Rights Reserved. + .. default-role:: samp .. highlight:: none -.. _patterns: +.. sidebar:: Navigation + + :Next: :doc:`pattern-variables` + :Prev: :doc:`macro-types` + :Top: :doc:`index` + + .. contents:: + :local: ******** @@ -25,7 +34,7 @@ Subdivisions ============ A main rule pattern has elements like `define` and `end` as described in -`macro-types`:ref:, but in general, a pattern is a list of fragments or +:doc:`macro-types`, but in general, a pattern is a list of fragments or pattern variables separated at the highest level by semicolons, then by commas. That is, a pattern has this syntax:: @@ -58,24 +67,12 @@ example:: { ?name:name, { ?true-expr:expression; ?false-expr:expression }, ?final:name } Such a pattern will only match a code fragment with matching bracket characters. -The above pattern will match [#]_ but not [#]_. +The above pattern will match the first line of the following, but not the +second:: ----------- - -.. [#] - - .. code-block:: none - alpha, {#t; #f;}, beta - -.. [#] - - .. code-block:: none - alpha, (#t; #f;), beta ----------- - .. _final-items: @@ -83,7 +80,7 @@ Final items =========== A pattern with at least two list items treats the last item specially. For -example, the pattern [list1]_ will match any of the code fragments of [frags]_ +example, the pattern `Pattern 1`_ will match any of `Code Fragments`_ and set and set the pattern variables as follows: ======== ======= ======= ======================= @@ -95,26 +92,26 @@ Line 3 `alpha` `beta` `gamma, delta, epsilon` ======== ======= ======= ======================= This special behavior is usually only relevant when the last item in the list is -a wildcard pattern variable (see `pattern-variables`:ref:). If the pattern were -[list2]_ instead, the only matching code fragment would be line 1, because +a wildcard pattern variable (see :ref:`wildcard-variables`). If the pattern were +`Pattern 2`_ instead, the only matching code fragment would be line 1, because neither an empty fragment (from line 2) nor `gamma, delta, epsilon` (from line 3) match the `name` constraint of `?item-3`. ---------- -.. [list1] *Pattern ending in wildcard* +_`Pattern 1`: .. code-block:: none { ?item-1:*, ?item-2:*, ?item-3:* } -.. [list2] *Pattern ending in name* +_`Pattern 2`: .. code-block:: none { ?item-1:*, ?item-2:*, ?item-3:name } -.. [frags] *Code fragments* +_`Code Fragments`: .. code-block:: none :linenos: @@ -136,7 +133,7 @@ The end of a comma-separated list of pattern fragments can include `#rest`, If you write a pattern that contains `#all-keys`, you must also include `#key`. There are several variations on this syntax; they are described in -`pattern-variables`:ref:. +:ref:`proplist-variables`. `#rest`, `#key`, and `#all-keys` must be the only pattern fragments in their comma-separated sub-pattern, and that sub-pattern must be the last of several diff --git a/documentation/website/source/articles/macro-system/substitutions.rst b/documentation/website/source/articles/macro-system/substitutions.rst index 1cb4a308e4..4eefa52642 100644 --- a/documentation/website/source/articles/macro-system/substitutions.rst +++ b/documentation/website/source/articles/macro-system/substitutions.rst @@ -1,6 +1,15 @@ +:copyright: Copyright © 2011 Dustin Voss, All Rights Reserved. + .. default-role:: samp .. highlight:: none -.. _substitutions: +.. sidebar:: Navigation + + :Next: :doc:`auxiliary-rules` + :Prev: :doc:`pattern-variables` + :Top: :doc:`index` + + .. contents:: + :local: ************* @@ -21,24 +30,24 @@ preceding separator is removed. For example, consider this template:: { ?alpha, ?beta } If `?alpha` contains `a` and `?beta` is empty, the expansion will not be -[exp1]_, but will instead be [exp2]_. This special case applies with any of the -separators [seps]_ in place of the comma. +`Expansion 1`_, but will instead be `Expansion 2`_. This special case applies +with any of the separators listed in `Separators`_ in place of the comma. ---------- -.. [exp1] *Expansion 1* +_`Expansion 1`: .. code-block:: none a, -.. [exp2] *Expansion 2* +_`Expansion 2`: .. code-block:: none a -.. [seps] *Separators* +_`Separators`: .. code-block:: none @@ -53,7 +62,7 @@ Simple substitutions `?{name}` This is the basic substitution. The pattern variable's code fragment is inserted into the expansion according to the syntax used in the pattern, - as described in `pattern-variables`:ref:. + as described in :doc:`pattern-variables`. Conversion substitutions @@ -149,4 +158,4 @@ Unhygienic reference `?={binding}` This is not a substitution, but a way to refer to a binding in the - macro's caller. See `hygiene`:ref:. + macro's caller. See :doc:`hygiene`. diff --git a/documentation/website/source/conf.py b/documentation/website/source/conf.py index 847812341c..8c7d5f62af 100644 --- a/documentation/website/source/conf.py +++ b/documentation/website/source/conf.py @@ -82,7 +82,7 @@ # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. -#show_authors = False +show_authors = True # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index e302c3e7a7..e32a1fea0a 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -72,6 +72,11 @@ Documentation

Learning Dylan

+`Dylan Macro System <../articles/macro-system/index.html>`_ by Dustin Voss. + + This article holds hard-won knowledge about how the Dylan macro system works + and how to work around some of the gotchas that may catch a macro writer. + `Procedural Dylan <../articles/procedural-dylan/index.html>`_ by Paul Haahr. This essay explores Dylan from the perspective of a programmer used to From d41ae270ea4f218b36276c67166d5f6e207386c4 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Fri, 23 Dec 2011 08:46:50 +0700 Subject: [PATCH 095/519] Link to Dustin's article on macros. --- documentation/website/source/news/index.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/documentation/website/source/news/index.rst b/documentation/website/source/news/index.rst index 52d6d7c2df..5854ca46e6 100644 --- a/documentation/website/source/news/index.rst +++ b/documentation/website/source/news/index.rst @@ -18,6 +18,11 @@ News & Articles

Articles

+`Dylan Macro System <../articles/macro-system/index.html>`_ by Dustin Voss. + + This article holds hard-won knowledge about how the Dylan macro system works + and how to work around some of the gotchas that may catch a macro writer. + `Procedural Dylan <../articles/procedural-dylan/index.html>`_ by Paul Haahr. This essay explores Dylan from the perspective of a programmer used to From 94924e4dfbc0a92e04b28b7f37ce6ac23e3a6c10 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Wed, 28 Dec 2011 21:42:57 +0700 Subject: [PATCH 096/519] Link to epub files. --- documentation/website/source/documentation/index.rst | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index e32a1fea0a..1262b60bd2 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -25,6 +25,7 @@ Documentation `An Introduction to Dylan `_ [`pdf `__] +[`epub `__] This tutorial is written primarily for those with solid programming experience in C++ or another object-oriented, static language. It @@ -37,12 +38,14 @@ Documentation `Getting Started with Open Dylan `_ [`pdf `__] +[`epub `__] [`old HTML `__] Describes Open Dylan's interactive development environment. `Building Applications Using DUIM `_ [`pdf `__] +[`epub `__] [`old HTML `__] Describes how to use DUIM (Dylan User Interface Manager), @@ -110,6 +113,7 @@ Documentation `Core library reference `_ [`pdf `__] +[`epub `__] [`old HTML `__] Describes the Open Dylan implementation of the Dylan language, a @@ -119,6 +123,7 @@ Documentation `System and I/O library reference `_ [`pdf `__] +[`epub `__] [`old HTML `__] Describes Open Dylan's printing and output formatting modules, @@ -135,6 +140,7 @@ Documentation `C FFI and Win32 library reference `_ [`pdf `__] +[`epub `__] [`old HTML `__] Describes a foreign function interface library for interoperation @@ -154,11 +160,13 @@ Documentation `Open Dylan Hacker's Guide `_ [`pdf `__] +[`epub `__] A work in progress to help out people who are hacking on Open Dylan itself. `Dylan Style Guide `_ [`pdf `__] +[`epub `__] Notes and thoughts on how to format your Dylan code. This is the style guide that we aspire to adhere to in the Open Dylan sources. From d91bbe2d45e1aa71ebeaec2633fa7a5e04e5b816 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Wed, 28 Dec 2011 21:55:49 +0700 Subject: [PATCH 097/519] Link to the right epub file names. --- documentation/website/source/documentation/index.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index 1262b60bd2..e40a345719 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -25,7 +25,7 @@ Documentation `An Introduction to Dylan `_ [`pdf `__] -[`epub `__] +[`epub `__] This tutorial is written primarily for those with solid programming experience in C++ or another object-oriented, static language. It @@ -123,7 +123,7 @@ Documentation `System and I/O library reference `_ [`pdf `__] -[`epub `__] +[`epub `__] [`old HTML `__] Describes Open Dylan's printing and output formatting modules, From a593c81e3c5654264aec8193e626802e92768b7f Mon Sep 17 00:00:00 2001 From: Dustin Voss Date: Wed, 28 Dec 2011 22:44:51 -0800 Subject: [PATCH 098/519] Corrects typos, bad links, and some misinformation about macro calls in ?:body and ?:expression code fragments. Improves discussion of complex auxiliary rules and hygiene and misinformation about hygiene of definitions. --- .../articles/macro-system/auxiliary-rules.rst | 138 ++++++++++-------- .../source/articles/macro-system/faq-tips.rst | 4 +- .../source/articles/macro-system/hygiene.rst | 68 +++++---- .../articles/macro-system/macro-types.rst | 2 +- .../macro-system/pattern-variables.rst | 74 +++++----- .../source/articles/macro-system/patterns.rst | 52 +++---- .../articles/macro-system/substitutions.rst | 28 +++- 7 files changed, 208 insertions(+), 158 deletions(-) diff --git a/documentation/website/source/articles/macro-system/auxiliary-rules.rst b/documentation/website/source/articles/macro-system/auxiliary-rules.rst index 3f4e85d2ac..caf63a3509 100644 --- a/documentation/website/source/articles/macro-system/auxiliary-rules.rst +++ b/documentation/website/source/articles/macro-system/auxiliary-rules.rst @@ -28,10 +28,11 @@ behaviors described on that page. They do not have the special elements like place certain *de facto* restrictions on what can appear in auxiliary rule patterns: -- `end` cannot usefully appear in patterns of a body-style definition macro or - a statement macro unless it is enclosed in bracketing characters. -- `;` cannot usefully appear in patterns of a list-style definition macro - unless enclosed in bracketing characters. +- `end` cannot usefully appear in an auxiliary rule pattern of a body-style + definition macro or a statement macro unless it is enclosed in bracketing + characters. +- `;` cannot usefully appear in an auxiliary rule pattern of a list-style + definition macro unless enclosed in bracketing characters. An auxiliary rule set comes into play when a pattern variable matches a code fragment and that pattern variable is named the same as the auxiliary rule set. @@ -45,9 +46,9 @@ pattern matches the code fragment, that rule's template is expanded and replaces the code fragment contained by the pattern variable. If no rules match the code fragment, macro expansion fails. -If the pattern variable named the same as the rule set is a `??`-style pattern -variable, the process is similar, except each code fragment in the pattern -variable is individually matched and transformed by the auxiliary rules. +If the pattern variable being examined is a `??`-style pattern variable, the +process is similar, except each code fragment in the pattern variable is +individually matched and transformed by the auxiliary rules. Expansions @@ -69,11 +70,11 @@ by `Call 1`_ and expands to `Expansion 1`_. The `?type` pattern variable in line 1 of the macro definition matches `alpha` in the call. After the variable matches, the `type:` auxiliary rule set in lines -4–7 rewrite the contents of the pattern variable according to the matching rule +4–7 rewrites the contents of the pattern variable according to the matching rule in line 5. The matching rule expands to the string `"a"`, which replaces the -contents of the pattern variable. In the main rule's template (line 3), the -pattern variable (now containing `"a"` instead of `alpha`) is substituted into -the expansion. +`alpha` code fragment in the pattern variable. In the main rule's template (line +3), the pattern variable (now containing `"a"`) is substituted into the +expansion. ---------- @@ -112,10 +113,10 @@ Effect of constraints Now consider if the auxiliary rules were rewritten as `Definition 2`_. This macro is intended to be called by `Call 2`_ to create a version number like -`"1.0a1"`. However, the macro will never succeed. `?type` in line 2 is -constrained to always be a simple name. None of the patterns in the `type:` -auxiliary rule set match a simple name (they all expect commas), so the macro -expansion will fail. +`"1.0a1"`. However, the macro will never succeed. `?type` in line 2 has the +`name` constraint, so it cannot match the call, which includes a comma and an +additional clause. The `type:` auxiliary rule set will not even be consulted and +macro expansion will fail. ---------- @@ -146,7 +147,7 @@ Empty and missing code fragments ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ An auxiliary rule set can match against a missing code fragment. Consider the -following code which calls either of the above `version` macros: +following macro call in relation to `Definition 1`_: .. code-block:: dylan @@ -158,10 +159,10 @@ to match this code fragment, since the `name` constraint of the `?type` variable does not match a missing code fragment. If we changed the macro definition to include a wildcard constraint, as in -`Definition 3`_, the macro would still fail to match the code fragment because -the `type:` auxiliary rule set does not have a pattern that matches a missing -code fragment. We would also have to add the rule highlighted in `Definition -4`_. +`Definition 3`_, the macro would still fail to match the code fragment because, +while the `?type` pattern variable itself will match, the `type:` auxiliary rule +set does not have a pattern that matches a missing code fragment. We would also +have to add the rule highlighted in `Definition 4`_. ---------- @@ -237,7 +238,12 @@ _`Expansion 5`: .. code-block:: dylan - set-version(concatenate("1", ".", "0", 4", "2", "a")) + set-version(concatenate(format-to-string("%s", 1), + ".", + format-to-string("%s", 0), + format-to-string("%s", 4), + format-to-string("%s", 2), + "a")) ---------- @@ -245,23 +251,37 @@ Property lists and optional properties ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The macro call must include the `major:` property, but the `rev:` and `type:` -properties are optional. `rev:` is optional because it is a `??`-type pattern -variable, and `type:` is optional because the pattern variable includes a -default value. - -If the macro call did not include any `rev:` properties, the substitution for -`??rev, ...` would be empty. This would cause the comma after `"."` in line 3 to -vanish. If the macro call did not include `type:`, the substitution for -`?type` in line 3 would be empty because the defaulted pattern variable -matches the pattern of the auxiliary rule in line 12, and the template for that -rule is empty. Because `?type` in line 3 would be empty, the comma after `??rev, -...` would vanish. +properties are optional. + +`rev:` is optional because it is a `??`-type pattern variable and, as described +in :ref:`proplist-variables`, that type of pattern variable can handle a missing +property. If the macro call did not include any `rev:` properties, the +substitution for `??rev, ...` would be empty. This would also cause the comma +after `"."` in line 3 to vanish, as described in :ref:`finalitems-subst`. + +`type:` is optional because the pattern variable includes a default value. If +the macro call did not include `type:`, the substitution for `?type` in line 3 +would be empty. It would initially be `none`, but then the pattern variable +would be processed by the `type:` auxiliary rule set and matched by the rule in +line 12, and its contents replaced by the empty template for that rule. Because +`?type` in line 3 would be empty, the comma after `??rev, ...` would vanish. You may have noted that the `major:`, `rev:`, and `type:` auxiliary rule sets do not include the actual `major:`, `rev:`, or `type:` symbols found in the macro call. This is because `#key`-type pattern variables contain only the value parts of properties, not the symbol parts. +Auxiliary rule sets in auxiliary rules +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In line 5, `?rev` is equivalent to `?rev:*`. The code fragment matched by that +pattern variable is the code fragment initially contained by the `?major` +pattern variable matched in line 2. This code fragment will be an expression. +Because `rev` is also the name of an auxiliary rule set, that code fragment will +be matched and transformed by the `rev:` rule set. That transformed code +fragment will be inserted in place of the `?rev` substitution in line 5 and then +subsequently inserted in place of the `?major` substitution in line 3. + `??` and `?` pattern variables ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -269,30 +289,27 @@ The main rule and the `major:` auxiliary rule set both contain a pattern variable named `rev`, though it is `??rev:expression` in the main rule (line 2) and `?rev` in the auxiliary rule (line 5). Both pattern variables are transformed by the `rev:` auxiliary rule in line 7 because both pattern -variables have the name "rev", but they are transformed differently because of +variables have the name `rev`, but they are transformed differently because of the different natures of the two pattern variables. -In line 5, `?rev` is equivalent to `?rev:*`. The code fragment matched by that -wildcard is the code fragment contained by the pattern variable `?major` in line -2. This code fragment will be an expression, which will be matched and -transformed by the `rev:` rule and will replace `?major` in line 3. - -The `?rev` pattern variable in line 5 is a simple pattern variable that contains -only one code fragment. The `rev:` rule in line 7 transforms that fragment as -you would expect. +Because the `?major` pattern variable in line 2 is a simple pattern variable +that contains only one code fragment, the `rev:` rule in line 7 that acts on it +(for reasons described above) transforms that fragment as you would expect: +`?major` will become a call to `format-to-string`. However, the `??rev` pattern variable in line 2 is a `??`-type pattern variable -containing has zero or more code fragments, so the `rev:` rule transforms each -individually. The `??rev, ...` substitution in line 3 then joins each of the -transformed code fragments with a comma and includes the entire collection in -the macro expansion. +containing has zero or more code fragments, so when acting on *it*, the `rev:` +rule transforms each code fragment individually. The `??rev, ...` substitution +in line 3 then joins each of the transformed code fragments with a comma and +includes the entire collection in the main rule expansion, transforming the list +of revision numbers to a list of calls to `format-to-string`. Empty `??` pattern variables ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -In line 2, the `?type` variable has a default. If the macro call -does not contain a `type:` property, the default provides a code fragment to -match against the `type:` auxiliary rule set. +In line 2, the `?type` variable has a default. If the macro call does not +contain a `type:` property, the default provides a code fragment to match +against the `type:` auxiliary rule set. In contrast, the `??rev` variable does not have a default. If the call does not include any `rev:` properties then the pattern variable will not contain a code @@ -300,24 +317,26 @@ fragment. Since the `rev:` rule does not include an empty pattern, you might expect the macro to fail. But the macro still works. The `rev:` rule will be applied to each code fragment -in `??rev` individually because it is a `??`-type pattern variable. Since -there are no code fragments in `??rev`, the `rev:` is not even applied once, so -its lack of an empty pattern is irrelevant. +in `??rev` individually because it is a `??`-type pattern variable. Since there +are no code fragments in `??rev`, the `rev:` rule set is not applied even once, +so its lack of an empty pattern is irrelevant. Recursive expansion ------------------- Any pattern variable named the same as an auxiliary rule is processed by that -rule. That includes pattern variables in the auxiliary rule itself. This -recursive behavior is useful for processing lists of items. +rule. That includes pattern variables in the auxiliary rule referring to the +auxiliary rule set itself. This recursive behavior is useful for processing +lists of items. The `...` pattern variable and substitution syntaxes draw attention to a -recursive rule. Using that syntax, the macros `Definition 6`_ and `Definition -7`_ are equivalent. But I feel there is a good argument for avoiding that syntax -for clarity's sake. +recursive rule and makes the author's intention explicit. Using that syntax, the +`path` macros in `Definition 6`_ and `Definition 7`_ are equivalent. But if I +may editorialize, I feel there is a good argument for avoiding that syntax for +the sake of consistency. -Tracing this call of the macro shows how macro recursion works:: +Let us trace the following macro call to show how macro recursion works:: let (x, y) = path(north 5, east 3, south 1, east 2) @@ -343,7 +362,7 @@ The patterns and templates will be evaluated as follows: #. `?steps` is rewritten by another pass through the `steps:` rule set. 1. The "south" rule matches and its `?steps` is set to `east 2`. - #. `?steps` is rewritten. + #. `?steps` is again rewritten. a. The "north," "south," and "west" rules fail to match. #. The "east" rule is matched against `east 2`. The word `east` and @@ -372,7 +391,7 @@ The patterns and templates will be evaluated as follows: …and so on. The key ideas to note are: -- The rule set has to have a non-recursing rule (in this case, `{ } => { }`) +- The rule set has to have a non-recursing rule (in this case, ``{ } => { }``) - Each rule's matching and expansion has its own `?token` and `?steps` pattern variable. @@ -382,6 +401,7 @@ _`Definition 6`: .. code-block:: dylan :linenos: + :emphasize-lines: 4-7 define macro path { path(?steps) } => { let x = 0; let y = 0; ?steps; values(x, y) } diff --git a/documentation/website/source/articles/macro-system/faq-tips.rst b/documentation/website/source/articles/macro-system/faq-tips.rst index 7328c4e810..dc3403e5b8 100644 --- a/documentation/website/source/articles/macro-system/faq-tips.rst +++ b/documentation/website/source/articles/macro-system/faq-tips.rst @@ -76,7 +76,7 @@ common BNF forms. { z ... } { } -`{x}? | {x}(, {x})*` +`{x}? | {x} (, {x})*` This is a list that may have 0–*n* items. Handle this by calling out to an auxiliary rule that calls itself recursively like so:: @@ -89,7 +89,7 @@ common BNF forms. variable needs to be well-separated from the syntax that follows it by a semicolon or intermediate word. -`{x}(, {x})*` +`{x} (, {x})*` This is a list that may have 1–*n* items. You simply cannot do this in the general case; your best bet is design your macro to handle 0 items gracefully and then use a 0-*n* list. diff --git a/documentation/website/source/articles/macro-system/hygiene.rst b/documentation/website/source/articles/macro-system/hygiene.rst index 4fb8301ce4..30c0a277ae 100644 --- a/documentation/website/source/articles/macro-system/hygiene.rst +++ b/documentation/website/source/articles/macro-system/hygiene.rst @@ -16,16 +16,20 @@ Hygiene ******* +Macro expansions are hygienic, meaning there can be no name conflict between +a local binding in scope that calls the macro and a local binding in the macro +expansion. + Let us say we have two macros A and B. The expansion of A calls B. The following -diagram shows the sources or lexical scopes of a binding used in the expansion -of A and B. +diagram shows the lexical scopes of bindings used in A and B. The table after +describes the scopes in more detail. .. raw:: html
    ╒═════════════════════════════════════╕
-   │ [1] Module or local scope of a call │    
-   │     to macro A                      │    
+   │ [1] Module or lexical scope of a    │    
+   │     call to macro A                 │    
    │                                     │    
    │  ┌───────────────────────────────┐  │
    │  │ [2] Expansion of A            │  │    
@@ -52,24 +56,38 @@ of A and B.
    ╘═════════════════════════════════════╛
    
-Macro expansions are hygienic, meaning: - -- Bindings from boxes 2 or 4 are visible in box 2. -- Bindings from boxes 3 or 5 are visible in box 3. -- A binding from box 1 is not visible in box 2, but can be wrapped in a pattern - variable and manipulated in box 2. -- A binding from box 2 is not visible in box 3, but can be wrapped in a pattern - variable and manipulated in box 3. -- A binding from box 1 is not visible in box 3, but if box 2 wraps the binding - in a pattern variable and uses that pattern variable in the call of macro B, - and macro B wraps that pattern variable in a pattern variable of its own, then - box 3 can manipulate the binding via its pattern variable. - -New bindings created by `define` statements are not hygienic. Definition -processing occurs after all macros have been expanded. A class defined in box 3 -can be used in boxes 2 and 1 and exported from the module of box 1. If there is -another definition by that name in the other boxes, it is a duplicate definition -and an error is reported. + ++------------+---------------------+---------------------+---------------------+-------+--------+ +| Definition | Definition Location | +| Visibility +---------------------+---------------------+---------------------+-------+--------+ +| | Box 1 | Box 2 | Box 3 | Box 4 | Box 5 | ++============+=====================+=====================+=====================+=======+========+ +| Box 1 | All | Only if defined | Only if defined | | | +| | | with unhygienic | with unhygienic | | | +| | | reference to name | reference to name | | | +| | | from 1, captured by | from 1, captured by | | | +| | | pattern variable of | pattern variable of | | | +| | | A | A and recaptured by | | | +| | | | pattern variable of | | | +| | | | B | | | ++------------+---------------------+---------------------+---------------------+-------+--------+ +| Box 2 | Only if captured by | All | Only if defined | All | | +| | pattern variable of | | with unhygienic | | | +| | A | | reference to name | | | +| | | | from 2, captured by | | | +| | | | pattern variable of | | | +| | | | B | | | ++------------+---------------------+---------------------+---------------------+-------+--------+ +| Box 3 | Only if captured by | Only if captured by | All | | All | +| | pattern variable of | pattern variable of | | | | +| | A and recaptured by | B | | | | +| | pattern variable of | | | | | +| | B | | | | | ++------------+---------------------+---------------------+---------------------+-------+--------+ +| Box 4 | | | | All | | ++------------+---------------------+---------------------+---------------------+-------+--------+ +| Box 5 | | | | | All | ++------------+---------------------+---------------------+---------------------+-------+--------+ Breaking hygiene @@ -96,9 +114,9 @@ In box 2 (the expansion itself), the binding is visible as `?=stop!` and can be used like any other binding (e.g. `format-out`) as shown by the highlighted line. -Note that that a macro expansion cannot create a new binding visible outside of -the macro call itself (except by way of a top-level `define` statement). In -other words, box 2 cannot create a local binding for use elsewhere in box 1. +Note that that a macro expansion cannot create a new name visible outside of the +macro call itself. In other words, box 2 cannot create a binding for use +elsewhere in box 1 unless box 1 supplies the name to be defined. For example, given the macro in `Definition 2`_, one might expect the macro call in `Call 2`_ would print "Hello" twice, but the code does not compile. Because diff --git a/documentation/website/source/articles/macro-system/macro-types.rst b/documentation/website/source/articles/macro-system/macro-types.rst index 600de06d66..a2a1422140 100644 --- a/documentation/website/source/articles/macro-system/macro-types.rst +++ b/documentation/website/source/articles/macro-system/macro-types.rst @@ -66,7 +66,7 @@ syntax, with optional parts in brackets:: `my-aux-ruleset:` or `#"my-aux-ruleset"`; both are the same. -.. _`main-rules`: +.. _main-rules: Main rules ========== diff --git a/documentation/website/source/articles/macro-system/pattern-variables.rst b/documentation/website/source/articles/macro-system/pattern-variables.rst index 222067e1f1..5d83f55ae8 100644 --- a/documentation/website/source/articles/macro-system/pattern-variables.rst +++ b/documentation/website/source/articles/macro-system/pattern-variables.rst @@ -33,8 +33,6 @@ a given inner macro. An example of this is given in the discussion of the The scope of a pattern variable is the rule that uses it. Other rules or auxiliary rule sets cannot use the pattern variable. -What follows is a categorized list of pattern variable syntaxes. - Simple pattern variables ======================== @@ -46,14 +44,15 @@ Simple pattern variables This is a pattern variable where its constraint is also its name. For example, `?:expression` is equivalent to `?expression:expression`, that is, a pattern variable named `expression` with a constraint of - `expression.` + `expression`. `?{name}:name` This matches a name. `?{name}:token` - This matches a name, operator, or simple literal such as a string, character, - or number. It does not match vector literals or function calls. + This matches a name, operator, or simple literal such as a string, + character constant, or number. It does not match vector literals or + function calls. `?{name}:expression` This matches any expression, including vector literals, function calls, @@ -65,10 +64,11 @@ Simple pattern variables `?{name}:name :: ?{specialization}:expression` This matches a variable name and optional specialization, like - `?:variable`, but lets you get each part. If the code fragment just - has the name part, the substitution for `?{specialization}` will be - ``. Note that `?{specialization}` will not match every expression. It - will only match an expression that happens to be a type specialization. + `?:variable`, but lets you extract each part separately. If the code + fragment just has the name part, the substitution for + `?{specialization}` will be ``. Note that `?{specialization}` + will not match every expression; it will only match an expression that + happens to also be a valied type specialization. .. _proplist-variables: @@ -84,21 +84,21 @@ Property list pattern variables `#key ?{prop-1}:{constraint}, ?{prop-2}:{constraint}` This matches a property list that only includes the `{prop-1}:` and - `{prop-2}:` properties. If the property list includes any other - property such as `alpha:` or if either `{prop-1}:` or - `{prop-2}:` are missing, this pattern variable will not match. - Additionally, the properties' value parts have to meet the constraint. - If the constraint is `*`, any value part will match. + `{prop-2}:` properties. If the property list includes any other property + such as `alpha:` or if either `{prop-1}:` or `{prop-2}:` are missing, + this pattern variable will not match. Additionally, the properties' + value parts have to meet the constraints given. If the constraint is + `*`, any value part will match. The substitution for `?{prop-1}` is the value part of the `{prop-1}:` property. `#key ??{prop-1}:{constraint}, ??{prop-2}:{constraint}` This matches a property list that has several properties with a symbol - part of `{prop-1}:` or `{prop-2}:`. The substitution for - `??{prop-1}` is several code fragments, each being the value part of a - `{prop-1}:` property. The substitution may use a separator between each - code fragment as described in :doc:`substitutions`. + part of `{prop-1}:` or `{prop-2}:`. The substitution for `??{prop-1}` is + several code fragments, each being the value part of a `{prop-1}:` + property. The substitution may use one of the separators listed in + :ref:`finalitems-subst` between each code fragment. For example, consider this pattern:: @@ -124,7 +124,7 @@ Property list pattern variables my-key: alpha, another-key: beta - This pattern would not match it:: + This pattern would not match:: { #key ?my-key:name } @@ -167,8 +167,8 @@ Body and macro pattern variables substitution will be `#f`. The substitution will wrap the code fragment in `begin` and `end` to make an expression. - A `?:body` pattern variable matches statements and expressions in a - code fragment until it reaches some word, called an `intermediate word`. + A `?:body` pattern variable matches statements and expressions in a code + fragment until it reaches some word, called an `intermediate word`:dfn:. You must ensure that all your `?:body` pattern variables are either followed by a word, or followed by a pattern variable referring to an auxiliary rule set whose rules all start with a word. Those word will @@ -188,8 +188,8 @@ Body and macro pattern variables { endif } { else ?:body endif } - In this example, the macro will not work because the `?:body` variable - is not necessarily followed by a word:: + In this example, the macro will not work because the pattern does not + include an intermediate word following the `?:body` variable:: { when (?:expression) ?:body } @@ -236,10 +236,9 @@ Body and macro pattern variables macro, without the begin…end block that normally surrounds macro expansions. - While you can use the `?:expression` and `?:body` pattern variable - constraints to match function and statement macro calls, they cannot - match definition macro calls, and their substitutions will include the - begin…end wrapper. + While you can use `?:expression` and `?:body` pattern variables to match + macro calls, their substitutions will include a called macro's begin…end + wrapper, and `?:expression` can only match function macro calls. .. _wildcard-variables: @@ -254,14 +253,15 @@ Wildcard pattern variables { ?many-things:* ?:name } - `?many-things` will match everything up to but not including a name. - The substitution for `?many-things` will be everything except that - name name. If the code fragment only has a name, the substitution will - be empty. + `?many-things` will match everything up to but not including a name. The + substitution for `?many-things` will be everything except that name. If + the code fragment only has a name, the substitution for `?many-things` + will be empty. - There can only be one wildcard pattern variable in a sub-pattern. Each - must be separated from other wildcard variables by a semicolon or comma. - For example, this is not a legal pattern:: + There can only be one wildcard pattern variable in a comma- or + semicolon-separated sub-pattern. Each must be separated from other + wildcards by a semicolon or comma. For example, this is not a legal + pattern:: { ?first:* ?second:* } @@ -295,10 +295,10 @@ Wildcard pattern variables Auxiliary rule set pattern variables ==================================== -`?my-aux-rules` +`?{aux-rules}` This syntax can only be used when there is an auxiliary rule set named - the same as the pattern variable. It is equivalent to - `?my-aux-rule:*`. See :doc:`auxiliary-rules`. + the same as the pattern variable. It is equivalent to `?{aux-rules}:*`. + See :doc:`auxiliary-rules`. `...` This syntax can only be used within an auxiliary rule set. If the rule diff --git a/documentation/website/source/articles/macro-system/patterns.rst b/documentation/website/source/articles/macro-system/patterns.rst index 3e5c4b112d..d3c966c9bd 100644 --- a/documentation/website/source/articles/macro-system/patterns.rst +++ b/documentation/website/source/articles/macro-system/patterns.rst @@ -80,16 +80,16 @@ Final items =========== A pattern with at least two list items treats the last item specially. For -example, the pattern `Pattern 1`_ will match any of `Code Fragments`_ and set -and set the pattern variables as follows: +example, the pattern `Pattern 1`_ will match any of `Code Fragments`_, and will +set the pattern variables as follows: -======== ======= ======= ======================= -Fragment ?item-1 ?item-2 ?item-3 -======== ======= ======= ======================= -Line 1 `alpha` `beta` `gamma` -Line 2 `alpha` `beta` -Line 3 `alpha` `beta` `gamma, delta, epsilon` -======== ======= ======= ======================= +============== ======= ======= ======================= +Code Fragments ?item-1 ?item-2 ?item-3 +============== ======= ======= ======================= +Line 1 `alpha` `beta` `gamma` +Line 2 `alpha` `beta` +Line 3 `alpha` `beta` `gamma, delta, epsilon` +============== ======= ======= ======================= This special behavior is usually only relevant when the last item in the list is a wildcard pattern variable (see :ref:`wildcard-variables`). If the pattern were @@ -131,23 +131,6 @@ The end of a comma-separated list of pattern fragments can include `#rest`, { …, #rest ?keys:token, #key ?alpha:token, ?beta:token, #all-keys } -If you write a pattern that contains `#all-keys`, you must also include `#key`. -There are several variations on this syntax; they are described in -:ref:`proplist-variables`. - -`#rest`, `#key`, and `#all-keys` must be the only pattern fragments in their -comma-separated sub-pattern, and that sub-pattern must be the last of several -comma-separated sub-patterns. Here are some examples of when it is or is not -valid to use this syntax in a pattern:: - - /* valid */ { #key ?alpha:token } - /* invalid */ { ?alpha:token #key ?beta:token } - /* valid */ { ?anything:*, #key ?alpha:token, #all-keys } - /* invalid */ { #key ?alpha:token, #all-keys, ?anything:* } - /* valid */ { #key ?alpha:token, #all-keys; ?anything:* } - /* invalid */ { #key ?alpha:token, #key ?beta-token } - /* valid */ { #key ?alpha:token; #key ?beta-token } - This syntax is not used to match a code fragment that contains corresponding literal `#rest`, `#key`, and `#all-keys` fragments. Instead, this syntax matches a code fragment consisting of keyword/value pairs, called a `property @@ -160,3 +143,20 @@ property list and `"a"` and `"b"` are the value parts. If you want to match literal `#rest`, `#key`, or `#all-keys` fragments, escape them in the pattern like `\#rest`, `\#key`, or `\#all-keys`. + +If you write a pattern that contains `#all-keys`, you must also include `#key`. +There are several variations on this syntax; they are described in +:ref:`proplist-variables`. + +`#rest`, `#key`, and `#all-keys` must be the only pattern fragments in their +comma-separated sub-pattern, and that sub-pattern must be the last of several +comma-separated sub-patterns. Here are some examples of when it **is** or **is +not** valid to use this syntax in a pattern:: + + /* valid */ { #key ?alpha:token } + /* not valid */ { ?alpha:token #key ?beta:token } + /* valid */ { ?anything:*, #key ?alpha:token, #all-keys } + /* not valid */ { #key ?alpha:token, #all-keys, ?anything:* } + /* valid */ { #key ?alpha:token, #all-keys; ?anything:* } + /* not valid */ { #key ?alpha:token, #key ?beta-token } + /* valid */ { #key ?alpha:token; #key ?beta-token } diff --git a/documentation/website/source/articles/macro-system/substitutions.rst b/documentation/website/source/articles/macro-system/substitutions.rst index 4eefa52642..cd44ef58fa 100644 --- a/documentation/website/source/articles/macro-system/substitutions.rst +++ b/documentation/website/source/articles/macro-system/substitutions.rst @@ -18,11 +18,17 @@ Substitutions Pattern variables contain code fragments, which can be inserted into the macro expansion via a substitution. A substitution looks much like a pattern variable, -but it are on the template side of the rule and has different syntax forms. +but it is on the template side of the rule and has different syntax forms. A template can only use pattern variables from its corresponding pattern. It cannot use pattern variables from other rules' patterns. + +.. _finalitems-subst: + +Final items +=========== + As a special case, if the template has a separator followed by any of the substitution forms below, and the substituted code fragment is empty, the preceding separator is removed. For example, consider this template:: @@ -69,12 +75,12 @@ Conversion substitutions ======================== `?#"{name}"` - The pattern variable's code fragment, which must be a simple name, is - turned into a symbol and inserted into the expansion. + The code fragment of the pattern variable `{name}`, which must be a + simple name, is turned into a symbol and inserted into the expansion. `?"{name}"` - The pattern variable's code fragment, which must be a simple name, is - turned into a string and inserted into the expansion. + The code fragment of the pattern variable `{name}`, which must be a + simple name, is turned into a string and inserted into the expansion. Concatenation substitutions @@ -105,7 +111,13 @@ Concatenation substitutions "alpha-function" `"{prefix}" ## ?#"{name}" ## "{suffix}"` - As above, but results in a symbol. + As above, but results in a symbol:: + + #"alpha-function" + + Or, equivalently:: + + alpha-function: List substitutions @@ -140,8 +152,8 @@ List substitutions alpha - Any of the separators [seps]_ may be used in place of a comma in the - tempate. + Any of the separators `Separators`_ may be used in place of a comma in + the tempate. Auxiliary rule set substitution From 82c3b2928d04c56cc221813daae52bedbc9ff729 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sun, 1 Jan 2012 08:36:29 -0500 Subject: [PATCH 099/519] Add link to proposals index. --- documentation/website/source/documentation/index.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index e40a345719..b539e78d92 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -171,6 +171,12 @@ Documentation Notes and thoughts on how to format your Dylan code. This is the style guide that we aspire to adhere to in the Open Dylan sources. +`Dylan Enhancement Proposals <../proposals/index.html>`_ + + A series of proposals for improvements to the Open Dylan + implementation and related libraries. + + .. raw:: html
From 1a18d47f4fe18ebb62c7e1f5bf056a829fd64aa4 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sun, 1 Jan 2012 08:37:34 -0500 Subject: [PATCH 100/519] Add proposals directory, with some initial thoughts on improved string hacking --- .../source/proposals/better-strings.rst | 279 ++++++++++++++++++ .../website/source/proposals/index.rst | 24 ++ 2 files changed, 303 insertions(+) create mode 100644 documentation/website/source/proposals/better-strings.rst create mode 100644 documentation/website/source/proposals/index.rst diff --git a/documentation/website/source/proposals/better-strings.rst b/documentation/website/source/proposals/better-strings.rst new file mode 100644 index 0000000000..1e4166dfdb --- /dev/null +++ b/documentation/website/source/proposals/better-strings.rst @@ -0,0 +1,279 @@ +******************************************* +Better String Manipulation for common-dylan +******************************************* + +============== ============================================= +Proposal #: 1 +Title: Better Strings API +Author: Carl Gay +Status: Draft +Content-Type: text/x-rst +Created: 2011.12.27 +Dylan-Version: 2011.1 +============== ============================================= + + +.. contents:: + + +Abstract +======== + +The ``dylan`` and ``common-dylan`` libraries have only limited string +manipulation functionality. This proposal is an attempt to provide a +richer strings API. + +For this draft I'm being slightly loose with signatures. I use names +such as char-or-string rather than writing out each overloaded +signature with explicit types. I'll fix that in a later draft once +the basic form of the API is agreed. --cgay + + + +Goals +===== + +#. Comprehensive string APIs available via the ``common-dylan`` module + in the ``common-dylan`` library. + +#. Replace existing string-extensions module with names directly + available in common-dylan. + +#. Consistent high-level API for when readability and convenience are + paramount. Low-level functions available where a significant + performance improvement can be had. + +#. String operations consistent with regular expression operations + where possible. i.e., share the same generic functions + + +Non Goals +========= + +#. Unicode + +#. Immutable strings + +#. Strings not implemented as subclasses of ````. + + +Constants +========= + +TODO: remove these. I don't see any need for them to be exported. +Leaving them here for now, in case something comes up. + +$control-characters +$printable-characters +$graphic-characters +$decimal-digits +$octal-digits +$hexadecimal-digits +$ascii-letters +$whitespace-characters +$alphanumeric-characters + + + +Functions +========= + + +Predicates +---------- + +These all work for a single character or for a string. When applied +to a string they are true if they're true for each character in the +string. + +These are mainly taken from string-extensions/character-type.dylan. + +ascii-control? (char-or-string) => () + +ascii-printable? (char-or-string) => () + +ascii-graphic? (char-or-string) => () + +ascii-letter? (char-or-string) => () + +lowercase? (char-or-string) => () + +uppercase? (char-or-string) => () + +whitespace? (char-or-string) => () + +alphanumeric? (char-or-string) => () + +decimal-digit? (char-or-string) => () + +octal-digit? (char-or-string) => () + +hexadecimal-digit? (char-or-string) => () + + +Comparisons +----------- + +Characters +~~~~~~~~~~ + +Case insensitive character comparisons for use as the value of various +"test" parameters. For case-sensitive comparison, use "=". +:: + + ci-char-equal? (char1, char2) + ci-char-less? (char1, char2) + ci-char-greater? (char1, char2) + +**Discussion** + +The "ci-*" naming scheme is consistent with other proposed functions +(below). Case-insensitive character comparison is used frequently +enough in our existing code base that at least ``ci-char-equal?`` +should exist. ``ci-char-less?`` and ``ci-char-greater?`` are likely +to be less useful, but are provided for completeness. + + +Strings +~~~~~~~ + +String comparisons, both case-sensitive and case-insensitive. These +default to comparing the entire string but allow comparing substrings +via keyword arguments. +:: + + string-compare (string1, string2, #key start1, end1, start2, end2, test) + Low-level function used to implement the functions below. + +These are case-sensitive:: + + string-equal? (string1, string2, #key start1, end1, start2, end2) + string-less? (string1, string2, #key start1, end1, start2, end2) + string-greater? (string1, string2, #key start1, end1, start2, end2) + +These are case-insensitive:: + + ci-string-equal? (string1, string2, #key start1, end1, start2, end2) + ci-string-less? (string1, string2, #key start1, end1, start2, end2) + ci-string-greater? (string1, string2, #key start1, end1, start2, end2) + +From the ``dylan`` module (included for completeness):: + + = (char-or-string, char-or-string) + < (char-or-string, char-or-string) + > (char-or-string, char-or-string) + + +**Discussion** + +Some people may object to the ci-* functions on the grounds that a +"test" parameter could be added to the non-ci-* functions instead. +But consider this type of code, which is likely to be fairly common:: + + sort(seq, test: ci-string-less?) + +Instead one would have to write this:: + + sort(seq, test: rcurry(string-less?, test: ci-char-equal?)) + +or worse, if ci-char-equal? is removed on the same grounds:: + + sort(seq, test: rcurry(string-less?, test: method (c1, c2) + as-lowercase(c1) = as-lowercase(c2) + end)) + +or, the less efficient but more concise:: + + sort(seq, test: method (s1, s2) as-lowercase(s1) < as-lowercase(s2) end) + +The abbreviation "ci" stands for case-insensitive. In the author's +opinion "case-insensitive-string-less?" etc. are simply too long and +"ci" is easy enough to remember. The author is willing to be +out-voted on this point. + + +Conversions +----------- + +make(, size: n, fill: char) + +concatenate(sequence, #rest sequences) // somewhat redundant with "join" + +copy(string, #key start, end) + +lowercase(char-or-string, #key start, end) + +lowercase!(char-or-string, #key start, end) + +uppercase(char-or-string, #key start, end) + +uppercase!(char-or-string, #key start, end) + +wrap(string, width, #key prefix = "", test, strict?) => (new-string) + Return a copy of ``string`` which has been line wrapped at column width + ``width``. Each line is prefixed with ``prefix``, which defaults to the + empty string. The ``test`` determines where it is acceptable to wrap + long lines. It defaults to a function that will only wrap on whitespace. + If any non-breakable sequence of characters (plus the prefix) is wider + than ``width``, then ``width`` will be exceeded in that case unless + ``strict?`` is true. + + **TODO:** exact contract of ``test`` function. It may become more + obvious during implementation. Consider: how to deal with wrapping + on '-'. + +pad-left(string, width, #key fill = ' ') +pad-right(string, width, #key fill = ' ') +pad-center(string, width, #key fill = ' ') + Return a string of the given ``width``. If the given ``string`` + is shorter than ``width``, add ``fill`` equally to both sides of + the result such that the original string is center aligned. + + Examples:: + + pad-center("x", 5) => " x " + pad-center("x", 4) => " x " or " x " (unspecified) + pad-center("x", 7, fill: '.') => "...x..." + + Return a string padded on the left or right with ``fill`` until it + is ``width`` columns wide. If ``string``.size is >= ``width`` no + padding is performed. + +strip(string, #key start, end, test) + +find(string, pattern, #key start, end, test) + +starts-with?(string, pattern) => + +ends-with?(string, pattern) => + +replace(string, pattern, new, #key test) + +replace!(string, pattern, new, #key test) + +slice(sequence, #key start, end, step) => (new-sequence) + +slice!(sequence, #key start, end, step) => (sequence) + Return value may share structure with original sequence. + +join(parts, separator, #key start, end, key, conjunction) => (string) + +split(string, separator, #key start, end, max, remove-if-empty?) => (sequence-of-strings) + +split-lines(string, #rest split-keys) => (sequence-of-strings) + Alternative: split(text, find-end-of-line, #key ...) + +count(string, pattern, #key start, end, test, overlap?) => (n) + +interpolate(string, table) => (string) + interpolate("foo {x}", table("x" => 5)) => "foo 5" + + +Other +===== + +* Move and friends from string-extensions to + regular-expressions. That's the only place that uses it, and it is + unlikely to be of much use elsewhere. See conversation in #dylan on + 2011.12.26. + diff --git a/documentation/website/source/proposals/index.rst b/documentation/website/source/proposals/index.rst new file mode 100644 index 0000000000..d161aa770a --- /dev/null +++ b/documentation/website/source/proposals/index.rst @@ -0,0 +1,24 @@ +*************************** +Dylan Enhancement Proposals +*************************** + +.. contents:: + + +Active Proposals +================ + +#. `Better string manipulation for common-dylan `_ + + +Accepted Proposals +================== + +There are no accepted proposals. + + +Declined Proposals +================== + +There are no declined proposals. + From 9d602a279ac00987c6f44464f6ba664427493f8c Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 2 Jan 2012 14:17:11 -0500 Subject: [PATCH 101/519] fix typo --- .../source/articles/macro-system/background-overview.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/articles/macro-system/background-overview.rst b/documentation/website/source/articles/macro-system/background-overview.rst index 096192b500..fae64fc5fd 100644 --- a/documentation/website/source/articles/macro-system/background-overview.rst +++ b/documentation/website/source/articles/macro-system/background-overview.rst @@ -18,7 +18,7 @@ Background and Overview Macros work on the basis of code fragments. The macro system does not understand code fragments; it just substitutes some fragments for other -fragments. Once the macro system has substituted and arrange all the code +fragments. Once the macro system has substituted and arranged all the code fragments, they are compiled into executable code. Because the macro system parses and generates code fragments, it can recognize From 5a9ad0445e9162e3b84f50dbc20e40ce26d1e5d5 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sat, 7 Jan 2012 17:35:36 -0500 Subject: [PATCH 102/519] Python PEP 1, unmodified --- .../website/source/proposals/dep-0001.rst | 516 ++++++++++++++++++ 1 file changed, 516 insertions(+) create mode 100644 documentation/website/source/proposals/dep-0001.rst diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst new file mode 100644 index 0000000000..b018ccd1cf --- /dev/null +++ b/documentation/website/source/proposals/dep-0001.rst @@ -0,0 +1,516 @@ +PEP: 1 +Title: PEP Purpose and Guidelines +Version: $Revision$ +Last-Modified: $Date$ +Author: Barry Warsaw, Jeremy Hylton, David Goodger +Status: Active +Type: Process +Content-Type: text/x-rst +Created: 13-Jun-2000 +Post-History: 21-Mar-2001, 29-Jul-2002, 03-May-2003 + + +What is a PEP? +============== + +PEP stands for Python Enhancement Proposal. A PEP is a design +document providing information to the Python community, or describing +a new feature for Python or its processes or environment. The PEP +should provide a concise technical specification of the feature and a +rationale for the feature. + +We intend PEPs to be the primary mechanisms for proposing new +features, for collecting community input on an issue, and for +documenting the design decisions that have gone into Python. The PEP +author is responsible for building consensus within the community and +documenting dissenting opinions. + +Because the PEPs are maintained as text files in a versioned +repository, their revision history is the historical record of the +feature proposal [1]_. + + +PEP Types +========= + +There are three kinds of PEP: + +1. A **Standards Track** PEP describes a new feature or implementation + for Python. + +2. An **Informational** PEP describes a Python design issue, or + provides general guidelines or information to the Python community, + but does not propose a new feature. Informational PEPs do not + necessarily represent a Python community consensus or + recommendation, so users and implementors are free to ignore + Informational PEPs or follow their advice. + +3. A **Process** PEP describes a process surrounding Python, or + proposes a change to (or an event in) a process. Process PEPs are + like Standards Track PEPs but apply to areas other than the Python + language itself. They may propose an implementation, but not to + Python's codebase; they often require community consensus; unlike + Informational PEPs, they are more than recommendations, and users + are typically not free to ignore them. Examples include + procedures, guidelines, changes to the decision-making process, and + changes to the tools or environment used in Python development. + Any meta-PEP is also considered a Process PEP. + + +PEP Work Flow +============= + +The PEP editors assign PEP numbers and change their status. Please send +all PEP-related email to (no cross-posting please). +Also see `PEP Editor Responsibilities & Workflow`_ below. + +The PEP process begins with a new idea for Python. It is highly +recommended that a single PEP contain a single key proposal or new +idea. Small enhancements or patches often don't need +a PEP and can be injected into the Python development work flow with a +patch submission to the Python `issue tracker`_. The more focussed the +PEP, the more successful it tends to be. The PEP editor reserves the +right to reject PEP proposals if they appear too unfocussed or too +broad. If in doubt, split your PEP into several well-focussed ones. + +Each PEP must have a champion -- someone who writes the PEP using the +style and format described below, shepherds the discussions in the +appropriate forums, and attempts to build community consensus around +the idea. The PEP champion (a.k.a. Author) should first attempt to +ascertain whether the idea is PEP-able. Posting to the +comp.lang.python newsgroup (a.k.a. python-list@python.org mailing +list) or the python-ideas mailing list is the best way to go about this. + +Vetting an idea publicly before going as far as writing a PEP is meant +to save the potential author time. Many ideas have been brought +forward for changing Python that have been rejected for various +reasons. Asking the Python community first if an idea is original +helps prevent too much time being spent on something that is +guaranteed to be rejected based on prior discussions (searching +the internet does not always do the trick). It also helps to make sure +the idea is applicable to the entire community and not just the author. +Just because an idea sounds good to the author does not +mean it will work for most people in most areas where Python is used. + +Once the champion has asked the Python community as to whether an +idea has any chance of acceptance, a draft PEP should be presented to +python-ideas. This gives the author a chance to flesh out the draft +PEP to make properly formatted, of high quality, and to address +initial concerns about the proposal. + +Following a discussion on python-ideas, the proposal should be sent to +the `python-dev list `__ with the draft +PEP and the PEP editors . This +draft must be written in PEP style as described below, else it will be +sent back without further regard until proper formatting rules are +followed. + +If the PEP editor approves, he will assign the PEP a number, label it +as Standards Track, Informational, or Process, give it status "Draft", +and create and check-in the initial draft of the PEP. The PEP editor +will not unreasonably deny a PEP. Reasons for denying PEP status +include duplication of effort, being technically unsound, not +providing proper motivation or addressing backwards compatibility, or +not in keeping with the Python philosophy. The BDFL (Benevolent +Dictator for Life, Guido van Rossum) can be consulted during the +approval phase, and is the final arbiter of the draft's PEP-ability. + +As updates are necessary, the PEP author can check in new versions if +they have SVN commit permissions, or can email new PEP versions to +the PEP editor for committing. + +Standards Track PEPs consist of two parts, a design document and a +reference implementation. The PEP should be reviewed and accepted +before a reference implementation is begun, unless a reference +implementation will aid people in studying the PEP. Standards Track +PEPs must include an implementation -- in the form of code, a patch, +or a URL to same -- before it can be considered Final. + +PEP authors are responsible for collecting community feedback on a PEP +before submitting it for review. However, wherever possible, long +open-ended discussions on public mailing lists should be avoided. +Strategies to keep the +discussions efficient include: setting up a separate SIG mailing list +for the topic, having the PEP author accept private comments in the +early design phases, setting up a wiki page, etc. PEP authors should +use their discretion here. + +Once the authors have completed a PEP, they must inform the PEP editor +that it is ready for review. PEPs are reviewed by the BDFL and his +chosen consultants, who may accept or reject a PEP or send it back to +the author(s) for revision. For a PEP that is pre-determined to be +acceptable (e.g., it is an obvious win as-is and/or its implementation +has already been checked in) the BDFL may also initiate a PEP review, +first notifying the PEP author(s) and giving them a chance to make +revisions. + +For a PEP to be accepted it must meet certain minimum criteria. It +must be a clear and complete description of the proposed enhancement. +The enhancement must represent a net improvement. The proposed +implementation, if applicable, must be solid and must not complicate +the interpreter unduly. Finally, a proposed enhancement must be +"pythonic" in order to be accepted by the BDFL. (However, "pythonic" +is an imprecise term; it may be defined as whatever is acceptable to +the BDFL. This logic is intentionally circular.) See PEP 2 [2]_ for +standard library module acceptance criteria. + +Once a PEP has been accepted, the reference implementation must be +completed. When the reference implementation is complete and accepted +by the BDFL, the status will be changed to "Final". + +A PEP can also be assigned status "Deferred". The PEP author or +editor can assign the PEP this status when no progress is being made +on the PEP. Once a PEP is deferred, the PEP editor can re-assign it +to draft status. + +A PEP can also be "Rejected". Perhaps after all is said and done it +was not a good idea. It is still important to have a record of this +fact. + +PEPs can also be superseded by a different PEP, rendering the original +obsolete. This is intended for Informational PEPs, where version 2 of +an API can replace version 1. + +The possible paths of the status of PEPs are as follows: + +.. image:: pep-0001-1.png + +Some Informational and Process PEPs may also have a status of "Active" +if they are never meant to be completed. E.g. PEP 1 (this PEP). + + +What belongs in a successful PEP? +================================= + +Each PEP should have the following parts: + +1. Preamble -- RFC 822 style headers containing meta-data about the + PEP, including the PEP number, a short descriptive title (limited + to a maximum of 44 characters), the names, and optionally the + contact info for each author, etc. + +2. Abstract -- a short (~200 word) description of the technical issue + being addressed. + +3. Copyright/public domain -- Each PEP must either be explicitly + labelled as placed in the public domain (see this PEP as an + example) or licensed under the `Open Publication License`_. + +4. Specification -- The technical specification should describe the + syntax and semantics of any new language feature. The + specification should be detailed enough to allow competing, + interoperable implementations for any of the current Python + platforms (CPython, Jython, Python .NET). + +5. Motivation -- The motivation is critical for PEPs that want to + change the Python language. It should clearly explain why the + existing language specification is inadequate to address the + problem that the PEP solves. PEP submissions without sufficient + motivation may be rejected outright. + +6. Rationale -- The rationale fleshes out the specification by + describing what motivated the design and why particular design + decisions were made. It should describe alternate designs that + were considered and related work, e.g. how the feature is supported + in other languages. + + The rationale should provide evidence of consensus within the + community and discuss important objections or concerns raised + during discussion. + +7. Backwards Compatibility -- All PEPs that introduce backwards + incompatibilities must include a section describing these + incompatibilities and their severity. The PEP must explain how the + author proposes to deal with these incompatibilities. PEP + submissions without a sufficient backwards compatibility treatise + may be rejected outright. + +8. Reference Implementation -- The reference implementation must be + completed before any PEP is given status "Final", but it need not + be completed before the PEP is accepted. It is better to finish + the specification and rationale first and reach consensus on it + before writing code. + + The final implementation must include test code and documentation + appropriate for either the Python language reference or the + standard library reference. + + +PEP Formats and Templates +========================= + +There are two PEP formats available to authors: plaintext and +reStructuredText_. Both are UTF-8-encoded text files. + +Plaintext PEPs are written with minimal structural markup that adheres +to a rigid style. PEP 9 contains a instructions and a template [3]_ +you can use to get started writing your plaintext PEP. + +ReStructuredText_ PEPs allow for rich markup that is still quite easy +to read, but results in much better-looking and more functional HTML. +PEP 12 contains instructions and a template [4]_ for reStructuredText +PEPs. + +There is a Python script that converts both styles of PEPs to HTML for +viewing on the web [5]_. Parsing and conversion of plaintext PEPs is +self-contained within the script. reStructuredText PEPs are parsed +and converted by Docutils_ code called from the script. + + +PEP Header Preamble +=================== + +Each PEP must begin with an RFC 822 style header preamble. The headers +must appear in the following order. Headers marked with "*" are +optional and are described below. All other headers are required. :: + + PEP: + Title: + Version: + Last-Modified: + Author: + * Discussions-To: + Status: + Type: + * Content-Type: + * Requires: + Created: + * Python-Version: + Post-History: + * Replaces: + * Superseded-By: + * Resolution: + +The Author header lists the names, and optionally the email addresses +of all the authors/owners of the PEP. The format of the Author header +value must be + + Random J. User + +if the email address is included, and just + + Random J. User + +if the address is not given. For historical reasons the format +"address@dom.ain (Random J. User)" may appear in a PEP, however new +PEPs must use the mandated format above, and it is acceptable to +change to this format when PEPs are updated. + +If there are multiple authors, each should be on a separate line +following RFC 2822 continuation line conventions. Note that personal +email addresses in PEPs will be obscured as a defense against spam +harvesters. + +*Note: The Resolution header is required for Standards Track PEPs +only. It contains a URL that should point to an email message or +other web resource where the pronouncement about the PEP is made.* + +While a PEP is in private discussions (usually during the initial +Draft phase), a Discussions-To header will indicate the mailing list +or URL where the PEP is being discussed. No Discussions-To header is +necessary if the PEP is being discussed privately with the author, or +on the python-list or python-dev email mailing lists. Note that email +addresses in the Discussions-To header will not be obscured. + +The Type header specifies the type of PEP: Standards Track, +Informational, or Process. + +The format of a PEP is specified with a Content-Type header. The +acceptable values are "text/plain" for plaintext PEPs (see PEP 9 [3]_) +and "text/x-rst" for reStructuredText PEPs (see PEP 12 [4]_). +Plaintext ("text/plain") is the default if no Content-Type header is +present. + +The Created header records the date that the PEP was assigned a +number, while Post-History is used to record the dates of when new +versions of the PEP are posted to python-list and/or python-dev. Both +headers should be in dd-mmm-yyyy format, e.g. 14-Aug-2001. + +Standards Track PEPs must have a Python-Version header which indicates +the version of Python that the feature will be released with. +Informational and Process PEPs do not need a Python-Version header. + +PEPs may have a Requires header, indicating the PEP numbers that this +PEP depends on. + +PEPs may also have a Superseded-By header indicating that a PEP has +been rendered obsolete by a later document; the value is the number of +the PEP that replaces the current document. The newer PEP must have a +Replaces header containing the number of the PEP that it rendered +obsolete. + + +Auxiliary Files +=============== + +PEPs may include auxiliary files such as diagrams. Such files must be +named ``pep-XXXX-Y.ext``, where "XXXX" is the PEP number, "Y" is a +serial number (starting at 1), and "ext" is replaced by the actual +file extension (e.g. "png"). + + +Reporting PEP Bugs, or Submitting PEP Updates +============================================= + +How you report a bug, or submit a PEP update depends on several +factors, such as the maturity of the PEP, the preferences of the PEP +author, and the nature of your comments. For the early draft stages +of the PEP, it's probably best to send your comments and changes +directly to the PEP author. For more mature, or finished PEPs you may +want to submit corrections to the Python `issue tracker`_ so that your +changes don't get lost. If the PEP author is a Python developer, assign the +bug/patch to him, otherwise assign it to the PEP editor. + +When in doubt about where to send your changes, please check first +with the PEP author and/or PEP editor. + +PEP authors who are also Python committers can update the +PEPs themselves by using "svn commit" to commit their changes. + + +Transferring PEP Ownership +========================== + +It occasionally becomes necessary to transfer ownership of PEPs to a +new champion. In general, we'd like to retain the original author as +a co-author of the transferred PEP, but that's really up to the +original author. A good reason to transfer ownership is because the +original author no longer has the time or interest in updating it or +following through with the PEP process, or has fallen off the face of +the 'net (i.e. is unreachable or not responding to email). A bad +reason to transfer ownership is because you don't agree with the +direction of the PEP. We try to build consensus around a PEP, but if +that's not possible, you can always submit a competing PEP. + +If you are interested in assuming ownership of a PEP, send a message +asking to take over, addressed to both the original author and the PEP +editor . If the original author doesn't respond to +email in a timely manner, the PEP editor will make a unilateral +decision (it's not like such decisions can't be reversed :). + + +PEP Editor Responsibilities & Workflow +====================================== + +A PEP editor must subscribe to the list. All +PEP-related correspondence should be sent (or CC'd) to + (but please do not cross-post!). + +For each new PEP that comes in an editor does the following: + +* Read the PEP to check if it is ready: sound and complete. The ideas + must make technical sense, even if they don't seem likely to be + accepted. + +* The title should accurately describe the content. + +* Edit the PEP for language (spelling, grammar, sentence structure, + etc.), markup (for reST PEPs), code style (examples should match PEP + 8 & 7). + +If the PEP isn't ready, the editor will send it back to the author for +revision, with specific instructions. + +Once the PEP is ready for the repository, the PEP editor will: + +* Assign a PEP number (almost always just the next available number, + but sometimes it's a special/joke number, like 666 or 3141). + +* List the PEP in PEP 0 (in two places: the categorized list, and the + numeric list). + +* Add the PEP to SVN. For Subversion repository instructions, see + `the FAQ for Developers + `_. + + The command to check out a read-only copy of the repository is:: + + svn checkout http://svn.python.org/projects/peps/trunk peps + + The command to check out a read-write copy of the repository is:: + + svn checkout svn+ssh://pythondev@svn.python.org/peps/trunk peps + + In particular, the ``svn:eol-style`` property should be set to ``native`` + and the ``svn:keywords`` property to ``Author Date Id Revision``. + +* Monitor python.org to make sure the PEP gets added to the site + properly. + +* Send email back to the PEP author with next steps (post to + python-list & -dev). + +Updates to existing PEPs also come in to peps@python.org. Many PEP +authors are not SVN committers yet, so we do the commits for them. + +Many PEPs are written and maintained by developers with write access +to the Python codebase. The PEP editors monitor the python-checkins +list for PEP changes, and correct any structure, grammar, spelling, or +markup mistakes we see. + +The editors don't pass judgement on PEPs. We merely do the +administrative & editorial part. Except for times like this, there's +relatively low volume. + +Resources: + +* `How Python is Developed `_ + +* `Python's Development Process `_ + +* `Why Develop Python? `_ + +* `Development Tools `_ + +* `Frequently Asked Questions for Developers + `_ + + +References and Footnotes +======================== + +.. [1] This historical record is available by the normal SVN commands + for retrieving older revisions. For those without direct access to + the SVN tree, you can browse the current and past PEP revisions here: + http://svn.python.org/view/peps/trunk/ + +.. [2] PEP 2, Procedure for Adding New Modules, Faassen + (http://www.python.org/dev/peps/pep-0002) + +.. [3] PEP 9, Sample Plaintext PEP Template, Warsaw + (http://www.python.org/dev/peps/pep-0009) + +.. [4] PEP 12, Sample reStructuredText PEP Template, Goodger, Warsaw + (http://www.python.org/dev/peps/pep-0012) + +.. [5] The script referred to here is pep2pyramid.py, the successor to + pep2html.py, both of which live in the same directory in the SVN + tree as the PEPs themselves. Try ``pep2html.py --help`` for + details. The URL for viewing PEPs on the web is + http://www.python.org/dev/peps/. + +.. _issue tracker: + http://bugs.python.org/ + +.. _Open Publication License: http://www.opencontent.org/openpub/ + +.. _reStructuredText: http://docutils.sourceforge.net/rst.html + +.. _Docutils: http://docutils.sourceforge.net/ + + +Copyright +========= + +This document has been placed in the public domain. + + +.. + Local Variables: + mode: indented-text + indent-tabs-mode: nil + sentence-end-double-space: t + fill-column: 70 + coding: utf-8 + End: From 2b575a3ac8a08c2e56473fa745987b4eee7218f6 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sat, 7 Jan 2012 18:16:56 -0500 Subject: [PATCH 103/519] "define function" proposal, unmodified from original --- .../website/source/proposals/dep-0002.rst | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 documentation/website/source/proposals/dep-0002.rst diff --git a/documentation/website/source/proposals/dep-0002.rst b/documentation/website/source/proposals/dep-0002.rst new file mode 100644 index 0000000000..7ed33b90bd --- /dev/null +++ b/documentation/website/source/proposals/dep-0002.rst @@ -0,0 +1,117 @@ +PROPOSAL NAME: Define Function + +PROPOSAL: + + Add a "define function" defining macro that creates a constant + binding in the current module and initializes it to a new function. + The new defining macro has the following syntax: + + DEFINE { adjective }* FUNCTION name parameter-list + [ body ] + END [ FUNCTION ] [ name ] + + The adjectives allowed are implementation dependent. The parameter + list describes the number and types of the arguments that the + function accepts, and the number and types of the values it returns. + It is an error to supply #next in the parameter list, and there is + no implicit #next parameter. + + Using reflective operations on "define function" functions: + + 1] For the following functions an implementation may choose to + return a meaningful result (or perform a meaningful side-effect + operation), or the implementation may signal an error: + generic-function-methods, add-method, find-method, + generic-function-mandatory-keywords, remove-method, + sorted-applicable-methods, applicable-method? + + Note, the error signalled might not be a , + and this implementation choice holds for a "define function" + function that is passed as either argument to add-method and + remove-method. + + 2] The following functions return the same values as they would + for a bare method defined with the same signature: + function-specializers, function-arguments, + function-return-values + + "Define function" could be added either to the core language or to a + library. + +RATIONALE: + + Many programmers desire a way to define a function that clearly + says to other programmers that the function is not part of any + generic operation; furthermore, the function won't be extended as a + generic function, and calling it need not involve any generic + dispatch. The two main choices in current practice are: + + define constant cube = method (x) x * x * x end; + + define method cube (x) x * x * x end; + + The first choice is clumsy because it makes it hard to distinguish + function constants from non-function constants. The second choice + does not make it clear that this is the only method for the + function. The "define function" proposal gives everybody one + simple way to express their intent. The expansion of the macro is + left unspecified so that Dylan implementations have latitude to + support it in the best way suited to the implementation. + + This proposal defines the behavior of applicable-method? when called + on "define function" functions based on new wording that describes + applicable-method? in the DRM. + +EXAMPLES: + + An example use: + + define function cube (x) x * x * x end; + + Below is one possible implementation of the macro. This implementation + supports whatever adjectives are supported by "define constant". + Other implementations are possible. + + define macro function-definer + { define ?adjectives:* function ?name:name + ?signature-and-body:* end } + => { define ?adjectives constant ?name = method + ?signature-and-body end } + end macro function-definer; + +COST TO IMPLEMENTORS: + + The cost is very little, essentially a macro definition and exporting + the identifier for the macro. An implementation may also want to + annotate the function's name in the compiler's database to indicate + that the function should not be extended (or added to a generic + function if it is a method), signalling appropriate errors or + protecting compiler optimizations based on assumptions about the + function. + +REVISION HISTORY: + + Version 1; Harlequin, Inc.; Bill Chiles; 26 JAN 96. + Initial proposal with input from a few people. + Version 2; Harlequin, Inc.; Bill Chiles; 01 FEB 96. + New specification of reflective operations on functions. + Replaces rationale text for the specification of reflective + operations with one sentences about applicable-method?. + Strengthens #next restriction by saying there is no implicit + #next argument. + Removes controversial macro example. + Version 3; Harlequin, Inc.; Bill Chiles; 08 FEB 96. + Described "define function" defining macro without reference to + "define method". + Version 4; Harlequin, Inc.; Peter Norvig 13 MAR 96. + Changed format to meet the new Dylan Change Proposal Format. + Added two possible macro implementations. + Version 5; Kim Barrett 31 Dec 1996 + Removed incorrect example macro definition which used "define method" + in the expansion. (Incorrect because it introduces an implicit binding + of a variable named "next-method" around the body, which is counter to + the specified contract for this macro.) + +STATUS: + + Accepted 31 December 1996 From 842910745b75de18628cf0f627a4f3e9bb76648d Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sun, 8 Jan 2012 00:57:39 -0500 Subject: [PATCH 104/519] Initial rewrite from the Python version. --- .../website/source/proposals/dep-0001.rst | 555 +++++++----------- 1 file changed, 224 insertions(+), 331 deletions(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index b018ccd1cf..578f1ae2d0 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -1,212 +1,190 @@ -PEP: 1 -Title: PEP Purpose and Guidelines -Version: $Revision$ -Last-Modified: $Date$ -Author: Barry Warsaw, Jeremy Hylton, David Goodger -Status: Active -Type: Process -Content-Type: text/x-rst -Created: 13-Jun-2000 -Post-History: 21-Mar-2001, 29-Jul-2002, 03-May-2003 - - -What is a PEP? +============== ============================================= +DEP #: 1 +Title: DEP Purpose and Guidelines +Type: Process +Author: Carl Gay +Status: Draft +Created: 07-Jan-2011 +Post-History: None +============== ============================================= + + +Preamble +======== + +This document is based heavily on Python PEP 1, "PEP Purpose and +Guidelines", by Barry Warsaw, Jeremy Hylton, and David Goodger. The +author would like to thank them for providing an excellent base for +the Dylan team to work from. + + +What is a DEP? ============== -PEP stands for Python Enhancement Proposal. A PEP is a design -document providing information to the Python community, or describing -a new feature for Python or its processes or environment. The PEP +DEP stands for Dylan Enhancement Proposal. A DEP is a design +document providing information to the Dylan community, or describing +a new feature for Dylan or its processes or environment. The DEP should provide a concise technical specification of the feature and a rationale for the feature. -We intend PEPs to be the primary mechanisms for proposing new +We intend DEPs to be the primary mechanisms for proposing new features, for collecting community input on an issue, and for -documenting the design decisions that have gone into Python. The PEP +documenting the design decisions that have gone into Dylan. The DEP author is responsible for building consensus within the community and documenting dissenting opinions. -Because the PEPs are maintained as text files in a versioned +Because the DEPs are maintained as text files in a versioned repository, their revision history is the historical record of the feature proposal [1]_. -PEP Types +DEP Types ========= -There are three kinds of PEP: +There are three kinds of DEP: -1. A **Standards Track** PEP describes a new feature or implementation - for Python. +1. A **Standards Track** DEP describes a new feature or implementation + for Dylan. -2. An **Informational** PEP describes a Python design issue, or - provides general guidelines or information to the Python community, - but does not propose a new feature. Informational PEPs do not - necessarily represent a Python community consensus or +2. An **Informational** DEP describes a Dylan design issue, or + provides general guidelines or information to the Dylan community, + but does not propose a new feature. Informational DEPs do not + necessarily represent a Dylan community consensus or recommendation, so users and implementors are free to ignore - Informational PEPs or follow their advice. + Informational DEPs or follow their advice. -3. A **Process** PEP describes a process surrounding Python, or - proposes a change to (or an event in) a process. Process PEPs are - like Standards Track PEPs but apply to areas other than the Python +3. A **Process** DEP describes a process surrounding Dylan, or + proposes a change to (or an event in) a process. Process DEPs are + like Standards Track DEPs but apply to areas other than the Dylan language itself. They may propose an implementation, but not to - Python's codebase; they often require community consensus; unlike - Informational PEPs, they are more than recommendations, and users + Dylan's codebase; they often require community consensus; unlike + Informational DEPs, they are more than recommendations, and users are typically not free to ignore them. Examples include procedures, guidelines, changes to the decision-making process, and - changes to the tools or environment used in Python development. - Any meta-PEP is also considered a Process PEP. + changes to the tools or environment used in Dylan development. + Any meta-DEP is also considered a Process DEP. -PEP Work Flow +DEP Work Flow ============= -The PEP editors assign PEP numbers and change their status. Please send -all PEP-related email to (no cross-posting please). -Also see `PEP Editor Responsibilities & Workflow`_ below. - -The PEP process begins with a new idea for Python. It is highly -recommended that a single PEP contain a single key proposal or new -idea. Small enhancements or patches often don't need -a PEP and can be injected into the Python development work flow with a -patch submission to the Python `issue tracker`_. The more focussed the -PEP, the more successful it tends to be. The PEP editor reserves the -right to reject PEP proposals if they appear too unfocussed or too -broad. If in doubt, split your PEP into several well-focussed ones. +The DEP process begins with a new idea for Dylan. It is highly +recommended that a single DEP contain a single key proposal or new +idea. Small enhancements or patches often don't need a DEP and can be +injected into the Dylan development work flow with a patch submission +to the issue tracker for the appropriate repository on GitHub. The +more focussed the DEP, the more successful it tends to be. If in +doubt, split your DEP into several well-focussed ones. -Each PEP must have a champion -- someone who writes the PEP using the +Each DEP must have a champion -- someone who writes the DEP using the style and format described below, shepherds the discussions in the appropriate forums, and attempts to build community consensus around -the idea. The PEP champion (a.k.a. Author) should first attempt to -ascertain whether the idea is PEP-able. Posting to the -comp.lang.python newsgroup (a.k.a. python-list@python.org mailing -list) or the python-ideas mailing list is the best way to go about this. - -Vetting an idea publicly before going as far as writing a PEP is meant -to save the potential author time. Many ideas have been brought -forward for changing Python that have been rejected for various -reasons. Asking the Python community first if an idea is original +the idea. The DEP champion (a.k.a. Author) should first attempt to +ascertain whether the idea is DEP-able. Posting to +hackers@opendylan.org is the best way to go about this. + +Vetting an idea publicly before going as far as writing a DEP is meant +to save the potential author time. Many ideas have been brought +forward for changing Dylan that have been rejected for various +reasons. Asking the Dylan community first if an idea is original helps prevent too much time being spent on something that is guaranteed to be rejected based on prior discussions (searching the internet does not always do the trick). It also helps to make sure the idea is applicable to the entire community and not just the author. Just because an idea sounds good to the author does not -mean it will work for most people in most areas where Python is used. - -Once the champion has asked the Python community as to whether an -idea has any chance of acceptance, a draft PEP should be presented to -python-ideas. This gives the author a chance to flesh out the draft -PEP to make properly formatted, of high quality, and to address -initial concerns about the proposal. - -Following a discussion on python-ideas, the proposal should be sent to -the `python-dev list `__ with the draft -PEP and the PEP editors . This -draft must be written in PEP style as described below, else it will be -sent back without further regard until proper formatting rules are -followed. - -If the PEP editor approves, he will assign the PEP a number, label it -as Standards Track, Informational, or Process, give it status "Draft", -and create and check-in the initial draft of the PEP. The PEP editor -will not unreasonably deny a PEP. Reasons for denying PEP status -include duplication of effort, being technically unsound, not -providing proper motivation or addressing backwards compatibility, or -not in keeping with the Python philosophy. The BDFL (Benevolent -Dictator for Life, Guido van Rossum) can be consulted during the -approval phase, and is the final arbiter of the draft's PEP-ability. - -As updates are necessary, the PEP author can check in new versions if -they have SVN commit permissions, or can email new PEP versions to -the PEP editor for committing. - -Standards Track PEPs consist of two parts, a design document and a -reference implementation. The PEP should be reviewed and accepted +mean it will work for most people in most areas where Dylan is used. + +Once the champion has asked the Dylan community whether an idea has +any chance of acceptance, a properly formatted draft DEP should be +presented to hackers@opendylan.org. The initial DEP status should be +"Draft". The DEP author should assign the next available DEP number +to the DEP by looking at the `DEP directory `_ to find the +highest used number. The DEP number is not assured until the DEP has +been committed to the `origin Git repository +`_. +As updates are necessary, the DEP author may commit new versions. + +Because Dylan does not have a Benevolent Dictator for Life (as Python +has in Guido van Rossum) we rely on reaching consensus on the hackers +mailing list. Consensus _must_ be reached for the DEP to be approved. +Exactly what "consensus" means here is left undefined, as we expect +most cases to be obvious and we wish to keep the process informal for +now. At such time as this becomes a problem we may implement a more +formal scheme (e.g., voting). + +Standards Track DEPs consist of two parts, a design document and a +reference implementation. The DEP should be reviewed and accepted before a reference implementation is begun, unless a reference -implementation will aid people in studying the PEP. Standards Track -PEPs must include an implementation -- in the form of code, a patch, +implementation will aid people in studying the DEP. Standards Track +DEPs must include an implementation -- in the form of code, a patch, or a URL to same -- before it can be considered Final. -PEP authors are responsible for collecting community feedback on a PEP +DEP authors are responsible for collecting community feedback on a DEP before submitting it for review. However, wherever possible, long open-ended discussions on public mailing lists should be avoided. -Strategies to keep the -discussions efficient include: setting up a separate SIG mailing list -for the topic, having the PEP author accept private comments in the -early design phases, setting up a wiki page, etc. PEP authors should -use their discretion here. - -Once the authors have completed a PEP, they must inform the PEP editor -that it is ready for review. PEPs are reviewed by the BDFL and his -chosen consultants, who may accept or reject a PEP or send it back to -the author(s) for revision. For a PEP that is pre-determined to be -acceptable (e.g., it is an obvious win as-is and/or its implementation -has already been checked in) the BDFL may also initiate a PEP review, -first notifying the PEP author(s) and giving them a chance to make -revisions. - -For a PEP to be accepted it must meet certain minimum criteria. It +Strategies to keep the discussions efficient include: setting up a +separate SIG mailing list for the topic, having the DEP author accept +private comments in the early design phases, setting up a wiki page, +etc. DEP authors should use their discretion here. + +For a DEP to be accepted it must meet certain minimum criteria. It must be a clear and complete description of the proposed enhancement. The enhancement must represent a net improvement. The proposed -implementation, if applicable, must be solid and must not complicate -the interpreter unduly. Finally, a proposed enhancement must be -"pythonic" in order to be accepted by the BDFL. (However, "pythonic" -is an imprecise term; it may be defined as whatever is acceptable to -the BDFL. This logic is intentionally circular.) See PEP 2 [2]_ for -standard library module acceptance criteria. - -Once a PEP has been accepted, the reference implementation must be +implementation, if applicable, must be solid and must not unduly add +complication. + +Once a DEP has been accepted, the reference implementation must be completed. When the reference implementation is complete and accepted -by the BDFL, the status will be changed to "Final". +by the community, the status may be changed to "Final". -A PEP can also be assigned status "Deferred". The PEP author or -editor can assign the PEP this status when no progress is being made -on the PEP. Once a PEP is deferred, the PEP editor can re-assign it +A DEP can also be assigned status "Deferred". The DEP author or +editor can assign the DEP this status when no progress is being made +on the DEP. Once a DEP is deferred, the DEP editor can re-assign it to draft status. -A PEP can also be "Rejected". Perhaps after all is said and done it +A DEP can also be "Rejected". Perhaps after all is said and done it was not a good idea. It is still important to have a record of this fact. -PEPs can also be superseded by a different PEP, rendering the original -obsolete. This is intended for Informational PEPs, where version 2 of +DEPs can also be superseded by a different DEP, rendering the original +obsolete. This is intended for Informational DEPs, where version 2 of an API can replace version 1. -The possible paths of the status of PEPs are as follows: +The possible paths of the status of DEPs are as follows: -.. image:: pep-0001-1.png +.. image:: ../_static/dep-0001-states.png -Some Informational and Process PEPs may also have a status of "Active" -if they are never meant to be completed. E.g. PEP 1 (this PEP). +Some Informational and Process DEPs may also have a status of "Active" +if they are never meant to be completed. E.g. DEP 1 (this DEP). -What belongs in a successful PEP? +What belongs in a successful DEP? ================================= -Each PEP should have the following parts: +Each DEP should have the following parts: 1. Preamble -- RFC 822 style headers containing meta-data about the - PEP, including the PEP number, a short descriptive title (limited + DEP, including the DEP number, a short descriptive title (limited to a maximum of 44 characters), the names, and optionally the contact info for each author, etc. 2. Abstract -- a short (~200 word) description of the technical issue being addressed. -3. Copyright/public domain -- Each PEP must either be explicitly - labelled as placed in the public domain (see this PEP as an +3. Copyright/public domain -- Each DEP must either be explicitly + labelled as placed in the public domain (see this DEP as an example) or licensed under the `Open Publication License`_. 4. Specification -- The technical specification should describe the syntax and semantics of any new language feature. The specification should be detailed enough to allow competing, - interoperable implementations for any of the current Python - platforms (CPython, Jython, Python .NET). + interoperable implementations for any of the current Dylan + platforms. -5. Motivation -- The motivation is critical for PEPs that want to - change the Python language. It should clearly explain why the +5. Motivation -- The motivation is critical for DEPs that want to + change the Dylan language. It should clearly explain why the existing language specification is inadequate to address the - problem that the PEP solves. PEP submissions without sufficient - motivation may be rejected outright. + problem that the DEP solves. 6. Rationale -- The rationale fleshes out the specification by describing what motivated the design and why particular design @@ -218,72 +196,68 @@ Each PEP should have the following parts: community and discuss important objections or concerns raised during discussion. -7. Backwards Compatibility -- All PEPs that introduce backwards +7. Backwards Compatibility -- All DEPs that introduce backwards incompatibilities must include a section describing these - incompatibilities and their severity. The PEP must explain how the - author proposes to deal with these incompatibilities. PEP - submissions without a sufficient backwards compatibility treatise - may be rejected outright. + incompatibilities and their severity. The DEP must explain how the + author proposes to deal with these incompatibilities. 8. Reference Implementation -- The reference implementation must be - completed before any PEP is given status "Final", but it need not - be completed before the PEP is accepted. It is better to finish + completed before any DEP is given status "Final", but it need not + be completed before the DEP is accepted. It is better to finish the specification and rationale first and reach consensus on it before writing code. - The final implementation must include test code and documentation - appropriate for either the Python language reference or the - standard library reference. + The final implementation must include good test code and + documentation. -PEP Formats and Templates -========================= +DEP Format and Templates +======================== + +DEPs must be written in ReStructuredText_ format. This allows for +rich markup that is still quite easy to read, but results in much +better-looking and more functional HTML. -There are two PEP formats available to authors: plaintext and -reStructuredText_. Both are UTF-8-encoded text files. +.. DEP 12 contains instructions and a template [4]_ for + reStructuredText DEPs. -Plaintext PEPs are written with minimal structural markup that adheres -to a rigid style. PEP 9 contains a instructions and a template [3]_ -you can use to get started writing your plaintext PEP. +The DEP author must verify that the ReStructuredText_ parses correctly. +For example:: -ReStructuredText_ PEPs allow for rich markup that is still quite easy -to read, but results in much better-looking and more functional HTML. -PEP 12 contains instructions and a template [4]_ for reStructuredText -PEPs. + git clone git@github.com:dylan-lang/website.git + cd website + cp your-dep.rst source/proposals/dep-1234.rst + make html -There is a Python script that converts both styles of PEPs to HTML for -viewing on the web [5]_. Parsing and conversion of plaintext PEPs is -self-contained within the script. reStructuredText PEPs are parsed -and converted by Docutils_ code called from the script. +Fix any errors that are displayed. -PEP Header Preamble +DEP Header Preamble =================== -Each PEP must begin with an RFC 822 style header preamble. The headers -must appear in the following order. Headers marked with "*" are -optional and are described below. All other headers are required. :: +Each DEP must begin with an RFC 822 style header preamble in simple +RST table format. The headers must appear in the following order. +Headers marked with "*" are optional and are described below. All +other headers are required. :: - PEP: - Title: - Version: - Last-Modified: + DEP: + Title: + Version: + Last-Modified: Author: - * Discussions-To: Status: Type: - * Content-Type: - * Requires: + * Requires: Created: - * Python-Version: - Post-History: - * Replaces: - * Superseded-By: + * Dylan-Version: + Post-History: + * Replaces: + * Superseded-By: * Resolution: The Author header lists the names, and optionally the email addresses -of all the authors/owners of the PEP. The format of the Author header +of all the authors/owners of the DEP. The format of the Author header value must be Random J. User @@ -292,225 +266,144 @@ if the email address is included, and just Random J. User -if the address is not given. For historical reasons the format -"address@dom.ain (Random J. User)" may appear in a PEP, however new -PEPs must use the mandated format above, and it is acceptable to -change to this format when PEPs are updated. +if the address is not given. If there are multiple authors, each should be on a separate line -following RFC 2822 continuation line conventions. Note that personal -email addresses in PEPs will be obscured as a defense against spam -harvesters. +following RFC 2822 continuation line conventions. -*Note: The Resolution header is required for Standards Track PEPs -only. It contains a URL that should point to an email message or -other web resource where the pronouncement about the PEP is made.* +.. Not yet: Note that personal email addresses in DEPs will be + obscured as a defense against spam harvesters. -While a PEP is in private discussions (usually during the initial -Draft phase), a Discussions-To header will indicate the mailing list -or URL where the PEP is being discussed. No Discussions-To header is -necessary if the PEP is being discussed privately with the author, or -on the python-list or python-dev email mailing lists. Note that email -addresses in the Discussions-To header will not be obscured. +*Note: The Resolution header is required for Standards Track DEPs +only. It contains a URL that should point to an email message or +other web resource where the pronouncement about the DEP is made.* -The Type header specifies the type of PEP: Standards Track, +The Type header specifies the type of DEP: Standards Track, Informational, or Process. -The format of a PEP is specified with a Content-Type header. The -acceptable values are "text/plain" for plaintext PEPs (see PEP 9 [3]_) -and "text/x-rst" for reStructuredText PEPs (see PEP 12 [4]_). -Plaintext ("text/plain") is the default if no Content-Type header is -present. - -The Created header records the date that the PEP was assigned a +The Created header records the date that the DEP was assigned a number, while Post-History is used to record the dates of when new -versions of the PEP are posted to python-list and/or python-dev. Both +versions of the DEP are posted to the hackers list. Both headers should be in dd-mmm-yyyy format, e.g. 14-Aug-2001. -Standards Track PEPs must have a Python-Version header which indicates -the version of Python that the feature will be released with. -Informational and Process PEPs do not need a Python-Version header. +Standards Track DEPs must have a Dylan-Version header which indicates +the version of Dylan that the feature will be released with. +Informational and Process DEPs do not need a Dylan-Version header. -PEPs may have a Requires header, indicating the PEP numbers that this -PEP depends on. +DEPs may have a Requires header, indicating the DEP numbers that this +DEP depends on. -PEPs may also have a Superseded-By header indicating that a PEP has +DEPs may also have a Superseded-By header indicating that a DEP has been rendered obsolete by a later document; the value is the number of -the PEP that replaces the current document. The newer PEP must have a -Replaces header containing the number of the PEP that it rendered +the DEP that replaces the current document. The newer DEP must have a +Replaces header containing the number of the DEP that it rendered obsolete. Auxiliary Files =============== -PEPs may include auxiliary files such as diagrams. Such files must be -named ``pep-XXXX-Y.ext``, where "XXXX" is the PEP number, "Y" is a -serial number (starting at 1), and "ext" is replaced by the actual -file extension (e.g. "png"). +DEPs may include auxiliary files such as diagrams. Such files must be +named ``pep-XXXX-aaaa.ext``, where "XXXX" is the DEP number, "aaaa" is +arbitrary text to indicate the file content (e.g., "state-diagram"), +and "ext" is replaced by the actual file extension (e.g. "png"). -Reporting PEP Bugs, or Submitting PEP Updates +Reporting DEP Bugs, or Submitting DEP Updates ============================================= -How you report a bug, or submit a PEP update depends on several -factors, such as the maturity of the PEP, the preferences of the PEP +How you report a bug, or submit a DEP update depends on several +factors, such as the maturity of the DEP, the preferences of the DEP author, and the nature of your comments. For the early draft stages -of the PEP, it's probably best to send your comments and changes -directly to the PEP author. For more mature, or finished PEPs you may -want to submit corrections to the Python `issue tracker`_ so that your -changes don't get lost. If the PEP author is a Python developer, assign the -bug/patch to him, otherwise assign it to the PEP editor. +of the DEP, it's probably best to send your comments and changes +directly to the DEP author. For more mature, or finished DEPs you may +want to submit corrections to the Dylan `issue tracker`_ so that your +changes don't get lost. Assign the bug/patch to the DEP author. When in doubt about where to send your changes, please check first -with the PEP author and/or PEP editor. - -PEP authors who are also Python committers can update the -PEPs themselves by using "svn commit" to commit their changes. - - -Transferring PEP Ownership -========================== +with the DEP author. -It occasionally becomes necessary to transfer ownership of PEPs to a -new champion. In general, we'd like to retain the original author as -a co-author of the transferred PEP, but that's really up to the -original author. A good reason to transfer ownership is because the -original author no longer has the time or interest in updating it or -following through with the PEP process, or has fallen off the face of -the 'net (i.e. is unreachable or not responding to email). A bad -reason to transfer ownership is because you don't agree with the -direction of the PEP. We try to build consensus around a PEP, but if -that's not possible, you can always submit a competing PEP. +DEP authors who are also Dylan committers can update the DEPs +themselves committing them to Git and pushing to the main repository. -If you are interested in assuming ownership of a PEP, send a message -asking to take over, addressed to both the original author and the PEP -editor . If the original author doesn't respond to -email in a timely manner, the PEP editor will make a unilateral -decision (it's not like such decisions can't be reversed :). - -PEP Editor Responsibilities & Workflow +DEP Author Responsibilities & Workflow ====================================== -A PEP editor must subscribe to the list. All -PEP-related correspondence should be sent (or CC'd) to - (but please do not cross-post!). - -For each new PEP that comes in an editor does the following: +A DEP author must subscribe to the list. +Before submitting a (new revision of a DEP) the author must do the +following: -* Read the PEP to check if it is ready: sound and complete. The ideas +* Read the DEP to check if it is ready: sound and complete. The ideas must make technical sense, even if they don't seem likely to be accepted. * The title should accurately describe the content. -* Edit the PEP for language (spelling, grammar, sentence structure, - etc.), markup (for reST PEPs), code style (examples should match PEP - 8 & 7). - -If the PEP isn't ready, the editor will send it back to the author for -revision, with specific instructions. - -Once the PEP is ready for the repository, the PEP editor will: +* Edit the DEP for language (spelling, grammar, sentence structure, + etc.), markup, and code style. -* Assign a PEP number (almost always just the next available number, - but sometimes it's a special/joke number, like 666 or 3141). +Once the DEP is ready for the repository, the DEP author will: -* List the PEP in PEP 0 (in two places: the categorized list, and the - numeric list). +* Assign the next available DEP number. -* Add the PEP to SVN. For Subversion repository instructions, see - `the FAQ for Developers - `_. +* List the DEP in the DEP index (in two places: the categorized list, + and the numeric list). - The command to check out a read-only copy of the repository is:: +* Add the DEP to Git. All DEPs live in `the website repository + `_. The command to check + it out is:: - svn checkout http://svn.python.org/projects/peps/trunk peps + git clone git@github.com:dylan-lang/website.git - The command to check out a read-write copy of the repository is:: + Commit your changes, push them to your fork of the repository and + submit a pull request. - svn checkout svn+ssh://pythondev@svn.python.org/peps/trunk peps - - In particular, the ``svn:eol-style`` property should be set to ``native`` - and the ``svn:keywords`` property to ``Author Date Id Revision``. - -* Monitor python.org to make sure the PEP gets added to the site +* Monitor opendylan.org to make sure the DEP gets added to the site properly. -* Send email back to the PEP author with next steps (post to - python-list & -dev). - -Updates to existing PEPs also come in to peps@python.org. Many PEP -authors are not SVN committers yet, so we do the commits for them. - -Many PEPs are written and maintained by developers with write access -to the Python codebase. The PEP editors monitor the python-checkins -list for PEP changes, and correct any structure, grammar, spelling, or -markup mistakes we see. +Resources: -The editors don't pass judgement on PEPs. We merely do the -administrative & editorial part. Except for times like this, there's -relatively low volume. +* See the section `For Open Dylan Developers + `_ on the opendylan.org + documentation page. -Resources: +.. It would be nice to have equivalents for some of these: -* `How Python is Developed `_ + * `How Dylan is Developed `_ -* `Python's Development Process `_ + * `Dylan's Development Process `_ -* `Why Develop Python? `_ + * `Why Develop Dylan? `_ -* `Development Tools `_ + * `Development Tools `_ -* `Frequently Asked Questions for Developers - `_ + * `Frequently Asked Questions for Developers + `_ References and Footnotes ======================== -.. [1] This historical record is available by the normal SVN commands +.. [1] This historical record is available by the normal Git commands for retrieving older revisions. For those without direct access to - the SVN tree, you can browse the current and past PEP revisions here: - http://svn.python.org/view/peps/trunk/ - -.. [2] PEP 2, Procedure for Adding New Modules, Faassen - (http://www.python.org/dev/peps/pep-0002) - -.. [3] PEP 9, Sample Plaintext PEP Template, Warsaw - (http://www.python.org/dev/peps/pep-0009) + Git, you can browse the current and past DEP revisions here: + https://github.com/dylan-lang/website/tree/master/source/proposals -.. [4] PEP 12, Sample reStructuredText PEP Template, Goodger, Warsaw - (http://www.python.org/dev/peps/pep-0012) - -.. [5] The script referred to here is pep2pyramid.py, the successor to - pep2html.py, both of which live in the same directory in the SVN - tree as the PEPs themselves. Try ``pep2html.py --help`` for - details. The URL for viewing PEPs on the web is - http://www.python.org/dev/peps/. - -.. _issue tracker: - http://bugs.python.org/ +.. [2] Which issue tracker to use will depend on the content of the + DEP. For language changes, changes to Open Dylan, or changes to + "core" libraries it will usually be `opendylan + `_. For other + libraries there may be a separate repository and issue tracker. + This is still in flux. When in doubt, ask in IRC on the #dylan + channel or on the hackers list. .. _Open Publication License: http://www.opencontent.org/openpub/ .. _reStructuredText: http://docutils.sourceforge.net/rst.html -.. _Docutils: http://docutils.sourceforge.net/ - Copyright ========= This document has been placed in the public domain. - - -.. - Local Variables: - mode: indented-text - indent-tabs-mode: nil - sentence-end-double-space: t - fill-column: 70 - coding: utf-8 - End: From 8a69cedb49a2d4645e588a2cd1bd7b8c468e3af4 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sun, 8 Jan 2012 00:58:47 -0500 Subject: [PATCH 105/519] state diagram for dep 1 --- .../website/source/_static/dep-0001-states.png | Bin 0 -> 20813 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 documentation/website/source/_static/dep-0001-states.png diff --git a/documentation/website/source/_static/dep-0001-states.png b/documentation/website/source/_static/dep-0001-states.png new file mode 100644 index 0000000000000000000000000000000000000000..51eb2b25826c3f97b38a4fa17425a86d27c0d962 GIT binary patch literal 20813 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 literal 0 HcmV?d00001 From 523098311e4df5d2aeebde0b43cd2d0b11d8b34b Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sun, 8 Jan 2012 00:59:25 -0500 Subject: [PATCH 106/519] update dep index --- documentation/website/source/proposals/index.rst | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/documentation/website/source/proposals/index.rst b/documentation/website/source/proposals/index.rst index d161aa770a..71bdc16a4c 100644 --- a/documentation/website/source/proposals/index.rst +++ b/documentation/website/source/proposals/index.rst @@ -5,16 +5,17 @@ Dylan Enhancement Proposals .. contents:: -Active Proposals -================ +Draft Proposals +=============== -#. `Better string manipulation for common-dylan `_ +#. `DEP Purpose and Guidelines `_ +#. `New strings Library `_ Accepted Proposals ================== -There are no accepted proposals. +#. `define function `_ Declined Proposals From cb6464f2235924a8146ce71ff165e6550275755e Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sun, 8 Jan 2012 01:00:25 -0500 Subject: [PATCH 107/519] deleted better-strings.rst -- not ready --- .../source/proposals/better-strings.rst | 279 ------------------ 1 file changed, 279 deletions(-) delete mode 100644 documentation/website/source/proposals/better-strings.rst diff --git a/documentation/website/source/proposals/better-strings.rst b/documentation/website/source/proposals/better-strings.rst deleted file mode 100644 index 1e4166dfdb..0000000000 --- a/documentation/website/source/proposals/better-strings.rst +++ /dev/null @@ -1,279 +0,0 @@ -******************************************* -Better String Manipulation for common-dylan -******************************************* - -============== ============================================= -Proposal #: 1 -Title: Better Strings API -Author: Carl Gay -Status: Draft -Content-Type: text/x-rst -Created: 2011.12.27 -Dylan-Version: 2011.1 -============== ============================================= - - -.. contents:: - - -Abstract -======== - -The ``dylan`` and ``common-dylan`` libraries have only limited string -manipulation functionality. This proposal is an attempt to provide a -richer strings API. - -For this draft I'm being slightly loose with signatures. I use names -such as char-or-string rather than writing out each overloaded -signature with explicit types. I'll fix that in a later draft once -the basic form of the API is agreed. --cgay - - - -Goals -===== - -#. Comprehensive string APIs available via the ``common-dylan`` module - in the ``common-dylan`` library. - -#. Replace existing string-extensions module with names directly - available in common-dylan. - -#. Consistent high-level API for when readability and convenience are - paramount. Low-level functions available where a significant - performance improvement can be had. - -#. String operations consistent with regular expression operations - where possible. i.e., share the same generic functions - - -Non Goals -========= - -#. Unicode - -#. Immutable strings - -#. Strings not implemented as subclasses of ````. - - -Constants -========= - -TODO: remove these. I don't see any need for them to be exported. -Leaving them here for now, in case something comes up. - -$control-characters -$printable-characters -$graphic-characters -$decimal-digits -$octal-digits -$hexadecimal-digits -$ascii-letters -$whitespace-characters -$alphanumeric-characters - - - -Functions -========= - - -Predicates ----------- - -These all work for a single character or for a string. When applied -to a string they are true if they're true for each character in the -string. - -These are mainly taken from string-extensions/character-type.dylan. - -ascii-control? (char-or-string) => () - -ascii-printable? (char-or-string) => () - -ascii-graphic? (char-or-string) => () - -ascii-letter? (char-or-string) => () - -lowercase? (char-or-string) => () - -uppercase? (char-or-string) => () - -whitespace? (char-or-string) => () - -alphanumeric? (char-or-string) => () - -decimal-digit? (char-or-string) => () - -octal-digit? (char-or-string) => () - -hexadecimal-digit? (char-or-string) => () - - -Comparisons ------------ - -Characters -~~~~~~~~~~ - -Case insensitive character comparisons for use as the value of various -"test" parameters. For case-sensitive comparison, use "=". -:: - - ci-char-equal? (char1, char2) - ci-char-less? (char1, char2) - ci-char-greater? (char1, char2) - -**Discussion** - -The "ci-*" naming scheme is consistent with other proposed functions -(below). Case-insensitive character comparison is used frequently -enough in our existing code base that at least ``ci-char-equal?`` -should exist. ``ci-char-less?`` and ``ci-char-greater?`` are likely -to be less useful, but are provided for completeness. - - -Strings -~~~~~~~ - -String comparisons, both case-sensitive and case-insensitive. These -default to comparing the entire string but allow comparing substrings -via keyword arguments. -:: - - string-compare (string1, string2, #key start1, end1, start2, end2, test) - Low-level function used to implement the functions below. - -These are case-sensitive:: - - string-equal? (string1, string2, #key start1, end1, start2, end2) - string-less? (string1, string2, #key start1, end1, start2, end2) - string-greater? (string1, string2, #key start1, end1, start2, end2) - -These are case-insensitive:: - - ci-string-equal? (string1, string2, #key start1, end1, start2, end2) - ci-string-less? (string1, string2, #key start1, end1, start2, end2) - ci-string-greater? (string1, string2, #key start1, end1, start2, end2) - -From the ``dylan`` module (included for completeness):: - - = (char-or-string, char-or-string) - < (char-or-string, char-or-string) - > (char-or-string, char-or-string) - - -**Discussion** - -Some people may object to the ci-* functions on the grounds that a -"test" parameter could be added to the non-ci-* functions instead. -But consider this type of code, which is likely to be fairly common:: - - sort(seq, test: ci-string-less?) - -Instead one would have to write this:: - - sort(seq, test: rcurry(string-less?, test: ci-char-equal?)) - -or worse, if ci-char-equal? is removed on the same grounds:: - - sort(seq, test: rcurry(string-less?, test: method (c1, c2) - as-lowercase(c1) = as-lowercase(c2) - end)) - -or, the less efficient but more concise:: - - sort(seq, test: method (s1, s2) as-lowercase(s1) < as-lowercase(s2) end) - -The abbreviation "ci" stands for case-insensitive. In the author's -opinion "case-insensitive-string-less?" etc. are simply too long and -"ci" is easy enough to remember. The author is willing to be -out-voted on this point. - - -Conversions ------------ - -make(, size: n, fill: char) - -concatenate(sequence, #rest sequences) // somewhat redundant with "join" - -copy(string, #key start, end) - -lowercase(char-or-string, #key start, end) - -lowercase!(char-or-string, #key start, end) - -uppercase(char-or-string, #key start, end) - -uppercase!(char-or-string, #key start, end) - -wrap(string, width, #key prefix = "", test, strict?) => (new-string) - Return a copy of ``string`` which has been line wrapped at column width - ``width``. Each line is prefixed with ``prefix``, which defaults to the - empty string. The ``test`` determines where it is acceptable to wrap - long lines. It defaults to a function that will only wrap on whitespace. - If any non-breakable sequence of characters (plus the prefix) is wider - than ``width``, then ``width`` will be exceeded in that case unless - ``strict?`` is true. - - **TODO:** exact contract of ``test`` function. It may become more - obvious during implementation. Consider: how to deal with wrapping - on '-'. - -pad-left(string, width, #key fill = ' ') -pad-right(string, width, #key fill = ' ') -pad-center(string, width, #key fill = ' ') - Return a string of the given ``width``. If the given ``string`` - is shorter than ``width``, add ``fill`` equally to both sides of - the result such that the original string is center aligned. - - Examples:: - - pad-center("x", 5) => " x " - pad-center("x", 4) => " x " or " x " (unspecified) - pad-center("x", 7, fill: '.') => "...x..." - - Return a string padded on the left or right with ``fill`` until it - is ``width`` columns wide. If ``string``.size is >= ``width`` no - padding is performed. - -strip(string, #key start, end, test) - -find(string, pattern, #key start, end, test) - -starts-with?(string, pattern) => - -ends-with?(string, pattern) => - -replace(string, pattern, new, #key test) - -replace!(string, pattern, new, #key test) - -slice(sequence, #key start, end, step) => (new-sequence) - -slice!(sequence, #key start, end, step) => (sequence) - Return value may share structure with original sequence. - -join(parts, separator, #key start, end, key, conjunction) => (string) - -split(string, separator, #key start, end, max, remove-if-empty?) => (sequence-of-strings) - -split-lines(string, #rest split-keys) => (sequence-of-strings) - Alternative: split(text, find-end-of-line, #key ...) - -count(string, pattern, #key start, end, test, overlap?) => (n) - -interpolate(string, table) => (string) - interpolate("foo {x}", table("x" => 5)) => "foo 5" - - -Other -===== - -* Move and friends from string-extensions to - regular-expressions. That's the only place that uses it, and it is - unlikely to be of much use elsewhere. See conversation in #dylan on - 2011.12.26. - From b55425716abf67828a81343c8bb435061e571ae3 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sun, 8 Jan 2012 01:52:34 -0500 Subject: [PATCH 108/519] fix footnote reference --- documentation/website/source/proposals/dep-0001.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 578f1ae2d0..6fb4beb633 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -317,7 +317,7 @@ factors, such as the maturity of the DEP, the preferences of the DEP author, and the nature of your comments. For the early draft stages of the DEP, it's probably best to send your comments and changes directly to the DEP author. For more mature, or finished DEPs you may -want to submit corrections to the Dylan `issue tracker`_ so that your +want to submit corrections to the Dylan issue tracker [2]_ so that your changes don't get lost. Assign the bug/patch to the DEP author. When in doubt about where to send your changes, please check first From 834a3d2924058877cf9617ca2fb80333825266fe Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sun, 8 Jan 2012 12:05:13 -0500 Subject: [PATCH 109/519] Improvements to the DEP index. --- .../website/source/proposals/index.rst | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/documentation/website/source/proposals/index.rst b/documentation/website/source/proposals/index.rst index 71bdc16a4c..feec658e9c 100644 --- a/documentation/website/source/proposals/index.rst +++ b/documentation/website/source/proposals/index.rst @@ -2,20 +2,28 @@ Dylan Enhancement Proposals *************************** -.. contents:: +.. contents:: Contents + :local: +.. NOTE: When adding a new proposal to this index be sure to add it in + two places: the "All Proposals by Number" section and at least one + other section depending on the proposal's current status. -Draft Proposals -=============== -#. `DEP Purpose and Guidelines `_ -#. `New strings Library `_ +Open Proposals (under consideration) +==================================== + +==== ============================================= +0001 `DEP Purpose and Guidelines `_ (`source `__) +==== ============================================= Accepted Proposals ================== -#. `define function `_ +==== ============================================= +0002 `define function `_ (`source `__) +==== ============================================= Declined Proposals @@ -23,3 +31,12 @@ Declined Proposals There are no declined proposals. + +All Proposals by Number +======================= + +==== ============================================= +0001 `DEP Purpose and Guidelines `_ (`source `__) +0002 `define function `_ (`source `__) +==== ============================================= + From f1ce325caf576147b714ef127fa7e6aa3f025402 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sun, 8 Jan 2012 12:16:46 -0500 Subject: [PATCH 110/519] Convert to RST format with minimal changes. --- .../website/source/proposals/dep-0002.rst | 75 ++++++++++++------- 1 file changed, 48 insertions(+), 27 deletions(-) diff --git a/documentation/website/source/proposals/dep-0002.rst b/documentation/website/source/proposals/dep-0002.rst index 7ed33b90bd..5f1648b078 100644 --- a/documentation/website/source/proposals/dep-0002.rst +++ b/documentation/website/source/proposals/dep-0002.rst @@ -1,10 +1,23 @@ -PROPOSAL NAME: Define Function - -PROPOSAL: +============== ============================================= +DEP #: 2 +Title: Define Function +Type: Standards Track +Author: Bill Chiles +Status: Accepted +Created: 26-Jan-1996 +Post-History: None +============== ============================================= + +*Note: This DEP was converted from the old Dylan Change Proposal +Format to DEP format with minimal changes for ReStructuredText. It +does not fully conform to the new format.* + +Specification +============= Add a "define function" defining macro that creates a constant binding in the current module and initializes it to a new function. - The new defining macro has the following syntax: + The new defining macro has the following syntax:: DEFINE { adjective }* FUNCTION name parameter-list [ body ] @@ -18,33 +31,36 @@ PROPOSAL: Using reflective operations on "define function" functions: - 1] For the following functions an implementation may choose to - return a meaningful result (or perform a meaningful side-effect - operation), or the implementation may signal an error: - generic-function-methods, add-method, find-method, - generic-function-mandatory-keywords, remove-method, - sorted-applicable-methods, applicable-method? - - Note, the error signalled might not be a , - and this implementation choice holds for a "define function" - function that is passed as either argument to add-method and - remove-method. - - 2] The following functions return the same values as they would - for a bare method defined with the same signature: - function-specializers, function-arguments, + (1) For the following functions an implementation may choose to + return a meaningful result (or perform a meaningful side-effect + operation), or the implementation may signal an error:: + + generic-function-methods, add-method, find-method, + generic-function-mandatory-keywords, remove-method, + sorted-applicable-methods, applicable-method? + + Note, the error signalled might not be a , + and this implementation choice holds for a "define function" + function that is passed as either argument to add-method and + remove-method. + + (2) The following functions return the same values as they would + for a bare method defined with the same signature:: + + function-specializers, function-arguments, function-return-values "Define function" could be added either to the core language or to a library. -RATIONALE: +Rationale +========= Many programmers desire a way to define a function that clearly says to other programmers that the function is not part of any generic operation; furthermore, the function won't be extended as a generic function, and calling it need not involve any generic - dispatch. The two main choices in current practice are: + dispatch. The two main choices in current practice are:: define constant cube = method (x) x * x * x end; @@ -62,15 +78,16 @@ RATIONALE: on "define function" functions based on new wording that describes applicable-method? in the DRM. -EXAMPLES: +Examples +======== - An example use: + An example use:: define function cube (x) x * x * x end; Below is one possible implementation of the macro. This implementation supports whatever adjectives are supported by "define constant". - Other implementations are possible. + Other implementations are possible. :: define macro function-definer { define ?adjectives:* function ?name:name @@ -79,7 +96,8 @@ EXAMPLES: ?signature-and-body end } end macro function-definer; -COST TO IMPLEMENTORS: +Cost to Implementors +==================== The cost is very little, essentially a macro definition and exporting the identifier for the macro. An implementation may also want to @@ -89,7 +107,9 @@ COST TO IMPLEMENTORS: protecting compiler optimizations based on assumptions about the function. -REVISION HISTORY: +Revision History +================ +:: Version 1; Harlequin, Inc.; Bill Chiles; 26 JAN 96. Initial proposal with input from a few people. @@ -112,6 +132,7 @@ REVISION HISTORY: of a variable named "next-method" around the body, which is counter to the specified contract for this macro.) -STATUS: +Status +====== Accepted 31 December 1996 From 3671baa988d1970609d796e779587cc5402f68e9 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sun, 8 Jan 2012 12:39:02 -0500 Subject: [PATCH 111/519] Remove ref to BDFL, requested by Hannes. --- documentation/website/source/proposals/dep-0001.rst | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 6fb4beb633..e70d3e25ad 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -104,13 +104,12 @@ been committed to the `origin Git repository `_. As updates are necessary, the DEP author may commit new versions. -Because Dylan does not have a Benevolent Dictator for Life (as Python -has in Guido van Rossum) we rely on reaching consensus on the hackers -mailing list. Consensus _must_ be reached for the DEP to be approved. -Exactly what "consensus" means here is left undefined, as we expect -most cases to be obvious and we wish to keep the process informal for -now. At such time as this becomes a problem we may implement a more -formal scheme (e.g., voting). +We rely on reaching consensus on the hackers mailing list. Consensus +_must_ be reached for the DEP to be approved. Exactly what +"consensus" means here is left undefined, as we expect most cases to +be obvious and we wish to keep the process informal for now. At such +time as this becomes a problem we may implement a more formal scheme +(e.g., voting). Standards Track DEPs consist of two parts, a design document and a reference implementation. The DEP should be reviewed and accepted From dff415094a20b0c4e4133f9a939da2933a7cef69 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sun, 8 Jan 2012 12:40:41 -0500 Subject: [PATCH 112/519] pep -> dep --- documentation/website/source/proposals/dep-0001.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index e70d3e25ad..4f49e0bef0 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -303,7 +303,7 @@ Auxiliary Files =============== DEPs may include auxiliary files such as diagrams. Such files must be -named ``pep-XXXX-aaaa.ext``, where "XXXX" is the DEP number, "aaaa" is +named ``dep-XXXX-aaaa.ext``, where "XXXX" is the DEP number, "aaaa" is arbitrary text to indicate the file content (e.g., "state-diagram"), and "ext" is replaced by the actual file extension (e.g. "png"). From c48408ab7c659d64d48b31851f5b8ed461c04fbd Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 9 Jan 2012 01:22:31 -0500 Subject: [PATCH 113/519] Clarify that only Git branches are accepted for standard proposals --- documentation/website/source/proposals/dep-0001.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 4f49e0bef0..c3e486e032 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -115,8 +115,8 @@ Standards Track DEPs consist of two parts, a design document and a reference implementation. The DEP should be reviewed and accepted before a reference implementation is begun, unless a reference implementation will aid people in studying the DEP. Standards Track -DEPs must include an implementation -- in the form of code, a patch, -or a URL to same -- before it can be considered Final. +DEPs must include an implementation -- in the form of a Git branch URL +-- before it can be considered Final. DEP authors are responsible for collecting community feedback on a DEP before submitting it for review. However, wherever possible, long From 28ab3695ab473489d79f5b03a6bfc6e09410b419 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 9 Jan 2012 15:23:36 -0500 Subject: [PATCH 114/519] Move title above header to have a proper title on HTML page also, update dep-0001 proposal --- documentation/website/source/proposals/dep-0001.rst | 13 +++++++------ documentation/website/source/proposals/dep-0002.rst | 4 +++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 4f49e0bef0..52c871e249 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -1,6 +1,8 @@ +DEP Purpose and Guidelines +========================== + ============== ============================================= DEP #: 1 -Title: DEP Purpose and Guidelines Type: Process Author: Carl Gay Status: Draft @@ -234,13 +236,12 @@ Fix any errors that are displayed. DEP Header Preamble =================== -Each DEP must begin with an RFC 822 style header preamble in simple -RST table format. The headers must appear in the following order. -Headers marked with "*" are optional and are described below. All -other headers are required. :: +Each DEP must begin with a title, followed by an RFC 822 style header +preamble in simple RST table format. The headers must appear in the +following order. Headers marked with "*" are optional and are +described below. All other headers are required. :: DEP: - Title: Version: Last-Modified: Author: diff --git a/documentation/website/source/proposals/dep-0002.rst b/documentation/website/source/proposals/dep-0002.rst index 5f1648b078..6d55df504c 100644 --- a/documentation/website/source/proposals/dep-0002.rst +++ b/documentation/website/source/proposals/dep-0002.rst @@ -1,6 +1,8 @@ +Define Function +=============== + ============== ============================================= DEP #: 2 -Title: Define Function Type: Standards Track Author: Bill Chiles Status: Accepted From cee4fced68d1344ebfe1857356a709d935616909 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 9 Jan 2012 15:24:48 -0500 Subject: [PATCH 115/519] Add C3 linearization proposal --- .../website/source/proposals/dep-0003.rst | 119 ++++++++++++++++++ .../website/source/proposals/index.rst | 2 + 2 files changed, 121 insertions(+) create mode 100644 documentation/website/source/proposals/dep-0003.rst diff --git a/documentation/website/source/proposals/dep-0003.rst b/documentation/website/source/proposals/dep-0003.rst new file mode 100644 index 0000000000..43edc5dcbd --- /dev/null +++ b/documentation/website/source/proposals/dep-0003.rst @@ -0,0 +1,119 @@ +============== ============================================= +DEP #: 3 +Title: C3 superclass linearization +Type: Standards Track +Author: Hannes Mehnert +Status: Draft +Created: 09-Jan-2012 +Post-History: 09-Jan-2012 +============== ============================================= + +Abstract +======== + +The Dylan superclass linearization is sometimes counter-intuitive. The +C3 superclass linearization algorithm is more intuitive. + +Copyright +========= + +This DEP is public domain. + +Specification +============= + +The C3 superclass linearization has been proposed in 1996 by Kim +Barrett, Bob Cassels, Paul Haahr, David A. Moon, Keith Playford, and +P. Tucker Withington in a `paper +`_. + +A superclass linearization (also known as a class precedence list) is +used for resolving conflicts among multiply-inherited superclasses +which provide differing definitions of the same method. + +Unfortunately the algorithm presented in the Dylan Reference Manual +(`computing the class precedence list +`_) is not +consistent with the extended precedence graph, and may lead to +counter-intuitive linearizations. To fix that, C3 was developed. + +Motivation +========== + +In order to allow for more optimizations, especially compression of +dispatch tables, which requires monotonicity of method orderings, a +consistent superclass linearization algorithm is needed. + +C3 has been proposed in 1996 and was subsequently adapted to Python +2.3 (`article `__) +and Perl 6 (`article +`__). + +Rationale +========= + +C3 has been around for long enough, it does not break any existing +code, and it is the right thing to do according to the mailing list +discussions. + +Examples +======== + +The example from the paper is given here, consider the following Dylan classes: + +.. code-block:: dylan + + define class () end; + define class () end; + define class () end; + define class (, ) end; + define class (, ) end; + define class (, ) end; + + +The Dylan linearization is: + , , , , , , + +The C3 linearization is: + , , , , , , + + +Backwards Compatibility +======================= + +In the first release a serious warning will be issued for superclass +linearization which changed, in subsequent releases a warning should +be issued (depending on a strict compatibility to DRM switch). + +Experiments show that there are some differences in existing code; we +found so far three, two of them in duim-gadgets, one in +win32-duim. According to Scott McKay, the author of DUIM, the first +two look better when C3 is used (`mailing list post +`_). The +latter does not alter behaviour (`post +`_). + +The class precedence list of differ, Dylan: + #(, , , , , , , , , , , , , , , , , , ); +C3: + #(, , , , , , , , , , , , , , , , , , ) + + +The class precedence list of differ, Dylan: + #(, , , , , , , , , , , , , , , , , , ); +C3: + #(, , , , , , , , , , , , , , , , , , ) + + +The class precedence list of differ, Dylan: + #(, , , , , , , , , , , , , , , , , , , , , , , , , ); +C3: + #(, , , , , , , , , , , , , , , , , , , , , , , , , ) + + +Reference Implementation +======================== + +A reference implementation is available in the hannesm/c3 branch on +GitHub: `hannesm/c3 `_ + diff --git a/documentation/website/source/proposals/index.rst b/documentation/website/source/proposals/index.rst index feec658e9c..255c59a84a 100644 --- a/documentation/website/source/proposals/index.rst +++ b/documentation/website/source/proposals/index.rst @@ -15,6 +15,7 @@ Open Proposals (under consideration) ==== ============================================= 0001 `DEP Purpose and Guidelines `_ (`source `__) +0003 `C3 superclass linearization `_ (`source `__) ==== ============================================= @@ -38,5 +39,6 @@ All Proposals by Number ==== ============================================= 0001 `DEP Purpose and Guidelines `_ (`source `__) 0002 `define function `_ (`source `__) +0003 `C3 superclass linearization `_ (`source `__) ==== ============================================= From b826a66f86bcd34c451689b28f6b88f13844bec9 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 9 Jan 2012 15:51:27 -0500 Subject: [PATCH 116/519] Adjust to new title convention --- documentation/website/source/proposals/dep-0003.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/documentation/website/source/proposals/dep-0003.rst b/documentation/website/source/proposals/dep-0003.rst index 43edc5dcbd..2355736d14 100644 --- a/documentation/website/source/proposals/dep-0003.rst +++ b/documentation/website/source/proposals/dep-0003.rst @@ -1,6 +1,8 @@ +C3 superclass linearization +=========================== + ============== ============================================= DEP #: 3 -Title: C3 superclass linearization Type: Standards Track Author: Hannes Mehnert Status: Draft From 7c8e0737f94332759daa4a814f25a90e55515eb6 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Tue, 10 Jan 2012 13:36:23 +0700 Subject: [PATCH 117/519] Add note about stuff that is currently Windows-only. --- documentation/website/source/documentation/index.rst | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index b539e78d92..0ee5d76b86 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -41,7 +41,8 @@ Documentation [`epub `__] [`old HTML `__] - Describes Open Dylan's interactive development environment. + Describes Open Dylan's interactive development environment. This is + only useful if you are using the Open Dylan IDE on Windows. `Building Applications Using DUIM `_ [`pdf `__] @@ -49,7 +50,8 @@ Documentation [`old HTML `__] Describes how to use DUIM (Dylan User Interface Manager), - the portable window programming toolkit. + the portable window programming toolkit. This is only useful + if you are using Open Dylan on Windows. .. raw:: html From 121148b1543b2d3161ae5a141566557f4b71cd32 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Tue, 10 Jan 2012 13:36:55 +0700 Subject: [PATCH 118/519] Update to current version of sphinx-extensions. --- documentation/website/sphinx-extensions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/sphinx-extensions b/documentation/website/sphinx-extensions index cf0d61ae6f..195fed9240 160000 --- a/documentation/website/sphinx-extensions +++ b/documentation/website/sphinx-extensions @@ -1 +1 @@ -Subproject commit cf0d61ae6fd6963d90bec2e43fd60862edca6f19 +Subproject commit 195fed924012eae749cc44c21a5dc7d2fff946c8 From 7eaa2e07d0ce0ed45a4c5af48b8260ac773f3d18 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Tue, 10 Jan 2012 13:44:52 +0700 Subject: [PATCH 119/519] Use code-blocks in DEP-0002. --- documentation/website/source/proposals/dep-0002.rst | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/documentation/website/source/proposals/dep-0002.rst b/documentation/website/source/proposals/dep-0002.rst index 6d55df504c..1821e8f390 100644 --- a/documentation/website/source/proposals/dep-0002.rst +++ b/documentation/website/source/proposals/dep-0002.rst @@ -62,7 +62,9 @@ Rationale says to other programmers that the function is not part of any generic operation; furthermore, the function won't be extended as a generic function, and calling it need not involve any generic - dispatch. The two main choices in current practice are:: + dispatch. The two main choices in current practice are: + + .. code-block:: dylan define constant cube = method (x) x * x * x end; @@ -83,13 +85,17 @@ Rationale Examples ======== - An example use:: + An example use: + + .. code-block:: dylan define function cube (x) x * x * x end; Below is one possible implementation of the macro. This implementation supports whatever adjectives are supported by "define constant". - Other implementations are possible. :: + Other implementations are possible. + + .. code-block:: dylan define macro function-definer { define ?adjectives:* function ?name:name From 9c476a767898359bdb4dc3c2e786f8b8f9d49f1f Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Tue, 10 Jan 2012 13:46:29 +0700 Subject: [PATCH 120/519] Correct links to source for DEP-*.rst. --- documentation/website/source/proposals/index.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/documentation/website/source/proposals/index.rst b/documentation/website/source/proposals/index.rst index 255c59a84a..3ed6211ea7 100644 --- a/documentation/website/source/proposals/index.rst +++ b/documentation/website/source/proposals/index.rst @@ -14,8 +14,8 @@ Open Proposals (under consideration) ==================================== ==== ============================================= -0001 `DEP Purpose and Guidelines `_ (`source `__) -0003 `C3 superclass linearization `_ (`source `__) +0001 `DEP Purpose and Guidelines `_ (`source `__) +0003 `C3 superclass linearization `_ (`source `__) ==== ============================================= @@ -23,7 +23,7 @@ Accepted Proposals ================== ==== ============================================= -0002 `define function `_ (`source `__) +0002 `define function `_ (`source `__) ==== ============================================= @@ -37,8 +37,8 @@ All Proposals by Number ======================= ==== ============================================= -0001 `DEP Purpose and Guidelines `_ (`source `__) -0002 `define function `_ (`source `__) -0003 `C3 superclass linearization `_ (`source `__) +0001 `DEP Purpose and Guidelines `_ (`source `__) +0002 `define function `_ (`source `__) +0003 `C3 superclass linearization `_ (`source `__) ==== ============================================= From 716d8a01761ca55fd71a40bbd509a2b4d8a1bc04 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Tue, 10 Jan 2012 13:55:47 +0700 Subject: [PATCH 121/519] =?UTF-8?q?Link=20to=201998=20publication=20"Moder?= =?UTF-8?q?n=20languages=20and=20Microsoft=E2=80=99s=20component=20object?= =?UTF-8?q?=20model".?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../source/_static/documentation/gray1998.bib | 17 +++++++++++++++++ .../source/documentation/publications.rst | 15 +++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 documentation/website/source/_static/documentation/gray1998.bib diff --git a/documentation/website/source/_static/documentation/gray1998.bib b/documentation/website/source/_static/documentation/gray1998.bib new file mode 100644 index 0000000000..86669f43cc --- /dev/null +++ b/documentation/website/source/_static/documentation/gray1998.bib @@ -0,0 +1,17 @@ +@article{Gray:1998:MLM:274946.274957, + author = {Gray, David N. and Hotchkiss, John and LaForge, Seth and Shalit, Andrew and Weinberg, Toby}, + title = {Modern languages and Microsoft's component object model}, + journal = {Commun. ACM}, + volume = {41}, + issue = {5}, + month = {May}, + year = {1998}, + issn = {0001-0782}, + pages = {55--65}, + numpages = {11}, + url = {http://doi.acm.org/10.1145/274946.274957}, + doi = {http://doi.acm.org/10.1145/274946.274957}, + acmid = {274957}, + publisher = {ACM}, + address = {New York, NY, USA}, +} diff --git a/documentation/website/source/documentation/publications.rst b/documentation/website/source/documentation/publications.rst index f6219d41f0..7afd332981 100644 --- a/documentation/website/source/documentation/publications.rst +++ b/documentation/website/source/documentation/publications.rst @@ -109,6 +109,21 @@ detection** syntax, the approach taken to describe and represent that syntax is distinctly Lisp-like in philosophy. +**Modern languages and Microsoft's component object model** +(by David N. Gray, John Hotchkiss, Seth Laforge, Andrew Shalit and +Toby Weinberg - Communications of the ACM May 1998 +`bib <../_static/documentation/gray1998.bib>`__) + + As the computer industry's reliance on component software increases, + it becomes increasingly difficult to integrate complex component + systems. Modern development environments take a variety of approaches + to simplifying this programming problem. This article describes how + three programming language implementations provide access to Microsoft's + Component Object Model (COM), and how they attempt to reduce the + complexity of writing nad using COM objects. + + http://dl.acm.org/citation.cfm?id=274957 + **A Monotonic Superclass Linearization for Dylan** (by Kim Barrett and Bob Cassels and Paul Haahr and David A. Moon and Keith Playford and P. Tucker Withington at OOPSLA 1996 From 4692fe002bd400dfd09c14546e6f383275212048 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Tue, 10 Jan 2012 09:35:41 -0500 Subject: [PATCH 122/519] Add bibtex of Gray's article also to global bibtex file --- .../_static/documentation/publications.bib | 18 ++++++++++++++++++ documentation/website/sphinx-extensions | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/documentation/website/source/_static/documentation/publications.bib b/documentation/website/source/_static/documentation/publications.bib index a52567fcd9..19c4e8bbc6 100644 --- a/documentation/website/source/_static/documentation/publications.bib +++ b/documentation/website/source/_static/documentation/publications.bib @@ -66,6 +66,24 @@ @techreport{Bachrach:1999 source = {http://people.csail.mit.edu/jrb/Projects/dexprs.pdf}, } +@article{Gray:1998:MLM:274946.274957, + author = {Gray, David N. and Hotchkiss, John and LaForge, Seth and Shalit, Andrew and Weinberg, Toby}, + title = {Modern languages and Microsoft's component object model}, + journal = {Commun. ACM}, + volume = {41}, + issue = {5}, + month = {May}, + year = {1998}, + issn = {0001-0782}, + pages = {55--65}, + numpages = {11}, + url = {http://doi.acm.org/10.1145/274946.274957}, + doi = {http://doi.acm.org/10.1145/274946.274957}, + acmid = {274957}, + publisher = {ACM}, + address = {New York, NY, USA}, +} + @article{Barrett:1996:MSL:236338.236343, author = {Barrett, Kim and Cassels, Bob and Haahr, Paul and Moon, David A. and Playford, Keith and Withington, P. Tucker}, title = {A monotonic superclass linearization for Dylan}, diff --git a/documentation/website/sphinx-extensions b/documentation/website/sphinx-extensions index 195fed9240..cf0d61ae6f 160000 --- a/documentation/website/sphinx-extensions +++ b/documentation/website/sphinx-extensions @@ -1 +1 @@ -Subproject commit 195fed924012eae749cc44c21a5dc7d2fff946c8 +Subproject commit cf0d61ae6fd6963d90bec2e43fd60862edca6f19 From a010bda388dc8ff0540d0f31a519cbe6c5ba7ded Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Tue, 10 Jan 2012 14:24:45 -0500 Subject: [PATCH 123/519] Simplify dep index. --- .../website/source/proposals/index.rst | 43 +++++++------------ 1 file changed, 16 insertions(+), 27 deletions(-) diff --git a/documentation/website/source/proposals/index.rst b/documentation/website/source/proposals/index.rst index 3ed6211ea7..82cd86e389 100644 --- a/documentation/website/source/proposals/index.rst +++ b/documentation/website/source/proposals/index.rst @@ -5,40 +5,29 @@ Dylan Enhancement Proposals .. contents:: Contents :local: -.. NOTE: When adding a new proposal to this index be sure to add it in - two places: the "All Proposals by Number" section and at least one - other section depending on the proposal's current status. +.. NOTE: Each proposal must be in the "All Proposals by Number" table, + regardless of status. Open proposals must ADDITIONALLY be in the + "Open Proposals" table. +Key to proposal types: -Open Proposals (under consideration) -==================================== - -==== ============================================= -0001 `DEP Purpose and Guidelines `_ (`source `__) -0003 `C3 superclass linearization `_ (`source `__) -==== ============================================= - - -Accepted Proposals -================== + Proc = Process, Std = Standards Track, Info = Informational -==== ============================================= -0002 `define function `_ (`source `__) -==== ============================================= +Open Proposals (under consideration) +==================================== -Declined Proposals -================== - -There are no declined proposals. +==== ==== ========== ============================================= +0001 Proc Draft `DEP Purpose and Guidelines `_ (`source `__) +0003 Std Draft `C3 superclass linearization `_ (`source `__) +==== ==== ========== ============================================= All Proposals by Number ======================= -==== ============================================= -0001 `DEP Purpose and Guidelines `_ (`source `__) -0002 `define function `_ (`source `__) -0003 `C3 superclass linearization `_ (`source `__) -==== ============================================= - +==== ==== ========== ============================================= +0001 Proc Draft `DEP Purpose and Guidelines `_ (`source `__) +0002 Std Final `define function `_ (`source `__) +0003 Std Draft `C3 superclass linearization `_ (`source `__) +==== ==== ========== ============================================= From 7aaa2d244d9b67f88b6827bf9460c29d6a6df4ae Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Tue, 10 Jan 2012 14:29:30 -0500 Subject: [PATCH 124/519] Make dep titles like our other titles. --- documentation/website/source/proposals/dep-0001.rst | 3 ++- documentation/website/source/proposals/dep-0002.rst | 3 ++- documentation/website/source/proposals/dep-0003.rst | 4 +++- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 52c871e249..982880dc19 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -1,5 +1,6 @@ +************************** DEP Purpose and Guidelines -========================== +************************** ============== ============================================= DEP #: 1 diff --git a/documentation/website/source/proposals/dep-0002.rst b/documentation/website/source/proposals/dep-0002.rst index 1821e8f390..e910067301 100644 --- a/documentation/website/source/proposals/dep-0002.rst +++ b/documentation/website/source/proposals/dep-0002.rst @@ -1,5 +1,6 @@ +*************** Define Function -=============== +*************** ============== ============================================= DEP #: 2 diff --git a/documentation/website/source/proposals/dep-0003.rst b/documentation/website/source/proposals/dep-0003.rst index 2355736d14..db9f3c269e 100644 --- a/documentation/website/source/proposals/dep-0003.rst +++ b/documentation/website/source/proposals/dep-0003.rst @@ -1,5 +1,6 @@ +*************************** C3 superclass linearization -=========================== +*************************** ============== ============================================= DEP #: 3 @@ -10,6 +11,7 @@ Created: 09-Jan-2012 Post-History: 09-Jan-2012 ============== ============================================= + Abstract ======== From bf503fc84f53a157534223e16f60b1737bb33b02 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Tue, 10 Jan 2012 14:35:49 -0500 Subject: [PATCH 125/519] Add Last-Modified headers. More natural header order. --- .../website/source/proposals/dep-0001.rst | 17 +++++++++-------- .../website/source/proposals/dep-0002.rst | 1 + .../website/source/proposals/dep-0003.rst | 1 + 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 982880dc19..5ad85c9780 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -7,7 +7,8 @@ DEP #: 1 Type: Process Author: Carl Gay Status: Draft -Created: 07-Jan-2011 +Created: 07-Jan-2012 +Last-Modified: 10-Jan-2012 Post-History: None ============== ============================================= @@ -240,19 +241,19 @@ DEP Header Preamble Each DEP must begin with a title, followed by an RFC 822 style header preamble in simple RST table format. The headers must appear in the following order. Headers marked with "*" are optional and are -described below. All other headers are required. :: +described below. All other headers are required. All dates must +be in dd-mm-yyyy format:: - DEP: - Version: - Last-Modified: + DEP #: Author: Status: Type: - * Requires: - Created: - * Dylan-Version: + Created: + Last-Modified: Post-History: + * Dylan-Version: + * Requires: * Replaces: * Superseded-By: * Resolution: diff --git a/documentation/website/source/proposals/dep-0002.rst b/documentation/website/source/proposals/dep-0002.rst index e910067301..d4a8bcc101 100644 --- a/documentation/website/source/proposals/dep-0002.rst +++ b/documentation/website/source/proposals/dep-0002.rst @@ -8,6 +8,7 @@ Type: Standards Track Author: Bill Chiles Status: Accepted Created: 26-Jan-1996 +Last-Modified: 26-Jan-1996 Post-History: None ============== ============================================= diff --git a/documentation/website/source/proposals/dep-0003.rst b/documentation/website/source/proposals/dep-0003.rst index db9f3c269e..41f5e5cf3f 100644 --- a/documentation/website/source/proposals/dep-0003.rst +++ b/documentation/website/source/proposals/dep-0003.rst @@ -8,6 +8,7 @@ Type: Standards Track Author: Hannes Mehnert Status: Draft Created: 09-Jan-2012 +Last-Modified: 09-Jan-2012 Post-History: 09-Jan-2012 ============== ============================================= From 62bcb79fae5bedc18680c196d76ae7751ae67790 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Tue, 10 Jan 2012 23:11:32 -0500 Subject: [PATCH 126/519] Fix typo --- documentation/website/source/news/2011/12/12/dswank.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/news/2011/12/12/dswank.rst b/documentation/website/source/news/2011/12/12/dswank.rst index 7ee83c1c93..82363e2ae9 100644 --- a/documentation/website/source/news/2011/12/12/dswank.rst +++ b/documentation/website/source/news/2011/12/12/dswank.rst @@ -60,5 +60,5 @@ Installation You need the following pieces: - * `dylan-mode `_, and extend your ``~/.emacs`` as documented in README) + * `dylan-mode `_, and extend your ``~/.emacs`` as documented in the README * dswank itself is shipped with the 2011.1 release From c4ceb40c7839686e3e64a154995b033096a88c49 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Wed, 11 Jan 2012 17:10:41 -0500 Subject: [PATCH 127/519] Updated URL to paper, thanks to housel --- documentation/website/source/proposals/dep-0003.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/documentation/website/source/proposals/dep-0003.rst b/documentation/website/source/proposals/dep-0003.rst index 41f5e5cf3f..89a2b4da23 100644 --- a/documentation/website/source/proposals/dep-0003.rst +++ b/documentation/website/source/proposals/dep-0003.rst @@ -30,7 +30,8 @@ Specification The C3 superclass linearization has been proposed in 1996 by Kim Barrett, Bob Cassels, Paul Haahr, David A. Moon, Keith Playford, and P. Tucker Withington in a `paper -`_. +`_ (`html version +`_). A superclass linearization (also known as a class precedence list) is used for resolving conflicts among multiply-inherited superclasses From 8595fc64d0a06db823cc919282d50d9462d5f4d5 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Fri, 13 Jan 2012 01:11:04 -0500 Subject: [PATCH 128/519] Checkpoint a few minor changes. --- .../website/source/proposals/dep-0001.rst | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 32aab42918..36dc03824a 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -9,9 +9,12 @@ Author: Carl Gay Status: Draft Created: 07-Jan-2012 Last-Modified: 10-Jan-2012 -Post-History: None +Post-History: 10-Jan-2012 ============== ============================================= +.. changes to be made... + * Language-Change header + * Time period for feedback: 2 weeks? Preamble ======== @@ -25,13 +28,19 @@ the Dylan team to work from. What is a DEP? ============== -DEP stands for Dylan Enhancement Proposal. A DEP is a design -document providing information to the Dylan community, or describing -a new feature for Dylan or its processes or environment. The DEP -should provide a concise technical specification of the feature and a -rationale for the feature. +DEP stands for Dylan Enhancement Proposal. A DEP is a design document +which -We intend DEPs to be the primary mechanisms for proposing new + * provides information to the Dylan community, or + * describes a new feature for the Dylan language or its standard + libraries, or + * describes changes to the processes or environment surrounding + Dylan or its reference implementation, Open Dylan. + +The DEP should provide a concise technical specification of, and +rationale for, the feature or process. + +We intend DEPs to be the primary mechanism for proposing new features, for collecting community input on an issue, and for documenting the design decisions that have gone into Dylan. The DEP author is responsible for building consensus within the community and @@ -48,7 +57,7 @@ DEP Types There are three kinds of DEP: 1. A **Standards Track** DEP describes a new feature or implementation - for Dylan. + for Dylan or its standard libraries. 2. An **Informational** DEP describes a Dylan design issue, or provides general guidelines or information to the Dylan community, @@ -289,7 +298,7 @@ versions of the DEP are posted to the hackers list. Both headers should be in dd-mmm-yyyy format, e.g. 14-Aug-2001. Standards Track DEPs must have a Dylan-Version header which indicates -the version of Dylan that the feature will be released with. +the version of Open Dylan that the feature will be released with. Informational and Process DEPs do not need a Dylan-Version header. DEPs may have a Requires header, indicating the DEP numbers that this From 0699daf230dc87572ddf06c86311566d6af58fac Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 16 Jan 2012 00:21:22 -0500 Subject: [PATCH 129/519] Add feedback time of 2 weeks. Add Affects-DRM header. Various small edits. --- .../website/source/proposals/dep-0001.rst | 213 +++++++++++------- 1 file changed, 136 insertions(+), 77 deletions(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 36dc03824a..2ca3210e01 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -3,7 +3,7 @@ DEP Purpose and Guidelines ************************** ============== ============================================= -DEP #: 1 +DEP Number: 1 Type: Process Author: Carl Gay Status: Draft @@ -12,9 +12,9 @@ Last-Modified: 10-Jan-2012 Post-History: 10-Jan-2012 ============== ============================================= -.. changes to be made... - * Language-Change header - * Time period for feedback: 2 weeks? +.. contents:: Contents + :local: + Preamble ======== @@ -81,48 +81,51 @@ There are three kinds of DEP: DEP Work Flow ============= -The DEP process begins with a new idea for Dylan. It is highly -recommended that a single DEP contain a single key proposal or new -idea. Small enhancements or patches often don't need a DEP and can be -injected into the Dylan development work flow with a patch submission -to the issue tracker for the appropriate repository on GitHub. The -more focussed the DEP, the more successful it tends to be. If in -doubt, split your DEP into several well-focussed ones. - -Each DEP must have a champion -- someone who writes the DEP using the -style and format described below, shepherds the discussions in the -appropriate forums, and attempts to build community consensus around -the idea. The DEP champion (a.k.a. Author) should first attempt to -ascertain whether the idea is DEP-able. Posting to -hackers@opendylan.org is the best way to go about this. - -Vetting an idea publicly before going as far as writing a DEP is meant -to save the potential author time. Many ideas have been brought -forward for changing Dylan that have been rejected for various -reasons. Asking the Dylan community first if an idea is original -helps prevent too much time being spent on something that is -guaranteed to be rejected based on prior discussions (searching -the internet does not always do the trick). It also helps to make sure -the idea is applicable to the entire community and not just the author. -Just because an idea sounds good to the author does not -mean it will work for most people in most areas where Dylan is used. - -Once the champion has asked the Dylan community whether an idea has -any chance of acceptance, a properly formatted draft DEP should be -presented to hackers@opendylan.org. The initial DEP status should be -"Draft". The DEP author should assign the next available DEP number -to the DEP by looking at the `DEP directory `_ to find the -highest used number. The DEP number is not assured until the DEP has -been committed to the `origin Git repository +**Have an idea** -- The DEP process begins with a new idea for Dylan. +It is highly recommended that a single DEP contain a **single key +proposal** or new idea. Small enhancements or patches often don't need +a DEP and can be injected into the Dylan development work flow with a +patch submission to the issue tracker for the appropriate repository +on GitHub. The more focussed the DEP, the more successful it tends to +be. If in doubt, split your DEP into several well-focussed ones. + +**Have a champion** -- Each DEP must have a champion -- someone who +writes the DEP using the style and format described below, shepherds +the discussions in the appropriate forums, and attempts to build +community consensus around the idea. The DEP champion (a.k.a. Author) +should first attempt to ascertain whether the idea is DEP-able. +Posting to hackers@opendylan.org is the best way to go about this. + +**Vet the idea publicly** -- Vetting an idea publicly before going as +far as writing a DEP is meant to save the potential author time. Many +ideas have been brought forward for changing Dylan that have been +rejected for various reasons. Asking the Dylan community first if an +idea is original helps prevent too much time being spent on something +that is guaranteed to be rejected based on prior discussions +(searching the internet does not always do the trick). It also helps +to make sure the idea is applicable to the entire community and not +just the author. Just because an idea sounds good to the author does +not mean it will work for most people in most areas where Dylan is +used. + +**Present a draft** -- Once the champion has asked the Dylan community +whether an idea has any chance of acceptance, a properly formatted +draft DEP should be presented to hackers@opendylan.org. The initial +DEP status should be **Draft**. The DEP author should assign the next +available DEP number to the DEP by looking at the `DEP directory +`_ to find the highest used number. The DEP number is not +assured until the DEP has been committed to the `origin Git repository `_. As updates are necessary, the DEP author may commit new versions. -We rely on reaching consensus on the hackers mailing list. Consensus -_must_ be reached for the DEP to be approved. Exactly what -"consensus" means here is left undefined, as we expect most cases to -be obvious and we wish to keep the process informal for now. At such -time as this becomes a problem we may implement a more formal scheme -(e.g., voting). +Wait for at least two weeks to receive feedback on each draft. + +**Reach consensus** -- We rely on reaching consensus on the hackers +mailing list. Consensus _must_ be reached for the DEP to be approved. +Exactly what "consensus" means here is left undefined, as we expect +most cases to be obvious and we wish to keep the process informal for +now. At such time as this becomes a problem we may implement a more +formal scheme (e.g., voting). Standards Track DEPs consist of two parts, a design document and a reference implementation. The DEP should be reviewed and accepted @@ -139,7 +142,7 @@ separate SIG mailing list for the topic, having the DEP author accept private comments in the early design phases, setting up a wiki page, etc. DEP authors should use their discretion here. -For a DEP to be accepted it must meet certain minimum criteria. It +For a DEP to be **Accepted** it must meet certain minimum criteria. It must be a clear and complete description of the proposed enhancement. The enhancement must represent a net improvement. The proposed implementation, if applicable, must be solid and must not unduly add @@ -147,18 +150,18 @@ complication. Once a DEP has been accepted, the reference implementation must be completed. When the reference implementation is complete and accepted -by the community, the status may be changed to "Final". +by the community, the status may be changed to **Final**. -A DEP can also be assigned status "Deferred". The DEP author or +A DEP can also be assigned status **Deferred**. The DEP author or editor can assign the DEP this status when no progress is being made on the DEP. Once a DEP is deferred, the DEP editor can re-assign it to draft status. -A DEP can also be "Rejected". Perhaps after all is said and done it +A DEP can also be **Rejected**. Perhaps after all is said and done it was not a good idea. It is still important to have a record of this fact. -DEPs can also be superseded by a different DEP, rendering the original +DEPs can also be **superseded by** a different DEP, rendering the original obsolete. This is intended for Informational DEPs, where version 2 of an API can replace version 1. @@ -166,8 +169,9 @@ The possible paths of the status of DEPs are as follows: .. image:: ../_static/dep-0001-states.png -Some Informational and Process DEPs may also have a status of "Active" -if they are never meant to be completed. E.g. DEP 1 (this DEP). +Some Informational and Process DEPs may also have a status of +**Active** if they are never meant to be completed. E.g. DEP 1 (this +DEP). What belongs in a successful DEP? @@ -175,30 +179,37 @@ What belongs in a successful DEP? Each DEP should have the following parts: -1. Preamble -- RFC 822 style headers containing meta-data about the +1. Title + +#. Preamble -- RFC 822 style headers containing meta-data about the DEP, including the DEP number, a short descriptive title (limited to a maximum of 44 characters), the names, and optionally the contact info for each author, etc. -2. Abstract -- a short (~200 word) description of the technical issue +#. Table of contents:: + + .. contents: Contents + :local: + +#. Abstract -- a short (~200 word) description of the technical issue being addressed. -3. Copyright/public domain -- Each DEP must either be explicitly +#. Copyright/public domain -- Each DEP must either be explicitly labelled as placed in the public domain (see this DEP as an example) or licensed under the `Open Publication License`_. -4. Specification -- The technical specification should describe the - syntax and semantics of any new language feature. The +#. Specification -- The technical specification should describe the + syntax and semantics of any new language or library feature. The specification should be detailed enough to allow competing, - interoperable implementations for any of the current Dylan - platforms. + interoperable Dylan implementations. If the DEP proposes changes + to the language itself it *must* clearly indicate all such changes. -5. Motivation -- The motivation is critical for DEPs that want to +#. Motivation -- The motivation is critical for DEPs that want to change the Dylan language. It should clearly explain why the existing language specification is inadequate to address the problem that the DEP solves. -6. Rationale -- The rationale fleshes out the specification by +#. Rationale -- The rationale fleshes out the specification by describing what motivated the design and why particular design decisions were made. It should describe alternate designs that were considered and related work, e.g. how the feature is supported @@ -208,12 +219,12 @@ Each DEP should have the following parts: community and discuss important objections or concerns raised during discussion. -7. Backwards Compatibility -- All DEPs that introduce backwards +#. Backwards Compatibility -- All DEPs that introduce backwards incompatibilities must include a section describing these incompatibilities and their severity. The DEP must explain how the author proposes to deal with these incompatibilities. -8. Reference Implementation -- The reference implementation must be +#. Reference Implementation -- The reference implementation must be completed before any DEP is given status "Final", but it need not be completed before the DEP is accepted. It is better to finish the specification and rationale first and reach consensus on it @@ -251,21 +262,34 @@ Each DEP must begin with a title, followed by an RFC 822 style header preamble in simple RST table format. The headers must appear in the following order. Headers marked with "*" are optional and are described below. All other headers are required. All dates must -be in dd-mm-yyyy format:: +be in dd-mm-yyyy format. :: - DEP #: + DEP-Number: Author: Status: Type: + Affects-DRM: Yes/No Created: Last-Modified: Post-History: - * Dylan-Version: + Resolution: [required for Standards Track DEPs only] + * Target-Version: * Requires: * Replaces: * Superseded-By: - * Resolution: + +DEP Number +~~~~~~~~~~ + +Authors may assign DEP numbers themselves by looking at the last +number in the `numerical list of DEPs +`_ and incrementing it by +one. To prevent collisions, the author should set the ``DEP-Number`` +header to "Unassigned" until just before the DEP is committed to git. + +Author +~~~~~~ The Author header lists the names, and optionally the email addresses of all the authors/owners of the DEP. The format of the Author header @@ -285,26 +309,60 @@ following RFC 2822 continuation line conventions. .. Not yet: Note that personal email addresses in DEPs will be obscured as a defense against spam harvesters. -*Note: The Resolution header is required for Standards Track DEPs -only. It contains a URL that should point to an email message or -other web resource where the pronouncement about the DEP is made.* +Status +~~~~~~ + +See `DEP Work Flow`_ for a description of this field. + +Type +~~~~ The Type header specifies the type of DEP: Standards Track, Informational, or Process. +Affects-DRM +~~~~~~~~~~~ + +This field is only required for Standards Track DEPs. The value +should be **Yes** if the DEP proposes a change to the Dylan language +definition, and otherwise **No**. The language definition is composed +of the Dylan Reference Manual plus any **Accepted** DEPs for which +this field is **Yes**. If this field is set to **Yes** then the DEP +*must* clearly list exactly how it affects the language definition. + +Created +~~~~~~~ + The Created header records the date that the DEP was assigned a number, while Post-History is used to record the dates of when new -versions of the DEP are posted to the hackers list. Both -headers should be in dd-mmm-yyyy format, e.g. 14-Aug-2001. +versions of the DEP are posted to the hackers list. Both headers +should be in dd-mmm-yyyy format, e.g. 14-Aug-2001. + +Resolution +~~~~~~~~~~ -Standards Track DEPs must have a Dylan-Version header which indicates -the version of Open Dylan that the feature will be released with. -Informational and Process DEPs do not need a Dylan-Version header. +The Resolution header is required for Standards Track DEPs only. It +contains a URL that should point to an email message or other web +resource where the pronouncement about the DEP is made. + +Target-Version +~~~~~~~~~~~~~~ + +Standards Track DEPs must have a Target-Version header which indicates +the version of Open Dylan in which the feature is expected to be +released. Informational and Process DEPs do not need a Target-Version +header. + +Requires +~~~~~~~~ DEPs may have a Requires header, indicating the DEP numbers that this DEP depends on. -DEPs may also have a Superseded-By header indicating that a DEP has +Superseded-By and Replaces +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +DEPs may also have a Superseded-By header indicating that they have been rendered obsolete by a later document; the value is the number of the DEP that replaces the current document. The newer DEP must have a Replaces header containing the number of the DEP that it rendered @@ -315,9 +373,10 @@ Auxiliary Files =============== DEPs may include auxiliary files such as diagrams. Such files must be -named ``dep-XXXX-aaaa.ext``, where "XXXX" is the DEP number, "aaaa" is -arbitrary text to indicate the file content (e.g., "state-diagram"), -and "ext" is replaced by the actual file extension (e.g. "png"). +named ``dep-XXXX-aaaa.ext``, where "XXXX" is the DEP number (padded +with leading zeros), "aaaa" is arbitrary text to indicate the file +content (e.g., "state-diagram"), and "ext" is replaced by the actual +file extension (e.g. "png"). Reporting DEP Bugs, or Submitting DEP Updates From eba2bb1c599a10c4bc12014a2c36df4741963768 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 16 Jan 2012 00:23:45 -0500 Subject: [PATCH 130/519] Update Last-Modified --- documentation/website/source/proposals/dep-0001.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 2ca3210e01..07b0eb9056 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -8,7 +8,7 @@ Type: Process Author: Carl Gay Status: Draft Created: 07-Jan-2012 -Last-Modified: 10-Jan-2012 +Last-Modified: 16-Jan-2012 Post-History: 10-Jan-2012 ============== ============================================= From 4e2e52ed5e1b3603c118e755a99d3edce69c1646 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 16 Jan 2012 16:12:38 -0500 Subject: [PATCH 131/519] 2 weeks -> 10 days. Compromise? Add terminology section. Add missed header sections. --- .../website/source/proposals/dep-0001.rst | 44 ++++++++++++++++--- 1 file changed, 39 insertions(+), 5 deletions(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 07b0eb9056..5da2b9b2ad 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -25,6 +25,28 @@ author would like to thank them for providing an excellent base for the Dylan team to work from. +Terminology +=========== + +Dylan Reference Manual (DRM) + The manual written by Andrew Shallit, plus its errata. + +Dylan language specification + The DRM *plus* any **Accepted** DEPs that modify the Dylan + language specification. + +Open Dylan (OD) + The reference implementation of the Dylan language specification. + +Standard libraries + The set of libraries that are officially maintained alongside Open + Dylan. They are officially maintained in follow sense: + + * Commits are reviewed for bugs and style. + * They are tested prior to each OD release. + * They are packaged with each OD release. + + What is a DEP? ============== @@ -35,7 +57,7 @@ which * describes a new feature for the Dylan language or its standard libraries, or * describes changes to the processes or environment surrounding - Dylan or its reference implementation, Open Dylan. + the Dylan language or Open Dylan. The DEP should provide a concise technical specification of, and rationale for, the feature or process. @@ -118,7 +140,7 @@ assured until the DEP has been committed to the `origin Git repository `_. As updates are necessary, the DEP author may commit new versions. -Wait for at least two weeks to receive feedback on each draft. +Wait for at least ten days to receive feedback on each draft. **Reach consensus** -- We rely on reaching consensus on the hackers mailing list. Consensus _must_ be reached for the DEP to be approved. @@ -334,9 +356,21 @@ Created ~~~~~~~ The Created header records the date that the DEP was assigned a -number, while Post-History is used to record the dates of when new -versions of the DEP are posted to the hackers list. Both headers -should be in dd-mmm-yyyy format, e.g. 14-Aug-2001. +number. It should be in dd-mmm-yyyy format. + +Last-Modified +~~~~~~~~~~~~~ + +The Last-Modified header is included because it may be useful to those +reading DEPs without access to git. It should be updated when +substantive changes are made to the DEP. It need not be updated when +fixing typos, changed URLs, etc. It must be in dd-mmm-yyyy format. + +Post-History +~~~~~~~~~~~~ + +This field should list the dates when DEP drafts were posted to the +hackers mailing list, in dd-mmm-yyyy format. Resolution ~~~~~~~~~~ From 5531ad58c1f18f71e024900aaa6c6e65a261977d Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 16 Jan 2012 18:01:47 -0500 Subject: [PATCH 132/519] typo --- documentation/website/source/proposals/dep-0001.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 5da2b9b2ad..4e735f1fa7 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -40,7 +40,7 @@ Open Dylan (OD) Standard libraries The set of libraries that are officially maintained alongside Open - Dylan. They are officially maintained in follow sense: + Dylan. They are officially maintained in the following sense: * Commits are reviewed for bugs and style. * They are tested prior to each OD release. From 63579027b3db4a9eae9f12eff674a6106bf97547 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 16 Jan 2012 18:32:48 -0500 Subject: [PATCH 133/519] Reference the PEP-01 --- documentation/website/source/proposals/dep-0001.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 4e735f1fa7..6972960d8f 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -19,7 +19,8 @@ Post-History: 10-Jan-2012 Preamble ======== -This document is based heavily on Python PEP 1, "PEP Purpose and +This document is based heavily on Python `PEP 1 +`_, "PEP Purpose and Guidelines", by Barry Warsaw, Jeremy Hylton, and David Goodger. The author would like to thank them for providing an excellent base for the Dylan team to work from. From e0d2eb5b8c87a5267cb388c343cfbcde55791f0b Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 16 Jan 2012 18:33:59 -0500 Subject: [PATCH 134/519] Fix typos --- documentation/website/source/proposals/dep-0001.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 6972960d8f..235704960a 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -30,7 +30,7 @@ Terminology =========== Dylan Reference Manual (DRM) - The manual written by Andrew Shallit, plus its errata. + The manual written by Andrew Shalit, plus its errata. Dylan language specification The DRM *plus* any **Accepted** DEPs that modify the Dylan @@ -161,7 +161,7 @@ DEP authors are responsible for collecting community feedback on a DEP before submitting it for review. However, wherever possible, long open-ended discussions on public mailing lists should be avoided. Strategies to keep the discussions efficient include: setting up a -separate SIG mailing list for the topic, having the DEP author accept +separate mailing list for the topic, having the DEP author accept private comments in the early design phases, setting up a wiki page, etc. DEP authors should use their discretion here. From 82c2e12d3ae2d21e77f55d2bdaa0497f7a1593ea Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 16 Jan 2012 18:34:18 -0500 Subject: [PATCH 135/519] Clarify semantics --- documentation/website/source/proposals/dep-0001.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 235704960a..62bab1f538 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -33,7 +33,7 @@ Dylan Reference Manual (DRM) The manual written by Andrew Shalit, plus its errata. Dylan language specification - The DRM *plus* any **Accepted** DEPs that modify the Dylan + The DRM *plus* all **Accepted** DEPs that modify the Dylan language specification. Open Dylan (OD) From c7006efb680527f44ad1b86900c37789bf1b4166 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 16 Jan 2012 18:34:44 -0500 Subject: [PATCH 136/519] Require a pull request rather than a patch --- documentation/website/source/proposals/dep-0001.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 62bab1f538..174dc112a0 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -108,9 +108,9 @@ DEP Work Flow It is highly recommended that a single DEP contain a **single key proposal** or new idea. Small enhancements or patches often don't need a DEP and can be injected into the Dylan development work flow with a -patch submission to the issue tracker for the appropriate repository -on GitHub. The more focussed the DEP, the more successful it tends to -be. If in doubt, split your DEP into several well-focussed ones. +pull request to the issue tracker for the appropriate repository on +GitHub. The more focussed the DEP, the more successful it tends to be. +If in doubt, split your DEP into several well-focussed ones. **Have a champion** -- Each DEP must have a champion -- someone who writes the DEP using the style and format described below, shepherds From 76c45d4450efb28c12e89fcf15aec61911386546 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 16 Jan 2012 18:35:17 -0500 Subject: [PATCH 137/519] champion -> author --- documentation/website/source/proposals/dep-0001.rst | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 174dc112a0..b1849912be 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -112,12 +112,12 @@ pull request to the issue tracker for the appropriate repository on GitHub. The more focussed the DEP, the more successful it tends to be. If in doubt, split your DEP into several well-focussed ones. -**Have a champion** -- Each DEP must have a champion -- someone who +**Have an author** -- Each DEP must have an author -- someone who writes the DEP using the style and format described below, shepherds the discussions in the appropriate forums, and attempts to build -community consensus around the idea. The DEP champion (a.k.a. Author) -should first attempt to ascertain whether the idea is DEP-able. -Posting to hackers@opendylan.org is the best way to go about this. +community consensus around the idea. The DEP author should first +attempt to ascertain whether the idea is DEP-able. Posting to +hackers@opendylan.org is the best way to go about this. **Vet the idea publicly** -- Vetting an idea publicly before going as far as writing a DEP is meant to save the potential author time. Many @@ -131,7 +131,7 @@ just the author. Just because an idea sounds good to the author does not mean it will work for most people in most areas where Dylan is used. -**Present a draft** -- Once the champion has asked the Dylan community +**Present a draft** -- Once the author has asked the Dylan community whether an idea has any chance of acceptance, a properly formatted draft DEP should be presented to hackers@opendylan.org. The initial DEP status should be **Draft**. The DEP author should assign the next From 0bd87ecb4ec1b29b398e564ea25ab0c82708436c Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 16 Jan 2012 18:35:54 -0500 Subject: [PATCH 138/519] Link to hackers@ and http://opendylan.org --- .../website/source/proposals/dep-0001.rst | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index b1849912be..a643ee96d5 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -143,12 +143,12 @@ As updates are necessary, the DEP author may commit new versions. Wait for at least ten days to receive feedback on each draft. -**Reach consensus** -- We rely on reaching consensus on the hackers -mailing list. Consensus _must_ be reached for the DEP to be approved. -Exactly what "consensus" means here is left undefined, as we expect -most cases to be obvious and we wish to keep the process informal for -now. At such time as this becomes a problem we may implement a more -formal scheme (e.g., voting). +**Reach consensus** -- We rely on reaching consensus on the +hackers@opendylan.org mailing list. Consensus _must_ be reached for +the DEP to be approved. Exactly what "consensus" means here is left +undefined, as we expect most cases to be obvious and we wish to keep +the process informal for now. At such time as this becomes a problem +we may implement a more formal scheme (e.g., voting). Standards Track DEPs consist of two parts, a design document and a reference implementation. The DEP should be reviewed and accepted @@ -464,8 +464,8 @@ Once the DEP is ready for the repository, the DEP author will: Commit your changes, push them to your fork of the repository and submit a pull request. -* Monitor opendylan.org to make sure the DEP gets added to the site - properly. +* Monitor `opendylan.org `_ to make sure the DEP + gets added to the site properly. Resources: From 9e882e02c0a05ce3b010e039f9fdd97600bac0dd Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 16 Jan 2012 18:36:46 -0500 Subject: [PATCH 139/519] Remove superfluous comment on date (already 'must be in dd-mm-yyyy format') --- documentation/website/source/proposals/dep-0001.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index a643ee96d5..9962f2731a 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -357,7 +357,7 @@ Created ~~~~~~~ The Created header records the date that the DEP was assigned a -number. It should be in dd-mmm-yyyy format. +number. Last-Modified ~~~~~~~~~~~~~ @@ -365,13 +365,13 @@ Last-Modified The Last-Modified header is included because it may be useful to those reading DEPs without access to git. It should be updated when substantive changes are made to the DEP. It need not be updated when -fixing typos, changed URLs, etc. It must be in dd-mmm-yyyy format. +fixing typos, changed URLs, etc. Post-History ~~~~~~~~~~~~ This field should list the dates when DEP drafts were posted to the -hackers mailing list, in dd-mmm-yyyy format. +hackers mailing list. Resolution ~~~~~~~~~~ From 72c59284870651360aee7ca0c54d404f50cab785 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 16 Jan 2012 18:37:10 -0500 Subject: [PATCH 140/519] Clarify Target-Version header --- documentation/website/source/proposals/dep-0001.rst | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 9962f2731a..780382a74c 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -384,9 +384,8 @@ Target-Version ~~~~~~~~~~~~~~ Standards Track DEPs must have a Target-Version header which indicates -the version of Open Dylan in which the feature is expected to be -released. Informational and Process DEPs do not need a Target-Version -header. +the version of Open Dylan in which the feature will be released. +Informational and Process DEPs do not need a Target-Version header. Requires ~~~~~~~~ From d35d3aa03bbc72902444533212d4fca1c34bb3c0 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 16 Jan 2012 19:05:44 -0500 Subject: [PATCH 141/519] focussed -> focused (boy does that look like /fo-kyuzed/ to me) --- documentation/website/source/proposals/dep-0001.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 780382a74c..37da1631fb 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -109,8 +109,8 @@ It is highly recommended that a single DEP contain a **single key proposal** or new idea. Small enhancements or patches often don't need a DEP and can be injected into the Dylan development work flow with a pull request to the issue tracker for the appropriate repository on -GitHub. The more focussed the DEP, the more successful it tends to be. -If in doubt, split your DEP into several well-focussed ones. +GitHub. The more focused the DEP, the more successful it tends to be. +If in doubt, split your DEP into several well-focused ones. **Have an author** -- Each DEP must have an author -- someone who writes the DEP using the style and format described below, shepherds From 378d36e2c181b12291b95930f757589cbf254680 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 16 Jan 2012 19:12:41 -0500 Subject: [PATCH 142/519] capitalize "superseded by" --- documentation/website/source/proposals/dep-0001.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 37da1631fb..e83ff1094f 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -184,7 +184,7 @@ A DEP can also be **Rejected**. Perhaps after all is said and done it was not a good idea. It is still important to have a record of this fact. -DEPs can also be **superseded by** a different DEP, rendering the original +DEPs can also be **Superseded-By** a different DEP, rendering the original obsolete. This is intended for Informational DEPs, where version 2 of an API can replace version 1. From 2df81a30a01b8344788b522939593d5146e38693 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 16 Jan 2012 19:14:56 -0500 Subject: [PATCH 143/519] More precision in the headers --- .../website/source/proposals/dep-0001.rst | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index e83ff1094f..08733668c9 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -284,22 +284,23 @@ DEP Header Preamble Each DEP must begin with a title, followed by an RFC 822 style header preamble in simple RST table format. The headers must appear in the following order. Headers marked with "*" are optional and are -described below. All other headers are required. All dates must -be in dd-mm-yyyy format. :: +described below. All other headers are required. All dates must be +in dd-mm-yyyy format. A list of values must use a comma as +separator. :: DEP-Number: - Author: + Author: Status: Type: - Affects-DRM: Yes/No + Affects-DRM: Created: Last-Modified: - Post-History: - Resolution: [required for Standards Track DEPs only] + Post-History: + * Resolution: * Target-Version: - * Requires: - * Replaces: + * Requires: + * Replaces: * Superseded-By: DEP Number From c90d78ffee022e4bc6ce25722c905a3b05d1fe53 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 16 Jan 2012 19:46:48 -0500 Subject: [PATCH 144/519] Don't use abbreviations here. Link to history. --- .../website/source/proposals/index.rst | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/documentation/website/source/proposals/index.rst b/documentation/website/source/proposals/index.rst index 82cd86e389..f09daad7ba 100644 --- a/documentation/website/source/proposals/index.rst +++ b/documentation/website/source/proposals/index.rst @@ -9,25 +9,31 @@ Dylan Enhancement Proposals regardless of status. Open proposals must ADDITIONALLY be in the "Open Proposals" table. -Key to proposal types: +Introduction +============ + +This is the index of all Dylan Enhancement Proposals, known as DEPs. A +DEP number is never changed. The historical record of the DEP texts +is in the `GitHub website repository +`_ +. - Proc = Process, Std = Standards Track, Info = Informational Open Proposals (under consideration) ==================================== -==== ==== ========== ============================================= -0001 Proc Draft `DEP Purpose and Guidelines `_ (`source `__) -0003 Std Draft `C3 superclass linearization `_ (`source `__) -==== ==== ========== ============================================= +==== ======== ========== ============================================= +1 Process Draft `DEP Purpose and Guidelines `_ (`source <../_sources/proposals/dep-0001.txt>`__) +3 Standard Draft `C3 superclass linearization `_ (`source <../_sources/proposals/dep-0003.txt>`__) +==== ======== ========== ============================================= All Proposals by Number ======================= -==== ==== ========== ============================================= -0001 Proc Draft `DEP Purpose and Guidelines `_ (`source `__) -0002 Std Final `define function `_ (`source `__) -0003 Std Draft `C3 superclass linearization `_ (`source `__) -==== ==== ========== ============================================= +==== ======== ========== ============================================= +1 Process Draft `DEP Purpose and Guidelines `_ (`source <../_sources/proposals/dep-0001.txt>`__) +2 Standard Final `define function `_ (`source <../_sources/proposals/dep-0002.txt>`__) +3 Standard Draft `C3 superclass linearization `_ (`source <../_sources/proposals/dep-0003.txt>`__) +==== ======== ========== ============================================= From fa8d5f908feb4366e96a229b159ed40247050d27 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 16 Jan 2012 20:14:40 -0500 Subject: [PATCH 145/519] Update Post-History header and Post-History description. Add date example. --- documentation/website/source/proposals/dep-0001.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/documentation/website/source/proposals/dep-0001.rst b/documentation/website/source/proposals/dep-0001.rst index 08733668c9..f20ffe06d9 100644 --- a/documentation/website/source/proposals/dep-0001.rst +++ b/documentation/website/source/proposals/dep-0001.rst @@ -9,7 +9,7 @@ Author: Carl Gay Status: Draft Created: 07-Jan-2012 Last-Modified: 16-Jan-2012 -Post-History: 10-Jan-2012 +Post-History: 16-Jan-2012, 10-Jan-2012 ============== ============================================= .. contents:: Contents @@ -285,8 +285,8 @@ Each DEP must begin with a title, followed by an RFC 822 style header preamble in simple RST table format. The headers must appear in the following order. Headers marked with "*" are optional and are described below. All other headers are required. All dates must be -in dd-mm-yyyy format. A list of values must use a comma as -separator. :: +in dd-mm-yyyy format (e.g., 14-Jan-2012). A list of values must use a +comma as separator. :: DEP-Number: Author: @@ -372,7 +372,7 @@ Post-History ~~~~~~~~~~~~ This field should list the dates when DEP drafts were posted to the -hackers mailing list. +hackers mailing list. List the dates from newest to oldest. Resolution ~~~~~~~~~~ From 99dac248321a382c940421cf6c9244b52d922413 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 16 Jan 2012 22:08:40 -0500 Subject: [PATCH 146/519] Add "Affects-DRM: Yes" --- documentation/website/source/proposals/dep-0002.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/website/source/proposals/dep-0002.rst b/documentation/website/source/proposals/dep-0002.rst index d4a8bcc101..822f103451 100644 --- a/documentation/website/source/proposals/dep-0002.rst +++ b/documentation/website/source/proposals/dep-0002.rst @@ -5,6 +5,7 @@ Define Function ============== ============================================= DEP #: 2 Type: Standards Track +Affects-DRM: Yes Author: Bill Chiles Status: Accepted Created: 26-Jan-1996 From 745aa09b406fe0308b4d4c3e4a0fdf11cea65500 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 16 Jan 2012 22:10:25 -0500 Subject: [PATCH 147/519] Add "Affects-DRM: Yes" --- documentation/website/source/proposals/dep-0003.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/website/source/proposals/dep-0003.rst b/documentation/website/source/proposals/dep-0003.rst index 89a2b4da23..075ce60cb1 100644 --- a/documentation/website/source/proposals/dep-0003.rst +++ b/documentation/website/source/proposals/dep-0003.rst @@ -5,6 +5,7 @@ C3 superclass linearization ============== ============================================= DEP #: 3 Type: Standards Track +Affects-DRM: Yes Author: Hannes Mehnert Status: Draft Created: 09-Jan-2012 From bf5dd1a89115a3454c5982d94c82bc53cdbdae24 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 16 Jan 2012 22:11:24 -0500 Subject: [PATCH 148/519] Leave room for "Informational" in the type column. --- .../website/source/proposals/index.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/documentation/website/source/proposals/index.rst b/documentation/website/source/proposals/index.rst index f09daad7ba..cd56e6ade8 100644 --- a/documentation/website/source/proposals/index.rst +++ b/documentation/website/source/proposals/index.rst @@ -23,17 +23,17 @@ is in the `GitHub website repository Open Proposals (under consideration) ==================================== -==== ======== ========== ============================================= -1 Process Draft `DEP Purpose and Guidelines `_ (`source <../_sources/proposals/dep-0001.txt>`__) -3 Standard Draft `C3 superclass linearization `_ (`source <../_sources/proposals/dep-0003.txt>`__) -==== ======== ========== ============================================= +==== ============= ========== ============================================= +1 Process Draft `DEP Purpose and Guidelines `_ (`source <../_sources/proposals/dep-0001.txt>`__) +3 Standard Draft `C3 superclass linearization `_ (`source <../_sources/proposals/dep-0003.txt>`__) +==== ============= ========== ============================================= All Proposals by Number ======================= -==== ======== ========== ============================================= -1 Process Draft `DEP Purpose and Guidelines `_ (`source <../_sources/proposals/dep-0001.txt>`__) -2 Standard Final `define function `_ (`source <../_sources/proposals/dep-0002.txt>`__) -3 Standard Draft `C3 superclass linearization `_ (`source <../_sources/proposals/dep-0003.txt>`__) -==== ======== ========== ============================================= +==== ============= ========== ============================================= +1 Process Draft `DEP Purpose and Guidelines `_ (`source <../_sources/proposals/dep-0001.txt>`__) +2 Standard Final `define function `_ (`source <../_sources/proposals/dep-0002.txt>`__) +3 Standard Draft `C3 superclass linearization `_ (`source <../_sources/proposals/dep-0003.txt>`__) +==== ============= ========== ============================================= From 2475bcf9cec092907d37ccf4de5ab1ab59eaab0e Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Fri, 20 Jan 2012 19:31:37 -0500 Subject: [PATCH 149/519] Rename package to project - in the source both is supported --- documentation/website/source/news/2011/12/12/dswank.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/news/2011/12/12/dswank.rst b/documentation/website/source/news/2011/12/12/dswank.rst index 82363e2ae9..b8d899a137 100644 --- a/documentation/website/source/news/2011/12/12/dswank.rst +++ b/documentation/website/source/news/2011/12/12/dswank.rst @@ -33,7 +33,7 @@ subclass hierarchy. +===================+==========================================+ |M-x dime |start dime | +-------------------+------------------------------------------+ -| , change-package | select project (in the repl buffer) | +| , change-project | select project (in the repl buffer) | +-------------------+------------------------------------------+ | M-. | jump to definition | +-------------------+------------------------------------------+ From 7bd088e25bc366b27288ace7bbb28e35549e7b28 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Sun, 22 Jan 2012 09:57:47 +0700 Subject: [PATCH 150/519] Some minor improvements to the C3 DEP. --- .../website/source/proposals/dep-0003.rst | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/documentation/website/source/proposals/dep-0003.rst b/documentation/website/source/proposals/dep-0003.rst index 075ce60cb1..b3ff74d43e 100644 --- a/documentation/website/source/proposals/dep-0003.rst +++ b/documentation/website/source/proposals/dep-0003.rst @@ -18,7 +18,8 @@ Abstract ======== The Dylan superclass linearization is sometimes counter-intuitive. The -C3 superclass linearization algorithm is more intuitive. +C3 superclass linearization algorithm is more intuitive and allows for +greater optimization. Copyright ========= @@ -32,7 +33,7 @@ The C3 superclass linearization has been proposed in 1996 by Kim Barrett, Bob Cassels, Paul Haahr, David A. Moon, Keith Playford, and P. Tucker Withington in a `paper `_ (`html version -`_). +`_). A superclass linearization (also known as a class precedence list) is used for resolving conflicts among multiply-inherited superclasses @@ -42,7 +43,8 @@ Unfortunately the algorithm presented in the Dylan Reference Manual (`computing the class precedence list `_) is not consistent with the extended precedence graph, and may lead to -counter-intuitive linearizations. To fix that, C3 was developed. +counter-intuitive linearizations. To fix that, the C3 linearization +was developed. Motivation ========== @@ -51,17 +53,17 @@ In order to allow for more optimizations, especially compression of dispatch tables, which requires monotonicity of method orderings, a consistent superclass linearization algorithm is needed. -C3 has been proposed in 1996 and was subsequently adapted to Python -2.3 (`article `__) +After the C3 linearization was proposed in 1996, it was subsequently +adapted in Python 2.3 (`article `__) and Perl 6 (`article `__). Rationale ========= -C3 has been around for long enough, it does not break any existing -code, and it is the right thing to do according to the mailing list -discussions. +The C3 linearization has been around for a long time, does not break +any existing code, and is commonly agreed upon as being the right thing +to do (in mailing list discussions). Examples ======== @@ -79,11 +81,21 @@ The example from the paper is given here, consider the following Dylan classes: The Dylan linearization is: + +.. code-block:: dylan + , , , , , , The C3 linearization is: + +.. code-block:: dylan + , , , , , , +The difference in the ordering of ```` and +```` and having that match the ordering of +```` and ```` is clearly +more intuitive and consistent. Backwards Compatibility ======================= From 5c2ad39a842ac5b7a3fd2e286ddfa3413d9bcbbd Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Fri, 20 Jan 2012 20:50:24 -0500 Subject: [PATCH 151/519] Add news item for C3 --- .../website/source/news/2012/01/21/c3.rst | 20 +++++++++++++++++++ .../website/source/news/recent.rst.inc | 11 +++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 documentation/website/source/news/2012/01/21/c3.rst diff --git a/documentation/website/source/news/2012/01/21/c3.rst b/documentation/website/source/news/2012/01/21/c3.rst new file mode 100644 index 0000000000..d2d5aca3ca --- /dev/null +++ b/documentation/website/source/news/2012/01/21/c3.rst @@ -0,0 +1,20 @@ +:Author: Hannes Mehnert +:Date: 2012-01-21 00:00:00 + +C3 linearization +================ + +We implemented the C3 superclass linearization algorithm in the Open +Dylan compiler. This is more intuitive in some corner cases, and +allows further performance improvements, especially compression of +dispatch tables. It has been merged into the `opendylan GitHub +repository `_ and will be +the default in the next release (2012.1). A serious warning will be +issued if the new C3 linearization is different from the old +`linearization specified in the DRM +`_. + +Further information is available in the accepted Dylan enhancement +proposal `here `_ and in the original `paper +`_ (`doi +`_). diff --git a/documentation/website/source/news/recent.rst.inc b/documentation/website/source/news/recent.rst.inc index fb1b5ba5b8..28f2045679 100644 --- a/documentation/website/source/news/recent.rst.inc +++ b/documentation/website/source/news/recent.rst.inc @@ -1,5 +1,14 @@ -**Dswank - emacs and SLIME** +**C3 superclass linearization** +*2012-01-21* + +We implemented the C3 superclass linearization algorithm and +enabled it by default. This is more intuitive and will allow for +further performance improvements. + +:doc:`Read more... ` + +**Dswank - emacs and DIME** *2011-12-12* We developed DIME, the Dylan interaction mode for emacs, based From 93ca9ebbe01d6749a3cb1b1e26424307c4a4cbd3 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Sat, 21 Jan 2012 23:24:37 -0500 Subject: [PATCH 152/519] Reflect C3 being final --- .../website/source/proposals/dep-0003.rst | 21 ++++++++++--------- .../website/source/proposals/index.rst | 3 +-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/documentation/website/source/proposals/dep-0003.rst b/documentation/website/source/proposals/dep-0003.rst index 075ce60cb1..cc8aa6268f 100644 --- a/documentation/website/source/proposals/dep-0003.rst +++ b/documentation/website/source/proposals/dep-0003.rst @@ -2,16 +2,17 @@ C3 superclass linearization *************************** -============== ============================================= -DEP #: 3 -Type: Standards Track -Affects-DRM: Yes -Author: Hannes Mehnert -Status: Draft -Created: 09-Jan-2012 -Last-Modified: 09-Jan-2012 -Post-History: 09-Jan-2012 -============== ============================================= +=============== ============================================= +DEP-Number: 3 +Type: Standards Track +Affects-DRM: Yes +Author: Hannes Mehnert +Status: Accepted +Created: 09-Jan-2012 +Last-Modified: 09-Jan-2012 +Post-History: 09-Jan-2012 +Target-Version: 2012.1 +=============== ============================================= Abstract diff --git a/documentation/website/source/proposals/index.rst b/documentation/website/source/proposals/index.rst index cd56e6ade8..d417869fa6 100644 --- a/documentation/website/source/proposals/index.rst +++ b/documentation/website/source/proposals/index.rst @@ -25,7 +25,6 @@ Open Proposals (under consideration) ==== ============= ========== ============================================= 1 Process Draft `DEP Purpose and Guidelines `_ (`source <../_sources/proposals/dep-0001.txt>`__) -3 Standard Draft `C3 superclass linearization `_ (`source <../_sources/proposals/dep-0003.txt>`__) ==== ============= ========== ============================================= @@ -35,5 +34,5 @@ All Proposals by Number ==== ============= ========== ============================================= 1 Process Draft `DEP Purpose and Guidelines `_ (`source <../_sources/proposals/dep-0001.txt>`__) 2 Standard Final `define function `_ (`source <../_sources/proposals/dep-0002.txt>`__) -3 Standard Draft `C3 superclass linearization `_ (`source <../_sources/proposals/dep-0003.txt>`__) +3 Standard Final `C3 superclass linearization `_ (`source <../_sources/proposals/dep-0003.txt>`__) ==== ============= ========== ============================================= From 4ccddb6347b457790ddfd3ee99d3ddf25b172018 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Wed, 25 Jan 2012 06:59:14 +0700 Subject: [PATCH 153/519] Point to the library-reference instead of the old docs. --- .../website/source/documentation/index.rst | 29 +++++-------------- 1 file changed, 7 insertions(+), 22 deletions(-) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index 0ee5d76b86..ed13be3bd6 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -113,25 +113,19 @@ Documentation The official definition of the Dylan language and standard library. -`Core library reference `_ -[`pdf `__] -[`epub `__] -[`old HTML `__] +`Dylan Library Reference `_ +[`pdf `__] +[`epub `__] Describes the Open Dylan implementation of the Dylan language, a core set of Dylan libraries, and a library interchange mechanism. The core libraries provide many language extensions, a threads - interface, and object finalization. - -`System and I/O library reference `_ -[`pdf `__] -[`epub `__] -[`old HTML `__] - - Describes Open Dylan's printing and output formatting modules, + interface, and object finalization, printing and output formatting modules, a streams module, a sockets module, and modules providing an interface to operating system features such as the file system, - time and date information, and the host machine environment. + time and date information, the host machine environment, as well + as a foreign function interface and some low-level access to the + Microsoft Win32 API. `DUIM library reference `_ @@ -140,15 +134,6 @@ Documentation the portable window programming toolkit. It complements Building Applications Using DUIM. -`C FFI and Win32 library reference `_ -[`pdf `__] -[`epub `__] -[`old HTML `__] - - Describes a foreign function interface library for interoperation - with C programs, and several libraries providing a low-level interface - to the Microsoft Win32 API. - .. raw:: html
From 3aa9dd3213384ede176ae5ee49f272a485b884ad Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Wed, 25 Jan 2012 00:04:21 -0500 Subject: [PATCH 154/519] Update date to reflect reality --- documentation/website/source/news/2012/01/{21 => 25}/c3.rst | 2 +- documentation/website/source/news/recent.rst.inc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename documentation/website/source/news/2012/01/{21 => 25}/c3.rst (96%) diff --git a/documentation/website/source/news/2012/01/21/c3.rst b/documentation/website/source/news/2012/01/25/c3.rst similarity index 96% rename from documentation/website/source/news/2012/01/21/c3.rst rename to documentation/website/source/news/2012/01/25/c3.rst index d2d5aca3ca..c8bb23c5b4 100644 --- a/documentation/website/source/news/2012/01/21/c3.rst +++ b/documentation/website/source/news/2012/01/25/c3.rst @@ -1,5 +1,5 @@ :Author: Hannes Mehnert -:Date: 2012-01-21 00:00:00 +:Date: 2012-01-25 00:00:00 C3 linearization ================ diff --git a/documentation/website/source/news/recent.rst.inc b/documentation/website/source/news/recent.rst.inc index 28f2045679..bdf9fa4845 100644 --- a/documentation/website/source/news/recent.rst.inc +++ b/documentation/website/source/news/recent.rst.inc @@ -1,6 +1,6 @@ **C3 superclass linearization** -*2012-01-21* +*2012-01-25* We implemented the C3 superclass linearization algorithm and enabled it by default. This is more intuitive and will allow for From 9a02ab5a8f4f09bd837c0a968efdbff7d277405f Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Wed, 25 Jan 2012 00:10:34 -0500 Subject: [PATCH 155/519] Update link to implementation --- documentation/website/source/proposals/dep-0003.rst | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/documentation/website/source/proposals/dep-0003.rst b/documentation/website/source/proposals/dep-0003.rst index a4f54d806d..0e487cb715 100644 --- a/documentation/website/source/proposals/dep-0003.rst +++ b/documentation/website/source/proposals/dep-0003.rst @@ -134,6 +134,7 @@ C3: Reference Implementation ======================== -A reference implementation is available in the hannesm/c3 branch on -GitHub: `hannesm/c3 `_ +The `pull request #168 +`_ +was finally merged into master. From aa97382348744626f70c3c42a1f12abd88bf5d42 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Wed, 25 Jan 2012 00:17:28 -0500 Subject: [PATCH 156/519] Move some old news items away from the frontpage; fix link to c3 (25, not 21) --- documentation/website/source/news/index.rst | 20 +++++++++++++++++ .../website/source/news/recent.rst.inc | 22 +------------------ 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/documentation/website/source/news/index.rst b/documentation/website/source/news/index.rst index 5854ca46e6..411e4f4ee9 100644 --- a/documentation/website/source/news/index.rst +++ b/documentation/website/source/news/index.rst @@ -11,6 +11,26 @@ News & Articles .. include:: recent.rst.inc +**New Documentation** +*2011-11-22* + +We're revitalizing our documentation and moving to a new +publishing system. We'll soon be able to provide our +documentation in PDF and ePub as well as HTML, with it +looking much better and being more maintainable than +in the past. + +:doc:`Read more... ` + +**Welcome to the New Website!** +*2011-11-22* + +As part of recharging Open Dylan development, we've re-done the +website and cleaned up a lot of the old, out-dated material here. + +If you're looking for some of the old material, it can be found +over at ``_. + .. raw:: html diff --git a/documentation/website/source/news/recent.rst.inc b/documentation/website/source/news/recent.rst.inc index bdf9fa4845..d9158e81e5 100644 --- a/documentation/website/source/news/recent.rst.inc +++ b/documentation/website/source/news/recent.rst.inc @@ -6,7 +6,7 @@ We implemented the C3 superclass linearization algorithm and enabled it by default. This is more intuitive and will allow for further performance improvements. -:doc:`Read more... ` +:doc:`Read more... ` **Dswank - emacs and DIME** *2011-12-12* @@ -28,23 +28,3 @@ and new features. :doc:`Read more... ` -**New Documentation** -*2011-11-22* - -We're revitalizing our documentation and moving to a new -publishing system. We'll soon be able to provide our -documentation in PDF and ePub as well as HTML, with it -looking much better and being more maintainable than -in the past. - -:doc:`Read more... ` - -**Welcome to the New Website!** -*2011-11-22* - -As part of recharging Open Dylan development, we've re-done the -website and cleaned up a lot of the old, out-dated material here. - -If you're looking for some of the old material, it can be found -over at ``_. - From 752dc15a8a3a54c1b82b00f5e99ad77a8f18d72d Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Thu, 26 Jan 2012 20:11:07 +0700 Subject: [PATCH 157/519] Improve CSS minorly: headerlink and li content. --- .../opendylan/static/opendylan.org/css/opendylan.css | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/documentation/website/source/_themes/opendylan/static/opendylan.org/css/opendylan.css b/documentation/website/source/_themes/opendylan/static/opendylan.org/css/opendylan.css index c5489e226c..7a3fc9c8ec 100644 --- a/documentation/website/source/_themes/opendylan/static/opendylan.org/css/opendylan.css +++ b/documentation/website/source/_themes/opendylan/static/opendylan.org/css/opendylan.css @@ -17,3 +17,12 @@ body { -moz-border-radius:3px; border-radius:3px; } +/* Make the headerlink less obnoxiously visible */ +a.headerlink { + color: silver; +} +/* Undo an annoyance from Bootstrap */ +li { + color: black; +} + From ea77108cbe42522c7e034395308517b5b0220751 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Wed, 1 Feb 2012 18:05:08 +0700 Subject: [PATCH 158/519] Update to Bootstrap 2.0 and jQuery 1.7.1. --- .../source/_themes/opendylan/layout.html | 34 +- .../static/bootstrap/2.0/css/bootstrap.css | 3363 +++++++++++++++++ .../bootstrap/2.0/css/bootstrap.min.css | 610 +++ .../2.0/css/bootstrap.min.responsive | 3 + .../bootstrap/2.0/css/bootstrap.responsive | 567 +++ .../2.0/img/glyphicons-halflings-white.png | Bin 0 -> 4352 bytes .../2.0/img/glyphicons-halflings.png | Bin 0 -> 4352 bytes .../static/bootstrap/2.0/js/bootstrap.js | 1722 +++++++++ .../static/bootstrap/2.0/js/bootstrap.min.js | 1 + .../source/_themes/opendylan/static/jquery.js | 4 + .../css/bootstrap/1.4.0/bootstrap.min.css | 356 -- .../static/opendylan.org/css/opendylan.css | 27 +- .../opendylan.org/js/bootstrap-dropdown.js | 55 - .../opendylan.org/js/bootstrap-scrollspy.js | 107 - .../website/source/documentation/index.rst | 18 +- .../website/source/download/index.rst | 6 +- documentation/website/source/index.rst | 8 +- documentation/website/source/news/index.rst | 4 +- 18 files changed, 6330 insertions(+), 555 deletions(-) create mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0/css/bootstrap.css create mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0/css/bootstrap.min.css create mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0/css/bootstrap.min.responsive create mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0/css/bootstrap.responsive create mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0/img/glyphicons-halflings-white.png create mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0/img/glyphicons-halflings.png create mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0/js/bootstrap.js create mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0/js/bootstrap.min.js create mode 100644 documentation/website/source/_themes/opendylan/static/jquery.js delete mode 100644 documentation/website/source/_themes/opendylan/static/opendylan.org/css/bootstrap/1.4.0/bootstrap.min.css delete mode 100644 documentation/website/source/_themes/opendylan/static/opendylan.org/js/bootstrap-dropdown.js delete mode 100644 documentation/website/source/_themes/opendylan/static/opendylan.org/js/bootstrap-scrollspy.js diff --git a/documentation/website/source/_themes/opendylan/layout.html b/documentation/website/source/_themes/opendylan/layout.html index f7660e36a5..e2e30c3268 100644 --- a/documentation/website/source/_themes/opendylan/layout.html +++ b/documentation/website/source/_themes/opendylan/layout.html @@ -9,9 +9,10 @@ {% block doctype %} {% endblock %} -{% set css_files = css_files + ['_static/opendylan.org/css/bootstrap/1.4.0/bootstrap.min.css', +{% set css_files = css_files + ['_static/bootstrap/2.0/css/bootstrap.min.css', + '_static/bootstrap/2.0/css/bootstrap.min.responsive', '_static/opendylan.org/css/opendylan.css'] -%} -{% set script_files = script_files + ['_static/opendylan.org/js/bootstrap-scrollspy.js'] -%} +{% set script_files = script_files + ['_static/bootstrap/2.0/js/bootstrap.min.js'] -%} {% set navigation_bar = [ ('index', 'Home'), ('about/index', 'About'), @@ -31,22 +32,25 @@ {% endblock %} {% block header %} -
-
+
a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
"+""+"
",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
t
",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); diff --git a/documentation/website/source/_themes/opendylan/static/opendylan.org/css/bootstrap/1.4.0/bootstrap.min.css b/documentation/website/source/_themes/opendylan/static/opendylan.org/css/bootstrap/1.4.0/bootstrap.min.css deleted file mode 100644 index c8f9e23197..0000000000 --- a/documentation/website/source/_themes/opendylan/static/opendylan.org/css/bootstrap/1.4.0/bootstrap.min.css +++ /dev/null @@ -1,356 +0,0 @@ -html,body{margin:0;padding:0;} -h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,cite,code,del,dfn,em,img,q,s,samp,small,strike,strong,sub,sup,tt,var,dd,dl,dt,li,ol,ul,fieldset,form,label,legend,button,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;font-weight:normal;font-style:normal;font-size:100%;line-height:1;font-family:inherit;} -table{border-collapse:collapse;border-spacing:0;} -ol,ul{list-style:none;} -q:before,q:after,blockquote:before,blockquote:after{content:"";} -html{overflow-y:scroll;font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} -a:focus{outline:thin dotted;} -a:hover,a:active{outline:0;} -article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} -audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} -audio:not([controls]){display:none;} -sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;} -sup{top:-0.5em;} -sub{bottom:-0.25em;} -img{border:0;-ms-interpolation-mode:bicubic;} -button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;} -button,input{line-height:normal;*overflow:visible;} -button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;} -button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;} -input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;} -input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;} -textarea{overflow:auto;vertical-align:top;} -body{background-color:#ffffff;margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:18px;color:#404040;} -.container{width:940px;margin-left:auto;margin-right:auto;zoom:1;}.container:before,.container:after{display:table;content:"";zoom:1;} -.container:after{clear:both;} -.container-fluid{position:relative;min-width:940px;padding-left:20px;padding-right:20px;zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";zoom:1;} -.container-fluid:after{clear:both;} -.container-fluid>.sidebar{position:absolute;top:0;left:20px;width:220px;} -.container-fluid>.content{margin-left:240px;} -a{color:#0069d6;text-decoration:none;line-height:inherit;font-weight:inherit;}a:hover{color:#00438a;text-decoration:underline;} -.pull-right{float:right;} -.pull-left{float:left;} -.hide{display:none;} -.show{display:block;} -.row{zoom:1;margin-left:-20px;}.row:before,.row:after{display:table;content:"";zoom:1;} -.row:after{clear:both;} -.row>[class*="span"]{display:inline;float:left;margin-left:20px;} -.span1{width:40px;} -.span2{width:100px;} -.span3{width:160px;} -.span4{width:220px;} -.span5{width:280px;} -.span6{width:340px;} -.span7{width:400px;} -.span8{width:460px;} -.span9{width:520px;} -.span10{width:580px;} -.span11{width:640px;} -.span12{width:700px;} -.span13{width:760px;} -.span14{width:820px;} -.span15{width:880px;} -.span16{width:940px;} -.span17{width:1000px;} -.span18{width:1060px;} -.span19{width:1120px;} -.span20{width:1180px;} -.span21{width:1240px;} -.span22{width:1300px;} -.span23{width:1360px;} -.span24{width:1420px;} -.row>.offset1{margin-left:80px;} -.row>.offset2{margin-left:140px;} -.row>.offset3{margin-left:200px;} -.row>.offset4{margin-left:260px;} -.row>.offset5{margin-left:320px;} -.row>.offset6{margin-left:380px;} -.row>.offset7{margin-left:440px;} -.row>.offset8{margin-left:500px;} -.row>.offset9{margin-left:560px;} -.row>.offset10{margin-left:620px;} -.row>.offset11{margin-left:680px;} -.row>.offset12{margin-left:740px;} -.span-one-third{width:300px;} -.span-two-thirds{width:620px;} -.offset-one-third{margin-left:340px;} -.offset-two-thirds{margin-left:660px;} -p{font-size:13px;font-weight:normal;line-height:18px;margin-bottom:9px;}p small{font-size:11px;color:#bfbfbf;} -h1,h2,h3,h4,h5,h6{font-weight:bold;color:#404040;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:#bfbfbf;} -h1{margin-bottom:18px;font-size:30px;line-height:36px;}h1 small{font-size:18px;} -h2{font-size:24px;line-height:36px;}h2 small{font-size:14px;} -h3,h4,h5,h6{line-height:36px;} -h3{font-size:18px;}h3 small{font-size:14px;} -h4{font-size:16px;}h4 small{font-size:12px;} -h5{font-size:14px;} -h6{font-size:13px;color:#bfbfbf;text-transform:uppercase;} -ul,ol{margin:0 0 18px 25px;} -ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} -ul{list-style:disc;} -ol{list-style:decimal;} -li{line-height:18px;color:#808080;} -ul.unstyled{list-style:none;margin-left:0;} -dl{margin-bottom:18px;}dl dt,dl dd{line-height:18px;} -dl dt{font-weight:bold;} -dl dd{margin-left:9px;} -hr{margin:20px 0 19px;border:0;border-bottom:1px solid #eee;} -strong{font-style:inherit;font-weight:bold;} -em{font-style:italic;font-weight:inherit;line-height:inherit;} -.muted{color:#bfbfbf;} -blockquote{margin-bottom:18px;border-left:5px solid #eee;padding-left:15px;}blockquote p{font-size:14px;font-weight:300;line-height:18px;margin-bottom:0;} -blockquote small{display:block;font-size:12px;font-weight:300;line-height:18px;color:#bfbfbf;}blockquote small:before{content:'\2014 \00A0';} -address{display:block;line-height:18px;margin-bottom:18px;} -code,pre{padding:0 3px 2px;font-family:Monaco, Andale Mono, Courier New, monospace;font-size:12px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -code{background-color:#fee9cc;color:rgba(0, 0, 0, 0.75);padding:1px 3px;} -pre{background-color:#f5f5f5;display:block;padding:8.5px;margin:0 0 18px;line-height:18px;font-size:12px;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;white-space:pre;white-space:pre-wrap;word-wrap:break-word;} -form{margin-bottom:18px;} -fieldset{margin-bottom:18px;padding-top:18px;}fieldset legend{display:block;padding-left:150px;font-size:19.5px;line-height:1;color:#404040;*padding:0 0 5px 145px;*line-height:1.5;} -form .clearfix{margin-bottom:18px;zoom:1;}form .clearfix:before,form .clearfix:after{display:table;content:"";zoom:1;} -form .clearfix:after{clear:both;} -label,input,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:normal;} -label{padding-top:6px;font-size:13px;line-height:18px;float:left;width:130px;text-align:right;color:#404040;} -form .input{margin-left:150px;} -input[type=checkbox],input[type=radio]{cursor:pointer;} -input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;font-size:13px;line-height:18px;color:#808080;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -select{padding:initial;} -input[type=checkbox],input[type=radio]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;border:none;} -input[type=file]{background-color:#ffffff;padding:initial;border:initial;line-height:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -input[type=button],input[type=reset],input[type=submit]{width:auto;height:auto;} -select,input[type=file]{height:27px;*height:auto;line-height:27px;*margin-top:4px;} -select[multiple]{height:inherit;background-color:#ffffff;} -textarea{height:auto;} -.uneditable-input{background-color:#ffffff;display:block;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} -:-moz-placeholder{color:#bfbfbf;} -::-webkit-input-placeholder{color:#bfbfbf;} -input,textarea{-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;-webkit-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);} -input:focus,textarea:focus{outline:0;border-color:rgba(82, 168, 236, 0.8);-webkit-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);} -input[type=file]:focus,input[type=checkbox]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:1px dotted #666;} -form .clearfix.error>label,form .clearfix.error .help-block,form .clearfix.error .help-inline{color:#b94a48;} -form .clearfix.error input,form .clearfix.error textarea{color:#b94a48;border-color:#ee5f5b;}form .clearfix.error input:focus,form .clearfix.error textarea:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} -form .clearfix.error .input-prepend .add-on,form .clearfix.error .input-append .add-on{color:#b94a48;background-color:#fce6e6;border-color:#b94a48;} -form .clearfix.warning>label,form .clearfix.warning .help-block,form .clearfix.warning .help-inline{color:#c09853;} -form .clearfix.warning input,form .clearfix.warning textarea{color:#c09853;border-color:#ccae64;}form .clearfix.warning input:focus,form .clearfix.warning textarea:focus{border-color:#be9a3f;-webkit-box-shadow:0 0 6px #e5d6b1;-moz-box-shadow:0 0 6px #e5d6b1;box-shadow:0 0 6px #e5d6b1;} -form .clearfix.warning .input-prepend .add-on,form .clearfix.warning .input-append .add-on{color:#c09853;background-color:#d2b877;border-color:#c09853;} -form .clearfix.success>label,form .clearfix.success .help-block,form .clearfix.success .help-inline{color:#468847;} -form .clearfix.success input,form .clearfix.success textarea{color:#468847;border-color:#57a957;}form .clearfix.success input:focus,form .clearfix.success textarea:focus{border-color:#458845;-webkit-box-shadow:0 0 6px #9acc9a;-moz-box-shadow:0 0 6px #9acc9a;box-shadow:0 0 6px #9acc9a;} -form .clearfix.success .input-prepend .add-on,form .clearfix.success .input-append .add-on{color:#468847;background-color:#bcddbc;border-color:#468847;} -.input-mini,input.mini,textarea.mini,select.mini{width:60px;} -.input-small,input.small,textarea.small,select.small{width:90px;} -.input-medium,input.medium,textarea.medium,select.medium{width:150px;} -.input-large,input.large,textarea.large,select.large{width:210px;} -.input-xlarge,input.xlarge,textarea.xlarge,select.xlarge{width:270px;} -.input-xxlarge,input.xxlarge,textarea.xxlarge,select.xxlarge{width:530px;} -textarea.xxlarge{overflow-y:auto;} -input.span1,textarea.span1{display:inline-block;float:none;width:30px;margin-left:0;} -input.span2,textarea.span2{display:inline-block;float:none;width:90px;margin-left:0;} -input.span3,textarea.span3{display:inline-block;float:none;width:150px;margin-left:0;} -input.span4,textarea.span4{display:inline-block;float:none;width:210px;margin-left:0;} -input.span5,textarea.span5{display:inline-block;float:none;width:270px;margin-left:0;} -input.span6,textarea.span6{display:inline-block;float:none;width:330px;margin-left:0;} -input.span7,textarea.span7{display:inline-block;float:none;width:390px;margin-left:0;} -input.span8,textarea.span8{display:inline-block;float:none;width:450px;margin-left:0;} -input.span9,textarea.span9{display:inline-block;float:none;width:510px;margin-left:0;} -input.span10,textarea.span10{display:inline-block;float:none;width:570px;margin-left:0;} -input.span11,textarea.span11{display:inline-block;float:none;width:630px;margin-left:0;} -input.span12,textarea.span12{display:inline-block;float:none;width:690px;margin-left:0;} -input.span13,textarea.span13{display:inline-block;float:none;width:750px;margin-left:0;} -input.span14,textarea.span14{display:inline-block;float:none;width:810px;margin-left:0;} -input.span15,textarea.span15{display:inline-block;float:none;width:870px;margin-left:0;} -input.span16,textarea.span16{display:inline-block;float:none;width:930px;margin-left:0;} -input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#f5f5f5;border-color:#ddd;cursor:not-allowed;} -.actions{background:#f5f5f5;margin-top:18px;margin-bottom:18px;padding:17px 20px 18px 150px;border-top:1px solid #ddd;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;}.actions .secondary-action{float:right;}.actions .secondary-action a{line-height:30px;}.actions .secondary-action a:hover{text-decoration:underline;} -.help-inline,.help-block{font-size:13px;line-height:18px;color:#bfbfbf;} -.help-inline{padding-left:5px;*position:relative;*top:-5px;} -.help-block{display:block;max-width:600px;} -.inline-inputs{color:#808080;}.inline-inputs span{padding:0 2px 0 1px;} -.input-prepend input,.input-append input{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} -.input-prepend .add-on,.input-append .add-on{position:relative;background:#f5f5f5;border:1px solid #ccc;z-index:2;float:left;display:block;width:auto;min-width:16px;height:18px;padding:4px 4px 4px 5px;margin-right:-1px;font-weight:normal;line-height:18px;color:#bfbfbf;text-align:center;text-shadow:0 1px 0 #ffffff;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.input-prepend .active,.input-append .active{background:#a9dba9;border-color:#46a546;} -.input-prepend .add-on{*margin-top:1px;} -.input-append input{float:left;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.input-append .add-on{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin-right:0;margin-left:-1px;} -.inputs-list{margin:0 0 5px;width:100%;}.inputs-list li{display:block;padding:0;width:100%;} -.inputs-list label{display:block;float:none;width:auto;padding:0;margin-left:20px;line-height:18px;text-align:left;white-space:normal;}.inputs-list label strong{color:#808080;} -.inputs-list label small{font-size:11px;font-weight:normal;} -.inputs-list .inputs-list{margin-left:25px;margin-bottom:10px;padding-top:0;} -.inputs-list:first-child{padding-top:6px;} -.inputs-list li+li{padding-top:2px;} -.inputs-list input[type=radio],.inputs-list input[type=checkbox]{margin-bottom:0;margin-left:-20px;float:left;} -.form-stacked{padding-left:20px;}.form-stacked fieldset{padding-top:9px;} -.form-stacked legend{padding-left:0;} -.form-stacked label{display:block;float:none;width:auto;font-weight:bold;text-align:left;line-height:20px;padding-top:0;} -.form-stacked .clearfix{margin-bottom:9px;}.form-stacked .clearfix div.input{margin-left:0;} -.form-stacked .inputs-list{margin-bottom:0;}.form-stacked .inputs-list li{padding-top:0;}.form-stacked .inputs-list li label{font-weight:normal;padding-top:0;} -.form-stacked div.clearfix.error{padding-top:10px;padding-bottom:10px;padding-left:10px;margin-top:0;margin-left:-10px;} -.form-stacked .actions{margin-left:-20px;padding-left:20px;} -table{width:100%;margin-bottom:18px;padding:0;font-size:13px;border-collapse:collapse;}table th,table td{padding:10px 10px 9px;line-height:18px;text-align:left;} -table th{padding-top:9px;font-weight:bold;vertical-align:middle;} -table td{vertical-align:top;border-top:1px solid #ddd;} -table tbody th{border-top:1px solid #ddd;vertical-align:top;} -.condensed-table th,.condensed-table td{padding:5px 5px 4px;} -.bordered-table{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.bordered-table th+th,.bordered-table td+td,.bordered-table th+td{border-left:1px solid #ddd;} -.bordered-table thead tr:first-child th:first-child,.bordered-table tbody tr:first-child td:first-child{-webkit-border-radius:4px 0 0 0;-moz-border-radius:4px 0 0 0;border-radius:4px 0 0 0;} -.bordered-table thead tr:first-child th:last-child,.bordered-table tbody tr:first-child td:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0;} -.bordered-table tbody tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;} -.bordered-table tbody tr:last-child td:last-child{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0;} -table .span1{width:20px;} -table .span2{width:60px;} -table .span3{width:100px;} -table .span4{width:140px;} -table .span5{width:180px;} -table .span6{width:220px;} -table .span7{width:260px;} -table .span8{width:300px;} -table .span9{width:340px;} -table .span10{width:380px;} -table .span11{width:420px;} -table .span12{width:460px;} -table .span13{width:500px;} -table .span14{width:540px;} -table .span15{width:580px;} -table .span16{width:620px;} -.zebra-striped tbody tr:nth-child(odd) td,.zebra-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;} -.zebra-striped tbody tr:hover td,.zebra-striped tbody tr:hover th{background-color:#f5f5f5;} -table .header{cursor:pointer;}table .header:after{content:"";float:right;margin-top:7px;border-width:0 4px 4px;border-style:solid;border-color:#000 transparent;visibility:hidden;} -table .headerSortUp,table .headerSortDown{background-color:rgba(141, 192, 219, 0.25);text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);} -table .header:hover:after{visibility:visible;} -table .headerSortDown:after,table .headerSortDown:hover:after{visibility:visible;filter:alpha(opacity=60);-khtml-opacity:0.6;-moz-opacity:0.6;opacity:0.6;} -table .headerSortUp:after{border-bottom:none;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000;visibility:visible;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:alpha(opacity=60);-khtml-opacity:0.6;-moz-opacity:0.6;opacity:0.6;} -table .blue{color:#049cdb;border-bottom-color:#049cdb;} -table .headerSortUp.blue,table .headerSortDown.blue{background-color:#ade6fe;} -table .green{color:#46a546;border-bottom-color:#46a546;} -table .headerSortUp.green,table .headerSortDown.green{background-color:#cdeacd;} -table .red{color:#9d261d;border-bottom-color:#9d261d;} -table .headerSortUp.red,table .headerSortDown.red{background-color:#f4c8c5;} -table .yellow{color:#ffc40d;border-bottom-color:#ffc40d;} -table .headerSortUp.yellow,table .headerSortDown.yellow{background-color:#fff6d9;} -table .orange{color:#f89406;border-bottom-color:#f89406;} -table .headerSortUp.orange,table .headerSortDown.orange{background-color:#fee9cc;} -table .purple{color:#7a43b6;border-bottom-color:#7a43b6;} -table .headerSortUp.purple,table .headerSortDown.purple{background-color:#e2d5f0;} -.topbar{height:40px;position:fixed;top:0;left:0;right:0;z-index:10000;overflow:visible;}.topbar a{color:#bfbfbf;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);} -.topbar h3 a:hover,.topbar .brand:hover,.topbar ul .active>a{background-color:#333;background-color:rgba(255, 255, 255, 0.05);color:#ffffff;text-decoration:none;} -.topbar h3{position:relative;} -.topbar h3 a,.topbar .brand{float:left;display:block;padding:8px 20px 12px;margin-left:-20px;color:#ffffff;font-size:20px;font-weight:200;line-height:1;} -.topbar p{margin:0;line-height:40px;}.topbar p a:hover{background-color:transparent;color:#ffffff;} -.topbar form{float:left;margin:5px 0 0 0;position:relative;filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1;} -.topbar form.pull-right{float:right;} -.topbar input{background-color:#444;background-color:rgba(255, 255, 255, 0.3);font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:normal;font-weight:13px;line-height:1;padding:4px 9px;color:#ffffff;color:rgba(255, 255, 255, 0.75);border:1px solid #111;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.topbar input:-moz-placeholder{color:#e6e6e6;} -.topbar input::-webkit-input-placeholder{color:#e6e6e6;} -.topbar input:hover{background-color:#bfbfbf;background-color:rgba(255, 255, 255, 0.5);color:#ffffff;} -.topbar input:focus,.topbar input.focused{outline:0;background-color:#ffffff;color:#404040;text-shadow:0 1px 0 #ffffff;border:0;padding:5px 10px;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);} -.topbar-inner,.topbar .fill{background-color:#222;background-color:#222222;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222));background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);} -.topbar div>ul,.nav{display:block;float:left;margin:0 10px 0 0;position:relative;left:0;}.topbar div>ul>li,.nav>li{display:block;float:left;} -.topbar div>ul a,.nav a{display:block;float:none;padding:10px 10px 11px;line-height:19px;text-decoration:none;}.topbar div>ul a:hover,.nav a:hover{color:#ffffff;text-decoration:none;} -.topbar div>ul .active>a,.nav .active>a{background-color:#222;background-color:rgba(0, 0, 0, 0.5);} -.topbar div>ul.secondary-nav,.nav.secondary-nav{float:right;margin-left:10px;margin-right:0;}.topbar div>ul.secondary-nav .menu-dropdown,.nav.secondary-nav .menu-dropdown,.topbar div>ul.secondary-nav .dropdown-menu,.nav.secondary-nav .dropdown-menu{right:0;border:0;} -.topbar div>ul a.menu:hover,.nav a.menu:hover,.topbar div>ul li.open .menu,.nav li.open .menu,.topbar div>ul .dropdown-toggle:hover,.nav .dropdown-toggle:hover,.topbar div>ul .dropdown.open .dropdown-toggle,.nav .dropdown.open .dropdown-toggle{background:#444;background:rgba(255, 255, 255, 0.05);} -.topbar div>ul .menu-dropdown,.nav .menu-dropdown,.topbar div>ul .dropdown-menu,.nav .dropdown-menu{background-color:#333;}.topbar div>ul .menu-dropdown a.menu,.nav .menu-dropdown a.menu,.topbar div>ul .dropdown-menu a.menu,.nav .dropdown-menu a.menu,.topbar div>ul .menu-dropdown .dropdown-toggle,.nav .menu-dropdown .dropdown-toggle,.topbar div>ul .dropdown-menu .dropdown-toggle,.nav .dropdown-menu .dropdown-toggle{color:#ffffff;}.topbar div>ul .menu-dropdown a.menu.open,.nav .menu-dropdown a.menu.open,.topbar div>ul .dropdown-menu a.menu.open,.nav .dropdown-menu a.menu.open,.topbar div>ul .menu-dropdown .dropdown-toggle.open,.nav .menu-dropdown .dropdown-toggle.open,.topbar div>ul .dropdown-menu .dropdown-toggle.open,.nav .dropdown-menu .dropdown-toggle.open{background:#444;background:rgba(255, 255, 255, 0.05);} -.topbar div>ul .menu-dropdown li a,.nav .menu-dropdown li a,.topbar div>ul .dropdown-menu li a,.nav .dropdown-menu li a{color:#999;text-shadow:0 1px 0 rgba(0, 0, 0, 0.5);}.topbar div>ul .menu-dropdown li a:hover,.nav .menu-dropdown li a:hover,.topbar div>ul .dropdown-menu li a:hover,.nav .dropdown-menu li a:hover{background-color:#191919;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#292929), to(#191919));background-image:-moz-linear-gradient(top, #292929, #191919);background-image:-ms-linear-gradient(top, #292929, #191919);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #191919));background-image:-webkit-linear-gradient(top, #292929, #191919);background-image:-o-linear-gradient(top, #292929, #191919);background-image:linear-gradient(top, #292929, #191919);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#191919', GradientType=0);color:#ffffff;} -.topbar div>ul .menu-dropdown .active a,.nav .menu-dropdown .active a,.topbar div>ul .dropdown-menu .active a,.nav .dropdown-menu .active a{color:#ffffff;} -.topbar div>ul .menu-dropdown .divider,.nav .menu-dropdown .divider,.topbar div>ul .dropdown-menu .divider,.nav .dropdown-menu .divider{background-color:#222;border-color:#444;} -.topbar ul .menu-dropdown li a,.topbar ul .dropdown-menu li a{padding:4px 15px;} -li.menu,.dropdown{position:relative;} -a.menu:after,.dropdown-toggle:after{width:0;height:0;display:inline-block;content:"↓";text-indent:-99999px;vertical-align:top;margin-top:8px;margin-left:4px;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #ffffff;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;} -.menu-dropdown,.dropdown-menu{background-color:#ffffff;float:left;display:none;position:absolute;top:40px;z-index:900;min-width:160px;max-width:220px;_width:160px;margin-left:0;margin-right:0;padding:6px 0;zoom:1;border-color:#999;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:0 1px 1px;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.menu-dropdown li,.dropdown-menu li{float:none;display:block;background-color:none;} -.menu-dropdown .divider,.dropdown-menu .divider{height:1px;margin:5px 0;overflow:hidden;background-color:#eee;border-bottom:1px solid #ffffff;} -.topbar .dropdown-menu a,.dropdown-menu a{display:block;padding:4px 15px;clear:both;font-weight:normal;line-height:18px;color:#808080;text-shadow:0 1px 0 #ffffff;}.topbar .dropdown-menu a:hover,.dropdown-menu a:hover,.topbar .dropdown-menu a.hover,.dropdown-menu a.hover{background-color:#dddddd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#eeeeee), to(#dddddd));background-image:-moz-linear-gradient(top, #eeeeee, #dddddd);background-image:-ms-linear-gradient(top, #eeeeee, #dddddd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #eeeeee), color-stop(100%, #dddddd));background-image:-webkit-linear-gradient(top, #eeeeee, #dddddd);background-image:-o-linear-gradient(top, #eeeeee, #dddddd);background-image:linear-gradient(top, #eeeeee, #dddddd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#dddddd', GradientType=0);color:#404040;text-decoration:none;-webkit-box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);} -.open .menu,.dropdown.open .menu,.open .dropdown-toggle,.dropdown.open .dropdown-toggle{color:#ffffff;background:#ccc;background:rgba(0, 0, 0, 0.3);} -.open .menu-dropdown,.dropdown.open .menu-dropdown,.open .dropdown-menu,.dropdown.open .dropdown-menu{display:block;} -.tabs,.pills{margin:0 0 18px;padding:0;list-style:none;zoom:1;}.tabs:before,.pills:before,.tabs:after,.pills:after{display:table;content:"";zoom:1;} -.tabs:after,.pills:after{clear:both;} -.tabs>li,.pills>li{float:left;}.tabs>li>a,.pills>li>a{display:block;} -.tabs{border-color:#ddd;border-style:solid;border-width:0 0 1px;}.tabs>li{position:relative;margin-bottom:-1px;}.tabs>li>a{padding:0 15px;margin-right:2px;line-height:34px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.tabs>li>a:hover{text-decoration:none;background-color:#eee;border-color:#eee #eee #ddd;} -.tabs .active>a,.tabs .active>a:hover{color:#808080;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} -.tabs .menu-dropdown,.tabs .dropdown-menu{top:35px;border-width:1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;} -.tabs a.menu:after,.tabs .dropdown-toggle:after{border-top-color:#999;margin-top:15px;margin-left:5px;} -.tabs li.open.menu .menu,.tabs .open.dropdown .dropdown-toggle{border-color:#999;} -.tabs li.open a.menu:after,.tabs .dropdown.open .dropdown-toggle:after{border-top-color:#555;} -.pills a{margin:5px 3px 5px 0;padding:0 15px;line-height:30px;text-shadow:0 1px 1px #ffffff;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;}.pills a:hover{color:#ffffff;text-decoration:none;text-shadow:0 1px 1px rgba(0, 0, 0, 0.25);background-color:#00438a;} -.pills .active a{color:#ffffff;text-shadow:0 1px 1px rgba(0, 0, 0, 0.25);background-color:#0069d6;} -.pills-vertical>li{float:none;} -.tab-content>.tab-pane,.pill-content>.pill-pane,.tab-content>div,.pill-content>div{display:none;} -.tab-content>.active,.pill-content>.active{display:block;} -.breadcrumb{padding:7px 14px;margin:0 0 18px;background-color:#f5f5f5;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5));background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline;text-shadow:0 1px 0 #ffffff;} -.breadcrumb .divider{padding:0 5px;color:#bfbfbf;} -.breadcrumb .active a{color:#404040;} -.hero-unit{background-color:#f5f5f5;margin-bottom:30px;padding:60px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;} -.hero-unit p{font-size:18px;font-weight:200;line-height:27px;} -footer{margin-top:17px;padding-top:17px;border-top:1px solid #eee;} -.page-header{margin-bottom:17px;border-bottom:1px solid #ddd;-webkit-box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);-moz-box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);}.page-header h1{margin-bottom:8px;} -.btn.danger,.alert-message.danger,.btn.danger:hover,.alert-message.danger:hover,.btn.error,.alert-message.error,.btn.error:hover,.alert-message.error:hover,.btn.success,.alert-message.success,.btn.success:hover,.alert-message.success:hover,.btn.info,.alert-message.info,.btn.info:hover,.alert-message.info:hover{color:#ffffff;} -.btn .close,.alert-message .close{font-family:Arial,sans-serif;line-height:18px;} -.btn.danger,.alert-message.danger,.btn.error,.alert-message.error{background-color:#c43c35;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#c43c35 #c43c35 #882a25;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);} -.btn.success,.alert-message.success{background-color:#57a957;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#57a957 #57a957 #3d773d;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);} -.btn.info,.alert-message.info{background-color:#339bb9;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9));background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#339bb9 #339bb9 #22697d;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);} -.btn{cursor:pointer;display:inline-block;background-color:#e6e6e6;background-repeat:no-repeat;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);padding:5px 14px 6px;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);color:#333;font-size:13px;line-height:normal;border:1px solid #ccc;border-bottom-color:#bbb;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-webkit-transition:0.1s linear all;-moz-transition:0.1s linear all;-ms-transition:0.1s linear all;-o-transition:0.1s linear all;transition:0.1s linear all;}.btn:hover{background-position:0 -15px;color:#333;text-decoration:none;} -.btn:focus{outline:1px dotted #666;} -.btn.primary{color:#ffffff;background-color:#0064cd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));background-image:-moz-linear-gradient(top, #049cdb, #0064cd);background-image:-ms-linear-gradient(top, #049cdb, #0064cd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));background-image:-webkit-linear-gradient(top, #049cdb, #0064cd);background-image:-o-linear-gradient(top, #049cdb, #0064cd);background-image:linear-gradient(top, #049cdb, #0064cd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#0064cd #0064cd #003f81;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);} -.btn.active,.btn :active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);} -.btn.disabled{cursor:default;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=65);-khtml-opacity:0.65;-moz-opacity:0.65;opacity:0.65;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -.btn[disabled]{cursor:default;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=65);-khtml-opacity:0.65;-moz-opacity:0.65;opacity:0.65;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -.btn.large{font-size:15px;line-height:normal;padding:9px 14px 9px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} -.btn.small{padding:7px 9px 7px;font-size:11px;} -:root .alert-message,:root .btn{border-radius:0 \0;} -button.btn::-moz-focus-inner,input[type=submit].btn::-moz-focus-inner{padding:0;border:0;} -.close{float:right;color:#000000;font-size:20px;font-weight:bold;line-height:13.5px;text-shadow:0 1px 0 #ffffff;filter:alpha(opacity=25);-khtml-opacity:0.25;-moz-opacity:0.25;opacity:0.25;}.close:hover{color:#000000;text-decoration:none;filter:alpha(opacity=40);-khtml-opacity:0.4;-moz-opacity:0.4;opacity:0.4;} -.alert-message{position:relative;padding:7px 15px;margin-bottom:18px;color:#404040;background-color:#eedc94;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94));background-image:-moz-linear-gradient(top, #fceec1, #eedc94);background-image:-ms-linear-gradient(top, #fceec1, #eedc94);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94));background-image:-webkit-linear-gradient(top, #fceec1, #eedc94);background-image:-o-linear-gradient(top, #fceec1, #eedc94);background-image:linear-gradient(top, #fceec1, #eedc94);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#eedc94 #eedc94 #e4c652;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);border-width:1px;border-style:solid;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);}.alert-message .close{margin-top:1px;*margin-top:0;} -.alert-message a{font-weight:bold;color:#404040;} -.alert-message.danger p a,.alert-message.error p a,.alert-message.success p a,.alert-message.info p a{color:#ffffff;} -.alert-message h5{line-height:18px;} -.alert-message p{margin-bottom:0;} -.alert-message div{margin-top:5px;margin-bottom:2px;line-height:28px;} -.alert-message .btn{-webkit-box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);-moz-box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);} -.alert-message.block-message{background-image:none;background-color:#fdf5d9;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);padding:14px;border-color:#fceec1;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}.alert-message.block-message ul,.alert-message.block-message p{margin-right:30px;} -.alert-message.block-message ul{margin-bottom:0;} -.alert-message.block-message li{color:#404040;} -.alert-message.block-message .alert-actions{margin-top:5px;} -.alert-message.block-message.error,.alert-message.block-message.success,.alert-message.block-message.info{color:#404040;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} -.alert-message.block-message.error{background-color:#fddfde;border-color:#fbc7c6;} -.alert-message.block-message.success{background-color:#d1eed1;border-color:#bfe7bf;} -.alert-message.block-message.info{background-color:#ddf4fb;border-color:#c6edf9;} -.alert-message.block-message.danger p a,.alert-message.block-message.error p a,.alert-message.block-message.success p a,.alert-message.block-message.info p a{color:#404040;} -.pagination{height:36px;margin:18px 0;}.pagination ul{float:left;margin:0;border:1px solid #ddd;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} -.pagination li{display:inline;} -.pagination a{float:left;padding:0 14px;line-height:34px;border-right:1px solid;border-right-color:#ddd;border-right-color:rgba(0, 0, 0, 0.15);*border-right-color:#ddd;text-decoration:none;} -.pagination a:hover,.pagination .active a{background-color:#c7eefe;} -.pagination .disabled a,.pagination .disabled a:hover{background-color:transparent;color:#bfbfbf;} -.pagination .next a{border:0;} -.well{background-color:#f5f5f5;margin-bottom:20px;padding:19px;min-height:20px;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);} -.modal-backdrop{background-color:#000000;position:fixed;top:0;left:0;right:0;bottom:0;z-index:10000;}.modal-backdrop.fade{opacity:0;} -.modal-backdrop,.modal-backdrop.fade.in{filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;} -.modal{position:fixed;top:50%;left:50%;z-index:11000;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal .close{margin-top:7px;} -.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} -.modal.fade.in{top:50%;} -.modal-header{border-bottom:1px solid #eee;padding:5px 15px;} -.modal-body{padding:15px;} -.modal-body form{margin-bottom:0;} -.modal-footer{background-color:#f5f5f5;padding:14px 15px 15px;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;zoom:1;margin-bottom:0;}.modal-footer:before,.modal-footer:after{display:table;content:"";zoom:1;} -.modal-footer:after{clear:both;} -.modal-footer .btn{float:right;margin-left:5px;} -.modal .popover,.modal .twipsy{z-index:12000;} -.twipsy{display:block;position:absolute;visibility:visible;padding:5px;font-size:11px;z-index:1000;filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;}.twipsy.fade.in{filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;} -.twipsy.above .twipsy-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} -.twipsy.left .twipsy-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} -.twipsy.below .twipsy-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} -.twipsy.right .twipsy-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} -.twipsy-inner{padding:3px 8px;background-color:#000000;color:white;text-align:center;max-width:200px;text-decoration:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.twipsy-arrow{position:absolute;width:0;height:0;} -.popover{position:absolute;top:0;left:0;z-index:1000;padding:5px;display:none;}.popover.above .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} -.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} -.popover.below .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} -.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} -.popover .arrow{position:absolute;width:0;height:0;} -.popover .inner{background:#000000;background:rgba(0, 0, 0, 0.8);padding:3px;overflow:hidden;width:280px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);} -.popover .title{background-color:#f5f5f5;padding:9px 15px;line-height:1;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;border-bottom:1px solid #eee;} -.popover .content{background-color:#ffffff;padding:14px;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover .content p,.popover .content ul,.popover .content ol{margin-bottom:0;} -.fade{-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;opacity:0;}.fade.in{opacity:1;} -.label{padding:1px 3px 2px;font-size:9.75px;font-weight:bold;color:#ffffff;text-transform:uppercase;white-space:nowrap;background-color:#bfbfbf;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}.label.important{background-color:#c43c35;} -.label.warning{background-color:#f89406;} -.label.success{background-color:#46a546;} -.label.notice{background-color:#62cffc;} -.media-grid{margin-left:-20px;margin-bottom:0;zoom:1;}.media-grid:before,.media-grid:after{display:table;content:"";zoom:1;} -.media-grid:after{clear:both;} -.media-grid li{display:inline;} -.media-grid a{float:left;padding:4px;margin:0 0 18px 20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);}.media-grid a img{display:block;} -.media-grid a:hover{border-color:#0069d6;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} diff --git a/documentation/website/source/_themes/opendylan/static/opendylan.org/css/opendylan.css b/documentation/website/source/_themes/opendylan/static/opendylan.org/css/opendylan.css index 7a3fc9c8ec..dd217348cc 100644 --- a/documentation/website/source/_themes/opendylan/static/opendylan.org/css/opendylan.css +++ b/documentation/website/source/_themes/opendylan/static/opendylan.org/css/opendylan.css @@ -1,7 +1,7 @@ body { padding-top: 50px; } -.topbar .logo { +.navbar .logo { float: left; padding: 5px 5px; height: 30px; @@ -21,8 +21,27 @@ body { a.headerlink { color: silver; } -/* Undo an annoyance from Bootstrap */ -li { - color: black; + +/* Responsive Docs +-------------------------------------------------- */ +@media (max-width: 480px) { + /* Reduce padding above body */ + body { + padding-top: 30px; + } +} + +@media (max-width: 768px) { + /* Remove any padding from the body */ + body { + padding-top: 0; + } +} + +@media (min-width: 768px) and (max-width: 980px) { + /* Remove any padding from the body */ + body { + padding-top: 0; + } } diff --git a/documentation/website/source/_themes/opendylan/static/opendylan.org/js/bootstrap-dropdown.js b/documentation/website/source/_themes/opendylan/static/opendylan.org/js/bootstrap-dropdown.js deleted file mode 100644 index fda6da597e..0000000000 --- a/documentation/website/source/_themes/opendylan/static/opendylan.org/js/bootstrap-dropdown.js +++ /dev/null @@ -1,55 +0,0 @@ -/* ============================================================ - * bootstrap-dropdown.js v1.4.0 - * http://twitter.github.com/bootstrap/javascript.html#dropdown - * ============================================================ - * Copyright 2011 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function( $ ){ - - "use strict" - - /* DROPDOWN PLUGIN DEFINITION - * ========================== */ - - $.fn.dropdown = function ( selector ) { - return this.each(function () { - $(this).delegate(selector || d, 'click', function (e) { - var li = $(this).parent('li') - , isActive = li.hasClass('open') - - clearMenus() - !isActive && li.toggleClass('open') - return false - }) - }) - } - - /* APPLY TO STANDARD DROPDOWN ELEMENTS - * =================================== */ - - var d = 'a.menu, .dropdown-toggle' - - function clearMenus() { - $(d).parent('li').removeClass('open') - } - - $(function () { - $('html').bind("click", clearMenus) - $('body').dropdown( '[data-dropdown] a.menu, [data-dropdown] .dropdown-toggle' ) - }) - -}( window.jQuery || window.ender ); diff --git a/documentation/website/source/_themes/opendylan/static/opendylan.org/js/bootstrap-scrollspy.js b/documentation/website/source/_themes/opendylan/static/opendylan.org/js/bootstrap-scrollspy.js deleted file mode 100644 index 29f7dd5740..0000000000 --- a/documentation/website/source/_themes/opendylan/static/opendylan.org/js/bootstrap-scrollspy.js +++ /dev/null @@ -1,107 +0,0 @@ -/* ============================================================= - * bootstrap-scrollspy.js v1.4.0 - * http://twitter.github.com/bootstrap/javascript.html#scrollspy - * ============================================================= - * Copyright 2011 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================== */ - - -!function ( $ ) { - - "use strict" - - var $window = $(window) - - function ScrollSpy( topbar, selector ) { - var processScroll = $.proxy(this.processScroll, this) - this.$topbar = $(topbar) - this.selector = selector || 'li > a' - this.refresh() - this.$topbar.delegate(this.selector, 'click', processScroll) - $window.scroll(processScroll) - this.processScroll() - } - - ScrollSpy.prototype = { - - refresh: function () { - this.targets = this.$topbar.find(this.selector).map(function () { - var href = $(this).attr('href') - return /^#\w/.test(href) && $(href).length ? href : null - }) - - this.offsets = $.map(this.targets, function (id) { - return $(id).offset().top - }) - } - - , processScroll: function () { - var scrollTop = $window.scrollTop() + 10 - , offsets = this.offsets - , targets = this.targets - , activeTarget = this.activeTarget - , i - - for (i = offsets.length; i--;) { - activeTarget != targets[i] - && scrollTop >= offsets[i] - && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) - && this.activateButton( targets[i] ) - } - } - - , activateButton: function (target) { - this.activeTarget = target - - this.$topbar - .find(this.selector).parent('.active') - .removeClass('active') - - this.$topbar - .find(this.selector + '[href="' + target + '"]') - .parent('li') - .addClass('active') - } - - } - - /* SCROLLSPY PLUGIN DEFINITION - * =========================== */ - - $.fn.scrollSpy = function( options ) { - var scrollspy = this.data('scrollspy') - - if (!scrollspy) { - return this.each(function () { - $(this).data('scrollspy', new ScrollSpy( this, options )) - }) - } - - if ( options === true ) { - return scrollspy - } - - if ( typeof options == 'string' ) { - scrollspy[options]() - } - - return this - } - - $(document).ready(function () { - $('body').scrollSpy('[data-scrollspy] li > a') - }) - -}( window.jQuery || window.ender ); diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index ed13be3bd6..03b474b6e9 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -6,16 +6,16 @@ Documentation publishing system. Some documents are not entirely correct yet. We've retained links to the 'Old HTML' where relevant. These will be going away in the near future. - :class: alert-message warning + :class: alert alert-block alert-warning .. raw:: html
-
+

Learning Dylan

-
+

Just getting started with Open Dylan? We recommend that you read the Introduction to Dylan to get a feel for the language. After that, you can broaden @@ -58,7 +58,7 @@ Documentation


Cheat Sheets

-
+

Quick one-page sheets for common tasks.

@@ -71,7 +71,7 @@ Documentation

Articles

-
+

Featured articles and blog postings.

@@ -98,11 +98,11 @@ Documentation .. raw:: html
-
+

References

-
+

These are some lengthier reference materials. While they make for dry reading, they're full of invaluable information!

@@ -139,7 +139,7 @@ Documentation

For Open Dylan Developers

-
+

Notes and materials useful to those working on Open Dylan itself or those who have an interest in the low level details.

@@ -176,7 +176,7 @@ Documentation

Archived Documentation

-
+

This is old documentation that we don't plan to bring forward. Let us know if there's interest in this material.

diff --git a/documentation/website/source/download/index.rst b/documentation/website/source/download/index.rst index d8db6550b0..e69162d8ec 100644 --- a/documentation/website/source/download/index.rst +++ b/documentation/website/source/download/index.rst @@ -15,14 +15,14 @@ Open Dylan IDE .. warning:: The 32 bit version of Open Dylan does NOT work on 64 bit Windows. There is no workaround at this time, unfortunately. We hope to resolve this in an upcoming release. - :class: alert-message warning + :class: alert alert-warning For installation, double-click on the installer, and follow instructions. You need to have either the PellesC linker or the linker of VC++ 6.0, 7.0 or the current .NET platform SDK installed. .. table:: - :class: zebra-striped + :class: table-striped +-----------------------+--------------------+--------------------+-------------+ | Platform | Version | Date Released | Revision ID | @@ -40,7 +40,7 @@ linking. Note that these versions only have a command-line compiler and no IDE. .. table:: - :class: zebra-striped + :class: table-striped +-----------------------+--------------------+--------------------+-------------+ | Platform | Version | Date Released | Revision ID | diff --git a/documentation/website/source/index.rst b/documentation/website/source/index.rst index 42443fdf5e..8bee5dd9c5 100644 --- a/documentation/website/source/index.rst +++ b/documentation/website/source/index.rst @@ -20,11 +20,11 @@ Welcome to Open Dylan!
-
+

Recent News

-
+

Keep up to date by subscribing to our RSS Feed or joining our mailing @@ -37,11 +37,11 @@ Welcome to Open Dylan!

-
+

Get Started

-
+

Just getting started with Open Dylan? We recommend that you read the Introduction to Dylan to get a feel for the language. After that, you can broaden diff --git a/documentation/website/source/news/index.rst b/documentation/website/source/news/index.rst index 411e4f4ee9..f30f388b84 100644 --- a/documentation/website/source/news/index.rst +++ b/documentation/website/source/news/index.rst @@ -5,7 +5,7 @@ News & Articles .. raw:: html

-
+

News

@@ -34,7 +34,7 @@ over at ``_. .. raw:: html
-
+

Articles

From bb918d97fab8eef526c88028f7d26b2eee8aaa4d Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Wed, 1 Feb 2012 21:02:54 +0700 Subject: [PATCH 159/519] Configure viewport so that iOS works. --- documentation/website/source/_themes/opendylan/layout.html | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/website/source/_themes/opendylan/layout.html b/documentation/website/source/_themes/opendylan/layout.html index e2e30c3268..9fdda97709 100644 --- a/documentation/website/source/_themes/opendylan/layout.html +++ b/documentation/website/source/_themes/opendylan/layout.html @@ -27,6 +27,7 @@ + {% endblock %} From 861ee875344e7b3ad83efe4b4ffe594687ca0ec1 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Wed, 1 Feb 2012 23:12:51 +0700 Subject: [PATCH 160/519] Link to the OpenDylan organization on Trello. --- documentation/website/source/community/index.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/website/source/community/index.rst b/documentation/website/source/community/index.rst index b3c3844504..550ea19a99 100644 --- a/documentation/website/source/community/index.rst +++ b/documentation/website/source/community/index.rst @@ -9,6 +9,7 @@ Development =========== - `All of our repositories on GitHub `_ +- `TODO lists tracked on Trello `_ - `Open bugs for Open Dylan `_ - `How to contribute `_ From 0fec54a6b102b888136dd65f377857fe915b9cc1 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Mon, 6 Feb 2012 10:05:52 +0700 Subject: [PATCH 161/519] Start of some ideas for Google Summer of Code 2012. --- .../source/community/gsoc/2012/cilk.rst | 7 +++++ .../source/community/gsoc/2012/cocoa.rst | 8 ++++++ .../community/gsoc/2012/documentation.rst | 9 +++++++ .../source/community/gsoc/2012/dylint.rst | 11 ++++++++ .../source/community/gsoc/2012/gtk.rst | 12 +++++++++ .../source/community/gsoc/2012/index.rst | 27 +++++++++++++++++++ .../source/community/gsoc/2012/javascript.rst | 9 +++++++ .../source/community/gsoc/2012/numerics.rst | 11 ++++++++ .../source/community/gsoc/2012/speed.rst | 12 +++++++++ .../source/community/gsoc/2012/staticlink.rst | 13 +++++++++ .../source/community/gsoc/2012/tracing.rst | 7 +++++ .../website/source/community/gsoc/index.rst | 6 +++++ .../website/source/community/index.rst | 1 + documentation/website/source/index.rst | 1 + 14 files changed, 134 insertions(+) create mode 100644 documentation/website/source/community/gsoc/2012/cilk.rst create mode 100644 documentation/website/source/community/gsoc/2012/cocoa.rst create mode 100644 documentation/website/source/community/gsoc/2012/documentation.rst create mode 100644 documentation/website/source/community/gsoc/2012/dylint.rst create mode 100644 documentation/website/source/community/gsoc/2012/gtk.rst create mode 100644 documentation/website/source/community/gsoc/2012/index.rst create mode 100644 documentation/website/source/community/gsoc/2012/javascript.rst create mode 100644 documentation/website/source/community/gsoc/2012/numerics.rst create mode 100644 documentation/website/source/community/gsoc/2012/speed.rst create mode 100644 documentation/website/source/community/gsoc/2012/staticlink.rst create mode 100644 documentation/website/source/community/gsoc/2012/tracing.rst create mode 100644 documentation/website/source/community/gsoc/index.rst diff --git a/documentation/website/source/community/gsoc/2012/cilk.rst b/documentation/website/source/community/gsoc/2012/cilk.rst new file mode 100644 index 0000000000..298939376c --- /dev/null +++ b/documentation/website/source/community/gsoc/2012/cilk.rst @@ -0,0 +1,7 @@ +============ +Dylan / Cilk +============ + +The purpose of this project would be to provide a library and compiler +plugin that transforms Dylan code into a form where it can work with the +Cilk runtime. diff --git a/documentation/website/source/community/gsoc/2012/cocoa.rst b/documentation/website/source/community/gsoc/2012/cocoa.rst new file mode 100644 index 0000000000..ff4d7ebafd --- /dev/null +++ b/documentation/website/source/community/gsoc/2012/cocoa.rst @@ -0,0 +1,8 @@ +============= +Dylan / Cocoa +============= + +The purpose of this project is to use Apple's *Bridge Support* to assist +in generating wrappers around the Cocoa libraries. This would include +the creation of a bridge between Dylan and Objective C using the low +level C API provided by Objective C's runtime. diff --git a/documentation/website/source/community/gsoc/2012/documentation.rst b/documentation/website/source/community/gsoc/2012/documentation.rst new file mode 100644 index 0000000000..9597fa6d81 --- /dev/null +++ b/documentation/website/source/community/gsoc/2012/documentation.rst @@ -0,0 +1,9 @@ +=================== +Dylan Documentation +=================== + +The purpose of this project is to provide searchable, browsable API +documentation based on the reference materials. The idea would be to +extract documentation into JSON by writing an extension to Sphinx, put +that JSON into something like ElasticSearch and building a web-based +user interface on top of that. diff --git a/documentation/website/source/community/gsoc/2012/dylint.rst b/documentation/website/source/community/gsoc/2012/dylint.rst new file mode 100644 index 0000000000..86702c7249 --- /dev/null +++ b/documentation/website/source/community/gsoc/2012/dylint.rst @@ -0,0 +1,11 @@ +====== +DyLint +====== + +The purpose of this project is to create a framework for doing analysis +and warnings of Dylan code using compiler plugins that can walk the +internal compiler datastructures. + +This can draw inspiration from: + +- *fill in details* diff --git a/documentation/website/source/community/gsoc/2012/gtk.rst b/documentation/website/source/community/gsoc/2012/gtk.rst new file mode 100644 index 0000000000..128f99ec6a --- /dev/null +++ b/documentation/website/source/community/gsoc/2012/gtk.rst @@ -0,0 +1,12 @@ +============ +Dylan / Gtk+ +============ + +The purpose of this project is to: + +- Use the ``.gir`` files from *gobject-introspection* to generate Gtk+ bindings. +- Use the bindings to implement a backend for DUIM that runs on Linux and Mac OS X. + +Some code already exists for this: + +- *fill in details* diff --git a/documentation/website/source/community/gsoc/2012/index.rst b/documentation/website/source/community/gsoc/2012/index.rst new file mode 100644 index 0000000000..bd3cbc93a7 --- /dev/null +++ b/documentation/website/source/community/gsoc/2012/index.rst @@ -0,0 +1,27 @@ +============================ +Google Summer of Code - 2012 +============================ + +This page is to help organize our (hopeful) participation in the Google +Summer of Code, 2012. + +Submissions and edits to this content can be done by submitting a pull +request to the `website repository +`_ or by :doc:`contacting us via +IRC or the mailing list `. + +If you are interested in being a mentor, please contact Bruce Mitchener +via one of the above means. + +.. toctree:: + + dylint + javascript + tracing + documentation + cilk + numerics + speed + cocoa + gtk + staticlink diff --git a/documentation/website/source/community/gsoc/2012/javascript.rst b/documentation/website/source/community/gsoc/2012/javascript.rst new file mode 100644 index 0000000000..48fe269dbe --- /dev/null +++ b/documentation/website/source/community/gsoc/2012/javascript.rst @@ -0,0 +1,9 @@ +=========================== +JavaScript Compiler Backend +=========================== + +The Open Dylan compiler supports multiple backends, currently supporting +C, LLVM and the HARP native backend. In the past, it also had partial +support for the JVM. + +This project would be to create a new backend that outputs JavaScript. \ No newline at end of file diff --git a/documentation/website/source/community/gsoc/2012/numerics.rst b/documentation/website/source/community/gsoc/2012/numerics.rst new file mode 100644 index 0000000000..459951a795 --- /dev/null +++ b/documentation/website/source/community/gsoc/2012/numerics.rst @@ -0,0 +1,11 @@ +================ +Dylan / Numerics +================ + +The purpose of this project is to improve numerical computing performance in Dylan. + +It could include: + +- BLAS / LAPack integration. +- SSE code generation. +- Auto-vectorization. diff --git a/documentation/website/source/community/gsoc/2012/speed.rst b/documentation/website/source/community/gsoc/2012/speed.rst new file mode 100644 index 0000000000..93bd967b7f --- /dev/null +++ b/documentation/website/source/community/gsoc/2012/speed.rst @@ -0,0 +1,12 @@ +===== +Speed +===== + +The purpose of this project is to implement a number of benchmarks in +Dylan and provide infrastructure for recording and observing performance +data over time. + +Inspiration (and benchmark ideas) can be borrowed from: + +- http://speed.python.org/ +- Boinkmarks diff --git a/documentation/website/source/community/gsoc/2012/staticlink.rst b/documentation/website/source/community/gsoc/2012/staticlink.rst new file mode 100644 index 0000000000..a7c5984aed --- /dev/null +++ b/documentation/website/source/community/gsoc/2012/staticlink.rst @@ -0,0 +1,13 @@ +============== +Static Linking +============== + +The purpose of this project would be to: + +- Implement static linking within the compiler toolchain. +- Optimize sealing information to take advantage of the lack of + extensibility. + +Some code for this already exists: + +- *fill in details* diff --git a/documentation/website/source/community/gsoc/2012/tracing.rst b/documentation/website/source/community/gsoc/2012/tracing.rst new file mode 100644 index 0000000000..dcb9c42337 --- /dev/null +++ b/documentation/website/source/community/gsoc/2012/tracing.rst @@ -0,0 +1,7 @@ +======= +Tracing +======= + +The purpose of this project is to integrate with system-level tracing frameworks such as DTrace and SystemTap. + +*fill in more details* diff --git a/documentation/website/source/community/gsoc/index.rst b/documentation/website/source/community/gsoc/index.rst new file mode 100644 index 0000000000..4df1f7f53d --- /dev/null +++ b/documentation/website/source/community/gsoc/index.rst @@ -0,0 +1,6 @@ +Google Summer of Code +===================== + +.. toctree:: + + 2012/index \ No newline at end of file diff --git a/documentation/website/source/community/index.rst b/documentation/website/source/community/index.rst index 550ea19a99..a15f451681 100644 --- a/documentation/website/source/community/index.rst +++ b/documentation/website/source/community/index.rst @@ -12,6 +12,7 @@ Development - `TODO lists tracked on Trello `_ - `Open bugs for Open Dylan `_ - `How to contribute `_ +- `Ideas for Google Summer of Code - 2012 `_ The #dylan IRC channel ====================== diff --git a/documentation/website/source/index.rst b/documentation/website/source/index.rst index 8bee5dd9c5..36728cd1f9 100644 --- a/documentation/website/source/index.rst +++ b/documentation/website/source/index.rst @@ -65,4 +65,5 @@ excellent :drm:`Introduction to the Dylan Reference Manual `. */* articles/*/* news/*/*/*/* + community/gsoc/* From 7f41fd25a25a38fcd1d72dbff2a5bd22fd46056a Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Tue, 7 Feb 2012 11:39:14 +0700 Subject: [PATCH 162/519] Add link to archived downloads. --- documentation/website/source/download/index.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/documentation/website/source/download/index.rst b/documentation/website/source/download/index.rst index e69162d8ec..c33804f641 100644 --- a/documentation/website/source/download/index.rst +++ b/documentation/website/source/download/index.rst @@ -66,6 +66,10 @@ All of our source code is available in the `"dylan-lang" organization on GitHub We also have a `continuous build server `_. +Archived Builds +=============== + +Old builds can be found by browsing the `download directories`_. .. _Windows (32 bit): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-win32.exe .. _Mac OS X (Intel): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-x86-darwin.tar.bz2 @@ -74,3 +78,4 @@ We also have a `continuous build server `_. .. _Linux (x86-64): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-x86_64-linux.tar.bz2 .. _FreeBSD (x86): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-x86-FreeBSD.tar.bz2 .. _FreeBSD (x86-64): http://opendylan.org/downloads/opendylan/1.0beta5/opendylan-1.0beta5-r11990-amd64-FreeBSD7.tar.bz2 +.. _download directories: http://opendylan.org/downloads/opendylan/ From d1a36ab30f46cdd513c2732345bfa0a8e41eddbf Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Tue, 7 Feb 2012 11:42:55 +0700 Subject: [PATCH 163/519] Fix broken download link for old FreeBSD x86-64 build. --- documentation/website/source/download/index.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/download/index.rst b/documentation/website/source/download/index.rst index c33804f641..1c895a11bb 100644 --- a/documentation/website/source/download/index.rst +++ b/documentation/website/source/download/index.rst @@ -77,5 +77,5 @@ Old builds can be found by browsing the `download directories`_. .. _Linux (x86): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-x86-linux.tar.bz2 .. _Linux (x86-64): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-x86_64-linux.tar.bz2 .. _FreeBSD (x86): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-x86-FreeBSD.tar.bz2 -.. _FreeBSD (x86-64): http://opendylan.org/downloads/opendylan/1.0beta5/opendylan-1.0beta5-r11990-amd64-FreeBSD7.tar.bz2 +.. _FreeBSD (x86-64): http://opendylan.org/downloads/opendylan/old/1.0beta5/opendylan-1.0beta5-r11990-amd64-FreeBSD7.tar.bz2 .. _download directories: http://opendylan.org/downloads/opendylan/ From c926f01c4678153206e3ec55443f30151d0f1dea Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Tue, 7 Feb 2012 11:46:57 +0700 Subject: [PATCH 164/519] Update to current version of sphinx-extensions. --- documentation/website/sphinx-extensions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/sphinx-extensions b/documentation/website/sphinx-extensions index cf0d61ae6f..62a55eb56f 160000 --- a/documentation/website/sphinx-extensions +++ b/documentation/website/sphinx-extensions @@ -1 +1 @@ -Subproject commit cf0d61ae6fd6963d90bec2e43fd60862edca6f19 +Subproject commit 62a55eb56fba38be7e859213ea35c12930ce8ae7 From c5f516e9b66c47fe738d640c095bc0c9f2c3cca5 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Tue, 7 Feb 2012 16:35:24 +0700 Subject: [PATCH 165/519] Link to Jenkins from Community page. --- documentation/website/source/community/index.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/website/source/community/index.rst b/documentation/website/source/community/index.rst index a15f451681..ee53e4f0aa 100644 --- a/documentation/website/source/community/index.rst +++ b/documentation/website/source/community/index.rst @@ -9,6 +9,7 @@ Development =========== - `All of our repositories on GitHub `_ +- `Continuous build server `_. - `TODO lists tracked on Trello `_ - `Open bugs for Open Dylan `_ - `How to contribute `_ From 9d0cfa65812adec23bef2f765569513735329f1a Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Tue, 7 Feb 2012 16:35:50 +0700 Subject: [PATCH 166/519] Experimental revision of download page. --- .../website/source/download/index.rst | 100 +++++++++--------- 1 file changed, 48 insertions(+), 52 deletions(-) diff --git a/documentation/website/source/download/index.rst b/documentation/website/source/download/index.rst index 1c895a11bb..1400a20413 100644 --- a/documentation/website/source/download/index.rst +++ b/documentation/website/source/download/index.rst @@ -1,75 +1,70 @@ -******** -Download -******** +******************** +Open Dylan Downloads +******************** -Binary Releases -=============== +.. raw:: html -Open Dylan IDE --------------- - -.. note:: This is currently only available on Windows. Other platforms need - to use the command line tools. The Windows IDE installer also includes - the command line tools. +
+
+

Binary Releases

.. warning:: The 32 bit version of Open Dylan does NOT work on 64 bit Windows. There is no workaround at this time, unfortunately. We hope to resolve this in an upcoming release. :class: alert alert-warning -For installation, double-click on the installer, and follow instructions. -You need to have either the PellesC linker or the linker of VC++ 6.0, 7.0 -or the current .NET platform SDK installed. - .. table:: :class: table-striped - +-----------------------+--------------------+--------------------+-------------+ - | Platform | Version | Date Released | Revision ID | - +=======================+====================+====================+=============+ - | `Windows (32 bit)`_ | 2011.1 | December 10, 2011 | 23f8ab5878 | - +-----------------------+--------------------+--------------------+-------------+ + +-----------------------+--------------------+--------------------+---------------+ + | Platform | Version | Date Released | Revision ID | + +=======================+====================+====================+===============+ + | `Windows (32 bit)`_ | 2011.1 | December 10, 2011 | `23f8ab5878`_ | + +-----------------------+--------------------+--------------------+---------------+ + | `Mac OS X (Intel)`_ | 2011.1 | December 10, 2011 | `23f8ab5878`_ | + +-----------------------+--------------------+--------------------+---------------+ + | `Mac OS X (PowerPC)`_ | 2011.1 | December 10, 2011 | `23f8ab5878`_ | + +-----------------------+--------------------+--------------------+---------------+ + | `Linux (x86)`_ | 2011.1 | December 10, 2011 | `23f8ab5878`_ | + +-----------------------+--------------------+--------------------+---------------+ + | `Linux (x86-64)`_ | 2011.1 | December 11, 2011 | `23f8ab5878`_ | + +-----------------------+--------------------+--------------------+---------------+ + | `FreeBSD (x86)`_ | 2011.1 | December 10, 2011 | `23f8ab5878`_ | + +-----------------------+--------------------+--------------------+---------------+ + | `FreeBSD (x86-64)`_ | 1.0beta5 | November 27, 2008 | ... | + +-----------------------+--------------------+--------------------+---------------+ -Open Dylan Command Line Tools ------------------------------ -The README file inside the tarball describes installation and basic -usage. The easiest way is extracting the tarball in /opt. The -Linux platform should have binutils installed, in order to allow -linking. Note that these versions only have a command-line compiler -and no IDE. +Old builds can be found by browsing the `download directories`_. -.. table:: - :class: table-striped +.. raw:: html - +-----------------------+--------------------+--------------------+-------------+ - | Platform | Version | Date Released | Revision ID | - +=======================+====================+====================+=============+ - | `Mac OS X (Intel)`_ | 2011.1 | December 10, 2011 | 23f8ab5878 | - +-----------------------+--------------------+--------------------+-------------+ - | `Mac OS X (PowerPC)`_ | 2011.1 | December 10, 2011 | 23f8ab5878 | - +-----------------------+--------------------+--------------------+-------------+ - | `Linux (x86)`_ | 2011.1 | December 10, 2011 | 23f8ab5878 | - +-----------------------+--------------------+--------------------+-------------+ - | `Linux (x86-64)`_ | 2011.1 | December 11, 2011 | 23f8ab5878 | - +-----------------------+--------------------+--------------------+-------------+ - | `FreeBSD (x86)`_ | 2011.1 | December 10, 2011 | 23f8ab5878 | - +-----------------------+--------------------+--------------------+-------------+ - | `FreeBSD (x86-64)`_ | 1.0beta5 | November 27, 2008 | ... | - +-----------------------+--------------------+--------------------+-------------+ +
+
+
+

Source Code

+

All of our source code is available under an open source license in the "dylan-lang" organization on GitHub.

+
+
+
-Source Code -=========== +----------- -All of our source code is available in the `"dylan-lang" organization on GitHub -`_. +Installation on Windows +----------------------- -We also have a `continuous build server `_. +For installation, double-click on the installer, and follow instructions. +You need to have either the PellesC linker or the linker of VC++ 6.0, 7.0 +or the current .NET platform SDK installed. -Archived Builds -=============== +Installation on Mac OS X, FreeBSD, Linux +---------------------------------------- -Old builds can be found by browsing the `download directories`_. +The README file inside the tarball describes installation and basic +usage. The easiest way is extracting the tarball in /opt. The +Linux platform should have binutils installed, in order to allow +linking. Note that these versions only have a command-line compiler +and no IDE. .. _Windows (32 bit): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-win32.exe .. _Mac OS X (Intel): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-x86-darwin.tar.bz2 @@ -79,3 +74,4 @@ Old builds can be found by browsing the `download directories`_. .. _FreeBSD (x86): http://opendylan.org/downloads/opendylan/2011.1/opendylan-2011.1-x86-FreeBSD.tar.bz2 .. _FreeBSD (x86-64): http://opendylan.org/downloads/opendylan/old/1.0beta5/opendylan-1.0beta5-r11990-amd64-FreeBSD7.tar.bz2 .. _download directories: http://opendylan.org/downloads/opendylan/ +.. _23f8ab5878: https://github.com/dylan-lang/opendylan/tree/v2011.1 From 1b190b7d4dd20a0de689073afc50006b6ddea8b3 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Tue, 7 Feb 2012 16:51:26 +0700 Subject: [PATCH 167/519] Fix button classes from update to Bootstrap 2. --- documentation/website/source/index.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/documentation/website/source/index.rst b/documentation/website/source/index.rst index 36728cd1f9..aeefdf6e72 100644 --- a/documentation/website/source/index.rst +++ b/documentation/website/source/index.rst @@ -14,8 +14,8 @@ Welcome to Open Dylan! arguments, object introspection, macros, and many other advanced features... --Peter Hinely

@@ -35,7 +35,7 @@ Welcome to Open Dylan! .. raw:: html - +
From bbed087d33af66209dda4b5ebd733fdaa27c75f8 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Tue, 7 Feb 2012 16:51:46 +0700 Subject: [PATCH 168/519] Add an hr above footer. --- documentation/website/source/_themes/opendylan/layout.html | 1 + 1 file changed, 1 insertion(+) diff --git a/documentation/website/source/_themes/opendylan/layout.html b/documentation/website/source/_themes/opendylan/layout.html index 9fdda97709..e60d7c0d7f 100644 --- a/documentation/website/source/_themes/opendylan/layout.html +++ b/documentation/website/source/_themes/opendylan/layout.html @@ -70,6 +70,7 @@ {% block footer %}
+.. raw:: html + +
+ + + +
+ .. toctree:: :maxdepth: 1 :hidden: From 24bd14355860829aa6b689b4209f7e317d4bf295 Mon Sep 17 00:00:00 2001 From: Ingo Albrecht Date: Sat, 25 Feb 2012 02:57:22 +0100 Subject: [PATCH 177/519] Add piwik to footer. --- .../source/_themes/opendylan/layout.html | 14 ++++++++++++++ documentation/website/source/index.rst | 17 ----------------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/documentation/website/source/_themes/opendylan/layout.html b/documentation/website/source/_themes/opendylan/layout.html index e60d7c0d7f..c2fc974a39 100644 --- a/documentation/website/source/_themes/opendylan/layout.html +++ b/documentation/website/source/_themes/opendylan/layout.html @@ -94,6 +94,20 @@ {%- endif %}
+ + + + + {% endblock %} diff --git a/documentation/website/source/index.rst b/documentation/website/source/index.rst index 8f02bc62d9..aeefdf6e72 100644 --- a/documentation/website/source/index.rst +++ b/documentation/website/source/index.rst @@ -57,23 +57,6 @@ excellent :drm:`Introduction to the Dylan Reference Manual `.
-.. raw:: html - -
- - - -
- .. toctree:: :maxdepth: 1 :hidden: From 88d29cd0fdff2ab7ab42d71d0bc9f5b95281fdfd Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 27 Feb 2012 15:03:34 -0500 Subject: [PATCH 178/519] lisp frontend --- .../community/gsoc/2012/frontend-lisp.rst | 17 +++++++++++++++++ .../source/community/gsoc/2012/index.rst | 1 + 2 files changed, 18 insertions(+) create mode 100644 documentation/website/source/community/gsoc/2012/frontend-lisp.rst diff --git a/documentation/website/source/community/gsoc/2012/frontend-lisp.rst b/documentation/website/source/community/gsoc/2012/frontend-lisp.rst new file mode 100644 index 0000000000..3b35b9f35e --- /dev/null +++ b/documentation/website/source/community/gsoc/2012/frontend-lisp.rst @@ -0,0 +1,17 @@ +============= +Frontend/LISP +============= + +The purpose of this project would be to write another syntax for Dylan based on the original S-Expression syntax. + +The project would include to write (or revive) a S-Expression lexer and parser for Dylan and translating this into the ``dfmc-definitions`` structure by using a macro-expander for Dylan macros. + +The change towards the infix syntax was done before the programming language was finalized, thus not all features are present in the prefix syntax. This has to be taken into consideration and adjusted appropriately (by redefining the infix syntax). + +Using this approach both surface syntaxes (apart from macros) can be completely exchanged. Also, the semantics (control/data flow, optimization, type inference, backends) does not have to be touched at all. + +Some references: + +- `Dylan Interim Reference Manual `_ +- `Dylan Macros with S-Expressions `_ +- `S-Expression Syntax `_ diff --git a/documentation/website/source/community/gsoc/2012/index.rst b/documentation/website/source/community/gsoc/2012/index.rst index 88d89c9d0e..4b68069619 100644 --- a/documentation/website/source/community/gsoc/2012/index.rst +++ b/documentation/website/source/community/gsoc/2012/index.rst @@ -26,3 +26,4 @@ via one of the above means. cocoa gtk staticlink + frontend-lisp From a5d1d1709cf366ecafd4966093c14cab2bba3b45 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 27 Feb 2012 15:06:42 -0500 Subject: [PATCH 179/519] project manager proposal --- .../source/community/gsoc/2012/index.rst | 1 + .../community/gsoc/2012/project_manager.rst | 243 ++++++++++++++++++ 2 files changed, 244 insertions(+) create mode 100644 documentation/website/source/community/gsoc/2012/project_manager.rst diff --git a/documentation/website/source/community/gsoc/2012/index.rst b/documentation/website/source/community/gsoc/2012/index.rst index 4b68069619..133bf7b124 100644 --- a/documentation/website/source/community/gsoc/2012/index.rst +++ b/documentation/website/source/community/gsoc/2012/index.rst @@ -27,3 +27,4 @@ via one of the above means. gtk staticlink frontend-lisp + project_manager diff --git a/documentation/website/source/community/gsoc/2012/project_manager.rst b/documentation/website/source/community/gsoc/2012/project_manager.rst new file mode 100644 index 0000000000..cf2a58564d --- /dev/null +++ b/documentation/website/source/community/gsoc/2012/project_manager.rst @@ -0,0 +1,243 @@ +Rethinking the Project Manager +****************************** + +Problem +======= + +The current project manager as a variety of problems that we would +like to solve. These include: + +* It combines install with build. Everything is built and installed + into the same location (``~/Open-Dylan``). +* Similarly, it doesn't distinguish between a library that I'm using + and one that I'm developing. Not all dependencies should be treated + in the same manner. While this is seen by some to be an advantage, + I don't believe that it is in any larger scale setting with multiple + endeavors happening at once. +* It provides no versioning of libraries. +* Everything is always built in the shared location. This is pretty + confusing for new users. +* It provides no way of locating, downloading or otherwise managing + dependencies. You still have to download everything yourself, set + up registries, and get things to work. + +Example Application +=================== + +Given a software application like Network Night Vision which consists of +an executable and multiple libraries, this is an ideal demonstration of +how the new system could work. + +Network Night Vision depends on externally provided (and maintained) +libraries like Monday and the Dylan runtime. + +It is also consists of a collection of libraries which are part of the +application and linked into the final executable. + +Current Situation +----------------- + +Currently, there is a registry for Network Night Vision which lists +all of these libraries, both internal and external, and requires that +they be on disk in a particular location (relatively). When building +NNV, all of these libraries are built and installed into a common build +directory (``~/Open-Dylan``). Any changes to any of the sources for +these libraries results in everything getting appropriately rebuilt. +This rebuild happens even for a change in the Dylan runtime or the +Monday libraries even though they are external dependencies and aren't +being developed as part of NNV. + +When talking to the compiler, you give the compiler a single project +or LID file which is used to automatically get all dependencies, look +them up in the registry, and build them as needed. + +Better World? +------------- + +In a better world, external dependencies would be available from the +system as a whole. These external dependencies would have a version +number or identifier associated with them so that changes in the +dependency wouldn't require that everything using it be rebuilt or +updated. The internal (component) libraries would be handled roughly +as they are now: changes in them would cause rebuilds. + +It would be great if one didn't have to manually go and download, +build, and install external dependencies that didn't exist or if the +process were at least easier than it is now. + +Proposal +======== + +Workspaces +---------- + +Workspaces are a new concept to Open Dylan and are a layer above the +project. A workspace is a collection of projects. In this document, +workspace files will have the extension ``NAL`` for ``Not A LID``. + +Taking Network Night Vision as an example, you would have a top level +``nnv.nal`` file which contained (among other things) a list of the +projects that were part of the Network Night Vision application, using +relative paths from the workspace file: + +* ``flow-printer/flow-printer.lid`` +* ... +* ``gui-sniffer/gui-sniffer.lid`` +* ... +* ``vector-table/vector-table.lid`` + +Upon opening this workspace, the projects would also be loaded. +Libraries referenced from these projects would be resolved by: + +#. First, look for a project in the workspace that provides the + specified library. +#. If not found, look to the system-installed libraries. +#. See `Package Manager`_. + +Libraries that are provided by the workspace are treated as they are +now and changes to them trigger rebuilds. However, libraries that +are provided by the system are entirely an external dependency, just +like system-provided libraries in any other language or environment. + +Package Manager +--------------- + +The second big piece of this proposal is the creation of a package +management system for Open Dylan. This is something along the lines of +what many other programming language communities provide: + +* Clojure: `Leiningen `_ +* Common Lisp: `QuickLisp `_ +* Emacs Lisp: `Marmalade `_ / `ELPA `_ +* Erlang: `EPM `_ +* haXe: `haxelib `_ +* Lua: `LuaRocks `_ +* NodeJS: `NPM `_ +* Haskell: `Hackage `_ +* Ocaml: `GODI `_ +* PHP: `PEAR `_ +* Perl: CPAN +* Python: PIP / CheeseShop / easy_install +* Racket: `Raco `_ +* Ruby: `RubyGems `_ + +Our package manager would feature a global catalog of packages, the +ability to download, build and install those packages, and integration +of these features in the build system and IDE. + +Catalog +~~~~~~~ + +The catalog is a mapping of library names to metadata about those +libraries. + +This metadata should be able to include: + +* Author +* Version +* Synopsis +* Description +* Keywords / Tags +* Source repository location +* Software license + +The catalog may be maintained independently of the various libraries +or it might be the result of a mechanical process which extracts the +metadata from the workspace and project files of the libraries. There +are advantages and disadvantages to both, so this should be discussed. + +Software Distribution +~~~~~~~~~~~~~~~~~~~~~ + +I propose that we initially rely upon Git for retrieving the source code +for a library. We can always add additional methods later (HTTP, Mercurial, +Subversion, etc), but for now, it would be easiest if we could avoid having +to write our own HTTP interfaces, deal with unzipping and unpacking tarballs +and all of the other associated details. + +Upon locating a package that we wish to install, the package manager +would look at the metadata that it received from the catalog for the +Git repository and run a git client to retrieve the source code prior +to building and installing the package. + +User Interface +~~~~~~~~~~~~~~ + +The package manager should support at least these operations: + +* Search / Apropos. Given some text, find all packages that + reference that text. This can have features added over time + to search by author, version, etc. +* Install. Retrieve the +* Uninstall. This would be nice to have, but is probably going + to come later. When installing a package, a manifest of all + installed files should be generated. This can then be used + to uninstall the package. +* Bundle. Take an executable with the libraries that it depends + upon and put them in a directory structure independent of + the typical install location. This is probably mainly required + on Mac OS X where we have to deal with ``install_name_tool`` + and other OS X specific concerns. + +Over time, the package metadata should be accessible by a variety +of means: + +* Packages website which allows browsing all metadata as well + as perhaps hosting the generated documentation for the package + if it is using the standard Sphinx-based structure. +* Command line tools, including within ``dylan-compiler``. +* A GUI browser tool within the IDE. + +Versioning +---------- + +I haven't thought much yet about what will be involved here. + +Development Process +=================== + +A big (and reasonable) fear is that some of this work is fairly large +and extensive and that may make it more difficult. To help mitigate +this, I propose that we: + +* Work iteratively. Small steps that eventually get us somewhere + awesome are better than getting nowhere at all. +* Accept that this isn't ever going to be perfect. But it will surely + be better than what we have now. +* Make technology decisions to simplify things and add more features + later. An example of this is the proposed reliance upon Git via + ``run-application()``. + +Glossary +======== + +Project: + + Each project represents a single target. It contains: + + * A collection of Dylan source files. + * A set of dependencies which are expected to be satisfied by the + system. + * A set of dependencies which are expected to be resolved within + the current workspace. + +Registry: + + In Open Dylan, the registry provides a way to map from a library + name to the associated LID file (with sources) for that library. + +Target: + + A target is the final build product that results from a project, be + that a library or an executable. + +Workspace: + + A workspace is a new concept to Open Dylan. It is a collection of + projects which, together, represent a software project. + + A given project within the workspace can be specified as the default + project which is the one which is built first, is the target of a + 'Run' or 'Debug' command and so on. The user can change the current + active project within the workspace so that the subsequent 'Run' or + 'Debug' commands are directed at the new active project. From b21e672f67cdca1e9db882b9ddaea62c58366d5e Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 27 Feb 2012 14:40:55 -0500 Subject: [PATCH 180/519] dispatch optimizations --- .../source/community/gsoc/2012/dispatch.rst | 16 ++++++++++++++++ .../website/source/community/gsoc/2012/index.rst | 1 + 2 files changed, 17 insertions(+) create mode 100644 documentation/website/source/community/gsoc/2012/dispatch.rst diff --git a/documentation/website/source/community/gsoc/2012/dispatch.rst b/documentation/website/source/community/gsoc/2012/dispatch.rst new file mode 100644 index 0000000000..89aaef8073 --- /dev/null +++ b/documentation/website/source/community/gsoc/2012/dispatch.rst @@ -0,0 +1,16 @@ +===================== +Dispatch Optimization +===================== + +Since Dylan is dynamically typed and uses multiple dispatch, this has to be fast. This is in most applications the major performance bottleneck (unless annotated with types such that the dispatches are done at compile time). + +We've recently updated Dylan to use the C3 algorithm for superclass linearization, which leads to monotonic method orderings. + +Eric Kidd already wrote a technical report about the possibility of compressing the dispatch tables, which waits to be implemented. Additionally further research by Yoav Zibin evaluates other optimizations, which need to be evaluated and applied to Dylan. + +For this project some algorithmic knowledge is needed. The code will be mainly in the Dylan runtime. + +Useful links: + +- `Eric Kidds technical report on compression of generic function tables `_ +- `Yoav Zibin thesis about efficient runtime algorithms `_ diff --git a/documentation/website/source/community/gsoc/2012/index.rst b/documentation/website/source/community/gsoc/2012/index.rst index 133bf7b124..c838358b74 100644 --- a/documentation/website/source/community/gsoc/2012/index.rst +++ b/documentation/website/source/community/gsoc/2012/index.rst @@ -28,3 +28,4 @@ via one of the above means. staticlink frontend-lisp project_manager + dispatch From fbf202db1c71e3ee04d6d2b9dd1864360ee46dc6 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 27 Feb 2012 23:12:52 -0500 Subject: [PATCH 181/519] fix minor things, add language header --- .../website/source/community/gsoc/2012/frontend-lisp.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/website/source/community/gsoc/2012/frontend-lisp.rst b/documentation/website/source/community/gsoc/2012/frontend-lisp.rst index 3b35b9f35e..e48a23bb7f 100644 --- a/documentation/website/source/community/gsoc/2012/frontend-lisp.rst +++ b/documentation/website/source/community/gsoc/2012/frontend-lisp.rst @@ -6,9 +6,9 @@ The purpose of this project would be to write another syntax for Dylan based on The project would include to write (or revive) a S-Expression lexer and parser for Dylan and translating this into the ``dfmc-definitions`` structure by using a macro-expander for Dylan macros. -The change towards the infix syntax was done before the programming language was finalized, thus not all features are present in the prefix syntax. This has to be taken into consideration and adjusted appropriately (by redefining the infix syntax). +The change towards the infix syntax was done before the programming language was finalized, thus not all features are present in the prefix syntax. This has to be taken into consideration and adjusted appropriately (by redefining the prefix syntax). -Using this approach both surface syntaxes (apart from macros) can be completely exchanged. Also, the semantics (control/data flow, optimization, type inference, backends) does not have to be touched at all. +Using this approach both surface syntaxes (apart from macros) can be completely exchanged. Also, the semantics (control/data flow, optimization, type inference, backends) does not have to be touched at all. Every dylan file already has rfc822 headers, one of these is ``Language:``, which values can be ``prefix-dylan`` and ``infix-dylan`` (where the latter is the default). Some references: From e9e529307f81e16402cbf92665c2a4fcd0acf656 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 27 Feb 2012 23:45:21 -0500 Subject: [PATCH 182/519] Fix typo. Remove redundancy. No need for .nal. --- .../source/community/gsoc/2012/project_manager.rst | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/documentation/website/source/community/gsoc/2012/project_manager.rst b/documentation/website/source/community/gsoc/2012/project_manager.rst index cf2a58564d..7582f3995f 100644 --- a/documentation/website/source/community/gsoc/2012/project_manager.rst +++ b/documentation/website/source/community/gsoc/2012/project_manager.rst @@ -4,18 +4,17 @@ Rethinking the Project Manager Problem ======= -The current project manager as a variety of problems that we would +The current project manager has a variety of problems that we would like to solve. These include: -* It combines install with build. Everything is built and installed - into the same location (``~/Open-Dylan``). +* It combines install with build. * Similarly, it doesn't distinguish between a library that I'm using and one that I'm developing. Not all dependencies should be treated in the same manner. While this is seen by some to be an advantage, I don't believe that it is in any larger scale setting with multiple endeavors happening at once. * It provides no versioning of libraries. -* Everything is always built in the shared location. This is pretty +* Everything is always built into a shared location. This is pretty confusing for new users. * It provides no way of locating, downloading or otherwise managing dependencies. You still have to download everything yourself, set @@ -72,11 +71,10 @@ Workspaces ---------- Workspaces are a new concept to Open Dylan and are a layer above the -project. A workspace is a collection of projects. In this document, -workspace files will have the extension ``NAL`` for ``Not A LID``. +project. (A project corresponds to a single library or executable.) Taking Network Night Vision as an example, you would have a top level -``nnv.nal`` file which contained (among other things) a list of the +``nnv.project`` file which contained (among other things) a list of the projects that were part of the Network Night Vision application, using relative paths from the workspace file: From 290b54dfc2a19e26e0ab7406a00412e48f57eaf2 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 27 Feb 2012 23:54:06 -0500 Subject: [PATCH 183/519] nnv.project -> nnv.workspace --- .../website/source/community/gsoc/2012/project_manager.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/community/gsoc/2012/project_manager.rst b/documentation/website/source/community/gsoc/2012/project_manager.rst index 7582f3995f..718cc7ef78 100644 --- a/documentation/website/source/community/gsoc/2012/project_manager.rst +++ b/documentation/website/source/community/gsoc/2012/project_manager.rst @@ -74,7 +74,7 @@ Workspaces are a new concept to Open Dylan and are a layer above the project. (A project corresponds to a single library or executable.) Taking Network Night Vision as an example, you would have a top level -``nnv.project`` file which contained (among other things) a list of the +``nnv.workspace`` file which contained (among other things) a list of the projects that were part of the Network Night Vision application, using relative paths from the workspace file: From a75071300aaaf9aacb53dd0db372ca129cd2e3b9 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Wed, 14 Mar 2012 10:08:12 +0700 Subject: [PATCH 184/519] Replace Yahoo site search with a Google custom search. This is 1) more powerful and 2) in response to offensive patent suits by Yahoo. --- .../website/source/_themes/opendylan/layout.html | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/documentation/website/source/_themes/opendylan/layout.html b/documentation/website/source/_themes/opendylan/layout.html index c2fc974a39..9a2250ed97 100644 --- a/documentation/website/source/_themes/opendylan/layout.html +++ b/documentation/website/source/_themes/opendylan/layout.html @@ -49,9 +49,10 @@
{{ caption|e }} {% endfor -%} - - - + + + +
@@ -108,6 +109,8 @@ + + {% endblock %} From 517045c0bfd2e3fec589471fb932d18ee82b7e35 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Wed, 14 Mar 2012 11:38:20 +0700 Subject: [PATCH 185/519] Update to Bootstrap 2.0.2. --- .../source/_themes/opendylan/layout.html | 6 +- .../css/bootstrap-responsive.css} | 555 ++++--- .../2.0.2/css/bootstrap-responsive.min.css | 12 + .../{2.0 => 2.0.2}/css/bootstrap.css | 1425 ++++++++++++----- .../{2.0 => 2.0.2}/css/bootstrap.min.css | 401 +++-- .../img/glyphicons-halflings-white.png | Bin .../img/glyphicons-halflings.png | Bin .../bootstrap/{2.0 => 2.0.2}/js/bootstrap.js | 106 +- .../bootstrap/2.0.2/js/bootstrap.min.js | 6 + .../2.0/css/bootstrap.min.responsive | 3 - .../static/bootstrap/2.0/js/bootstrap.min.js | 1 - 11 files changed, 1679 insertions(+), 836 deletions(-) rename documentation/website/source/_themes/opendylan/static/bootstrap/{2.0/css/bootstrap.responsive => 2.0.2/css/bootstrap-responsive.css} (73%) create mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap-responsive.min.css rename documentation/website/source/_themes/opendylan/static/bootstrap/{2.0 => 2.0.2}/css/bootstrap.css (75%) rename documentation/website/source/_themes/opendylan/static/bootstrap/{2.0 => 2.0.2}/css/bootstrap.min.css (64%) rename documentation/website/source/_themes/opendylan/static/bootstrap/{2.0 => 2.0.2}/img/glyphicons-halflings-white.png (100%) rename documentation/website/source/_themes/opendylan/static/bootstrap/{2.0 => 2.0.2}/img/glyphicons-halflings.png (100%) rename documentation/website/source/_themes/opendylan/static/bootstrap/{2.0 => 2.0.2}/js/bootstrap.js (95%) create mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/js/bootstrap.min.js delete mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0/css/bootstrap.min.responsive delete mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0/js/bootstrap.min.js diff --git a/documentation/website/source/_themes/opendylan/layout.html b/documentation/website/source/_themes/opendylan/layout.html index 9a2250ed97..facf14afe7 100644 --- a/documentation/website/source/_themes/opendylan/layout.html +++ b/documentation/website/source/_themes/opendylan/layout.html @@ -9,10 +9,10 @@ {% block doctype %} {% endblock %} -{% set css_files = css_files + ['_static/bootstrap/2.0/css/bootstrap.min.css', - '_static/bootstrap/2.0/css/bootstrap.min.responsive', +{% set css_files = css_files + ['_static/bootstrap/2.0.2/css/bootstrap.min.css', + '_static/bootstrap/2.0.2/css/bootstrap-responsive.min.css', '_static/opendylan.org/css/opendylan.css'] -%} -{% set script_files = script_files + ['_static/bootstrap/2.0/js/bootstrap.min.js'] -%} +{% set script_files = script_files + ['_static/bootstrap/2.0.2/js/bootstrap.min.js'] -%} {% set navigation_bar = [ ('index', 'Home'), ('about/index', 'About'), diff --git a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0/css/bootstrap.responsive b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap-responsive.css similarity index 73% rename from documentation/website/source/_themes/opendylan/static/bootstrap/2.0/css/bootstrap.responsive rename to documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap-responsive.css index 4b032cdb55..0bc6de916b 100644 --- a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0/css/bootstrap.responsive +++ b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap-responsive.css @@ -1,5 +1,5 @@ /*! - * Bootstrap Responsive v2.0.0 + * Bootstrap Responsive v2.0.2 * * Copyright 2012 Twitter, Inc * Licensed under the Apache License v2.0 @@ -7,10 +7,85 @@ * * Designed and built with all the love in the world @twitter by @mdo and @fat. */ +.clearfix { + *zoom: 1; +} +.clearfix:before, +.clearfix:after { + display: table; + content: ""; +} +.clearfix:after { + clear: both; +} +.hide-text { + overflow: hidden; + text-indent: 100%; + white-space: nowrap; +} +.input-block-level { + display: block; + width: 100%; + min-height: 28px; + /* Make inputs at least the height of their button counterpart */ + + /* Makes inputs behave like true block-level elements */ + + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} .hidden { display: none; visibility: hidden; } +.visible-phone { + display: none; +} +.visible-tablet { + display: none; +} +.visible-desktop { + display: block; +} +.hidden-phone { + display: block; +} +.hidden-tablet { + display: block; +} +.hidden-desktop { + display: none; +} +@media (max-width: 767px) { + .visible-phone { + display: block; + } + .hidden-phone { + display: none; + } + .hidden-desktop { + display: block; + } + .visible-desktop { + display: none; + } +} +@media (min-width: 768px) and (max-width: 979px) { + .visible-tablet { + display: block; + } + .hidden-tablet { + display: none; + } + .hidden-desktop { + display: block; + } + .visible-desktop { + display: none; + } +} @media (max-width: 480px) { .nav-collapse { -webkit-transform: translate3d(0, 0, 0); @@ -19,34 +94,8 @@ display: block; line-height: 18px; } - input[class*="span"], - select[class*="span"], - textarea[class*="span"], - .uneditable-input { - display: block; - width: 100%; - height: 28px; - /* Make inputs at least the height of their button counterpart */ - - /* Makes inputs behave like true block-level elements */ - - -webkit-box-sizing: border-box; - /* Older Webkit */ - - -moz-box-sizing: border-box; - /* Older FF */ - - -ms-box-sizing: border-box; - /* IE8 */ - - box-sizing: border-box; - /* CSS3 spec*/ - - } - .input-prepend input[class*="span"], .input-append input[class*="span"] { - width: auto; - } - input[type="checkbox"], input[type="radio"] { + input[type="checkbox"], + input[type="radio"] { border: 1px solid #ccc; } .form-horizontal .control-group > label { @@ -84,10 +133,17 @@ position: static; } } -@media (max-width: 768px) { +@media (max-width: 767px) { + body { + padding-left: 20px; + padding-right: 20px; + } + .navbar-fixed-top { + margin-left: -20px; + margin-right: -20px; + } .container { width: auto; - padding: 0 20px; } .row-fluid { width: 100%; @@ -95,19 +151,44 @@ .row { margin-left: 0; } - .row > [class*="span"], .row-fluid > [class*="span"] { + .row > [class*="span"], + .row-fluid > [class*="span"] { float: none; display: block; width: auto; margin: 0; } + .thumbnails [class*="span"] { + width: auto; + } + input[class*="span"], + select[class*="span"], + textarea[class*="span"], + .uneditable-input { + display: block; + width: 100%; + min-height: 28px; + /* Make inputs at least the height of their button counterpart */ + + /* Makes inputs behave like true block-level elements */ + + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + } + .input-prepend input[class*="span"], + .input-append input[class*="span"] { + width: auto; + } } -@media (min-width: 768px) and (max-width: 980px) { +@media (min-width: 768px) and (max-width: 979px) { .row { margin-left: -20px; *zoom: 1; } - .row:before, .row:after { + .row:before, + .row:after { display: table; content: ""; } @@ -118,80 +199,89 @@ float: left; margin-left: 20px; } - .span1 { - width: 42px; + .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 724px; } - .span2 { - width: 104px; + .span12 { + width: 724px; } - .span3 { - width: 166px; + .span11 { + width: 662px; } - .span4 { - width: 228px; + .span10 { + width: 600px; } - .span5 { - width: 290px; + .span9 { + width: 538px; } - .span6 { - width: 352px; + .span8 { + width: 476px; } .span7 { width: 414px; } - .span8 { - width: 476px; + .span6 { + width: 352px; } - .span9 { - width: 538px; + .span5 { + width: 290px; } - .span10 { - width: 600px; + .span4 { + width: 228px; } - .span11 { - width: 662px; + .span3 { + width: 166px; } - .span12, .container { - width: 724px; + .span2 { + width: 104px; } - .offset1 { - margin-left: 82px; + .span1 { + width: 42px; } - .offset2 { - margin-left: 144px; + .offset12 { + margin-left: 764px; } - .offset3 { - margin-left: 206px; + .offset11 { + margin-left: 702px; } - .offset4 { - margin-left: 268px; + .offset10 { + margin-left: 640px; } - .offset5 { - margin-left: 330px; + .offset9 { + margin-left: 578px; } - .offset6 { - margin-left: 392px; + .offset8 { + margin-left: 516px; } .offset7 { margin-left: 454px; } - .offset8 { - margin-left: 516px; + .offset6 { + margin-left: 392px; } - .offset9 { - margin-left: 578px; + .offset5 { + margin-left: 330px; } - .offset10 { - margin-left: 640px; + .offset4 { + margin-left: 268px; } - .offset11 { - margin-left: 702px; + .offset3 { + margin-left: 206px; + } + .offset2 { + margin-left: 144px; + } + .offset1 { + margin-left: 82px; } .row-fluid { width: 100%; *zoom: 1; } - .row-fluid:before, .row-fluid:after { + .row-fluid:before, + .row-fluid:after { display: table; content: ""; } @@ -205,80 +295,85 @@ .row-fluid > [class*="span"]:first-child { margin-left: 0; } - .row-fluid .span1 { - width: 5.801104972%; - } - .row-fluid .span2 { - width: 14.364640883%; + .row-fluid > .span12 { + width: 99.999999993%; } - .row-fluid .span3 { - width: 22.928176794%; + .row-fluid > .span11 { + width: 91.436464082%; } - .row-fluid .span4 { - width: 31.491712705%; + .row-fluid > .span10 { + width: 82.87292817100001%; } - .row-fluid .span5 { - width: 40.055248616%; + .row-fluid > .span9 { + width: 74.30939226%; } - .row-fluid .span6 { - width: 48.618784527%; + .row-fluid > .span8 { + width: 65.74585634900001%; } - .row-fluid .span7 { + .row-fluid > .span7 { width: 57.182320438000005%; } - .row-fluid .span8 { - width: 65.74585634900001%; + .row-fluid > .span6 { + width: 48.618784527%; } - .row-fluid .span9 { - width: 74.30939226%; + .row-fluid > .span5 { + width: 40.055248616%; } - .row-fluid .span10 { - width: 82.87292817100001%; + .row-fluid > .span4 { + width: 31.491712705%; } - .row-fluid .span11 { - width: 91.436464082%; + .row-fluid > .span3 { + width: 22.928176794%; } - .row-fluid .span12 { - width: 99.999999993%; + .row-fluid > .span2 { + width: 14.364640883%; } - input.span1, textarea.span1, .uneditable-input.span1 { - width: 32px; + .row-fluid > .span1 { + width: 5.801104972%; } - input.span2, textarea.span2, .uneditable-input.span2 { - width: 94px; + input, + textarea, + .uneditable-input { + margin-left: 0; } - input.span3, textarea.span3, .uneditable-input.span3 { - width: 156px; + input.span12, textarea.span12, .uneditable-input.span12 { + width: 714px; } - input.span4, textarea.span4, .uneditable-input.span4 { - width: 218px; + input.span11, textarea.span11, .uneditable-input.span11 { + width: 652px; } - input.span5, textarea.span5, .uneditable-input.span5 { - width: 280px; + input.span10, textarea.span10, .uneditable-input.span10 { + width: 590px; } - input.span6, textarea.span6, .uneditable-input.span6 { - width: 342px; + input.span9, textarea.span9, .uneditable-input.span9 { + width: 528px; + } + input.span8, textarea.span8, .uneditable-input.span8 { + width: 466px; } input.span7, textarea.span7, .uneditable-input.span7 { width: 404px; } - input.span8, textarea.span8, .uneditable-input.span8 { - width: 466px; + input.span6, textarea.span6, .uneditable-input.span6 { + width: 342px; } - input.span9, textarea.span9, .uneditable-input.span9 { - width: 528px; + input.span5, textarea.span5, .uneditable-input.span5 { + width: 280px; } - input.span10, textarea.span10, .uneditable-input.span10 { - width: 590px; + input.span4, textarea.span4, .uneditable-input.span4 { + width: 218px; } - input.span11, textarea.span11, .uneditable-input.span11 { - width: 652px; + input.span3, textarea.span3, .uneditable-input.span3 { + width: 156px; } - input.span12, textarea.span12, .uneditable-input.span12 { - width: 714px; + input.span2, textarea.span2, .uneditable-input.span2 { + width: 94px; + } + input.span1, textarea.span1, .uneditable-input.span1 { + width: 32px; } } -@media (max-width: 980px) { +@media (max-width: 979px) { body { padding-top: 0; } @@ -314,7 +409,12 @@ .navbar .nav > .divider-vertical { display: none; } - .navbar .nav > li > a, .navbar .dropdown-menu a { + .navbar .nav .nav-header { + color: #999999; + text-shadow: none; + } + .navbar .nav > li > a, + .navbar .dropdown-menu a { padding: 6px 15px; font-weight: bold; color: #999999; @@ -325,7 +425,8 @@ .navbar .dropdown-menu li + li a { margin-bottom: 2px; } - .navbar .nav > li > a:hover, .navbar .dropdown-menu a:hover { + .navbar .nav > li > a:hover, + .navbar .dropdown-menu a:hover { background-color: #222222; } .navbar .dropdown-menu { @@ -346,13 +447,15 @@ -moz-box-shadow: none; box-shadow: none; } - .navbar .dropdown-menu:before, .navbar .dropdown-menu:after { + .navbar .dropdown-menu:before, + .navbar .dropdown-menu:after { display: none; } .navbar .dropdown-menu .divider { display: none; } - .navbar-form, .navbar-search { + .navbar-form, + .navbar-search { float: none; padding: 9px 15px; margin: 9px 0; @@ -381,6 +484,7 @@ @media (min-width: 980px) { .nav-collapse.collapse { height: auto !important; + overflow: visible !important; } } @media (min-width: 1200px) { @@ -388,7 +492,8 @@ margin-left: -30px; *zoom: 1; } - .row:before, .row:after { + .row:before, + .row:after { display: table; content: ""; } @@ -399,80 +504,89 @@ float: left; margin-left: 30px; } - .span1 { - width: 70px; + .container, + .navbar-fixed-top .container, + .navbar-fixed-bottom .container { + width: 1170px; } - .span2 { - width: 170px; + .span12 { + width: 1170px; } - .span3 { - width: 270px; + .span11 { + width: 1070px; } - .span4 { - width: 370px; + .span10 { + width: 970px; } - .span5 { - width: 470px; + .span9 { + width: 870px; } - .span6 { - width: 570px; + .span8 { + width: 770px; } .span7 { width: 670px; } - .span8 { - width: 770px; + .span6 { + width: 570px; } - .span9 { - width: 870px; + .span5 { + width: 470px; } - .span10 { - width: 970px; + .span4 { + width: 370px; } - .span11 { - width: 1070px; + .span3 { + width: 270px; } - .span12, .container { - width: 1170px; + .span2 { + width: 170px; } - .offset1 { - margin-left: 130px; + .span1 { + width: 70px; } - .offset2 { - margin-left: 230px; + .offset12 { + margin-left: 1230px; } - .offset3 { - margin-left: 330px; + .offset11 { + margin-left: 1130px; } - .offset4 { - margin-left: 430px; + .offset10 { + margin-left: 1030px; } - .offset5 { - margin-left: 530px; + .offset9 { + margin-left: 930px; } - .offset6 { - margin-left: 630px; + .offset8 { + margin-left: 830px; } .offset7 { margin-left: 730px; } - .offset8 { - margin-left: 830px; + .offset6 { + margin-left: 630px; } - .offset9 { - margin-left: 930px; + .offset5 { + margin-left: 530px; } - .offset10 { - margin-left: 1030px; + .offset4 { + margin-left: 430px; } - .offset11 { - margin-left: 1130px; + .offset3 { + margin-left: 330px; + } + .offset2 { + margin-left: 230px; + } + .offset1 { + margin-left: 130px; } .row-fluid { width: 100%; *zoom: 1; } - .row-fluid:before, .row-fluid:after { + .row-fluid:before, + .row-fluid:after { display: table; content: ""; } @@ -486,77 +600,82 @@ .row-fluid > [class*="span"]:first-child { margin-left: 0; } - .row-fluid .span1 { - width: 5.982905983%; - } - .row-fluid .span2 { - width: 14.529914530000001%; + .row-fluid > .span12 { + width: 100%; } - .row-fluid .span3 { - width: 23.076923077%; + .row-fluid > .span11 { + width: 91.45299145300001%; } - .row-fluid .span4 { - width: 31.623931624%; + .row-fluid > .span10 { + width: 82.905982906%; } - .row-fluid .span5 { - width: 40.170940171000005%; + .row-fluid > .span9 { + width: 74.358974359%; } - .row-fluid .span6 { - width: 48.717948718%; + .row-fluid > .span8 { + width: 65.81196581200001%; } - .row-fluid .span7 { + .row-fluid > .span7 { width: 57.264957265%; } - .row-fluid .span8 { - width: 65.81196581200001%; + .row-fluid > .span6 { + width: 48.717948718%; } - .row-fluid .span9 { - width: 74.358974359%; + .row-fluid > .span5 { + width: 40.170940171000005%; } - .row-fluid .span10 { - width: 82.905982906%; + .row-fluid > .span4 { + width: 31.623931624%; } - .row-fluid .span11 { - width: 91.45299145300001%; + .row-fluid > .span3 { + width: 23.076923077%; } - .row-fluid .span12 { - width: 100%; + .row-fluid > .span2 { + width: 14.529914530000001%; } - input.span1, textarea.span1, .uneditable-input.span1 { - width: 60px; + .row-fluid > .span1 { + width: 5.982905983%; } - input.span2, textarea.span2, .uneditable-input.span2 { - width: 160px; + input, + textarea, + .uneditable-input { + margin-left: 0; } - input.span3, textarea.span3, .uneditable-input.span3 { - width: 260px; + input.span12, textarea.span12, .uneditable-input.span12 { + width: 1160px; } - input.span4, textarea.span4, .uneditable-input.span4 { - width: 360px; + input.span11, textarea.span11, .uneditable-input.span11 { + width: 1060px; } - input.span5, textarea.span5, .uneditable-input.span5 { - width: 460px; + input.span10, textarea.span10, .uneditable-input.span10 { + width: 960px; } - input.span6, textarea.span6, .uneditable-input.span6 { - width: 560px; + input.span9, textarea.span9, .uneditable-input.span9 { + width: 860px; + } + input.span8, textarea.span8, .uneditable-input.span8 { + width: 760px; } input.span7, textarea.span7, .uneditable-input.span7 { width: 660px; } - input.span8, textarea.span8, .uneditable-input.span8 { - width: 760px; + input.span6, textarea.span6, .uneditable-input.span6 { + width: 560px; } - input.span9, textarea.span9, .uneditable-input.span9 { - width: 860px; + input.span5, textarea.span5, .uneditable-input.span5 { + width: 460px; } - input.span10, textarea.span10, .uneditable-input.span10 { - width: 960px; + input.span4, textarea.span4, .uneditable-input.span4 { + width: 360px; } - input.span11, textarea.span11, .uneditable-input.span11 { - width: 1060px; + input.span3, textarea.span3, .uneditable-input.span3 { + width: 260px; } - input.span12, textarea.span12, .uneditable-input.span12 { - width: 1160px; + input.span2, textarea.span2, .uneditable-input.span2 { + width: 160px; + } + input.span1, textarea.span1, .uneditable-input.span1 { + width: 60px; } .thumbnails { margin-left: -30px; diff --git a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap-responsive.min.css b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap-responsive.min.css new file mode 100644 index 0000000000..60a47c9494 --- /dev/null +++ b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap-responsive.min.css @@ -0,0 +1,12 @@ +.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";} +.clearfix:after{clear:both;} +.hide-text{overflow:hidden;text-indent:100%;white-space:nowrap;} +.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;} +.hidden{display:none;visibility:hidden;} +.visible-phone{display:none;} +.visible-tablet{display:none;} +.visible-desktop{display:block;} +.hidden-phone{display:block;} +.hidden-tablet{display:block;} +.hidden-desktop{display:none;} +@media (max-width:767px){.visible-phone{display:block;} .hidden-phone{display:none;} .hidden-desktop{display:block;} .visible-desktop{display:none;}}@media (min-width:768px) and (max-width:979px){.visible-tablet{display:block;} .hidden-tablet{display:none;} .hidden-desktop{display:block;} .visible-desktop{display:none;}}@media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0);} .page-header h1 small{display:block;line-height:18px;} input[type="checkbox"],input[type="radio"]{border:1px solid #ccc;} .form-horizontal .control-group>label{float:none;width:auto;padding-top:0;text-align:left;} .form-horizontal .controls{margin-left:0;} .form-horizontal .control-list{padding-top:0;} .form-horizontal .form-actions{padding-left:10px;padding-right:10px;} .modal{position:absolute;top:10px;left:10px;right:10px;width:auto;margin:0;}.modal.fade.in{top:auto;} .modal-header .close{padding:10px;margin:-10px;} .carousel-caption{position:static;}}@media (max-width:767px){body{padding-left:20px;padding-right:20px;} .navbar-fixed-top{margin-left:-20px;margin-right:-20px;} .container{width:auto;} .row-fluid{width:100%;} .row{margin-left:0;} .row>[class*="span"],.row-fluid>[class*="span"]{float:none;display:block;width:auto;margin:0;} .thumbnails [class*="span"]{width:auto;} input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;} .input-prepend input[class*="span"],.input-append input[class*="span"]{width:auto;}}@media (min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:20px;} .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px;} .span12{width:724px;} .span11{width:662px;} .span10{width:600px;} .span9{width:538px;} .span8{width:476px;} .span7{width:414px;} .span6{width:352px;} .span5{width:290px;} .span4{width:228px;} .span3{width:166px;} .span2{width:104px;} .span1{width:42px;} .offset12{margin-left:764px;} .offset11{margin-left:702px;} .offset10{margin-left:640px;} .offset9{margin-left:578px;} .offset8{margin-left:516px;} .offset7{margin-left:454px;} .offset6{margin-left:392px;} .offset5{margin-left:330px;} .offset4{margin-left:268px;} .offset3{margin-left:206px;} .offset2{margin-left:144px;} .offset1{margin-left:82px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.762430939%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid > .span12{width:99.999999993%;} .row-fluid > .span11{width:91.436464082%;} .row-fluid > .span10{width:82.87292817100001%;} .row-fluid > .span9{width:74.30939226%;} .row-fluid > .span8{width:65.74585634900001%;} .row-fluid > .span7{width:57.182320438000005%;} .row-fluid > .span6{width:48.618784527%;} .row-fluid > .span5{width:40.055248616%;} .row-fluid > .span4{width:31.491712705%;} .row-fluid > .span3{width:22.928176794%;} .row-fluid > .span2{width:14.364640883%;} .row-fluid > .span1{width:5.801104972%;} input,textarea,.uneditable-input{margin-left:0;} input.span12, textarea.span12, .uneditable-input.span12{width:714px;} input.span11, textarea.span11, .uneditable-input.span11{width:652px;} input.span10, textarea.span10, .uneditable-input.span10{width:590px;} input.span9, textarea.span9, .uneditable-input.span9{width:528px;} input.span8, textarea.span8, .uneditable-input.span8{width:466px;} input.span7, textarea.span7, .uneditable-input.span7{width:404px;} input.span6, textarea.span6, .uneditable-input.span6{width:342px;} input.span5, textarea.span5, .uneditable-input.span5{width:280px;} input.span4, textarea.span4, .uneditable-input.span4{width:218px;} input.span3, textarea.span3, .uneditable-input.span3{width:156px;} input.span2, textarea.span2, .uneditable-input.span2{width:94px;} input.span1, textarea.span1, .uneditable-input.span1{width:32px;}}@media (max-width:979px){body{padding-top:0;} .navbar-fixed-top{position:static;margin-bottom:18px;} .navbar-fixed-top .navbar-inner{padding:5px;} .navbar .container{width:auto;padding:0;} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px;} .navbar .nav-collapse{clear:left;} .navbar .nav{float:none;margin:0 0 9px;} .navbar .nav>li{float:none;} .navbar .nav>li>a{margin-bottom:2px;} .navbar .nav>.divider-vertical{display:none;} .navbar .nav .nav-header{color:#999999;text-shadow:none;} .navbar .nav>li>a,.navbar .dropdown-menu a{padding:6px 15px;font-weight:bold;color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .navbar .dropdown-menu li+li a{margin-bottom:2px;} .navbar .nav>li>a:hover,.navbar .dropdown-menu a:hover{background-color:#222222;} .navbar .dropdown-menu{position:static;top:auto;left:auto;float:none;display:block;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} .navbar .dropdown-menu:before,.navbar .dropdown-menu:after{display:none;} .navbar .dropdown-menu .divider{display:none;} .navbar-form,.navbar-search{float:none;padding:9px 15px;margin:9px 0;border-top:1px solid #222222;border-bottom:1px solid #222222;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);} .navbar .nav.pull-right{float:none;margin-left:0;} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px;} .btn-navbar{display:block;} .nav-collapse{overflow:hidden;height:0;}}@media (min-width:980px){.nav-collapse.collapse{height:auto !important;overflow:visible !important;}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:30px;} .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px;} .span12{width:1170px;} .span11{width:1070px;} .span10{width:970px;} .span9{width:870px;} .span8{width:770px;} .span7{width:670px;} .span6{width:570px;} .span5{width:470px;} .span4{width:370px;} .span3{width:270px;} .span2{width:170px;} .span1{width:70px;} .offset12{margin-left:1230px;} .offset11{margin-left:1130px;} .offset10{margin-left:1030px;} .offset9{margin-left:930px;} .offset8{margin-left:830px;} .offset7{margin-left:730px;} .offset6{margin-left:630px;} .offset5{margin-left:530px;} .offset4{margin-left:430px;} .offset3{margin-left:330px;} .offset2{margin-left:230px;} .offset1{margin-left:130px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.564102564%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid > .span12{width:100%;} .row-fluid > .span11{width:91.45299145300001%;} .row-fluid > .span10{width:82.905982906%;} .row-fluid > .span9{width:74.358974359%;} .row-fluid > .span8{width:65.81196581200001%;} .row-fluid > .span7{width:57.264957265%;} .row-fluid > .span6{width:48.717948718%;} .row-fluid > .span5{width:40.170940171000005%;} .row-fluid > .span4{width:31.623931624%;} .row-fluid > .span3{width:23.076923077%;} .row-fluid > .span2{width:14.529914530000001%;} .row-fluid > .span1{width:5.982905983%;} input,textarea,.uneditable-input{margin-left:0;} input.span12, textarea.span12, .uneditable-input.span12{width:1160px;} input.span11, textarea.span11, .uneditable-input.span11{width:1060px;} input.span10, textarea.span10, .uneditable-input.span10{width:960px;} input.span9, textarea.span9, .uneditable-input.span9{width:860px;} input.span8, textarea.span8, .uneditable-input.span8{width:760px;} input.span7, textarea.span7, .uneditable-input.span7{width:660px;} input.span6, textarea.span6, .uneditable-input.span6{width:560px;} input.span5, textarea.span5, .uneditable-input.span5{width:460px;} input.span4, textarea.span4, .uneditable-input.span4{width:360px;} input.span3, textarea.span3, .uneditable-input.span3{width:260px;} input.span2, textarea.span2, .uneditable-input.span2{width:160px;} input.span1, textarea.span1, .uneditable-input.span1{width:60px;} .thumbnails{margin-left:-30px;} .thumbnails>li{margin-left:30px;}} diff --git a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0/css/bootstrap.css b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap.css similarity index 75% rename from documentation/website/source/_themes/opendylan/static/bootstrap/2.0/css/bootstrap.css rename to documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap.css index 7babce5eb2..495188af7f 100644 --- a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0/css/bootstrap.css +++ b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap.css @@ -1,5 +1,5 @@ /*! - * Bootstrap v2.0.0 + * Bootstrap v2.0.2 * * Copyright 2012 Twitter, Inc * Licensed under the Apache License v2.0 @@ -19,7 +19,9 @@ nav, section { display: block; } -audio, canvas, video { +audio, +canvas, +video { display: inline-block; *display: inline; *zoom: 1; @@ -33,14 +35,16 @@ html { -ms-text-size-adjust: 100%; } a:focus { - outline: thin dotted; + outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } -a:hover, a:active { +a:hover, +a:active { outline: 0; } -sub, sup { +sub, +sup { position: relative; font-size: 75%; line-height: 0; @@ -53,10 +57,10 @@ sub { bottom: -0.25em; } img { - max-width: 100%; height: auto; border: 0; -ms-interpolation-mode: bicubic; + vertical-align: middle; } button, input, @@ -66,11 +70,13 @@ textarea { font-size: 100%; vertical-align: middle; } -button, input { +button, +input { *overflow: visible; line-height: normal; } -button::-moz-focus-inner, input::-moz-focus-inner { +button::-moz-focus-inner, +input::-moz-focus-inner { padding: 0; border: 0; } @@ -87,13 +93,43 @@ input[type="search"] { -moz-box-sizing: content-box; box-sizing: content-box; } -input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button { +input[type="search"]::-webkit-search-decoration, +input[type="search"]::-webkit-search-cancel-button { -webkit-appearance: none; } textarea { overflow: auto; vertical-align: top; } +.clearfix { + *zoom: 1; +} +.clearfix:before, +.clearfix:after { + display: table; + content: ""; +} +.clearfix:after { + clear: both; +} +.hide-text { + overflow: hidden; + text-indent: 100%; + white-space: nowrap; +} +.input-block-level { + display: block; + width: 100%; + min-height: 28px; + /* Make inputs at least the height of their button counterpart */ + + /* Makes inputs behave like true block-level elements */ + + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; +} body { margin: 0; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; @@ -114,7 +150,8 @@ a:hover { margin-left: -20px; *zoom: 1; } -.row:before, .row:after { +.row:before, +.row:after { display: table; content: ""; } @@ -125,80 +162,89 @@ a:hover { float: left; margin-left: 20px; } -.span1 { - width: 60px; +.container, +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; } -.span2 { - width: 140px; +.span12 { + width: 940px; } -.span3 { - width: 220px; +.span11 { + width: 860px; } -.span4 { - width: 300px; +.span10 { + width: 780px; } -.span5 { - width: 380px; +.span9 { + width: 700px; } -.span6 { - width: 460px; +.span8 { + width: 620px; } .span7 { width: 540px; } -.span8 { - width: 620px; +.span6 { + width: 460px; } -.span9 { - width: 700px; +.span5 { + width: 380px; } -.span10 { - width: 780px; +.span4 { + width: 300px; } -.span11 { - width: 860px; +.span3 { + width: 220px; } -.span12, .container { - width: 940px; +.span2 { + width: 140px; } -.offset1 { - margin-left: 100px; +.span1 { + width: 60px; } -.offset2 { - margin-left: 180px; +.offset12 { + margin-left: 980px; } -.offset3 { - margin-left: 260px; +.offset11 { + margin-left: 900px; } -.offset4 { - margin-left: 340px; +.offset10 { + margin-left: 820px; } -.offset5 { - margin-left: 420px; +.offset9 { + margin-left: 740px; } -.offset6 { - margin-left: 500px; +.offset8 { + margin-left: 660px; } .offset7 { margin-left: 580px; } -.offset8 { - margin-left: 660px; +.offset6 { + margin-left: 500px; } -.offset9 { - margin-left: 740px; +.offset5 { + margin-left: 420px; } -.offset10 { - margin-left: 820px; +.offset4 { + margin-left: 340px; } -.offset11 { - margin-left: 900px; +.offset3 { + margin-left: 260px; +} +.offset2 { + margin-left: 180px; +} +.offset1 { + margin-left: 100px; } .row-fluid { width: 100%; *zoom: 1; } -.row-fluid:before, .row-fluid:after { +.row-fluid:before, +.row-fluid:after { display: table; content: ""; } @@ -212,49 +258,49 @@ a:hover { .row-fluid > [class*="span"]:first-child { margin-left: 0; } -.row-fluid .span1 { - width: 6.382978723%; -} -.row-fluid .span2 { - width: 14.89361702%; +.row-fluid > .span12 { + width: 99.99999998999999%; } -.row-fluid .span3 { - width: 23.404255317%; +.row-fluid > .span11 { + width: 91.489361693%; } -.row-fluid .span4 { - width: 31.914893614%; +.row-fluid > .span10 { + width: 82.97872339599999%; } -.row-fluid .span5 { - width: 40.425531911%; +.row-fluid > .span9 { + width: 74.468085099%; } -.row-fluid .span6 { - width: 48.93617020799999%; +.row-fluid > .span8 { + width: 65.95744680199999%; } -.row-fluid .span7 { +.row-fluid > .span7 { width: 57.446808505%; } -.row-fluid .span8 { - width: 65.95744680199999%; +.row-fluid > .span6 { + width: 48.93617020799999%; } -.row-fluid .span9 { - width: 74.468085099%; +.row-fluid > .span5 { + width: 40.425531911%; } -.row-fluid .span10 { - width: 82.97872339599999%; +.row-fluid > .span4 { + width: 31.914893614%; } -.row-fluid .span11 { - width: 91.489361693%; +.row-fluid > .span3 { + width: 23.404255317%; } -.row-fluid .span12 { - width: 99.99999998999999%; +.row-fluid > .span2 { + width: 14.89361702%; +} +.row-fluid > .span1 { + width: 6.382978723%; } .container { - width: 940px; margin-left: auto; margin-right: auto; *zoom: 1; } -.container:before, .container:after { +.container:before, +.container:after { display: table; content: ""; } @@ -266,7 +312,8 @@ a:hover { padding-right: 20px; *zoom: 1; } -.container-fluid:before, .container-fluid:after { +.container-fluid:before, +.container-fluid:after { display: table; content: ""; } @@ -296,8 +343,9 @@ h4, h5, h6 { margin: 0; + font-family: inherit; font-weight: bold; - color: #333333; + color: inherit; text-rendering: optimizelegibility; } h1 small, @@ -330,7 +378,9 @@ h3 { h3 small { font-size: 14px; } -h4, h5, h6 { +h4, +h5, +h6 { line-height: 18px; } h4 { @@ -355,7 +405,8 @@ h6 { .page-header h1 { line-height: 1; } -ul, ol { +ul, +ol { padding: 0; margin: 0 0 9px 25px; } @@ -374,26 +425,38 @@ ol { li { line-height: 18px; } -ul.unstyled { +ul.unstyled, +ol.unstyled { margin-left: 0; list-style: none; } dl { margin-bottom: 18px; } -dt, dd { +dt, +dd { line-height: 18px; } dt { font-weight: bold; + line-height: 17px; } dd { margin-left: 9px; } +.dl-horizontal dt { + float: left; + clear: left; + width: 120px; + text-align: right; +} +.dl-horizontal dd { + margin-left: 130px; +} hr { margin: 18px 0; border: 0; - border-top: 1px solid #e5e5e5; + border-top: 1px solid #eeeeee; border-bottom: 1px solid #ffffff; } strong { @@ -405,12 +468,14 @@ em { .muted { color: #999999; } -abbr { - font-size: 90%; - text-transform: uppercase; +abbr[title] { border-bottom: 1px dotted #ddd; cursor: help; } +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} blockquote { padding: 0 0 0 15px; margin: 0 0 18px; @@ -437,7 +502,8 @@ blockquote.pull-right { border-left: 0; border-right: 5px solid #eeeeee; } -blockquote.pull-right p, blockquote.pull-right small { +blockquote.pull-right p, +blockquote.pull-right small { text-align: right; } q:before, @@ -458,7 +524,8 @@ small { cite { font-style: normal; } -code, pre { +code, +pre { padding: 0 3px 2px; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; @@ -468,7 +535,7 @@ code, pre { border-radius: 3px; } code { - padding: 3px 4px; + padding: 2px 4px; color: #d14; background-color: #f7f7f9; border: 1px solid #e1e1e8; @@ -477,7 +544,7 @@ pre { display: block; padding: 8.5px; margin: 0 0 9px; - font-size: 12px; + font-size: 12.025px; line-height: 18px; background-color: #f5f5f5; border: 1px solid #ccc; @@ -488,13 +555,20 @@ pre { white-space: pre; white-space: pre-wrap; word-break: break-all; + word-wrap: break-word; } pre.prettyprint { margin-bottom: 18px; } pre code { padding: 0; + color: inherit; background-color: transparent; + border: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; } form { margin: 0 0 18px; @@ -515,16 +589,25 @@ legend { border: 0; border-bottom: 1px solid #eee; } +legend small { + font-size: 13.5px; + color: #999999; +} label, input, button, select, textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 13px; font-weight: normal; line-height: 18px; } +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; +} label { display: block; margin-bottom: 5px; @@ -542,7 +625,7 @@ select, font-size: 13px; line-height: 18px; color: #555555; - border: 1px solid #ccc; + border: 1px solid #cccccc; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; @@ -551,10 +634,14 @@ select, width: auto; height: auto; } -label input, label textarea, label select { +label input, +label textarea, +label select { display: block; } -input[type="image"], input[type="checkbox"], input[type="radio"] { +input[type="image"], +input[type="checkbox"], +input[type="radio"] { width: auto; height: auto; padding: 0; @@ -563,11 +650,19 @@ input[type="image"], input[type="checkbox"], input[type="radio"] { /* IE7 */ line-height: normal; - border: 0; cursor: pointer; - border-radius: 0 \0/; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + border: 0 \9; + /* IE9 and down */ + +} +input[type="image"] { + border: 0; } input[type="file"] { + width: auto; padding: initial; line-height: initial; border: initial; @@ -577,11 +672,14 @@ input[type="file"] { -moz-box-shadow: none; box-shadow: none; } -input[type="button"], input[type="reset"], input[type="submit"] { +input[type="button"], +input[type="reset"], +input[type="submit"] { width: auto; height: auto; } -select, input[type="file"] { +select, +input[type="file"] { height: 28px; /* In IE7, the height of the select element cannot be changed by height, only font-size */ @@ -590,11 +688,15 @@ select, input[type="file"] { line-height: 28px; } +input[type="file"] { + line-height: 18px \9; +} select { width: 220px; background-color: #ffffff; } -select[multiple], select[size] { +select[multiple], +select[size] { height: auto; } input[type="image"] { @@ -608,28 +710,32 @@ textarea { input[type="hidden"] { display: none; } -.radio, .checkbox { +.radio, +.checkbox { padding-left: 18px; } -.radio input[type="radio"], .checkbox input[type="checkbox"] { +.radio input[type="radio"], +.checkbox input[type="checkbox"] { float: left; margin-left: -18px; } -.controls > .radio:first-child, .controls > .checkbox:first-child { +.controls > .radio:first-child, +.controls > .checkbox:first-child { padding-top: 5px; } -.radio.inline, .checkbox.inline { +.radio.inline, +.checkbox.inline { display: inline-block; + padding-top: 5px; margin-bottom: 0; vertical-align: middle; } -.radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline { +.radio.inline + .radio.inline, +.checkbox.inline + .checkbox.inline { margin-left: 10px; } -.controls > .radio.inline:first-child, .controls > .checkbox.inline:first-child { - padding-top: 0; -} -input, textarea { +input, +textarea { -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); @@ -639,21 +745,25 @@ input, textarea { -o-transition: border linear 0.2s, box-shadow linear 0.2s; transition: border linear 0.2s, box-shadow linear 0.2s; } -input:focus, textarea:focus { +input:focus, +textarea:focus { border-color: rgba(82, 168, 236, 0.8); -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); outline: 0; outline: thin dotted \9; - /* IE6-8 */ + /* IE6-9 */ } -input[type="file"]:focus, input[type="checkbox"]:focus, select:focus { +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus, +select:focus { -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; - outline: thin dotted; + outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } @@ -682,41 +792,46 @@ textarea[class*="span"], float: none; margin-left: 0; } -input.span1, textarea.span1, .uneditable-input.span1 { - width: 50px; +input, +textarea, +.uneditable-input { + margin-left: 0; } -input.span2, textarea.span2, .uneditable-input.span2 { - width: 130px; +input.span12, textarea.span12, .uneditable-input.span12 { + width: 930px; } -input.span3, textarea.span3, .uneditable-input.span3 { - width: 210px; +input.span11, textarea.span11, .uneditable-input.span11 { + width: 850px; } -input.span4, textarea.span4, .uneditable-input.span4 { - width: 290px; +input.span10, textarea.span10, .uneditable-input.span10 { + width: 770px; } -input.span5, textarea.span5, .uneditable-input.span5 { - width: 370px; +input.span9, textarea.span9, .uneditable-input.span9 { + width: 690px; } -input.span6, textarea.span6, .uneditable-input.span6 { - width: 450px; +input.span8, textarea.span8, .uneditable-input.span8 { + width: 610px; } input.span7, textarea.span7, .uneditable-input.span7 { width: 530px; } -input.span8, textarea.span8, .uneditable-input.span8 { - width: 610px; +input.span6, textarea.span6, .uneditable-input.span6 { + width: 450px; } -input.span9, textarea.span9, .uneditable-input.span9 { - width: 690px; +input.span5, textarea.span5, .uneditable-input.span5 { + width: 370px; } -input.span10, textarea.span10, .uneditable-input.span10 { - width: 770px; +input.span4, textarea.span4, .uneditable-input.span4 { + width: 290px; } -input.span11, textarea.span11, .uneditable-input.span11 { - width: 850px; +input.span3, textarea.span3, .uneditable-input.span3 { + width: 210px; } -input.span12, textarea.span12, .uneditable-input.span12 { - width: 930px; +input.span2, textarea.span2, .uneditable-input.span2 { + width: 130px; +} +input.span1, textarea.span1, .uneditable-input.span1 { + width: 50px; } input[disabled], select[disabled], @@ -724,69 +839,94 @@ textarea[disabled], input[readonly], select[readonly], textarea[readonly] { - background-color: #f5f5f5; + background-color: #eeeeee; border-color: #ddd; cursor: not-allowed; } -.control-group.warning > label, .control-group.warning .help-block, .control-group.warning .help-inline { +.control-group.warning > label, +.control-group.warning .help-block, +.control-group.warning .help-inline { color: #c09853; } -.control-group.warning input, .control-group.warning select, .control-group.warning textarea { +.control-group.warning input, +.control-group.warning select, +.control-group.warning textarea { color: #c09853; border-color: #c09853; } -.control-group.warning input:focus, .control-group.warning select:focus, .control-group.warning textarea:focus { +.control-group.warning input:focus, +.control-group.warning select:focus, +.control-group.warning textarea:focus { border-color: #a47e3c; -webkit-box-shadow: 0 0 6px #dbc59e; -moz-box-shadow: 0 0 6px #dbc59e; box-shadow: 0 0 6px #dbc59e; } -.control-group.warning .input-prepend .add-on, .control-group.warning .input-append .add-on { +.control-group.warning .input-prepend .add-on, +.control-group.warning .input-append .add-on { color: #c09853; background-color: #fcf8e3; border-color: #c09853; } -.control-group.error > label, .control-group.error .help-block, .control-group.error .help-inline { +.control-group.error > label, +.control-group.error .help-block, +.control-group.error .help-inline { color: #b94a48; } -.control-group.error input, .control-group.error select, .control-group.error textarea { +.control-group.error input, +.control-group.error select, +.control-group.error textarea { color: #b94a48; border-color: #b94a48; } -.control-group.error input:focus, .control-group.error select:focus, .control-group.error textarea:focus { +.control-group.error input:focus, +.control-group.error select:focus, +.control-group.error textarea:focus { border-color: #953b39; -webkit-box-shadow: 0 0 6px #d59392; -moz-box-shadow: 0 0 6px #d59392; box-shadow: 0 0 6px #d59392; } -.control-group.error .input-prepend .add-on, .control-group.error .input-append .add-on { +.control-group.error .input-prepend .add-on, +.control-group.error .input-append .add-on { color: #b94a48; background-color: #f2dede; border-color: #b94a48; } -.control-group.success > label, .control-group.success .help-block, .control-group.success .help-inline { +.control-group.success > label, +.control-group.success .help-block, +.control-group.success .help-inline { color: #468847; } -.control-group.success input, .control-group.success select, .control-group.success textarea { +.control-group.success input, +.control-group.success select, +.control-group.success textarea { color: #468847; border-color: #468847; } -.control-group.success input:focus, .control-group.success select:focus, .control-group.success textarea:focus { +.control-group.success input:focus, +.control-group.success select:focus, +.control-group.success textarea:focus { border-color: #356635; -webkit-box-shadow: 0 0 6px #7aba7b; -moz-box-shadow: 0 0 6px #7aba7b; box-shadow: 0 0 6px #7aba7b; } -.control-group.success .input-prepend .add-on, .control-group.success .input-append .add-on { +.control-group.success .input-prepend .add-on, +.control-group.success .input-append .add-on { color: #468847; background-color: #dff0d8; border-color: #468847; } -input:focus:required:invalid, textarea:focus:required:invalid, select:focus:required:invalid { +input:focus:required:invalid, +textarea:focus:required:invalid, +select:focus:required:invalid { color: #b94a48; border-color: #ee5f5b; } -input:focus:required:invalid:focus, textarea:focus:required:invalid:focus, select:focus:required:invalid:focus { +input:focus:required:invalid:focus, +textarea:focus:required:invalid:focus, +select:focus:required:invalid:focus { border-color: #e9322d; -webkit-box-shadow: 0 0 6px #f8b9b7; -moz-box-shadow: 0 0 6px #f8b9b7; @@ -796,8 +936,17 @@ input:focus:required:invalid:focus, textarea:focus:required:invalid:focus, selec padding: 17px 20px 18px; margin-top: 18px; margin-bottom: 18px; - background-color: #f5f5f5; + background-color: #eeeeee; border-top: 1px solid #ddd; + *zoom: 1; +} +.form-actions:before, +.form-actions:after { + display: table; + content: ""; +} +.form-actions:after { + clear: both; } .uneditable-input { display: block; @@ -814,10 +963,13 @@ input:focus:required:invalid:focus, textarea:focus:required:invalid:focus, selec ::-webkit-input-placeholder { color: #999999; } +.help-block, +.help-inline { + color: #555555; +} .help-block { - margin-top: 5px; - margin-bottom: 0; - color: #999999; + display: block; + margin-bottom: 9px; } .help-inline { display: inline-block; @@ -825,91 +977,106 @@ input:focus:required:invalid:focus, textarea:focus:required:invalid:focus, selec /* IE7 inline-block hack */ *zoom: 1; - margin-bottom: 9px; vertical-align: middle; padding-left: 5px; } -.input-prepend, .input-append { +.input-prepend, +.input-append { margin-bottom: 5px; - *zoom: 1; -} -.input-prepend:before, -.input-append:before, -.input-prepend:after, -.input-append:after { - display: table; - content: ""; -} -.input-prepend:after, .input-append:after { - clear: both; } .input-prepend input, .input-append input, +.input-prepend select, +.input-append select, .input-prepend .uneditable-input, .input-append .uneditable-input { + *margin-left: 0; -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } .input-prepend input:focus, .input-append input:focus, +.input-prepend select:focus, +.input-append select:focus, .input-prepend .uneditable-input:focus, .input-append .uneditable-input:focus { position: relative; z-index: 2; } -.input-prepend .uneditable-input, .input-append .uneditable-input { +.input-prepend .uneditable-input, +.input-append .uneditable-input { border-left-color: #ccc; } -.input-prepend .add-on, .input-append .add-on { - float: left; - display: block; +.input-prepend .add-on, +.input-append .add-on { + display: inline-block; width: auto; min-width: 16px; height: 18px; - margin-right: -1px; padding: 4px 5px; font-weight: normal; line-height: 18px; - color: #999999; text-align: center; text-shadow: 0 1px 0 #ffffff; - background-color: #f5f5f5; + vertical-align: middle; + background-color: #eeeeee; border: 1px solid #ccc; +} +.input-prepend .add-on, +.input-append .add-on, +.input-prepend .btn, +.input-append .btn { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } -.input-prepend .active, .input-append .active { +.input-prepend .active, +.input-append .active { background-color: #a9dba9; border-color: #46a546; } -.input-prepend .add-on { - *margin-top: 1px; - /* IE6-7 */ - +.input-prepend .add-on, +.input-prepend .btn { + margin-right: -1px; } -.input-append input, .input-append .uneditable-input { - float: left; +.input-append input, +.input-append select .uneditable-input { -webkit-border-radius: 3px 0 0 3px; -moz-border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px; } .input-append .uneditable-input { + border-left-color: #eee; border-right-color: #ccc; } -.input-append .add-on { - margin-right: 0; +.input-append .add-on, +.input-append .btn { margin-left: -1px; -webkit-border-radius: 0 3px 3px 0; -moz-border-radius: 0 3px 3px 0; border-radius: 0 3px 3px 0; } -.input-append input:first-child { - *margin-left: -160px; +.input-prepend.input-append input, +.input-prepend.input-append select, +.input-prepend.input-append .uneditable-input { + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; } -.input-append input:first-child + .add-on { - *margin-left: -21px; +.input-prepend.input-append .add-on:first-child, +.input-prepend.input-append .btn:first-child { + margin-right: -1px; + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} +.input-prepend.input-append .add-on:last-child, +.input-prepend.input-append .btn:last-child { + margin-left: -1px; + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; } .search-query { padding-left: 14px; @@ -933,28 +1100,51 @@ input:focus:required:invalid:focus, textarea:focus:required:invalid:focus, selec .form-horizontal .help-inline, .form-search .uneditable-input, .form-inline .uneditable-input, -.form-horizontal .uneditable-input { +.form-horizontal .uneditable-input, +.form-search .input-prepend, +.form-inline .input-prepend, +.form-horizontal .input-prepend, +.form-search .input-append, +.form-inline .input-append, +.form-horizontal .input-append { display: inline-block; margin-bottom: 0; } +.form-search .hide, +.form-inline .hide, +.form-horizontal .hide { + display: none; +} .form-search label, -.form-inline label, +.form-inline label { + display: inline-block; +} .form-search .input-append, .form-inline .input-append, .form-search .input-prepend, .form-inline .input-prepend { - display: inline-block; + margin-bottom: 0; } -.form-search .input-append .add-on, -.form-inline .input-prepend .add-on, -.form-search .input-append .add-on, -.form-inline .input-prepend .add-on { +.form-search .radio, +.form-search .checkbox, +.form-inline .radio, +.form-inline .checkbox { + padding-left: 0; + margin-bottom: 0; vertical-align: middle; } +.form-search .radio input[type="radio"], +.form-search .checkbox input[type="checkbox"], +.form-inline .radio input[type="radio"], +.form-inline .checkbox input[type="checkbox"] { + float: left; + margin-left: 0; + margin-right: 3px; +} .control-group { margin-bottom: 9px; } -.form-horizontal legend + .control-group { +legend + .control-group { margin-top: 18px; -webkit-margin-top-collapse: separate; } @@ -962,14 +1152,15 @@ input:focus:required:invalid:focus, textarea:focus:required:invalid:focus, selec margin-bottom: 18px; *zoom: 1; } -.form-horizontal .control-group:before, .form-horizontal .control-group:after { +.form-horizontal .control-group:before, +.form-horizontal .control-group:after { display: table; content: ""; } .form-horizontal .control-group:after { clear: both; } -.form-horizontal .control-group > label { +.form-horizontal .control-label { float: left; width: 140px; padding-top: 5px; @@ -977,6 +1168,15 @@ input:focus:required:invalid:focus, textarea:focus:required:invalid:focus, selec } .form-horizontal .controls { margin-left: 160px; + /* Super jank IE7 fix to ensure the inputs in .input-append and input-prepend don't inherit the margin of the parent, in this case .controls */ + + *display: inline-block; + *margin-left: 0; + *padding-left: 20px; +} +.form-horizontal .help-block { + margin-top: 9px; + margin-bottom: 0; } .form-horizontal .form-actions { padding-left: 160px; @@ -985,73 +1185,89 @@ table { max-width: 100%; border-collapse: collapse; border-spacing: 0; + background-color: transparent; } .table { width: 100%; margin-bottom: 18px; } -.table th, .table td { +.table th, +.table td { padding: 8px; line-height: 18px; text-align: left; - border-top: 1px solid #ddd; + vertical-align: top; + border-top: 1px solid #dddddd; } .table th { font-weight: bold; - vertical-align: bottom; } -.table td { - vertical-align: top; +.table thead th { + vertical-align: bottom; } -.table thead:first-child tr th, .table thead:first-child tr td { +.table colgroup + thead tr:first-child th, +.table colgroup + thead tr:first-child td, +.table thead:first-child tr:first-child th, +.table thead:first-child tr:first-child td { border-top: 0; } .table tbody + tbody { - border-top: 2px solid #ddd; + border-top: 2px solid #dddddd; } -.table-condensed th, .table-condensed td { +.table-condensed th, +.table-condensed td { padding: 4px 5px; } .table-bordered { - border: 1px solid #ddd; + border: 1px solid #dddddd; + border-left: 0; border-collapse: separate; *border-collapse: collapsed; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } -.table-bordered th + th, -.table-bordered td + td, -.table-bordered th + td, -.table-bordered td + th { - border-left: 1px solid #ddd; +.table-bordered th, +.table-bordered td { + border-left: 1px solid #dddddd; } -.table-bordered thead:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child td { +.table-bordered thead:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child th, +.table-bordered tbody:first-child tr:first-child td { border-top: 0; } -.table-bordered thead:first-child tr:first-child th:first-child, .table-bordered tbody:first-child tr:first-child td:first-child { +.table-bordered thead:first-child tr:first-child th:first-child, +.table-bordered tbody:first-child tr:first-child td:first-child { -webkit-border-radius: 4px 0 0 0; -moz-border-radius: 4px 0 0 0; border-radius: 4px 0 0 0; } -.table-bordered thead:first-child tr:first-child th:last-child, .table-bordered tbody:first-child tr:first-child td:last-child { +.table-bordered thead:first-child tr:first-child th:last-child, +.table-bordered tbody:first-child tr:first-child td:last-child { -webkit-border-radius: 0 4px 0 0; -moz-border-radius: 0 4px 0 0; border-radius: 0 4px 0 0; } -.table-bordered thead:last-child tr:last-child th:first-child, .table-bordered tbody:last-child tr:last-child td:first-child { +.table-bordered thead:last-child tr:last-child th:first-child, +.table-bordered tbody:last-child tr:last-child td:first-child { -webkit-border-radius: 0 0 0 4px; -moz-border-radius: 0 0 0 4px; border-radius: 0 0 0 4px; } -.table-bordered thead:last-child tr:last-child th:last-child, .table-bordered tbody:last-child tr:last-child td:last-child { +.table-bordered thead:last-child tr:last-child th:last-child, +.table-bordered tbody:last-child tr:last-child td:last-child { -webkit-border-radius: 0 0 4px 0; -moz-border-radius: 0 0 4px 0; border-radius: 0 0 4px 0; } -.table-striped tbody tr:nth-child(odd) td, .table-striped tbody tr:nth-child(odd) th { +.table-striped tbody tr:nth-child(odd) td, +.table-striped tbody tr:nth-child(odd) th { background-color: #f9f9f9; } +.table tbody tr:hover td, +.table tbody tr:hover th { + background-color: #f5f5f5; +} table .span1 { float: none; width: 44px; @@ -1112,21 +1328,84 @@ table .span12 { width: 924px; margin-left: 0; } -[class^="icon-"] { +table .span13 { + float: none; + width: 1004px; + margin-left: 0; +} +table .span14 { + float: none; + width: 1084px; + margin-left: 0; +} +table .span15 { + float: none; + width: 1164px; + margin-left: 0; +} +table .span16 { + float: none; + width: 1244px; + margin-left: 0; +} +table .span17 { + float: none; + width: 1324px; + margin-left: 0; +} +table .span18 { + float: none; + width: 1404px; + margin-left: 0; +} +table .span19 { + float: none; + width: 1484px; + margin-left: 0; +} +table .span20 { + float: none; + width: 1564px; + margin-left: 0; +} +table .span21 { + float: none; + width: 1644px; + margin-left: 0; +} +table .span22 { + float: none; + width: 1724px; + margin-left: 0; +} +table .span23 { + float: none; + width: 1804px; + margin-left: 0; +} +table .span24 { + float: none; + width: 1884px; + margin-left: 0; +} +[class^="icon-"], +[class*=" icon-"] { display: inline-block; width: 14px; height: 14px; + line-height: 14px; vertical-align: text-top; - background-image: url(../img/glyphicons-halflings.png); + background-image: url("../img/glyphicons-halflings.png"); background-position: 14px 14px; background-repeat: no-repeat; *margin-right: .3em; } -[class^="icon-"]:last-child { +[class^="icon-"]:last-child, +[class*=" icon-"]:last-child { *margin-left: 0; } .icon-white { - background-image: url(../img/glyphicons-halflings-white.png); + background-image: url("../img/glyphicons-halflings-white.png"); } .icon-glass { background-position: 0 0; @@ -1494,28 +1773,28 @@ table .span12 { .dropdown-toggle { *margin-bottom: -3px; } -.dropdown-toggle:active, .open .dropdown-toggle { +.dropdown-toggle:active, +.open .dropdown-toggle { outline: 0; } .caret { display: inline-block; width: 0; height: 0; - text-indent: -99999px; - *text-indent: 0; vertical-align: top; border-left: 4px solid transparent; border-right: 4px solid transparent; border-top: 4px solid #000000; opacity: 0.3; filter: alpha(opacity=30); - content: "\2193"; + content: ""; } .dropdown .caret { margin-top: 8px; margin-left: 2px; } -.dropdown:hover .caret, .open.dropdown .caret { +.dropdown:hover .caret, +.open.dropdown .caret { opacity: 1; filter: alpha(opacity=100); } @@ -1527,8 +1806,6 @@ table .span12 { float: left; display: none; min-width: 160px; - max-width: 220px; - _width: 160px; padding: 4px 0; margin: 0; list-style: none; @@ -1549,14 +1826,13 @@ table .span12 { *border-right-width: 2px; *border-bottom-width: 2px; } -.dropdown-menu.bottom-up { - top: auto; - bottom: 100%; - margin-bottom: 2px; +.dropdown-menu.pull-right { + right: 0; + left: auto; } .dropdown-menu .divider { height: 1px; - margin: 5px 1px; + margin: 8px 1px; overflow: hidden; background-color: #e5e5e5; border-bottom: 1px solid #ffffff; @@ -1569,10 +1845,12 @@ table .span12 { clear: both; font-weight: normal; line-height: 18px; - color: #555555; + color: #333333; white-space: nowrap; } -.dropdown-menu li > a:hover, .dropdown-menu .active > a, .dropdown-menu .active > a:hover { +.dropdown-menu li > a:hover, +.dropdown-menu .active > a, +.dropdown-menu .active > a:hover { color: #ffffff; text-decoration: none; background-color: #0088cc; @@ -1588,6 +1866,22 @@ table .span12 { .dropdown.open .dropdown-menu { display: block; } +.pull-right .dropdown-menu { + left: auto; + right: 0; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid #000000; + content: "\2191"; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} .typeahead { margin-top: 2px; -webkit-border-radius: 4px; @@ -1612,6 +1906,18 @@ table .span12 { border-color: #ddd; border-color: rgba(0, 0, 0, 0.15); } +.well-large { + padding: 24px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.well-small { + padding: 9px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} .fade { -webkit-transition: opacity 0.15s linear; -moz-transition: opacity 0.15s linear; @@ -1655,23 +1961,32 @@ table .span12 { } .btn { display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; padding: 4px 10px 4px; + margin-bottom: 0; font-size: 13px; line-height: 18px; color: #333333; text-align: center; text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - background-color: #fafafa; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-repeat: no-repeat; + vertical-align: middle; + background-color: #f5f5f5; + background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); + background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); + background-image: linear-gradient(top, #ffffff, #e6e6e6); + background-repeat: repeat-x; filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); - border: 1px solid #ccc; - border-bottom-color: #bbb; + border-color: #e6e6e6 #e6e6e6 #bfbfbf; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); + border: 1px solid #cccccc; + border-bottom-color: #b3b3b3; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; @@ -1681,6 +1996,17 @@ table .span12 { cursor: pointer; *margin-left: .3em; } +.btn:hover, +.btn:active, +.btn.active, +.btn.disabled, +.btn[disabled] { + background-color: #e6e6e6; +} +.btn:active, +.btn.active { + background-color: #cccccc \9; +} .btn:first-child { *margin-left: 0; } @@ -1696,21 +2022,22 @@ table .span12 { transition: background-position 0.1s linear; } .btn:focus { - outline: thin dotted; + outline: thin dotted #333; outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } -.btn.active, .btn:active { +.btn.active, +.btn:active { background-image: none; -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); background-color: #e6e6e6; background-color: #d9d9d9 \9; - color: rgba(0, 0, 0, 0.5); outline: 0; } -.btn.disabled, .btn[disabled] { +.btn.disabled, +.btn[disabled] { cursor: default; background-image: none; background-color: #e6e6e6; @@ -1728,7 +2055,7 @@ table .span12 { -moz-border-radius: 5px; border-radius: 5px; } -.btn-large .icon { +.btn-large [class^="icon-"] { margin-top: 1px; } .btn-small { @@ -1736,9 +2063,14 @@ table .span12 { font-size: 11px; line-height: 16px; } -.btn-small .icon { +.btn-small [class^="icon-"] { margin-top: -1px; } +.btn-mini { + padding: 2px 6px; + font-size: 11px; + line-height: 14px; +} .btn-primary, .btn-primary:hover, .btn-warning, @@ -1748,7 +2080,9 @@ table .span12 { .btn-success, .btn-success:hover, .btn-info, -.btn-info:hover { +.btn-info:hover, +.btn-inverse, +.btn-inverse:hover { text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); color: #ffffff; } @@ -1756,32 +2090,34 @@ table .span12 { .btn-warning.active, .btn-danger.active, .btn-success.active, -.btn-info.active { +.btn-info.active, +.btn-inverse.active { color: rgba(255, 255, 255, 0.75); } .btn-primary { - background-color: #006dcc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -ms-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(top, #0088cc, #0044cc); + background-color: #0074cc; + background-image: -moz-linear-gradient(top, #0088cc, #0055cc); + background-image: -ms-linear-gradient(top, #0088cc, #0055cc); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc)); + background-image: -webkit-linear-gradient(top, #0088cc, #0055cc); + background-image: -o-linear-gradient(top, #0088cc, #0055cc); + background-image: linear-gradient(top, #0088cc, #0055cc); background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); - border-color: #0044cc #0044cc #002a80; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0055cc', GradientType=0); + border-color: #0055cc #0055cc #003580; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); } .btn-primary:hover, .btn-primary:active, .btn-primary.active, .btn-primary.disabled, .btn-primary[disabled] { - background-color: #0044cc; + background-color: #0055cc; } -.btn-primary:active, .btn-primary.active { - background-color: #003399 \9; +.btn-primary:active, +.btn-primary.active { + background-color: #004099 \9; } .btn-warning { background-color: #faa732; @@ -1795,7 +2131,7 @@ table .span12 { filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0); border-color: #f89406 #f89406 #ad6704; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); } .btn-warning:hover, .btn-warning:active, @@ -1804,7 +2140,8 @@ table .span12 { .btn-warning[disabled] { background-color: #f89406; } -.btn-warning:active, .btn-warning.active { +.btn-warning:active, +.btn-warning.active { background-color: #c67605 \9; } .btn-danger { @@ -1819,7 +2156,7 @@ table .span12 { filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0); border-color: #bd362f #bd362f #802420; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); } .btn-danger:hover, .btn-danger:active, @@ -1828,7 +2165,8 @@ table .span12 { .btn-danger[disabled] { background-color: #bd362f; } -.btn-danger:active, .btn-danger.active { +.btn-danger:active, +.btn-danger.active { background-color: #942a25 \9; } .btn-success { @@ -1843,7 +2181,7 @@ table .span12 { filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0); border-color: #51a351 #51a351 #387038; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); } .btn-success:hover, .btn-success:active, @@ -1852,7 +2190,8 @@ table .span12 { .btn-success[disabled] { background-color: #51a351; } -.btn-success:active, .btn-success.active { +.btn-success:active, +.btn-success.active { background-color: #408140 \9; } .btn-info { @@ -1867,7 +2206,7 @@ table .span12 { filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0); border-color: #2f96b4 #2f96b4 #1f6377; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); } .btn-info:hover, .btn-info:active, @@ -1876,31 +2215,67 @@ table .span12 { .btn-info[disabled] { background-color: #2f96b4; } -.btn-info:active, .btn-info.active { +.btn-info:active, +.btn-info.active { background-color: #24748c \9; } -button.btn, input[type="submit"].btn { +.btn-inverse { + background-color: #414141; + background-image: -moz-linear-gradient(top, #555555, #222222); + background-image: -ms-linear-gradient(top, #555555, #222222); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222)); + background-image: -webkit-linear-gradient(top, #555555, #222222); + background-image: -o-linear-gradient(top, #555555, #222222); + background-image: linear-gradient(top, #555555, #222222); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0); + border-color: #222222 #222222 #000000; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); +} +.btn-inverse:hover, +.btn-inverse:active, +.btn-inverse.active, +.btn-inverse.disabled, +.btn-inverse[disabled] { + background-color: #222222; +} +.btn-inverse:active, +.btn-inverse.active { + background-color: #080808 \9; +} +button.btn, +input[type="submit"].btn { *padding-top: 2px; *padding-bottom: 2px; } -button.btn::-moz-focus-inner, input[type="submit"].btn::-moz-focus-inner { +button.btn::-moz-focus-inner, +input[type="submit"].btn::-moz-focus-inner { padding: 0; border: 0; } -button.btn.large, input[type="submit"].btn.large { +button.btn.btn-large, +input[type="submit"].btn.btn-large { *padding-top: 7px; *padding-bottom: 7px; } -button.btn.small, input[type="submit"].btn.small { +button.btn.btn-small, +input[type="submit"].btn.btn-small { *padding-top: 3px; *padding-bottom: 3px; } +button.btn.btn-mini, +input[type="submit"].btn.btn-mini { + *padding-top: 1px; + *padding-bottom: 1px; +} .btn-group { position: relative; *zoom: 1; *margin-left: .3em; } -.btn-group:before, .btn-group:after { +.btn-group:before, +.btn-group:after { display: table; content: ""; } @@ -1941,7 +2316,8 @@ button.btn.small, input[type="submit"].btn.small { -moz-border-radius-bottomleft: 4px; border-bottom-left-radius: 4px; } -.btn-group .btn:last-child, .btn-group .dropdown-toggle { +.btn-group .btn:last-child, +.btn-group .dropdown-toggle { -webkit-border-top-right-radius: 4px; -moz-border-radius-topright: 4px; border-top-right-radius: 4px; @@ -1958,7 +2334,8 @@ button.btn.small, input[type="submit"].btn.small { -moz-border-radius-bottomleft: 6px; border-bottom-left-radius: 6px; } -.btn-group .btn.large:last-child, .btn-group .large.dropdown-toggle { +.btn-group .btn.large:last-child, +.btn-group .large.dropdown-toggle { -webkit-border-top-right-radius: 6px; -moz-border-radius-topright: 6px; border-top-right-radius: 6px; @@ -1972,7 +2349,8 @@ button.btn.small, input[type="submit"].btn.small { .btn-group .btn.active { z-index: 2; } -.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { outline: 0; } .btn-group .dropdown-toggle { @@ -1981,8 +2359,22 @@ button.btn.small, input[type="submit"].btn.small { -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - *padding-top: 5px; - *padding-bottom: 5px; + *padding-top: 3px; + *padding-bottom: 3px; +} +.btn-group .btn-mini.dropdown-toggle { + padding-left: 5px; + padding-right: 5px; + *padding-top: 1px; + *padding-bottom: 1px; +} +.btn-group .btn-small.dropdown-toggle { + *padding-top: 4px; + *padding-bottom: 4px; +} +.btn-group .btn-large.dropdown-toggle { + padding-left: 12px; + padding-right: 12px; } .btn-group.open { *z-index: 1000; @@ -2004,21 +2396,34 @@ button.btn.small, input[type="submit"].btn.small { margin-top: 7px; margin-left: 0; } -.btn:hover .caret, .open.btn-group .caret { +.btn:hover .caret, +.open.btn-group .caret { opacity: 1; filter: alpha(opacity=100); } +.btn-mini .caret { + margin-top: 5px; +} +.btn-small .caret { + margin-top: 6px; +} +.btn-large .caret { + margin-top: 6px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #000000; +} .btn-primary .caret, +.btn-warning .caret, .btn-danger .caret, .btn-info .caret, -.btn-success .caret { +.btn-success .caret, +.btn-inverse .caret { border-top-color: #ffffff; + border-bottom-color: #ffffff; opacity: 0.75; filter: alpha(opacity=75); } -.btn-small .caret { - margin-top: 4px; -} .alert { padding: 8px 35px 8px 14px; margin-bottom: 18px; @@ -2028,10 +2433,11 @@ button.btn.small, input[type="submit"].btn.small { -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; -} -.alert, .alert-heading { color: #c09853; } +.alert-heading { + color: inherit; +} .alert .close { position: relative; top: -2px; @@ -2041,32 +2447,25 @@ button.btn.small, input[type="submit"].btn.small { .alert-success { background-color: #dff0d8; border-color: #d6e9c6; -} -.alert-success, .alert-success .alert-heading { color: #468847; } -.alert-danger, .alert-error { +.alert-danger, +.alert-error { background-color: #f2dede; border-color: #eed3d7; -} -.alert-danger, -.alert-error, -.alert-danger .alert-heading, -.alert-error .alert-heading { color: #b94a48; } .alert-info { background-color: #d9edf7; border-color: #bce8f1; -} -.alert-info, .alert-info .alert-heading { color: #3a87ad; } .alert-block { padding-top: 14px; padding-bottom: 14px; } -.alert-block > p, .alert-block > ul { +.alert-block > p, +.alert-block > ul { margin-bottom: 0; } .alert-block p + p { @@ -2084,37 +2483,53 @@ button.btn.small, input[type="submit"].btn.small { text-decoration: none; background-color: #eeeeee; } -.nav-list { - padding-left: 14px; - padding-right: 14px; - margin-bottom: 0; -} -.nav-list > li > a, .nav-list .nav-header { +.nav .nav-header { display: block; padding: 3px 15px; - margin-left: -15px; - margin-right: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} -.nav-list .nav-header { font-size: 11px; font-weight: bold; line-height: 18px; color: #999999; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); text-transform: uppercase; } -.nav-list > li + .nav-header { +.nav li + .nav-header { margin-top: 9px; } -.nav-list .active > a { +.nav-list { + padding-left: 15px; + padding-right: 15px; + margin-bottom: 0; +} +.nav-list > li > a, +.nav-list .nav-header { + margin-left: -15px; + margin-right: -15px; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} +.nav-list > li > a { + padding: 3px 15px; +} +.nav-list > .active > a, +.nav-list > .active > a:hover { color: #ffffff; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); background-color: #0088cc; } -.nav-list .icon { +.nav-list [class^="icon-"] { margin-right: 2px; } -.nav-tabs, .nav-pills { +.nav-list .divider { + height: 1px; + margin: 8px 1px; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; + *width: 100%; + *margin: -5px 0 5px; +} +.nav-tabs, +.nav-pills { *zoom: 1; } .nav-tabs:before, @@ -2124,13 +2539,16 @@ button.btn.small, input[type="submit"].btn.small { display: table; content: ""; } -.nav-tabs:after, .nav-pills:after { +.nav-tabs:after, +.nav-pills:after { clear: both; } -.nav-tabs > li, .nav-pills > li { +.nav-tabs > li, +.nav-pills > li { float: left; } -.nav-tabs > li > a, .nav-pills > li > a { +.nav-tabs > li > a, +.nav-pills > li > a { padding-right: 12px; padding-left: 12px; margin-right: 2px; @@ -2143,8 +2561,9 @@ button.btn.small, input[type="submit"].btn.small { margin-bottom: -1px; } .nav-tabs > li > a { - padding-top: 9px; - padding-bottom: 9px; + padding-top: 8px; + padding-bottom: 8px; + line-height: 18px; border: 1px solid transparent; -webkit-border-radius: 4px 4px 0 0; -moz-border-radius: 4px 4px 0 0; @@ -2153,7 +2572,8 @@ button.btn.small, input[type="submit"].btn.small { .nav-tabs > li > a:hover { border-color: #eeeeee #eeeeee #dddddd; } -.nav-tabs > .active > a, .nav-tabs > .active > a:hover { +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover { color: #555555; background-color: #ffffff; border: 1px solid #ddd; @@ -2169,7 +2589,8 @@ button.btn.small, input[type="submit"].btn.small { -moz-border-radius: 5px; border-radius: 5px; } -.nav-pills .active > a, .nav-pills .active > a:hover { +.nav-pills > .active > a, +.nav-pills > .active > a:hover { color: #ffffff; background-color: #0088cc; } @@ -2208,7 +2629,8 @@ button.btn.small, input[type="submit"].btn.small { .nav-pills.nav-stacked > li:last-child > a { margin-bottom: 1px; } -.nav-tabs .dropdown-menu, .nav-pills .dropdown-menu { +.nav-tabs .dropdown-menu, +.nav-pills .dropdown-menu { margin-top: 1px; border-width: 1px; } @@ -2217,27 +2639,38 @@ button.btn.small, input[type="submit"].btn.small { -moz-border-radius: 4px; border-radius: 4px; } -.nav-tabs .dropdown-toggle .caret, .nav-pills .dropdown-toggle .caret { +.nav-tabs .dropdown-toggle .caret, +.nav-pills .dropdown-toggle .caret { border-top-color: #0088cc; + border-bottom-color: #0088cc; margin-top: 6px; } -.nav-tabs .dropdown-toggle:hover .caret, .nav-pills .dropdown-toggle:hover .caret { +.nav-tabs .dropdown-toggle:hover .caret, +.nav-pills .dropdown-toggle:hover .caret { border-top-color: #005580; + border-bottom-color: #005580; } -.nav-tabs .active .dropdown-toggle .caret, .nav-pills .active .dropdown-toggle .caret { +.nav-tabs .active .dropdown-toggle .caret, +.nav-pills .active .dropdown-toggle .caret { border-top-color: #333333; + border-bottom-color: #333333; } .nav > .dropdown.active > a:hover { color: #000000; cursor: pointer; } -.nav-tabs .open .dropdown-toggle, .nav-pills .open .dropdown-toggle, .nav > .open.active > a:hover { +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > .open.active > a:hover { color: #ffffff; background-color: #999999; border-color: #999999; } -.nav .open .caret, .nav .open.active .caret, .nav .open a:hover .caret { +.nav .open .caret, +.nav .open.active .caret, +.nav .open a:hover .caret { border-top-color: #ffffff; + border-bottom-color: #ffffff; opacity: 1; filter: alpha(opacity=100); } @@ -2247,20 +2680,29 @@ button.btn.small, input[type="submit"].btn.small { .tabbable { *zoom: 1; } -.tabbable:before, .tabbable:after { +.tabbable:before, +.tabbable:after { display: table; content: ""; } .tabbable:after { clear: both; } -.tabs-below .nav-tabs, .tabs-right .nav-tabs, .tabs-left .nav-tabs { +.tab-content { + display: table; + width: 100%; +} +.tabs-below .nav-tabs, +.tabs-right .nav-tabs, +.tabs-left .nav-tabs { border-bottom: 0; } -.tab-content > .tab-pane, .pill-content > .pill-pane { +.tab-content > .tab-pane, +.pill-content > .pill-pane { display: none; } -.tab-content > .active, .pill-content > .active { +.tab-content > .active, +.pill-content > .active { display: block; } .tabs-below .nav-tabs { @@ -2279,13 +2721,16 @@ button.btn.small, input[type="submit"].btn.small { border-bottom-color: transparent; border-top-color: #ddd; } -.tabs-below .nav-tabs .active > a, .tabs-below .nav-tabs .active > a:hover { +.tabs-below .nav-tabs .active > a, +.tabs-below .nav-tabs .active > a:hover { border-color: transparent #ddd #ddd #ddd; } -.tabs-left .nav-tabs > li, .tabs-right .nav-tabs > li { +.tabs-left .nav-tabs > li, +.tabs-right .nav-tabs > li { float: none; } -.tabs-left .nav-tabs > li > a, .tabs-right .nav-tabs > li > a { +.tabs-left .nav-tabs > li > a, +.tabs-right .nav-tabs > li > a { min-width: 74px; margin-right: 0; margin-bottom: 3px; @@ -2304,7 +2749,8 @@ button.btn.small, input[type="submit"].btn.small { .tabs-left .nav-tabs > li > a:hover { border-color: #eeeeee #dddddd #eeeeee #eeeeee; } -.tabs-left .nav-tabs .active > a, .tabs-left .nav-tabs .active > a:hover { +.tabs-left .nav-tabs .active > a, +.tabs-left .nav-tabs .active > a:hover { border-color: #ddd transparent #ddd #ddd; *border-right-color: #ffffff; } @@ -2322,11 +2768,14 @@ button.btn.small, input[type="submit"].btn.small { .tabs-right .nav-tabs > li > a:hover { border-color: #eeeeee #eeeeee #eeeeee #dddddd; } -.tabs-right .nav-tabs .active > a, .tabs-right .nav-tabs .active > a:hover { +.tabs-right .nav-tabs .active > a, +.tabs-right .nav-tabs .active > a:hover { border-color: #ddd #ddd #ddd transparent; *border-left-color: #ffffff; } .navbar { + *position: relative; + *z-index: 2; overflow: visible; margin-bottom: 18px; } @@ -2349,6 +2798,9 @@ button.btn.small, input[type="submit"].btn.small { -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); } +.navbar .container { + width: auto; +} .btn-navbar { display: none; float: right; @@ -2366,7 +2818,7 @@ button.btn.small, input[type="submit"].btn.small { filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); border-color: #222222 #222222 #000000; border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: progid:dximagetransform.microsoft.gradient(enabled=false); -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); @@ -2378,7 +2830,8 @@ button.btn.small, input[type="submit"].btn.small { .btn-navbar[disabled] { background-color: #222222; } -.btn-navbar:active, .btn-navbar.active { +.btn-navbar:active, +.btn-navbar.active { background-color: #080808 \9; } .btn-navbar .icon-bar { @@ -2399,6 +2852,9 @@ button.btn.small, input[type="submit"].btn.small { .nav-collapse.collapse { height: auto; } +.navbar { + color: #999999; +} .navbar .brand:hover { text-decoration: none; } @@ -2415,13 +2871,9 @@ button.btn.small, input[type="submit"].btn.small { .navbar .navbar-text { margin-bottom: 0; line-height: 40px; - color: #999999; } -.navbar .navbar-text a:hover { - color: #ffffff; - background-color: transparent; -} -.navbar .btn, .navbar .btn-group { +.navbar .btn, +.navbar .btn-group { margin-top: 5px; } .navbar .btn-group .btn { @@ -2431,24 +2883,39 @@ button.btn.small, input[type="submit"].btn.small { margin-bottom: 0; *zoom: 1; } -.navbar-form:before, .navbar-form:after { +.navbar-form:before, +.navbar-form:after { display: table; content: ""; } .navbar-form:after { clear: both; } -.navbar-form input, .navbar-form select { - display: inline-block; +.navbar-form input, +.navbar-form select, +.navbar-form .radio, +.navbar-form .checkbox { margin-top: 5px; - margin-bottom: 0; } -.navbar-form .radio, .navbar-form .checkbox { - margin-top: 5px; +.navbar-form input, +.navbar-form select { + display: inline-block; + margin-bottom: 0; } -.navbar-form input[type="image"], .navbar-form input[type="checkbox"], .navbar-form input[type="radio"] { +.navbar-form input[type="image"], +.navbar-form input[type="checkbox"], +.navbar-form input[type="radio"] { margin-top: 3px; } +.navbar-form .input-append, +.navbar-form .input-prepend { + margin-top: 6px; + white-space: nowrap; +} +.navbar-form .input-append input, +.navbar-form .input-prepend input { + margin-top: 0; +} .navbar-search { position: relative; float: left; @@ -2462,10 +2929,8 @@ button.btn.small, input[type="submit"].btn.small { font-weight: normal; line-height: 1; color: #ffffff; - color: rgba(255, 255, 255, 0.75); - background: #666; - background: rgba(255, 255, 255, 0.3); - border: 1px solid #111; + background-color: #626262; + border: 1px solid #151515; -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15); -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15); box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15); @@ -2475,18 +2940,14 @@ button.btn.small, input[type="submit"].btn.small { -o-transition: none; transition: none; } -.navbar-search .search-query :-moz-placeholder { - color: #eeeeee; +.navbar-search .search-query:-moz-placeholder { + color: #cccccc; } .navbar-search .search-query::-webkit-input-placeholder { - color: #eeeeee; -} -.navbar-search .search-query:hover { - color: #ffffff; - background-color: #999999; - background-color: rgba(255, 255, 255, 0.5); + color: #cccccc; } -.navbar-search .search-query:focus, .navbar-search .search-query.focused { +.navbar-search .search-query:focus, +.navbar-search .search-query.focused { padding: 5px 10px; color: #333333; text-shadow: 0 1px 0 #ffffff; @@ -2497,20 +2958,32 @@ button.btn.small, input[type="submit"].btn.small { box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); outline: 0; } -.navbar-fixed-top { +.navbar-fixed-top, +.navbar-fixed-bottom { position: fixed; - top: 0; right: 0; left: 0; z-index: 1030; + margin-bottom: 0; } -.navbar-fixed-top .navbar-inner { +.navbar-fixed-top .navbar-inner, +.navbar-fixed-bottom .navbar-inner { padding-left: 0; padding-right: 0; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; } +.navbar-fixed-top .container, +.navbar-fixed-bottom .container { + width: 940px; +} +.navbar-fixed-top { + top: 0; +} +.navbar-fixed-bottom { + bottom: 0; +} .navbar .nav { position: relative; left: 0; @@ -2538,11 +3011,11 @@ button.btn.small, input[type="submit"].btn.small { color: #ffffff; text-decoration: none; } -.navbar .nav .active > a, .navbar .nav .active > a:hover { +.navbar .nav .active > a, +.navbar .nav .active > a:hover { color: #ffffff; text-decoration: none; background-color: #222222; - background-color: rgba(0, 0, 0, 0.5); } .navbar .divider-vertical { height: 40px; @@ -2583,34 +3056,55 @@ button.btn.small, input[type="submit"].btn.small { top: -6px; left: 10px; } -.navbar .nav .dropdown-toggle .caret, .navbar .nav .open.dropdown .caret { +.navbar-fixed-bottom .dropdown-menu:before { + border-top: 7px solid #ccc; + border-top-color: rgba(0, 0, 0, 0.2); + border-bottom: 0; + bottom: -7px; + top: auto; +} +.navbar-fixed-bottom .dropdown-menu:after { + border-top: 6px solid #ffffff; + border-bottom: 0; + bottom: -6px; + top: auto; +} +.navbar .nav .dropdown-toggle .caret, +.navbar .nav .open.dropdown .caret { border-top-color: #ffffff; + border-bottom-color: #ffffff; } .navbar .nav .active .caret { opacity: 1; filter: alpha(opacity=100); } -.navbar .nav .open > .dropdown-toggle, .navbar .nav .active > .dropdown-toggle, .navbar .nav .open.active > .dropdown-toggle { +.navbar .nav .open > .dropdown-toggle, +.navbar .nav .active > .dropdown-toggle, +.navbar .nav .open.active > .dropdown-toggle { background-color: transparent; } .navbar .nav .active > .dropdown-toggle:hover { color: #ffffff; } -.navbar .nav.pull-right .dropdown-menu { +.navbar .nav.pull-right .dropdown-menu, +.navbar .nav .dropdown-menu.pull-right { left: auto; right: 0; } -.navbar .nav.pull-right .dropdown-menu:before { +.navbar .nav.pull-right .dropdown-menu:before, +.navbar .nav .dropdown-menu.pull-right:before { left: auto; right: 12px; } -.navbar .nav.pull-right .dropdown-menu:after { +.navbar .nav.pull-right .dropdown-menu:after, +.navbar .nav .dropdown-menu.pull-right:after { left: auto; right: 13px; } .breadcrumb { padding: 7px 14px; margin: 0 0 18px; + list-style: none; background-color: #fbfbfb; background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5); @@ -2629,7 +3123,11 @@ button.btn.small, input[type="submit"].btn.small { box-shadow: inset 0 1px 0 #ffffff; } .breadcrumb li { - display: inline; + display: inline-block; + *display: inline; + /* IE7 inline-block hack */ + + *zoom: 1; text-shadow: 0 1px 0 #ffffff; } .breadcrumb .divider { @@ -2669,14 +3167,17 @@ button.btn.small, input[type="submit"].btn.small { border: 1px solid #ddd; border-left-width: 0; } -.pagination a:hover, .pagination .active a { +.pagination a:hover, +.pagination .active a { background-color: #f5f5f5; } .pagination .active a { color: #999999; cursor: default; } -.pagination .disabled a, .pagination .disabled a:hover { +.pagination .disabled span, +.pagination .disabled a, +.pagination .disabled a:hover { color: #999999; background-color: transparent; cursor: default; @@ -2705,7 +3206,8 @@ button.btn.small, input[type="submit"].btn.small { text-align: center; *zoom: 1; } -.pager:before, .pager:after { +.pager:before, +.pager:after { display: table; content: ""; } @@ -2734,6 +3236,12 @@ button.btn.small, input[type="submit"].btn.small { .pager .previous a { float: left; } +.pager .disabled a, +.pager .disabled a:hover { + color: #999999; + background-color: #fff; + cursor: default; +} .modal-open .dropdown-menu { z-index: 2050; } @@ -2758,7 +3266,8 @@ button.btn.small, input[type="submit"].btn.small { .modal-backdrop.fade { opacity: 0; } -.modal-backdrop, .modal-backdrop.fade.in { +.modal-backdrop, +.modal-backdrop.fade.in { opacity: 0.8; filter: alpha(opacity=80); } @@ -2767,7 +3276,6 @@ button.btn.small, input[type="submit"].btn.small { top: 50%; left: 50%; z-index: 1050; - max-height: 500px; overflow: auto; width: 560px; margin: -250px 0 0 -280px; @@ -2806,11 +3314,17 @@ button.btn.small, input[type="submit"].btn.small { margin-top: 2px; } .modal-body { + overflow-y: auto; + max-height: 400px; padding: 15px; } +.modal-form { + margin-bottom: 0; +} .modal-footer { padding: 14px 15px 15px; margin-bottom: 0; + text-align: right; background-color: #f5f5f5; border-top: 1px solid #ddd; -webkit-border-radius: 0 0 6px 6px; @@ -2821,18 +3335,21 @@ button.btn.small, input[type="submit"].btn.small { box-shadow: inset 0 1px 0 #ffffff; *zoom: 1; } -.modal-footer:before, .modal-footer:after { +.modal-footer:before, +.modal-footer:after { display: table; content: ""; } .modal-footer:after { clear: both; } -.modal-footer .btn { - float: right; +.modal-footer .btn + .btn { margin-left: 5px; margin-bottom: 0; } +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} .tooltip { position: absolute; z-index: 1020; @@ -2996,7 +3513,9 @@ button.btn.small, input[type="submit"].btn.small { -moz-background-clip: padding-box; background-clip: padding-box; } -.popover-content p, .popover-content ul, .popover-content ol { +.popover-content p, +.popover-content ul, +.popover-content ol { margin-bottom: 0; } .thumbnails { @@ -3004,7 +3523,8 @@ button.btn.small, input[type="submit"].btn.small { list-style: none; *zoom: 1; } -.thumbnails:before, .thumbnails:after { +.thumbnails:before, +.thumbnails:after { display: table; content: ""; } @@ -3043,28 +3563,99 @@ a.thumbnail:hover { padding: 9px; } .label { - padding: 1px 3px 2px; - font-size: 9.75px; + padding: 1px 4px 2px; + font-size: 10.998px; font-weight: bold; + line-height: 13px; color: #ffffff; - text-transform: uppercase; + vertical-align: middle; + white-space: nowrap; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); background-color: #999999; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; } +.label:hover { + color: #ffffff; + text-decoration: none; +} .label-important { background-color: #b94a48; } +.label-important:hover { + background-color: #953b39; +} .label-warning { background-color: #f89406; } +.label-warning:hover { + background-color: #c67605; +} .label-success { background-color: #468847; } +.label-success:hover { + background-color: #356635; +} .label-info { background-color: #3a87ad; } +.label-info:hover { + background-color: #2d6987; +} +.label-inverse { + background-color: #333333; +} +.label-inverse:hover { + background-color: #1a1a1a; +} +.badge { + padding: 1px 9px 2px; + font-size: 12.025px; + font-weight: bold; + white-space: nowrap; + color: #ffffff; + background-color: #999999; + -webkit-border-radius: 9px; + -moz-border-radius: 9px; + border-radius: 9px; +} +.badge:hover { + color: #ffffff; + text-decoration: none; + cursor: pointer; +} +.badge-error { + background-color: #b94a48; +} +.badge-error:hover { + background-color: #953b39; +} +.badge-warning { + background-color: #f89406; +} +.badge-warning:hover { + background-color: #c67605; +} +.badge-success { + background-color: #468847; +} +.badge-success:hover { + background-color: #356635; +} +.badge-info { + background-color: #3a87ad; +} +.badge-info:hover { + background-color: #2d6987; +} +.badge-inverse { + background-color: #333333; +} +.badge-inverse:hover { + background-color: #1a1a1a; +} @-webkit-keyframes progress-bar-stripes { from { background-position: 0 0; @@ -3081,6 +3672,14 @@ a.thumbnail:hover { background-position: 40px 0; } } +@-ms-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} @keyframes progress-bar-stripes { from { background-position: 0 0; @@ -3130,6 +3729,7 @@ a.thumbnail:hover { box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); -webkit-box-sizing: border-box; -moz-box-sizing: border-box; + -ms-box-sizing: border-box; box-sizing: border-box; -webkit-transition: width 0.6s ease; -moz-transition: width 0.6s ease; @@ -3138,7 +3738,7 @@ a.thumbnail:hover { transition: width 0.6s ease; } .progress-striped .bar { - background-color: #62c462; + background-color: #149bdf; background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); @@ -3215,6 +3815,26 @@ a.thumbnail:hover { background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } +.progress-warning .bar { + background-color: #faa732; + background-image: -moz-linear-gradient(top, #fbb450, #f89406); + background-image: -ms-linear-gradient(top, #fbb450, #f89406); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); + background-image: -webkit-linear-gradient(top, #fbb450, #f89406); + background-image: -o-linear-gradient(top, #fbb450, #f89406); + background-image: linear-gradient(top, #fbb450, #f89406); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0); +} +.progress-warning.progress-striped .bar { + background-color: #fbb450; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); +} .accordion { margin-bottom: 18px; } @@ -3259,13 +3879,16 @@ a.thumbnail:hover { display: block; line-height: 1; } -.carousel .active, .carousel .next, .carousel .prev { +.carousel .active, +.carousel .next, +.carousel .prev { display: block; } .carousel .active { left: 0; } -.carousel .next, .carousel .prev { +.carousel .next, +.carousel .prev { position: absolute; top: 0; width: 100%; @@ -3276,7 +3899,8 @@ a.thumbnail:hover { .carousel .prev { left: -100%; } -.carousel .next.left, .carousel .prev.right { +.carousel .next.left, +.carousel .prev.right { left: 0; } .carousel .active.left { @@ -3324,13 +3948,14 @@ a.thumbnail:hover { background: #333333; background: rgba(0, 0, 0, 0.75); } -.carousel-caption h4, .carousel-caption p { +.carousel-caption h4, +.carousel-caption p { color: #ffffff; } .hero-unit { padding: 60px; margin-bottom: 30px; - background-color: #f5f5f5; + background-color: #eeeeee; -webkit-border-radius: 6px; -moz-border-radius: 6px; border-radius: 6px; @@ -3339,12 +3964,14 @@ a.thumbnail:hover { margin-bottom: 0; font-size: 60px; line-height: 1; + color: inherit; letter-spacing: -1px; } .hero-unit p { font-size: 18px; font-weight: 200; line-height: 27px; + color: inherit; } .pull-right { float: right; diff --git a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0/css/bootstrap.min.css b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap.min.css similarity index 64% rename from documentation/website/source/_themes/opendylan/static/bootstrap/2.0/css/bootstrap.min.css rename to documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap.min.css index 5e1aee0948..c951467732 100644 --- a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0/css/bootstrap.min.css +++ b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap.min.css @@ -2,12 +2,12 @@ article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} audio:not([controls]){display:none;} html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} -a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} +a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} a:hover,a:active{outline:0;} sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;} sup{top:-0.5em;} sub{bottom:-0.25em;} -img{max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;} +img{height:auto;border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;} button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;} button,input{*overflow:visible;line-height:normal;} button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;} @@ -15,58 +15,64 @@ button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:poin input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;} input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;} textarea{overflow:auto;vertical-align:top;} +.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";} +.clearfix:after{clear:both;} +.hide-text{overflow:hidden;text-indent:100%;white-space:nowrap;} +.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;} body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#333333;background-color:#ffffff;} a{color:#0088cc;text-decoration:none;} a:hover{color:#005580;text-decoration:underline;} .row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:20px;} -.span1{width:60px;} -.span2{width:140px;} -.span3{width:220px;} -.span4{width:300px;} -.span5{width:380px;} -.span6{width:460px;} -.span7{width:540px;} -.span8{width:620px;} -.span9{width:700px;} -.span10{width:780px;} +.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} +.span12{width:940px;} .span11{width:860px;} -.span12,.container{width:940px;} -.offset1{margin-left:100px;} -.offset2{margin-left:180px;} -.offset3{margin-left:260px;} -.offset4{margin-left:340px;} -.offset5{margin-left:420px;} -.offset6{margin-left:500px;} -.offset7{margin-left:580px;} -.offset8{margin-left:660px;} -.offset9{margin-left:740px;} -.offset10{margin-left:820px;} +.span10{width:780px;} +.span9{width:700px;} +.span8{width:620px;} +.span7{width:540px;} +.span6{width:460px;} +.span5{width:380px;} +.span4{width:300px;} +.span3{width:220px;} +.span2{width:140px;} +.span1{width:60px;} +.offset12{margin-left:980px;} .offset11{margin-left:900px;} +.offset10{margin-left:820px;} +.offset9{margin-left:740px;} +.offset8{margin-left:660px;} +.offset7{margin-left:580px;} +.offset6{margin-left:500px;} +.offset5{margin-left:420px;} +.offset4{margin-left:340px;} +.offset3{margin-left:260px;} +.offset2{margin-left:180px;} +.offset1{margin-left:100px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.127659574%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} -.row-fluid .span1{width:6.382978723%;} -.row-fluid .span2{width:14.89361702%;} -.row-fluid .span3{width:23.404255317%;} -.row-fluid .span4{width:31.914893614%;} -.row-fluid .span5{width:40.425531911%;} -.row-fluid .span6{width:48.93617020799999%;} -.row-fluid .span7{width:57.446808505%;} -.row-fluid .span8{width:65.95744680199999%;} -.row-fluid .span9{width:74.468085099%;} -.row-fluid .span10{width:82.97872339599999%;} -.row-fluid .span11{width:91.489361693%;} -.row-fluid .span12{width:99.99999998999999%;} -.container{width:940px;margin-left:auto;margin-right:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";} +.row-fluid > .span12{width:99.99999998999999%;} +.row-fluid > .span11{width:91.489361693%;} +.row-fluid > .span10{width:82.97872339599999%;} +.row-fluid > .span9{width:74.468085099%;} +.row-fluid > .span8{width:65.95744680199999%;} +.row-fluid > .span7{width:57.446808505%;} +.row-fluid > .span6{width:48.93617020799999%;} +.row-fluid > .span5{width:40.425531911%;} +.row-fluid > .span4{width:31.914893614%;} +.row-fluid > .span3{width:23.404255317%;} +.row-fluid > .span2{width:14.89361702%;} +.row-fluid > .span1{width:6.382978723%;} +.container{margin-left:auto;margin-right:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";} .container:after{clear:both;} .container-fluid{padding-left:20px;padding-right:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";} .container-fluid:after{clear:both;} p{margin:0 0 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;}p small{font-size:11px;color:#999999;} .lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px;} -h1,h2,h3,h4,h5,h6{margin:0;font-weight:bold;color:#333333;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999999;} +h1,h2,h3,h4,h5,h6{margin:0;font-family:inherit;font-weight:bold;color:inherit;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999999;} h1{font-size:30px;line-height:36px;}h1 small{font-size:18px;} h2{font-size:24px;line-height:36px;}h2 small{font-size:18px;} h3{line-height:27px;font-size:18px;}h3 small{font-size:14px;} @@ -81,16 +87,19 @@ ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} ul{list-style:disc;} ol{list-style:decimal;} li{line-height:18px;} -ul.unstyled{margin-left:0;list-style:none;} +ul.unstyled,ol.unstyled{margin-left:0;list-style:none;} dl{margin-bottom:18px;} dt,dd{line-height:18px;} -dt{font-weight:bold;} +dt{font-weight:bold;line-height:17px;} dd{margin-left:9px;} -hr{margin:18px 0;border:0;border-top:1px solid #e5e5e5;border-bottom:1px solid #ffffff;} +.dl-horizontal dt{float:left;clear:left;width:120px;text-align:right;} +.dl-horizontal dd{margin-left:130px;} +hr{margin:18px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;} strong{font-weight:bold;} em{font-style:italic;} .muted{color:#999999;} -abbr{font-size:90%;text-transform:uppercase;border-bottom:1px dotted #ddd;cursor:help;} +abbr[title]{border-bottom:1px dotted #ddd;cursor:help;} +abbr.initialism{font-size:90%;text-transform:uppercase;} blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px;} blockquote small{display:block;line-height:18px;color:#999999;}blockquote small:before{content:'\2014 \00A0';} blockquote.pull-right{float:right;padding-left:0;padding-right:15px;border-left:0;border-right:5px solid #eeeeee;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;} @@ -99,21 +108,25 @@ address{display:block;margin-bottom:18px;line-height:18px;font-style:normal;} small{font-size:100%;} cite{font-style:normal;} code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -code{padding:3px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;} -pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12px;line-height:18px;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;white-space:pre;white-space:pre-wrap;word-break:break-all;}pre.prettyprint{margin-bottom:18px;} -pre code{padding:0;background-color:transparent;} +code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;} +pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12.025px;line-height:18px;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;white-space:pre;white-space:pre-wrap;word-break:break-all;word-wrap:break-word;}pre.prettyprint{margin-bottom:18px;} +pre code{padding:0;color:inherit;background-color:transparent;border:0;} +.pre-scrollable{max-height:340px;overflow-y:scroll;} form{margin:0 0 18px;} fieldset{padding:0;margin:0;border:0;} -legend{display:block;width:100%;padding:0;margin-bottom:27px;font-size:19.5px;line-height:36px;color:#333333;border:0;border-bottom:1px solid #eee;} -label,input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:18px;} +legend{display:block;width:100%;padding:0;margin-bottom:27px;font-size:19.5px;line-height:36px;color:#333333;border:0;border-bottom:1px solid #eee;}legend small{font-size:13.5px;color:#999999;} +label,input,button,select,textarea{font-size:13px;font-weight:normal;line-height:18px;} +input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;} label{display:block;margin-bottom:5px;color:#333333;} -input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;margin-bottom:9px;font-size:13px;line-height:18px;color:#555555;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;margin-bottom:9px;font-size:13px;line-height:18px;color:#555555;border:1px solid #cccccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .uneditable-textarea{width:auto;height:auto;} label input,label textarea,label select{display:block;} -input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;border:0;cursor:pointer;border-radius:0 \0/;} -input[type="file"]{padding:initial;line-height:initial;border:initial;background-color:#ffffff;background-color:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border:0 \9;} +input[type="image"]{border:0;} +input[type="file"]{width:auto;padding:initial;line-height:initial;border:initial;background-color:#ffffff;background-color:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto;} select,input[type="file"]{height:28px;*margin-top:4px;line-height:28px;} +input[type="file"]{line-height:18px \9;} select{width:220px;background-color:#ffffff;} select[multiple],select[size]{height:auto;} input[type="image"]{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} @@ -122,12 +135,11 @@ input[type="hidden"]{display:none;} .radio,.checkbox{padding-left:18px;} .radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px;} .controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;} -.radio.inline,.checkbox.inline{display:inline-block;margin-bottom:0;vertical-align:middle;} +.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle;} .radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;} -.controls>.radio.inline:first-child,.controls>.checkbox.inline:first-child{padding-top:0;} input,textarea{-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;} input:focus,textarea:focus{border-color:rgba(82, 168, 236, 0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);outline:0;outline:thin dotted \9;} -input[type="file"]:focus,input[type="checkbox"]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} +input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} .input-mini{width:60px;} .input-small{width:90px;} .input-medium{width:150px;} @@ -135,19 +147,20 @@ input[type="file"]:focus,input[type="checkbox"]:focus,select:focus{-webkit-box-s .input-xlarge{width:270px;} .input-xxlarge{width:530px;} input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{float:none;margin-left:0;} -input.span1,textarea.span1,.uneditable-input.span1{width:50px;} -input.span2,textarea.span2,.uneditable-input.span2{width:130px;} -input.span3,textarea.span3,.uneditable-input.span3{width:210px;} -input.span4,textarea.span4,.uneditable-input.span4{width:290px;} -input.span5,textarea.span5,.uneditable-input.span5{width:370px;} -input.span6,textarea.span6,.uneditable-input.span6{width:450px;} -input.span7,textarea.span7,.uneditable-input.span7{width:530px;} -input.span8,textarea.span8,.uneditable-input.span8{width:610px;} -input.span9,textarea.span9,.uneditable-input.span9{width:690px;} -input.span10,textarea.span10,.uneditable-input.span10{width:770px;} -input.span11,textarea.span11,.uneditable-input.span11{width:850px;} -input.span12,textarea.span12,.uneditable-input.span12{width:930px;} -input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#f5f5f5;border-color:#ddd;cursor:not-allowed;} +input,textarea,.uneditable-input{margin-left:0;} +input.span12, textarea.span12, .uneditable-input.span12{width:930px;} +input.span11, textarea.span11, .uneditable-input.span11{width:850px;} +input.span10, textarea.span10, .uneditable-input.span10{width:770px;} +input.span9, textarea.span9, .uneditable-input.span9{width:690px;} +input.span8, textarea.span8, .uneditable-input.span8{width:610px;} +input.span7, textarea.span7, .uneditable-input.span7{width:530px;} +input.span6, textarea.span6, .uneditable-input.span6{width:450px;} +input.span5, textarea.span5, .uneditable-input.span5{width:370px;} +input.span4, textarea.span4, .uneditable-input.span4{width:290px;} +input.span3, textarea.span3, .uneditable-input.span3{width:210px;} +input.span2, textarea.span2, .uneditable-input.span2{width:130px;} +input.span1, textarea.span1, .uneditable-input.span1{width:50px;} +input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#eeeeee;border-color:#ddd;cursor:not-allowed;} .control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;} .control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853;}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:0 0 6px #dbc59e;-moz-box-shadow:0 0 6px #dbc59e;box-shadow:0 0 6px #dbc59e;} .control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;} @@ -158,48 +171,56 @@ input[disabled],select[disabled],textarea[disabled],input[readonly],select[reado .control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847;}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:0 0 6px #7aba7b;-moz-box-shadow:0 0 6px #7aba7b;box-shadow:0 0 6px #7aba7b;} .control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;} input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} -.form-actions{padding:17px 20px 18px;margin-top:18px;margin-bottom:18px;background-color:#f5f5f5;border-top:1px solid #ddd;} +.form-actions{padding:17px 20px 18px;margin-top:18px;margin-bottom:18px;background-color:#eeeeee;border-top:1px solid #ddd;*zoom:1;}.form-actions:before,.form-actions:after{display:table;content:"";} +.form-actions:after{clear:both;} .uneditable-input{display:block;background-color:#ffffff;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} :-moz-placeholder{color:#999999;} ::-webkit-input-placeholder{color:#999999;} -.help-block{margin-top:5px;margin-bottom:0;color:#999999;} -.help-inline{display:inline-block;*display:inline;*zoom:1;margin-bottom:9px;vertical-align:middle;padding-left:5px;} -.input-prepend,.input-append{margin-bottom:5px;*zoom:1;}.input-prepend:before,.input-append:before,.input-prepend:after,.input-append:after{display:table;content:"";} -.input-prepend:after,.input-append:after{clear:both;} -.input-prepend input,.input-append input,.input-prepend .uneditable-input,.input-append .uneditable-input{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}.input-prepend input:focus,.input-append input:focus,.input-prepend .uneditable-input:focus,.input-append .uneditable-input:focus{position:relative;z-index:2;} +.help-block,.help-inline{color:#555555;} +.help-block{display:block;margin-bottom:9px;} +.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px;} +.input-prepend,.input-append{margin-bottom:5px;}.input-prepend input,.input-append input,.input-prepend select,.input-append select,.input-prepend .uneditable-input,.input-append .uneditable-input{*margin-left:0;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}.input-prepend input:focus,.input-append input:focus,.input-prepend select:focus,.input-append select:focus,.input-prepend .uneditable-input:focus,.input-append .uneditable-input:focus{position:relative;z-index:2;} .input-prepend .uneditable-input,.input-append .uneditable-input{border-left-color:#ccc;} -.input-prepend .add-on,.input-append .add-on{float:left;display:block;width:auto;min-width:16px;height:18px;margin-right:-1px;padding:4px 5px;font-weight:normal;line-height:18px;color:#999999;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#f5f5f5;border:1px solid #ccc;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} +.input-prepend .add-on,.input-append .add-on{display:inline-block;width:auto;min-width:16px;height:18px;padding:4px 5px;font-weight:normal;line-height:18px;text-align:center;text-shadow:0 1px 0 #ffffff;vertical-align:middle;background-color:#eeeeee;border:1px solid #ccc;} +.input-prepend .add-on,.input-append .add-on,.input-prepend .btn,.input-append .btn{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} .input-prepend .active,.input-append .active{background-color:#a9dba9;border-color:#46a546;} -.input-prepend .add-on{*margin-top:1px;} -.input-append input,.input-append .uneditable-input{float:left;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.input-append .uneditable-input{border-right-color:#ccc;} -.input-append .add-on{margin-right:0;margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} -.input-append input:first-child{*margin-left:-160px;}.input-append input:first-child+.add-on{*margin-left:-21px;} +.input-prepend .add-on,.input-prepend .btn{margin-right:-1px;} +.input-append input,.input-append select .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} +.input-append .uneditable-input{border-left-color:#eee;border-right-color:#ccc;} +.input-append .add-on,.input-append .btn{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} +.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} +.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} .search-query{padding-left:14px;padding-right:14px;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px;} -.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input{display:inline-block;margin-bottom:0;} -.form-search label,.form-inline label,.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{display:inline-block;} -.form-search .input-append .add-on,.form-inline .input-prepend .add-on,.form-search .input-append .add-on,.form-inline .input-prepend .add-on{vertical-align:middle;} +.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;margin-bottom:0;} +.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;} +.form-search label,.form-inline label{display:inline-block;} +.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0;} +.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle;} +.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-left:0;margin-right:3px;} .control-group{margin-bottom:9px;} -.form-horizontal legend+.control-group{margin-top:18px;-webkit-margin-top-collapse:separate;} +legend+.control-group{margin-top:18px;-webkit-margin-top-collapse:separate;} .form-horizontal .control-group{margin-bottom:18px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";} .form-horizontal .control-group:after{clear:both;} -.form-horizontal .control-group>label{float:left;width:140px;padding-top:5px;text-align:right;} -.form-horizontal .controls{margin-left:160px;} +.form-horizontal .control-label{float:left;width:140px;padding-top:5px;text-align:right;} +.form-horizontal .controls{margin-left:160px;*display:inline-block;*margin-left:0;*padding-left:20px;} +.form-horizontal .help-block{margin-top:9px;margin-bottom:0;} .form-horizontal .form-actions{padding-left:160px;} -table{max-width:100%;border-collapse:collapse;border-spacing:0;} -.table{width:100%;margin-bottom:18px;}.table th,.table td{padding:8px;line-height:18px;text-align:left;border-top:1px solid #ddd;} -.table th{font-weight:bold;vertical-align:bottom;} -.table td{vertical-align:top;} -.table thead:first-child tr th,.table thead:first-child tr td{border-top:0;} -.table tbody+tbody{border-top:2px solid #ddd;} +table{max-width:100%;border-collapse:collapse;border-spacing:0;background-color:transparent;} +.table{width:100%;margin-bottom:18px;}.table th,.table td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;} +.table th{font-weight:bold;} +.table thead th{vertical-align:bottom;} +.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0;} +.table tbody+tbody{border-top:2px solid #dddddd;} .table-condensed th,.table-condensed td{padding:4px 5px;} -.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapsed;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th+th,.table-bordered td+td,.table-bordered th+td,.table-bordered td+th{border-left:1px solid #ddd;} +.table-bordered{border:1px solid #dddddd;border-left:0;border-collapse:separate;*border-collapse:collapsed;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th,.table-bordered td{border-left:1px solid #dddddd;} .table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;} .table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-radius:4px 0 0 0;-moz-border-radius:4px 0 0 0;border-radius:4px 0 0 0;} .table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0;} .table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;} .table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0;} .table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;} +.table tbody tr:hover td,.table tbody tr:hover th{background-color:#f5f5f5;} table .span1{float:none;width:44px;margin-left:0;} table .span2{float:none;width:124px;margin-left:0;} table .span3{float:none;width:204px;margin-left:0;} @@ -212,8 +233,20 @@ table .span9{float:none;width:684px;margin-left:0;} table .span10{float:none;width:764px;margin-left:0;} table .span11{float:none;width:844px;margin-left:0;} table .span12{float:none;width:924px;margin-left:0;} -[class^="icon-"]{display:inline-block;width:14px;height:14px;vertical-align:text-top;background-image:url(../img/glyphicons-halflings.png);background-position:14px 14px;background-repeat:no-repeat;*margin-right:.3em;}[class^="icon-"]:last-child{*margin-left:0;} -.icon-white{background-image:url(../img/glyphicons-halflings-white.png);} +table .span13{float:none;width:1004px;margin-left:0;} +table .span14{float:none;width:1084px;margin-left:0;} +table .span15{float:none;width:1164px;margin-left:0;} +table .span16{float:none;width:1244px;margin-left:0;} +table .span17{float:none;width:1324px;margin-left:0;} +table .span18{float:none;width:1404px;margin-left:0;} +table .span19{float:none;width:1484px;margin-left:0;} +table .span20{float:none;width:1564px;margin-left:0;} +table .span21{float:none;width:1644px;margin-left:0;} +table .span22{float:none;width:1724px;margin-left:0;} +table .span23{float:none;width:1804px;margin-left:0;} +table .span24{float:none;width:1884px;margin-left:0;} +[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;*margin-right:.3em;}[class^="icon-"]:last-child,[class*=" icon-"]:last-child{*margin-left:0;} +.icon-white{background-image:url("../img/glyphicons-halflings-white.png");} .icon-glass{background-position:0 0;} .icon-music{background-position:-24px 0;} .icon-search{background-position:-48px 0;} @@ -337,44 +370,55 @@ table .span12{float:none;width:924px;margin-left:0;} .dropdown{position:relative;} .dropdown-toggle{*margin-bottom:-3px;} .dropdown-toggle:active,.open .dropdown-toggle{outline:0;} -.caret{display:inline-block;width:0;height:0;text-indent:-99999px;*text-indent:0;vertical-align:top;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000000;opacity:0.3;filter:alpha(opacity=30);content:"\2193";} +.caret{display:inline-block;width:0;height:0;vertical-align:top;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000000;opacity:0.3;filter:alpha(opacity=30);content:"";} .dropdown .caret{margin-top:8px;margin-left:2px;} .dropdown:hover .caret,.open.dropdown .caret{opacity:1;filter:alpha(opacity=100);} -.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;display:none;min-width:160px;max-width:220px;_width:160px;padding:4px 0;margin:0;list-style:none;background-color:#ffffff;border-color:#ccc;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:1px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;*border-right-width:2px;*border-bottom-width:2px;}.dropdown-menu.bottom-up{top:auto;bottom:100%;margin-bottom:2px;} -.dropdown-menu .divider{height:1px;margin:5px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;*margin:-5px 0 5px;} -.dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:18px;color:#555555;white-space:nowrap;} +.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;display:none;min-width:160px;padding:4px 0;margin:0;list-style:none;background-color:#ffffff;border-color:#ccc;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:1px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;*border-right-width:2px;*border-bottom-width:2px;}.dropdown-menu.pull-right{right:0;left:auto;} +.dropdown-menu .divider{height:1px;margin:8px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;*margin:-5px 0 5px;} +.dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:18px;color:#333333;white-space:nowrap;} .dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;background-color:#0088cc;} .dropdown.open{*z-index:1000;}.dropdown.open .dropdown-toggle{color:#ffffff;background:#ccc;background:rgba(0, 0, 0, 0.3);} .dropdown.open .dropdown-menu{display:block;} +.pull-right .dropdown-menu{left:auto;right:0;} +.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000000;content:"\2191";} +.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px;} .typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} .well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);} +.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} +.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .fade{-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;opacity:0;}.fade.in{opacity:1;} .collapse{-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-ms-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;position:relative;overflow:hidden;height:0;}.collapse.in{height:auto;} .close{float:right;font-size:20px;font-weight:bold;line-height:18px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover{color:#000000;text-decoration:none;opacity:0.4;filter:alpha(opacity=40);cursor:pointer;} -.btn{display:inline-block;padding:4px 10px 4px;font-size:13px;line-height:18px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);background-color:#fafafa;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border:1px solid #ccc;border-bottom-color:#bbb;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);cursor:pointer;*margin-left:.3em;}.btn:first-child{*margin-left:0;} +.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 10px 4px;margin-bottom:0;font-size:13px;line-height:18px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);border:1px solid #cccccc;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);cursor:pointer;*margin-left:.3em;}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{background-color:#e6e6e6;} +.btn:active,.btn.active{background-color:#cccccc \9;} +.btn:first-child{*margin-left:0;} .btn:hover{color:#333333;text-decoration:none;background-color:#e6e6e6;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-ms-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;} -.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -.btn.active,.btn:active{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);background-color:#e6e6e6;background-color:#d9d9d9 \9;color:rgba(0, 0, 0, 0.5);outline:0;} +.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} +.btn.active,.btn:active{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);background-color:#e6e6e6;background-color:#d9d9d9 \9;outline:0;} .btn.disabled,.btn[disabled]{cursor:default;background-image:none;background-color:#e6e6e6;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} .btn-large{padding:9px 14px;font-size:15px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.btn-large .icon{margin-top:1px;} +.btn-large [class^="icon-"]{margin-top:1px;} .btn-small{padding:5px 9px;font-size:11px;line-height:16px;} -.btn-small .icon{margin-top:-1px;} -.btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover{text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);color:#ffffff;} -.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active{color:rgba(255, 255, 255, 0.75);} -.btn-primary{background-color:#006dcc;background-image:-moz-linear-gradient(top, #0088cc, #0044cc);background-image:-ms-linear-gradient(top, #0088cc, #0044cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));background-image:-webkit-linear-gradient(top, #0088cc, #0044cc);background-image:-o-linear-gradient(top, #0088cc, #0044cc);background-image:linear-gradient(top, #0088cc, #0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#0044cc;} -.btn-primary:active,.btn-primary.active{background-color:#003399 \9;} -.btn-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;} +.btn-small [class^="icon-"]{margin-top:-1px;} +.btn-mini{padding:2px 6px;font-size:11px;line-height:14px;} +.btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover,.btn-inverse,.btn-inverse:hover{text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);color:#ffffff;} +.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255, 255, 255, 0.75);} +.btn-primary{background-color:#0074cc;background-image:-moz-linear-gradient(top, #0088cc, #0055cc);background-image:-ms-linear-gradient(top, #0088cc, #0055cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc));background-image:-webkit-linear-gradient(top, #0088cc, #0055cc);background-image:-o-linear-gradient(top, #0088cc, #0055cc);background-image:linear-gradient(top, #0088cc, #0055cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0055cc', GradientType=0);border-color:#0055cc #0055cc #003580;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#0055cc;} +.btn-primary:active,.btn-primary.active{background-color:#004099 \9;} +.btn-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;} .btn-warning:active,.btn-warning.active{background-color:#c67605 \9;} -.btn-danger{background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;} +.btn-danger{background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;} .btn-danger:active,.btn-danger.active{background-color:#942a25 \9;} -.btn-success{background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;} +.btn-success{background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;} .btn-success:active,.btn-success.active{background-color:#408140 \9;} -.btn-info{background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;} +.btn-info{background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;} .btn-info:active,.btn-info.active{background-color:#24748c \9;} +.btn-inverse{background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{background-color:#222222;} +.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;} button.btn,input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;} -button.btn.large,input[type="submit"].btn.large{*padding-top:7px;*padding-bottom:7px;} -button.btn.small,input[type="submit"].btn.small{*padding-top:3px;*padding-bottom:3px;} +button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px;} +button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px;} +button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px;} .btn-group{position:relative;*zoom:1;*margin-left:.3em;}.btn-group:before,.btn-group:after{display:table;content:"";} .btn-group:after{clear:both;} .btn-group:first-child{*margin-left:0;} @@ -387,44 +431,48 @@ button.btn.small,input[type="submit"].btn.small{*padding-top:3px;*padding-bottom .btn-group .btn.large:last-child,.btn-group .large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} .btn-group .btn:hover,.btn-group .btn:focus,.btn-group .btn:active,.btn-group .btn.active{z-index:2;} .btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;} -.btn-group .dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);*padding-top:5px;*padding-bottom:5px;} +.btn-group .dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);*padding-top:3px;*padding-bottom:3px;} +.btn-group .btn-mini.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:1px;*padding-bottom:1px;} +.btn-group .btn-small.dropdown-toggle{*padding-top:4px;*padding-bottom:4px;} +.btn-group .btn-large.dropdown-toggle{padding-left:12px;padding-right:12px;} .btn-group.open{*z-index:1000;}.btn-group.open .dropdown-menu{display:block;margin-top:1px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} .btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);} .btn .caret{margin-top:7px;margin-left:0;} .btn:hover .caret,.open.btn-group .caret{opacity:1;filter:alpha(opacity=100);} -.btn-primary .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret{border-top-color:#ffffff;opacity:0.75;filter:alpha(opacity=75);} -.btn-small .caret{margin-top:4px;} -.alert{padding:8px 35px 8px 14px;margin-bottom:18px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.alert,.alert-heading{color:#c09853;} +.btn-mini .caret{margin-top:5px;} +.btn-small .caret{margin-top:6px;} +.btn-large .caret{margin-top:6px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} +.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:0.75;filter:alpha(opacity=75);} +.alert{padding:8px 35px 8px 14px;margin-bottom:18px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;color:#c09853;} +.alert-heading{color:inherit;} .alert .close{position:relative;top:-2px;right:-21px;line-height:18px;} -.alert-success{background-color:#dff0d8;border-color:#d6e9c6;} -.alert-success,.alert-success .alert-heading{color:#468847;} -.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;} -.alert-danger,.alert-error,.alert-danger .alert-heading,.alert-error .alert-heading{color:#b94a48;} -.alert-info{background-color:#d9edf7;border-color:#bce8f1;} -.alert-info,.alert-info .alert-heading{color:#3a87ad;} +.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847;} +.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48;} +.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad;} .alert-block{padding-top:14px;padding-bottom:14px;} .alert-block>p,.alert-block>ul{margin-bottom:0;} .alert-block p+p{margin-top:5px;} .nav{margin-left:0;margin-bottom:18px;list-style:none;} .nav>li>a{display:block;} .nav>li>a:hover{text-decoration:none;background-color:#eeeeee;} -.nav-list{padding-left:14px;padding-right:14px;margin-bottom:0;} -.nav-list>li>a,.nav-list .nav-header{display:block;padding:3px 15px;margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} -.nav-list .nav-header{font-size:11px;font-weight:bold;line-height:18px;color:#999999;text-transform:uppercase;} -.nav-list>li+.nav-header{margin-top:9px;} -.nav-list .active>a{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;} -.nav-list .icon{margin-right:2px;} +.nav .nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:18px;color:#999999;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase;} +.nav li+.nav-header{margin-top:9px;} +.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0;} +.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} +.nav-list>li>a{padding:3px 15px;} +.nav-list>.active>a,.nav-list>.active>a:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;} +.nav-list [class^="icon-"]{margin-right:2px;} +.nav-list .divider{height:1px;margin:8px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;*margin:-5px 0 5px;} .nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";} .nav-tabs:after,.nav-pills:after{clear:both;} .nav-tabs>li,.nav-pills>li{float:left;} .nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;} .nav-tabs{border-bottom:1px solid #ddd;} .nav-tabs>li{margin-bottom:-1px;} -.nav-tabs>li>a{padding-top:9px;padding-bottom:9px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd;} +.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:18px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd;} .nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} .nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.nav-pills .active>a,.nav-pills .active>a:hover{color:#ffffff;background-color:#0088cc;} +.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#ffffff;background-color:#0088cc;} .nav-stacked>li{float:none;} .nav-stacked>li>a{margin-right:0;} .nav-tabs.nav-stacked{border-bottom:0;} @@ -436,15 +484,16 @@ button.btn.small,input[type="submit"].btn.small{*padding-top:3px;*padding-bottom .nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;} .nav-tabs .dropdown-menu,.nav-pills .dropdown-menu{margin-top:1px;border-width:1px;} .nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{border-top-color:#0088cc;margin-top:6px;} -.nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#005580;} -.nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333333;} +.nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{border-top-color:#0088cc;border-bottom-color:#0088cc;margin-top:6px;} +.nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580;} +.nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333333;border-bottom-color:#333333;} .nav>.dropdown.active>a:hover{color:#000000;cursor:pointer;} .nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>.open.active>a:hover{color:#ffffff;background-color:#999999;border-color:#999999;} -.nav .open .caret,.nav .open.active .caret,.nav .open a:hover .caret{border-top-color:#ffffff;opacity:1;filter:alpha(opacity=100);} +.nav .open .caret,.nav .open.active .caret,.nav .open a:hover .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:1;filter:alpha(opacity=100);} .tabs-stacked .open>a:hover{border-color:#999999;} .tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";} .tabbable:after{clear:both;} +.tab-content{display:table;width:100%;} .tabs-below .nav-tabs,.tabs-right .nav-tabs,.tabs-left .nav-tabs{border-bottom:0;} .tab-content>.tab-pane,.pill-content>.pill-pane{display:none;} .tab-content>.active,.pill-content>.active{display:block;} @@ -462,46 +511,52 @@ button.btn.small,input[type="submit"].btn.small{*padding-top:3px;*padding-bottom .tabs-right .nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} .tabs-right .nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #eeeeee #dddddd;} .tabs-right .nav-tabs .active>a,.tabs-right .nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;} -.navbar{overflow:visible;margin-bottom:18px;} +.navbar{*position:relative;*z-index:2;overflow:visible;margin-bottom:18px;} .navbar-inner{padding-left:20px;padding-right:20px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);} -.btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);}.btn-navbar:hover,.btn-navbar:active,.btn-navbar.active,.btn-navbar.disabled,.btn-navbar[disabled]{background-color:#222222;} +.navbar .container{width:auto;} +.btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);}.btn-navbar:hover,.btn-navbar:active,.btn-navbar.active,.btn-navbar.disabled,.btn-navbar[disabled]{background-color:#222222;} .btn-navbar:active,.btn-navbar.active{background-color:#080808 \9;} .btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);} .btn-navbar .icon-bar+.icon-bar{margin-top:3px;} .nav-collapse.collapse{height:auto;} -.navbar .brand:hover{text-decoration:none;} +.navbar{color:#999999;}.navbar .brand:hover{text-decoration:none;} .navbar .brand{float:left;display:block;padding:8px 20px 12px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#ffffff;} -.navbar .navbar-text{margin-bottom:0;line-height:40px;color:#999999;}.navbar .navbar-text a:hover{color:#ffffff;background-color:transparent;} +.navbar .navbar-text{margin-bottom:0;line-height:40px;} .navbar .btn,.navbar .btn-group{margin-top:5px;} .navbar .btn-group .btn{margin-top:0;} .navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";} .navbar-form:after{clear:both;} -.navbar-form input,.navbar-form select{display:inline-block;margin-top:5px;margin-bottom:0;} -.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;} +.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;} +.navbar-form input,.navbar-form select{display:inline-block;margin-bottom:0;} .navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;} -.navbar-search{position:relative;float:left;margin-top:6px;margin-bottom:0;}.navbar-search .search-query{padding:4px 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;color:#ffffff;color:rgba(255, 255, 255, 0.75);background:#666;background:rgba(255, 255, 255, 0.3);border:1px solid #111;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.navbar-search .search-query :-moz-placeholder{color:#eeeeee;} -.navbar-search .search-query::-webkit-input-placeholder{color:#eeeeee;} -.navbar-search .search-query:hover{color:#ffffff;background-color:#999999;background-color:rgba(255, 255, 255, 0.5);} +.navbar-form .input-append,.navbar-form .input-prepend{margin-top:6px;white-space:nowrap;}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0;} +.navbar-search{position:relative;float:left;margin-top:6px;margin-bottom:0;}.navbar-search .search-query{padding:4px 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;color:#ffffff;background-color:#626262;border:1px solid #151515;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.navbar-search .search-query:-moz-placeholder{color:#cccccc;} +.navbar-search .search-query::-webkit-input-placeholder{color:#cccccc;} .navbar-search .search-query:focus,.navbar-search .search-query.focused{padding:5px 10px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;} -.navbar-fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030;} -.navbar-fixed-top .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0;} +.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} +.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} +.navbar-fixed-top{top:0;} +.navbar-fixed-bottom{bottom:0;} .navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;} .navbar .nav.pull-right{float:right;} .navbar .nav>li{display:block;float:left;} .navbar .nav>li>a{float:none;padding:10px 10px 11px;line-height:19px;color:#999999;text-decoration:none;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);} .navbar .nav>li>a:hover{background-color:transparent;color:#ffffff;text-decoration:none;} -.navbar .nav .active>a,.navbar .nav .active>a:hover{color:#ffffff;text-decoration:none;background-color:#222222;background-color:rgba(0, 0, 0, 0.5);} +.navbar .nav .active>a,.navbar .nav .active>a:hover{color:#ffffff;text-decoration:none;background-color:#222222;} .navbar .divider-vertical{height:40px;width:1px;margin:0 9px;overflow:hidden;background-color:#222222;border-right:1px solid #333333;} .navbar .nav.pull-right{margin-left:10px;margin-right:0;} .navbar .dropdown-menu{margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.navbar .dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;} .navbar .dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;} -.navbar .nav .dropdown-toggle .caret,.navbar .nav .open.dropdown .caret{border-top-color:#ffffff;} +.navbar-fixed-bottom .dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0, 0, 0, 0.2);border-bottom:0;bottom:-7px;top:auto;} +.navbar-fixed-bottom .dropdown-menu:after{border-top:6px solid #ffffff;border-bottom:0;bottom:-6px;top:auto;} +.navbar .nav .dropdown-toggle .caret,.navbar .nav .open.dropdown .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} .navbar .nav .active .caret{opacity:1;filter:alpha(opacity=100);} .navbar .nav .open>.dropdown-toggle,.navbar .nav .active>.dropdown-toggle,.navbar .nav .open.active>.dropdown-toggle{background-color:transparent;} .navbar .nav .active>.dropdown-toggle:hover{color:#ffffff;} -.navbar .nav.pull-right .dropdown-menu{left:auto;right:0;}.navbar .nav.pull-right .dropdown-menu:before{left:auto;right:12px;} -.navbar .nav.pull-right .dropdown-menu:after{left:auto;right:13px;} -.breadcrumb{padding:7px 14px;margin:0 0 18px;background-color:#fbfbfb;background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline;text-shadow:0 1px 0 #ffffff;} +.navbar .nav.pull-right .dropdown-menu,.navbar .nav .dropdown-menu.pull-right{left:auto;right:0;}.navbar .nav.pull-right .dropdown-menu:before,.navbar .nav .dropdown-menu.pull-right:before{left:auto;right:12px;} +.navbar .nav.pull-right .dropdown-menu:after,.navbar .nav .dropdown-menu.pull-right:after{left:auto;right:13px;} +.breadcrumb{padding:7px 14px;margin:0 0 18px;list-style:none;background-color:#fbfbfb;background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #ffffff;} .breadcrumb .divider{padding:0 5px;color:#999999;} .breadcrumb .active a{color:#333333;} .pagination{height:36px;margin:18px 0;} @@ -510,7 +565,7 @@ button.btn.small,input[type="submit"].btn.small{*padding-top:3px;*padding-bottom .pagination a{float:left;padding:0 14px;line-height:34px;text-decoration:none;border:1px solid #ddd;border-left-width:0;} .pagination a:hover,.pagination .active a{background-color:#f5f5f5;} .pagination .active a{color:#999999;cursor:default;} -.pagination .disabled a,.pagination .disabled a:hover{color:#999999;background-color:transparent;cursor:default;} +.pagination .disabled span,.pagination .disabled a,.pagination .disabled a:hover{color:#999999;background-color:transparent;cursor:default;} .pagination li:first-child a{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} .pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} .pagination-centered{text-align:center;} @@ -522,19 +577,22 @@ button.btn.small,input[type="submit"].btn.small{*padding-top:3px;*padding-bottom .pager a:hover{text-decoration:none;background-color:#f5f5f5;} .pager .next a{float:right;} .pager .previous a{float:left;} +.pager .disabled a,.pager .disabled a:hover{color:#999999;background-color:#fff;cursor:default;} .modal-open .dropdown-menu{z-index:2050;} .modal-open .dropdown.open{*z-index:2050;} .modal-open .popover{z-index:2060;} .modal-open .tooltip{z-index:2070;} .modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;} .modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);} -.modal{position:fixed;top:50%;left:50%;z-index:1050;max-height:500px;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} +.modal{position:fixed;top:50%;left:50%;z-index:1050;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} .modal.fade.in{top:50%;} .modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;} -.modal-body{padding:15px;} -.modal-footer{padding:14px 15px 15px;margin-bottom:0;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";} +.modal-body{overflow-y:auto;max-height:400px;padding:15px;} +.modal-form{margin-bottom:0;} +.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";} .modal-footer:after{clear:both;} -.modal-footer .btn{float:right;margin-left:5px;margin-bottom:0;} +.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0;} +.modal-footer .btn-group .btn+.btn{margin-left:-1px;} .tooltip{position:absolute;z-index:1020;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);} .tooltip.top{margin-top:-2px;} .tooltip.right{margin-left:2px;} @@ -565,14 +623,33 @@ button.btn.small,input[type="submit"].btn.small{*padding-top:3px;*padding-bottom a.thumbnail:hover{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} .thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;} .thumbnail .caption{padding:9px;} -.label{padding:1px 3px 2px;font-size:9.75px;font-weight:bold;color:#ffffff;text-transform:uppercase;background-color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.label{padding:1px 4px 2px;font-size:10.998px;font-weight:bold;line-height:13px;color:#ffffff;vertical-align:middle;white-space:nowrap;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +.label:hover{color:#ffffff;text-decoration:none;} .label-important{background-color:#b94a48;} +.label-important:hover{background-color:#953b39;} .label-warning{background-color:#f89406;} +.label-warning:hover{background-color:#c67605;} .label-success{background-color:#468847;} +.label-success:hover{background-color:#356635;} .label-info{background-color:#3a87ad;} -@-webkit-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@-moz-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}.progress{overflow:hidden;height:18px;margin-bottom:18px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-ms-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(top, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);-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);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.progress .bar{width:0%;height:18px;color:#ffffff;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-ms-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(top, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-ms-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;} -.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;} +.label-info:hover{background-color:#2d6987;} +.label-inverse{background-color:#333333;} +.label-inverse:hover{background-color:#1a1a1a;} +.badge{padding:1px 9px 2px;font-size:12.025px;font-weight:bold;white-space:nowrap;color:#ffffff;background-color:#999999;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px;} +.badge:hover{color:#ffffff;text-decoration:none;cursor:pointer;} +.badge-error{background-color:#b94a48;} +.badge-error:hover{background-color:#953b39;} +.badge-warning{background-color:#f89406;} +.badge-warning:hover{background-color:#c67605;} +.badge-success{background-color:#468847;} +.badge-success:hover{background-color:#356635;} +.badge-info{background-color:#3a87ad;} +.badge-info:hover{background-color:#2d6987;} +.badge-inverse{background-color:#333333;} +.badge-inverse:hover{background-color:#1a1a1a;} +@-webkit-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@-moz-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@-ms-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}.progress{overflow:hidden;height:18px;margin-bottom:18px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-ms-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(top, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);-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);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.progress .bar{width:0%;height:18px;color:#ffffff;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-ms-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(top, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-ms-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;} +.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;} .progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;} .progress-danger .bar{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);} .progress-danger.progress-striped .bar{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} @@ -580,6 +657,8 @@ a.thumbnail:hover{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, .progress-success.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} .progress-info .bar{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);} .progress-info.progress-striped .bar{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} +.progress-warning .bar{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);} +.progress-warning.progress-striped .bar{background-color:#fbb450;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} .accordion{margin-bottom:18px;} .accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} .accordion-heading{border-bottom:0;} @@ -601,8 +680,8 @@ a.thumbnail:hover{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, .carousel-control:hover{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);} .carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:10px 15px 5px;background:#333333;background:rgba(0, 0, 0, 0.75);} .carousel-caption h4,.carousel-caption p{color:#ffffff;} -.hero-unit{padding:60px;margin-bottom:30px;background-color:#f5f5f5;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;} -.hero-unit p{font-size:18px;font-weight:200;line-height:27px;} +.hero-unit{padding:60px;margin-bottom:30px;background-color:#eeeeee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px;} +.hero-unit p{font-size:18px;font-weight:200;line-height:27px;color:inherit;} .pull-right{float:right;} .pull-left{float:left;} .hide{display:none;} diff --git a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0/img/glyphicons-halflings-white.png b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/img/glyphicons-halflings-white.png similarity index 100% rename from documentation/website/source/_themes/opendylan/static/bootstrap/2.0/img/glyphicons-halflings-white.png rename to documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/img/glyphicons-halflings-white.png diff --git a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0/img/glyphicons-halflings.png b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/img/glyphicons-halflings.png similarity index 100% rename from documentation/website/source/_themes/opendylan/static/bootstrap/2.0/img/glyphicons-halflings.png rename to documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/img/glyphicons-halflings.png diff --git a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0/js/bootstrap.js b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/js/bootstrap.js similarity index 95% rename from documentation/website/source/_themes/opendylan/static/bootstrap/2.0/js/bootstrap.js rename to documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/js/bootstrap.js index c832ccb2e6..ca868671ca 100644 --- a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0/js/bootstrap.js +++ b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/js/bootstrap.js @@ -1,5 +1,5 @@ /* =================================================== - * bootstrap-transition.js v2.0.0 + * bootstrap-transition.js v2.0.2 * http://twitter.github.com/bootstrap/javascript.html#transitions * =================================================== * Copyright 2012 Twitter, Inc. @@ -47,10 +47,9 @@ })() }) - -}( window.jQuery ) -/* ========================================================== - * bootstrap-alert.js v2.0.0 + +}( window.jQuery );/* ========================================================== + * bootstrap-alert.js v2.0.2 * http://twitter.github.com/bootstrap/javascript.html#alerts * ========================================================== * Copyright 2012 Twitter, Inc. @@ -102,11 +101,14 @@ $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) - $parent.removeClass('in') + $parent + .trigger('close') + .removeClass('in') function removeElement() { - $parent.remove() - $parent.trigger('closed') + $parent + .trigger('closed') + .remove() } $.support.transition && $parent.hasClass('fade') ? @@ -139,9 +141,8 @@ $('body').on('click.alert.data-api', dismiss, Alert.prototype.close) }) -}( window.jQuery ) -/* ============================================================ - * bootstrap-button.js v2.0.0 +}( window.jQuery );/* ============================================================ + * bootstrap-button.js v2.0.2 * http://twitter.github.com/bootstrap/javascript.html#buttons * ============================================================ * Copyright 2012 Twitter, Inc. @@ -233,13 +234,14 @@ $(function () { $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) { - $(e.target).button('toggle') + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') }) }) -}( window.jQuery ) -/* ========================================================== - * bootstrap-carousel.js v2.0.0 +}( window.jQuery );/* ========================================================== + * bootstrap-carousel.js v2.0.2 * http://twitter.github.com/bootstrap/javascript.html#carousel * ========================================================== * Copyright 2012 Twitter, Inc. @@ -269,6 +271,9 @@ this.$element = $(element) this.options = $.extend({}, $.fn.carousel.defaults, options) this.options.slide && this.slide(this.options.slide) + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) } Carousel.prototype = { @@ -301,6 +306,7 @@ , pause: function () { clearInterval(this.interval) + this.interval = null return this } @@ -328,6 +334,8 @@ $next = $next.length ? $next : this.$element.find('.item')[fallback]() + if ($next.hasClass('active')) return + if (!$.support.transition && this.$element.hasClass('slide')) { this.$element.trigger('slide') $active.removeClass('active') @@ -373,6 +381,7 @@ $.fn.carousel.defaults = { interval: 5000 + , pause: 'hover' } $.fn.carousel.Constructor = Carousel @@ -391,9 +400,8 @@ }) }) -}( window.jQuery ) -/* ============================================================= - * bootstrap-collapse.js v2.0.0 +}( window.jQuery );/* ============================================================= + * bootstrap-collapse.js v2.0.2 * http://twitter.github.com/bootstrap/javascript.html#collapse * ============================================================= * Copyright 2012 Twitter, Inc. @@ -468,7 +476,9 @@ [dimension](size || 'auto') [0].offsetWidth - this.$element.addClass('collapse') + this.$element[size ? 'addClass' : 'removeClass']('collapse') + + return this } , transition: function ( method, startEvent, completeEvent ) { @@ -527,9 +537,8 @@ }) }) -}( window.jQuery ) -/* ============================================================ - * bootstrap-dropdown.js v2.0.0 +}( window.jQuery );/* ============================================================ + * bootstrap-dropdown.js v2.0.2 * http://twitter.github.com/bootstrap/javascript.html#dropdowns * ============================================================ * Copyright 2012 Twitter, Inc. @@ -619,9 +628,8 @@ $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle) }) -}( window.jQuery ) -/* ========================================================= - * bootstrap-modal.js v2.0.0 +}( window.jQuery );/* ========================================================= + * bootstrap-modal.js v2.0.2 * http://twitter.github.com/bootstrap/javascript.html#modals * ========================================================= * Copyright 2012 Twitter, Inc. @@ -648,7 +656,7 @@ * ====================== */ var Modal = function ( content, options ) { - this.options = $.extend({}, $.fn.modal.defaults, options) + this.options = options this.$element = $(content) .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) } @@ -799,16 +807,17 @@ return this.each(function () { var $this = $(this) , data = $this.data('modal') - , options = typeof option == 'object' && option + , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option) if (!data) $this.data('modal', (data = new Modal(this, options))) if (typeof option == 'string') data[option]() - else data.show() + else if (options.show) data.show() }) } $.fn.modal.defaults = { backdrop: true , keyboard: true + , show: true } $.fn.modal.Constructor = Modal @@ -828,9 +837,8 @@ }) }) -}( window.jQuery ) -/* =========================================================== - * bootstrap-tooltip.js v2.0.0 +}( window.jQuery );/* =========================================================== + * bootstrap-tooltip.js v2.0.2 * http://twitter.github.com/bootstrap/javascript.html#tooltips * Inspired by the original jQuery.tipsy by Jason Frame * =========================================================== @@ -1037,7 +1045,7 @@ title = $e.attr('data-original-title') || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) - title = title.toString().replace(/(^\s*|\s*$)/, "") + title = (title || '').toString().replace(/(^\s*|\s*$)/, "") return title } @@ -1098,9 +1106,8 @@ , template: '
' } -}( window.jQuery ) -/* =========================================================== - * bootstrap-popover.js v2.0.0 +}( window.jQuery );/* =========================================================== + * bootstrap-popover.js v2.0.2 * http://twitter.github.com/bootstrap/javascript.html#popovers * =========================================================== * Copyright 2012 Twitter, Inc. @@ -1193,9 +1200,8 @@ , template: '

' }) -}( window.jQuery ) -/* ============================================================= - * bootstrap-scrollspy.js v2.0.0 +}( window.jQuery );/* ============================================================= + * bootstrap-scrollspy.js v2.0.2 * http://twitter.github.com/bootstrap/javascript.html#scrollspy * ============================================================= * Copyright 2012 Twitter, Inc. @@ -1318,9 +1324,8 @@ }) }) -}( window.jQuery ) -/* ======================================================== - * bootstrap-tab.js v2.0.0 +}( window.jQuery );/* ======================================================== + * bootstrap-tab.js v2.0.2 * http://twitter.github.com/bootstrap/javascript.html#tabs * ======================================================== * Copyright 2012 Twitter, Inc. @@ -1448,9 +1453,8 @@ }) }) -}( window.jQuery ) -/* ============================================================= - * bootstrap-typeahead.js v2.0.0 +}( window.jQuery );/* ============================================================= + * bootstrap-typeahead.js v2.0.2 * http://twitter.github.com/bootstrap/javascript.html#typeahead * ============================================================= * Copyright 2012 Twitter, Inc. @@ -1491,6 +1495,7 @@ , select: function () { var val = this.$menu.find('.active').attr('data-value') this.$element.val(val) + this.$element.change(); return this.hide() } @@ -1616,9 +1621,6 @@ } , keyup: function (e) { - e.stopPropagation() - e.preventDefault() - switch(e.keyCode) { case 40: // down arrow case 38: // up arrow @@ -1631,6 +1633,7 @@ break case 27: // escape + if (!this.shown) return this.hide() break @@ -1638,10 +1641,11 @@ this.lookup() } + e.stopPropagation() + e.preventDefault() } , keypress: function (e) { - e.stopPropagation() if (!this.shown) return switch(e.keyCode) { @@ -1661,12 +1665,12 @@ this.next() break } + + e.stopPropagation() } , blur: function (e) { var that = this - e.stopPropagation() - e.preventDefault() setTimeout(function () { that.hide() }, 150) } @@ -1719,4 +1723,4 @@ }) }) -}( window.jQuery ) +}( window.jQuery ); \ No newline at end of file diff --git a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/js/bootstrap.min.js b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/js/bootstrap.min.js new file mode 100644 index 0000000000..ffaefa691d --- /dev/null +++ b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/js/bootstrap.min.js @@ -0,0 +1,6 @@ +/** +* Bootstrap.js by @fat & @mdo +* Copyright 2012 Twitter, Inc. +* http://www.apache.org/licenses/LICENSE-2.0.txt +*/ +!function(a){a(function(){"use strict",a.support.transition=function(){var b=document.body||document.documentElement,c=b.style,d=c.transition!==undefined||c.WebkitTransition!==undefined||c.MozTransition!==undefined||c.MsTransition!==undefined||c.OTransition!==undefined;return d&&{end:function(){var b="TransitionEnd";return a.browser.webkit?b="webkitTransitionEnd":a.browser.mozilla?b="transitionend":a.browser.opera&&(b="oTransitionEnd"),b}()}}()})}(window.jQuery),!function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype={constructor:c,close:function(b){function f(){e.trigger("closed").remove()}var c=a(this),d=c.attr("data-target"),e;d||(d=c.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),e=a(d),e.trigger("close"),b&&b.preventDefault(),e.length||(e=c.hasClass("alert")?c:c.parent()),e.trigger("close").removeClass("in"),a.support.transition&&e.hasClass("fade")?e.on(a.support.transition.end,f):f()}},a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("alert");e||d.data("alert",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.alert.Constructor=c,a(function(){a("body").on("click.alert.data-api",b,c.prototype.close)})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.button.defaults,c)};b.prototype={constructor:b,setState:function(a){var b="disabled",c=this.$element,d=c.data(),e=c.is("input")?"val":"html";a+="Text",d.resetText||c.data("resetText",c[e]()),c[e](d[a]||this.options[a]),setTimeout(function(){a=="loadingText"?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},toggle:function(){var a=this.$element.parent('[data-toggle="buttons-radio"]');a&&a.find(".active").removeClass("active"),this.$element.toggleClass("active")}},a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("button"),f=typeof c=="object"&&c;e||d.data("button",e=new b(this,f)),c=="toggle"?e.toggle():c&&e.setState(c)})},a.fn.button.defaults={loadingText:"loading..."},a.fn.button.Constructor=b,a(function(){a("body").on("click.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle")})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.carousel.defaults,c),this.options.slide&&this.slide(this.options.slide),this.options.pause=="hover"&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.prototype={cycle:function(){return this.interval=setInterval(a.proxy(this.next,this),this.options.interval),this},to:function(b){var c=this.$element.find(".active"),d=c.parent().children(),e=d.index(c),f=this;if(b>d.length-1||b<0)return;return this.sliding?this.$element.one("slid",function(){f.to(b)}):e==b?this.pause().cycle():this.slide(b>e?"next":"prev",a(d[b]))},pause:function(){return clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},slide:function(b,c){var d=this.$element.find(".active"),e=c||d[b](),f=this.interval,g=b=="next"?"left":"right",h=b=="next"?"first":"last",i=this;this.sliding=!0,f&&this.pause(),e=e.length?e:this.$element.find(".item")[h]();if(e.hasClass("active"))return;return!a.support.transition&&this.$element.hasClass("slide")?(this.$element.trigger("slide"),d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")):(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),this.$element.trigger("slide"),this.$element.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)})),f&&this.cycle(),this}},a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("carousel"),f=typeof c=="object"&&c;e||d.data("carousel",e=new b(this,f)),typeof c=="number"?e.to(c):typeof c=="string"||(c=f.slide)?e[c]():e.cycle()})},a.fn.carousel.defaults={interval:5e3,pause:"hover"},a.fn.carousel.Constructor=b,a(function(){a("body").on("click.carousel.data-api","[data-slide]",function(b){var c=a(this),d,e=a(c.attr("data-target")||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,"")),f=!e.data("modal")&&a.extend({},e.data(),c.data());e.carousel(f),b.preventDefault()})})}(window.jQuery),!function(a){"use strict";var b=function(b,c){this.$element=a(b),this.options=a.extend({},a.fn.collapse.defaults,c),this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.prototype={constructor:b,dimension:function(){var a=this.$element.hasClass("width");return a?"width":"height"},show:function(){var b=this.dimension(),c=a.camelCase(["scroll",b].join("-")),d=this.$parent&&this.$parent.find(".in"),e;d&&d.length&&(e=d.data("collapse"),d.collapse("hide"),e||d.data("collapse",null)),this.$element[b](0),this.transition("addClass","show","shown"),this.$element[b](this.$element[0][c])},hide:function(){var a=this.dimension();this.reset(this.$element[a]()),this.transition("removeClass","hide","hidden"),this.$element[a](0)},reset:function(a){var b=this.dimension();return this.$element.removeClass("collapse")[b](a||"auto")[0].offsetWidth,this.$element[a?"addClass":"removeClass"]("collapse"),this},transition:function(b,c,d){var e=this,f=function(){c=="show"&&e.reset(),e.$element.trigger(d)};this.$element.trigger(c)[b]("in"),a.support.transition&&this.$element.hasClass("collapse")?this.$element.one(a.support.transition.end,f):f()},toggle:function(){this[this.$element.hasClass("in")?"hide":"show"]()}},a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("collapse"),f=typeof c=="object"&&c;e||d.data("collapse",e=new b(this,f)),typeof c=="string"&&e[c]()})},a.fn.collapse.defaults={toggle:!0},a.fn.collapse.Constructor=b,a(function(){a("body").on("click.collapse.data-api","[data-toggle=collapse]",function(b){var c=a(this),d,e=c.attr("data-target")||b.preventDefault()||(d=c.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),f=a(e).data("collapse")?"toggle":c.data();a(e).collapse(f)})})}(window.jQuery),!function(a){function d(){a(b).parent().removeClass("open")}"use strict";var b='[data-toggle="dropdown"]',c=function(b){var c=a(b).on("click.dropdown.data-api",this.toggle);a("html").on("click.dropdown.data-api",function(){c.parent().removeClass("open")})};c.prototype={constructor:c,toggle:function(b){var c=a(this),e=c.attr("data-target"),f,g;return e||(e=c.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,"")),f=a(e),f.length||(f=c.parent()),g=f.hasClass("open"),d(),!g&&f.toggleClass("open"),!1}},a.fn.dropdown=function(b){return this.each(function(){var d=a(this),e=d.data("dropdown");e||d.data("dropdown",e=new c(this)),typeof b=="string"&&e[b].call(d)})},a.fn.dropdown.Constructor=c,a(function(){a("html").on("click.dropdown.data-api",d),a("body").on("click.dropdown.data-api",b,c.prototype.toggle)})}(window.jQuery),!function(a){function c(){var b=this,c=setTimeout(function(){b.$element.off(a.support.transition.end),d.call(b)},500);this.$element.one(a.support.transition.end,function(){clearTimeout(c),d.call(b)})}function d(a){this.$element.hide().trigger("hidden"),e.call(this)}function e(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;this.$backdrop=a('
` | ``dylan:dylan`` | A mapping between keys and values. | ++--------------------------+------------------------------------+----------------------------------------+ +| `\`_ | ``collections:table-extensions`` | A ``
`` with strings for keys. | ++--------------------------+------------------------------------+----------------------------------------+ + +.. note:: + + Because of the default comparison function for ``
``, it is + important to use ```` when the keys will be strings. + +Mutable vs. Immutable +===================== + +Many operations due to modify the collection passed in. The exception +is when you use an operation ending in ``!`` on a *stretchy* collection. + +For this reason, if you want to modify a collection frequently, be sure +to pay attention to the type of collection that you're working with. + +In many cases, you will need to assign the result of an operation +back to the source collection: + +.. code-block:: dylan + + threads := add(threads, thread); + +Common Operations +================= + ++---------------------+------------------------------+------------------------------------------------------+ +| Class | Operation | Summary | ++=====================+==============================+======================================================+ +| :drm:`` | :drm:`any?` | Returns the first true value obtained by iterating | +| | | over one or more collections. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`do` | Iterates over one or more collections for side | +| | | effect. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`empty?` | Returns true if its argument is empty. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`every?` | Returns true if a predicate returns true when | +| | | applied to all corresponding elements of a set of | +| | | collections. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`fill!` | Fills a collection with a specified value. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`find-key` | Returns the key in a collection such that the | +| | | corresponding collection element satisfies a | +| | | predicate. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`map` | Iterates over one or more collections and collects | +| | | the results in a freshly allocated collection. | +| | | See also :drm:`map-as` and :drm:`map-into`. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`member?` | Returns true if a collection contains a particular | +| | | value. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`reduce` | Combines the elements of a collection and a seed | +| | | value into a single value by repeatedly applying a | +| | | binary function. See also :drm:`reduce1`. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`replace-elements!` | Replaces those collection elements that satisfy a | +| | | predicate. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`size` | Returns the size of its argument. | ++---------------------+------------------------------+------------------------------------------------------+ +| :drm:`` | :drm:`add` / :drm:`add!` | Adds an element to a sequence. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`add-new` / | Adds a new element to a sequence. | +| | :drm:`add-new!` | | +| +------------------------------+------------------------------------------------------+ +| | :drm:`choose` | Returns those elements of a sequence that satisfy a | +| | | predicate. See also :drm:`choose-by`. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`concatenate` | Returns the concatenation of one or more sequences | +| | | in a sequence of a type determined by the | +| | | :drm:`type-for-copy` of its first argument. | +| | | See also :drm:`concatenate-as`. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`copy-sequence` | Returns a freshly allocated copy of some subsequence | +| | | of a sequence. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`intersection` | Returns the intersection of two sequences. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`remove` / | Removes an element from a sequence. | +| | :drm:`remove!` | | +| +------------------------------+------------------------------------------------------+ +| | :drm:`remove-duplicates` | Returns a sequence without duplicates. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`replace-subsequence!` | Replaces a portion of a sequence with the elements | +| | | of another sequence. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`reverse` / | Returns a sequence with elements in the reverse | +| | :drm:`reverse!` | order of its argument sequence. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`sort` / :drm:`sort!` | Returns a sequence containing the elements of its | +| | | argument sequence, sorted. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`subsequence-position` | Returns the position where a pattern appears in a | +| | | sequence. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`union` | Returns the union of two sequences. | ++---------------------+------------------------------+------------------------------------------------------+ +| :drm:`` | :drm:`head` | Returns the head of a list. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`tail` | Returns the tail of a list. | ++---------------------+------------------------------+------------------------------------------------------+ +| :drm:`` | :drm:`push` | Adds an element to the front of a deque. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`pop` | Removes and returns the first element of a deque. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`push-last` | Adds an element to the end of a deque. | +| +------------------------------+------------------------------------------------------+ +| | :drm:`pop-last` | Removes and returns an element from the end of a | +| | | deque. | ++---------------------+------------------------------+------------------------------------------------------+ +| :drm:`
` | :drm:`remove-key!` | Modifies an explicit key collection so it no longer | +| | | has a particular key. | ++---------------------+------------------------------+------------------------------------------------------+ + +.. _: http://opendylan.org/documentation/library-reference/collections/set.html +.. _: http://opendylan.org/documentation/library-reference/collections/bit-set.html +.. _: http://opendylan.org/documentation/library-reference/collections/bit-vector.html +.. _: http://opendylan.org/documentation/library-reference/collections/byte-vector.html +.. _: http://opendylan.org/documentation/library-reference/collections/table-extensions.html#collections:table-extensions:[string-table] diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index f92959ad6b..f7ec3b8d02 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -101,9 +101,12 @@ Documentation

Quick one-page sheets for common tasks.

-* `Basics of Dylan Syntax `_ -* `Iteration `_ -* `Conditionals `_ +.. hlist:: + + * `Basics of Dylan Syntax `_ + * `Iteration `_ + * `Conditionals `_ + * `Collections `_ .. raw:: html From 088a287133ecdb4e1509d8eb28831cbf45e2c885 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Wed, 9 Jan 2013 11:41:10 +0700 Subject: [PATCH 227/519] Improve wording. --- .../source/documentation/cheatsheets/collections.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/documentation/website/source/documentation/cheatsheets/collections.rst b/documentation/website/source/documentation/cheatsheets/collections.rst index f2fe2af56a..80d1a05f72 100644 --- a/documentation/website/source/documentation/cheatsheets/collections.rst +++ b/documentation/website/source/documentation/cheatsheets/collections.rst @@ -45,7 +45,7 @@ Common Collection Types Mutable vs. Immutable ===================== -Many operations due to modify the collection passed in. The exception +Many operations don't modify the collection passed in. The exception is when you use an operation ending in ``!`` on a *stretchy* collection. For this reason, if you want to modify a collection frequently, be sure @@ -58,6 +58,10 @@ back to the source collection: threads := add(threads, thread); +In cases where you are modifying a collection frequently, you may want +to consider using a :drm:`` rather than a `` +or some other type of collection. + Common Operations ================= From 37cff35430cce1610d9fba9e97696a7bf4c30833 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Fri, 18 Jan 2013 16:48:14 +0700 Subject: [PATCH 228/519] Update to CDN-hosted Bootstrap 2.2.2. This also changes the look of the site (for the better, I think). --- documentation/website/README.rst | 7 +- .../source/_themes/opendylan/layout.html | 8 +- .../2.0.2/css/bootstrap-responsive.css | 686 --- .../2.0.2/css/bootstrap-responsive.min.css | 12 - .../static/bootstrap/2.0.2/css/bootstrap.css | 3990 ----------------- .../bootstrap/2.0.2/css/bootstrap.min.css | 689 --- .../2.0.2/img/glyphicons-halflings-white.png | Bin 4352 -> 0 bytes .../2.0.2/img/glyphicons-halflings.png | Bin 4352 -> 0 bytes .../static/bootstrap/2.0.2/js/bootstrap.js | 1726 ------- .../bootstrap/2.0.2/js/bootstrap.min.js | 6 - 10 files changed, 10 insertions(+), 7114 deletions(-) delete mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap-responsive.css delete mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap-responsive.min.css delete mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap.css delete mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap.min.css delete mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/img/glyphicons-halflings-white.png delete mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/img/glyphicons-halflings.png delete mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/js/bootstrap.js delete mode 100644 documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/js/bootstrap.min.js diff --git a/documentation/website/README.rst b/documentation/website/README.rst index 097eb2e0de..ca4fd56564 100644 --- a/documentation/website/README.rst +++ b/documentation/website/README.rst @@ -34,7 +34,12 @@ that you run it with an argument:: make.bat html -The generated site will be in ``build/html``. +The generated site will be in ``build/html``. For the stylesheets and +JavaScript to load correctly, we suggest running a local webserver +pointing to this directory:: + + cd build/html + python -m SimpleHTTPServer Link Validation --------------- diff --git a/documentation/website/source/_themes/opendylan/layout.html b/documentation/website/source/_themes/opendylan/layout.html index 596e72ef4e..23dda0c750 100644 --- a/documentation/website/source/_themes/opendylan/layout.html +++ b/documentation/website/source/_themes/opendylan/layout.html @@ -9,10 +9,7 @@ {% block doctype %} {% endblock %} -{% set css_files = css_files + ['_static/bootstrap/2.0.2/css/bootstrap.min.css', - '_static/bootstrap/2.0.2/css/bootstrap-responsive.min.css', - '_static/opendylan.org/css/opendylan.css'] -%} -{% set script_files = script_files + ['_static/bootstrap/2.0.2/js/bootstrap.min.js'] -%} +{% set css_files = css_files + ['_static/opendylan.org/css/opendylan.css'] -%} {% set navigation_bar = [ ('index', 'Home'), ('about/index', 'About'), @@ -24,6 +21,9 @@ {% set active_page = pagename|default('index') -%} {% block extrahead %} + + + diff --git a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap-responsive.css b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap-responsive.css deleted file mode 100644 index 0bc6de916b..0000000000 --- a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap-responsive.css +++ /dev/null @@ -1,686 +0,0 @@ -/*! - * Bootstrap Responsive v2.0.2 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ -.clearfix { - *zoom: 1; -} -.clearfix:before, -.clearfix:after { - display: table; - content: ""; -} -.clearfix:after { - clear: both; -} -.hide-text { - overflow: hidden; - text-indent: 100%; - white-space: nowrap; -} -.input-block-level { - display: block; - width: 100%; - min-height: 28px; - /* Make inputs at least the height of their button counterpart */ - - /* Makes inputs behave like true block-level elements */ - - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; -} -.hidden { - display: none; - visibility: hidden; -} -.visible-phone { - display: none; -} -.visible-tablet { - display: none; -} -.visible-desktop { - display: block; -} -.hidden-phone { - display: block; -} -.hidden-tablet { - display: block; -} -.hidden-desktop { - display: none; -} -@media (max-width: 767px) { - .visible-phone { - display: block; - } - .hidden-phone { - display: none; - } - .hidden-desktop { - display: block; - } - .visible-desktop { - display: none; - } -} -@media (min-width: 768px) and (max-width: 979px) { - .visible-tablet { - display: block; - } - .hidden-tablet { - display: none; - } - .hidden-desktop { - display: block; - } - .visible-desktop { - display: none; - } -} -@media (max-width: 480px) { - .nav-collapse { - -webkit-transform: translate3d(0, 0, 0); - } - .page-header h1 small { - display: block; - line-height: 18px; - } - input[type="checkbox"], - input[type="radio"] { - border: 1px solid #ccc; - } - .form-horizontal .control-group > label { - float: none; - width: auto; - padding-top: 0; - text-align: left; - } - .form-horizontal .controls { - margin-left: 0; - } - .form-horizontal .control-list { - padding-top: 0; - } - .form-horizontal .form-actions { - padding-left: 10px; - padding-right: 10px; - } - .modal { - position: absolute; - top: 10px; - left: 10px; - right: 10px; - width: auto; - margin: 0; - } - .modal.fade.in { - top: auto; - } - .modal-header .close { - padding: 10px; - margin: -10px; - } - .carousel-caption { - position: static; - } -} -@media (max-width: 767px) { - body { - padding-left: 20px; - padding-right: 20px; - } - .navbar-fixed-top { - margin-left: -20px; - margin-right: -20px; - } - .container { - width: auto; - } - .row-fluid { - width: 100%; - } - .row { - margin-left: 0; - } - .row > [class*="span"], - .row-fluid > [class*="span"] { - float: none; - display: block; - width: auto; - margin: 0; - } - .thumbnails [class*="span"] { - width: auto; - } - input[class*="span"], - select[class*="span"], - textarea[class*="span"], - .uneditable-input { - display: block; - width: 100%; - min-height: 28px; - /* Make inputs at least the height of their button counterpart */ - - /* Makes inputs behave like true block-level elements */ - - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - } - .input-prepend input[class*="span"], - .input-append input[class*="span"] { - width: auto; - } -} -@media (min-width: 768px) and (max-width: 979px) { - .row { - margin-left: -20px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - content: ""; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - margin-left: 20px; - } - .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 724px; - } - .span12 { - width: 724px; - } - .span11 { - width: 662px; - } - .span10 { - width: 600px; - } - .span9 { - width: 538px; - } - .span8 { - width: 476px; - } - .span7 { - width: 414px; - } - .span6 { - width: 352px; - } - .span5 { - width: 290px; - } - .span4 { - width: 228px; - } - .span3 { - width: 166px; - } - .span2 { - width: 104px; - } - .span1 { - width: 42px; - } - .offset12 { - margin-left: 764px; - } - .offset11 { - margin-left: 702px; - } - .offset10 { - margin-left: 640px; - } - .offset9 { - margin-left: 578px; - } - .offset8 { - margin-left: 516px; - } - .offset7 { - margin-left: 454px; - } - .offset6 { - margin-left: 392px; - } - .offset5 { - margin-left: 330px; - } - .offset4 { - margin-left: 268px; - } - .offset3 { - margin-left: 206px; - } - .offset2 { - margin-left: 144px; - } - .offset1 { - margin-left: 82px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - content: ""; - } - .row-fluid:after { - clear: both; - } - .row-fluid > [class*="span"] { - float: left; - margin-left: 2.762430939%; - } - .row-fluid > [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid > .span12 { - width: 99.999999993%; - } - .row-fluid > .span11 { - width: 91.436464082%; - } - .row-fluid > .span10 { - width: 82.87292817100001%; - } - .row-fluid > .span9 { - width: 74.30939226%; - } - .row-fluid > .span8 { - width: 65.74585634900001%; - } - .row-fluid > .span7 { - width: 57.182320438000005%; - } - .row-fluid > .span6 { - width: 48.618784527%; - } - .row-fluid > .span5 { - width: 40.055248616%; - } - .row-fluid > .span4 { - width: 31.491712705%; - } - .row-fluid > .span3 { - width: 22.928176794%; - } - .row-fluid > .span2 { - width: 14.364640883%; - } - .row-fluid > .span1 { - width: 5.801104972%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - input.span12, textarea.span12, .uneditable-input.span12 { - width: 714px; - } - input.span11, textarea.span11, .uneditable-input.span11 { - width: 652px; - } - input.span10, textarea.span10, .uneditable-input.span10 { - width: 590px; - } - input.span9, textarea.span9, .uneditable-input.span9 { - width: 528px; - } - input.span8, textarea.span8, .uneditable-input.span8 { - width: 466px; - } - input.span7, textarea.span7, .uneditable-input.span7 { - width: 404px; - } - input.span6, textarea.span6, .uneditable-input.span6 { - width: 342px; - } - input.span5, textarea.span5, .uneditable-input.span5 { - width: 280px; - } - input.span4, textarea.span4, .uneditable-input.span4 { - width: 218px; - } - input.span3, textarea.span3, .uneditable-input.span3 { - width: 156px; - } - input.span2, textarea.span2, .uneditable-input.span2 { - width: 94px; - } - input.span1, textarea.span1, .uneditable-input.span1 { - width: 32px; - } -} -@media (max-width: 979px) { - body { - padding-top: 0; - } - .navbar-fixed-top { - position: static; - margin-bottom: 18px; - } - .navbar-fixed-top .navbar-inner { - padding: 5px; - } - .navbar .container { - width: auto; - padding: 0; - } - .navbar .brand { - padding-left: 10px; - padding-right: 10px; - margin: 0 0 0 -5px; - } - .navbar .nav-collapse { - clear: left; - } - .navbar .nav { - float: none; - margin: 0 0 9px; - } - .navbar .nav > li { - float: none; - } - .navbar .nav > li > a { - margin-bottom: 2px; - } - .navbar .nav > .divider-vertical { - display: none; - } - .navbar .nav .nav-header { - color: #999999; - text-shadow: none; - } - .navbar .nav > li > a, - .navbar .dropdown-menu a { - padding: 6px 15px; - font-weight: bold; - color: #999999; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - } - .navbar .dropdown-menu li + li a { - margin-bottom: 2px; - } - .navbar .nav > li > a:hover, - .navbar .dropdown-menu a:hover { - background-color: #222222; - } - .navbar .dropdown-menu { - position: static; - top: auto; - left: auto; - float: none; - display: block; - max-width: none; - margin: 0 15px; - padding: 0; - background-color: transparent; - border: none; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - } - .navbar .dropdown-menu:before, - .navbar .dropdown-menu:after { - display: none; - } - .navbar .dropdown-menu .divider { - display: none; - } - .navbar-form, - .navbar-search { - float: none; - padding: 9px 15px; - margin: 9px 0; - border-top: 1px solid #222222; - border-bottom: 1px solid #222222; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - } - .navbar .nav.pull-right { - float: none; - margin-left: 0; - } - .navbar-static .navbar-inner { - padding-left: 10px; - padding-right: 10px; - } - .btn-navbar { - display: block; - } - .nav-collapse { - overflow: hidden; - height: 0; - } -} -@media (min-width: 980px) { - .nav-collapse.collapse { - height: auto !important; - overflow: visible !important; - } -} -@media (min-width: 1200px) { - .row { - margin-left: -30px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - content: ""; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - margin-left: 30px; - } - .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 1170px; - } - .span12 { - width: 1170px; - } - .span11 { - width: 1070px; - } - .span10 { - width: 970px; - } - .span9 { - width: 870px; - } - .span8 { - width: 770px; - } - .span7 { - width: 670px; - } - .span6 { - width: 570px; - } - .span5 { - width: 470px; - } - .span4 { - width: 370px; - } - .span3 { - width: 270px; - } - .span2 { - width: 170px; - } - .span1 { - width: 70px; - } - .offset12 { - margin-left: 1230px; - } - .offset11 { - margin-left: 1130px; - } - .offset10 { - margin-left: 1030px; - } - .offset9 { - margin-left: 930px; - } - .offset8 { - margin-left: 830px; - } - .offset7 { - margin-left: 730px; - } - .offset6 { - margin-left: 630px; - } - .offset5 { - margin-left: 530px; - } - .offset4 { - margin-left: 430px; - } - .offset3 { - margin-left: 330px; - } - .offset2 { - margin-left: 230px; - } - .offset1 { - margin-left: 130px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - content: ""; - } - .row-fluid:after { - clear: both; - } - .row-fluid > [class*="span"] { - float: left; - margin-left: 2.564102564%; - } - .row-fluid > [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid > .span12 { - width: 100%; - } - .row-fluid > .span11 { - width: 91.45299145300001%; - } - .row-fluid > .span10 { - width: 82.905982906%; - } - .row-fluid > .span9 { - width: 74.358974359%; - } - .row-fluid > .span8 { - width: 65.81196581200001%; - } - .row-fluid > .span7 { - width: 57.264957265%; - } - .row-fluid > .span6 { - width: 48.717948718%; - } - .row-fluid > .span5 { - width: 40.170940171000005%; - } - .row-fluid > .span4 { - width: 31.623931624%; - } - .row-fluid > .span3 { - width: 23.076923077%; - } - .row-fluid > .span2 { - width: 14.529914530000001%; - } - .row-fluid > .span1 { - width: 5.982905983%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - input.span12, textarea.span12, .uneditable-input.span12 { - width: 1160px; - } - input.span11, textarea.span11, .uneditable-input.span11 { - width: 1060px; - } - input.span10, textarea.span10, .uneditable-input.span10 { - width: 960px; - } - input.span9, textarea.span9, .uneditable-input.span9 { - width: 860px; - } - input.span8, textarea.span8, .uneditable-input.span8 { - width: 760px; - } - input.span7, textarea.span7, .uneditable-input.span7 { - width: 660px; - } - input.span6, textarea.span6, .uneditable-input.span6 { - width: 560px; - } - input.span5, textarea.span5, .uneditable-input.span5 { - width: 460px; - } - input.span4, textarea.span4, .uneditable-input.span4 { - width: 360px; - } - input.span3, textarea.span3, .uneditable-input.span3 { - width: 260px; - } - input.span2, textarea.span2, .uneditable-input.span2 { - width: 160px; - } - input.span1, textarea.span1, .uneditable-input.span1 { - width: 60px; - } - .thumbnails { - margin-left: -30px; - } - .thumbnails > li { - margin-left: 30px; - } -} diff --git a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap-responsive.min.css b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap-responsive.min.css deleted file mode 100644 index 60a47c9494..0000000000 --- a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap-responsive.min.css +++ /dev/null @@ -1,12 +0,0 @@ -.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";} -.clearfix:after{clear:both;} -.hide-text{overflow:hidden;text-indent:100%;white-space:nowrap;} -.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;} -.hidden{display:none;visibility:hidden;} -.visible-phone{display:none;} -.visible-tablet{display:none;} -.visible-desktop{display:block;} -.hidden-phone{display:block;} -.hidden-tablet{display:block;} -.hidden-desktop{display:none;} -@media (max-width:767px){.visible-phone{display:block;} .hidden-phone{display:none;} .hidden-desktop{display:block;} .visible-desktop{display:none;}}@media (min-width:768px) and (max-width:979px){.visible-tablet{display:block;} .hidden-tablet{display:none;} .hidden-desktop{display:block;} .visible-desktop{display:none;}}@media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0);} .page-header h1 small{display:block;line-height:18px;} input[type="checkbox"],input[type="radio"]{border:1px solid #ccc;} .form-horizontal .control-group>label{float:none;width:auto;padding-top:0;text-align:left;} .form-horizontal .controls{margin-left:0;} .form-horizontal .control-list{padding-top:0;} .form-horizontal .form-actions{padding-left:10px;padding-right:10px;} .modal{position:absolute;top:10px;left:10px;right:10px;width:auto;margin:0;}.modal.fade.in{top:auto;} .modal-header .close{padding:10px;margin:-10px;} .carousel-caption{position:static;}}@media (max-width:767px){body{padding-left:20px;padding-right:20px;} .navbar-fixed-top{margin-left:-20px;margin-right:-20px;} .container{width:auto;} .row-fluid{width:100%;} .row{margin-left:0;} .row>[class*="span"],.row-fluid>[class*="span"]{float:none;display:block;width:auto;margin:0;} .thumbnails [class*="span"]{width:auto;} input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;} .input-prepend input[class*="span"],.input-append input[class*="span"]{width:auto;}}@media (min-width:768px) and (max-width:979px){.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:20px;} .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:724px;} .span12{width:724px;} .span11{width:662px;} .span10{width:600px;} .span9{width:538px;} .span8{width:476px;} .span7{width:414px;} .span6{width:352px;} .span5{width:290px;} .span4{width:228px;} .span3{width:166px;} .span2{width:104px;} .span1{width:42px;} .offset12{margin-left:764px;} .offset11{margin-left:702px;} .offset10{margin-left:640px;} .offset9{margin-left:578px;} .offset8{margin-left:516px;} .offset7{margin-left:454px;} .offset6{margin-left:392px;} .offset5{margin-left:330px;} .offset4{margin-left:268px;} .offset3{margin-left:206px;} .offset2{margin-left:144px;} .offset1{margin-left:82px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.762430939%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid > .span12{width:99.999999993%;} .row-fluid > .span11{width:91.436464082%;} .row-fluid > .span10{width:82.87292817100001%;} .row-fluid > .span9{width:74.30939226%;} .row-fluid > .span8{width:65.74585634900001%;} .row-fluid > .span7{width:57.182320438000005%;} .row-fluid > .span6{width:48.618784527%;} .row-fluid > .span5{width:40.055248616%;} .row-fluid > .span4{width:31.491712705%;} .row-fluid > .span3{width:22.928176794%;} .row-fluid > .span2{width:14.364640883%;} .row-fluid > .span1{width:5.801104972%;} input,textarea,.uneditable-input{margin-left:0;} input.span12, textarea.span12, .uneditable-input.span12{width:714px;} input.span11, textarea.span11, .uneditable-input.span11{width:652px;} input.span10, textarea.span10, .uneditable-input.span10{width:590px;} input.span9, textarea.span9, .uneditable-input.span9{width:528px;} input.span8, textarea.span8, .uneditable-input.span8{width:466px;} input.span7, textarea.span7, .uneditable-input.span7{width:404px;} input.span6, textarea.span6, .uneditable-input.span6{width:342px;} input.span5, textarea.span5, .uneditable-input.span5{width:280px;} input.span4, textarea.span4, .uneditable-input.span4{width:218px;} input.span3, textarea.span3, .uneditable-input.span3{width:156px;} input.span2, textarea.span2, .uneditable-input.span2{width:94px;} input.span1, textarea.span1, .uneditable-input.span1{width:32px;}}@media (max-width:979px){body{padding-top:0;} .navbar-fixed-top{position:static;margin-bottom:18px;} .navbar-fixed-top .navbar-inner{padding:5px;} .navbar .container{width:auto;padding:0;} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px;} .navbar .nav-collapse{clear:left;} .navbar .nav{float:none;margin:0 0 9px;} .navbar .nav>li{float:none;} .navbar .nav>li>a{margin-bottom:2px;} .navbar .nav>.divider-vertical{display:none;} .navbar .nav .nav-header{color:#999999;text-shadow:none;} .navbar .nav>li>a,.navbar .dropdown-menu a{padding:6px 15px;font-weight:bold;color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .navbar .dropdown-menu li+li a{margin-bottom:2px;} .navbar .nav>li>a:hover,.navbar .dropdown-menu a:hover{background-color:#222222;} .navbar .dropdown-menu{position:static;top:auto;left:auto;float:none;display:block;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} .navbar .dropdown-menu:before,.navbar .dropdown-menu:after{display:none;} .navbar .dropdown-menu .divider{display:none;} .navbar-form,.navbar-search{float:none;padding:9px 15px;margin:9px 0;border-top:1px solid #222222;border-bottom:1px solid #222222;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);} .navbar .nav.pull-right{float:none;margin-left:0;} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px;} .btn-navbar{display:block;} .nav-collapse{overflow:hidden;height:0;}}@media (min-width:980px){.nav-collapse.collapse{height:auto !important;overflow:visible !important;}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:30px;} .container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:1170px;} .span12{width:1170px;} .span11{width:1070px;} .span10{width:970px;} .span9{width:870px;} .span8{width:770px;} .span7{width:670px;} .span6{width:570px;} .span5{width:470px;} .span4{width:370px;} .span3{width:270px;} .span2{width:170px;} .span1{width:70px;} .offset12{margin-left:1230px;} .offset11{margin-left:1130px;} .offset10{margin-left:1030px;} .offset9{margin-left:930px;} .offset8{margin-left:830px;} .offset7{margin-left:730px;} .offset6{margin-left:630px;} .offset5{margin-left:530px;} .offset4{margin-left:430px;} .offset3{margin-left:330px;} .offset2{margin-left:230px;} .offset1{margin-left:130px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.564102564%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid > .span12{width:100%;} .row-fluid > .span11{width:91.45299145300001%;} .row-fluid > .span10{width:82.905982906%;} .row-fluid > .span9{width:74.358974359%;} .row-fluid > .span8{width:65.81196581200001%;} .row-fluid > .span7{width:57.264957265%;} .row-fluid > .span6{width:48.717948718%;} .row-fluid > .span5{width:40.170940171000005%;} .row-fluid > .span4{width:31.623931624%;} .row-fluid > .span3{width:23.076923077%;} .row-fluid > .span2{width:14.529914530000001%;} .row-fluid > .span1{width:5.982905983%;} input,textarea,.uneditable-input{margin-left:0;} input.span12, textarea.span12, .uneditable-input.span12{width:1160px;} input.span11, textarea.span11, .uneditable-input.span11{width:1060px;} input.span10, textarea.span10, .uneditable-input.span10{width:960px;} input.span9, textarea.span9, .uneditable-input.span9{width:860px;} input.span8, textarea.span8, .uneditable-input.span8{width:760px;} input.span7, textarea.span7, .uneditable-input.span7{width:660px;} input.span6, textarea.span6, .uneditable-input.span6{width:560px;} input.span5, textarea.span5, .uneditable-input.span5{width:460px;} input.span4, textarea.span4, .uneditable-input.span4{width:360px;} input.span3, textarea.span3, .uneditable-input.span3{width:260px;} input.span2, textarea.span2, .uneditable-input.span2{width:160px;} input.span1, textarea.span1, .uneditable-input.span1{width:60px;} .thumbnails{margin-left:-30px;} .thumbnails>li{margin-left:30px;}} diff --git a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap.css b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap.css deleted file mode 100644 index 495188af7f..0000000000 --- a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap.css +++ /dev/null @@ -1,3990 +0,0 @@ -/*! - * Bootstrap v2.0.2 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} -audio:not([controls]) { - display: none; -} -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} -a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -a:hover, -a:active { - outline: 0; -} -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - height: auto; - border: 0; - -ms-interpolation-mode: bicubic; - vertical-align: middle; -} -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} -button, -input { - *overflow: visible; - line-height: normal; -} -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; -} -button, -input[type="button"], -input[type="reset"], -input[type="submit"] { - cursor: pointer; - -webkit-appearance: button; -} -input[type="search"] { - -webkit-appearance: textfield; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; -} -textarea { - overflow: auto; - vertical-align: top; -} -.clearfix { - *zoom: 1; -} -.clearfix:before, -.clearfix:after { - display: table; - content: ""; -} -.clearfix:after { - clear: both; -} -.hide-text { - overflow: hidden; - text-indent: 100%; - white-space: nowrap; -} -.input-block-level { - display: block; - width: 100%; - min-height: 28px; - /* Make inputs at least the height of their button counterpart */ - - /* Makes inputs behave like true block-level elements */ - - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; -} -body { - margin: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - line-height: 18px; - color: #333333; - background-color: #ffffff; -} -a { - color: #0088cc; - text-decoration: none; -} -a:hover { - color: #005580; - text-decoration: underline; -} -.row { - margin-left: -20px; - *zoom: 1; -} -.row:before, -.row:after { - display: table; - content: ""; -} -.row:after { - clear: both; -} -[class*="span"] { - float: left; - margin-left: 20px; -} -.container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.span12 { - width: 940px; -} -.span11 { - width: 860px; -} -.span10 { - width: 780px; -} -.span9 { - width: 700px; -} -.span8 { - width: 620px; -} -.span7 { - width: 540px; -} -.span6 { - width: 460px; -} -.span5 { - width: 380px; -} -.span4 { - width: 300px; -} -.span3 { - width: 220px; -} -.span2 { - width: 140px; -} -.span1 { - width: 60px; -} -.offset12 { - margin-left: 980px; -} -.offset11 { - margin-left: 900px; -} -.offset10 { - margin-left: 820px; -} -.offset9 { - margin-left: 740px; -} -.offset8 { - margin-left: 660px; -} -.offset7 { - margin-left: 580px; -} -.offset6 { - margin-left: 500px; -} -.offset5 { - margin-left: 420px; -} -.offset4 { - margin-left: 340px; -} -.offset3 { - margin-left: 260px; -} -.offset2 { - margin-left: 180px; -} -.offset1 { - margin-left: 100px; -} -.row-fluid { - width: 100%; - *zoom: 1; -} -.row-fluid:before, -.row-fluid:after { - display: table; - content: ""; -} -.row-fluid:after { - clear: both; -} -.row-fluid > [class*="span"] { - float: left; - margin-left: 2.127659574%; -} -.row-fluid > [class*="span"]:first-child { - margin-left: 0; -} -.row-fluid > .span12 { - width: 99.99999998999999%; -} -.row-fluid > .span11 { - width: 91.489361693%; -} -.row-fluid > .span10 { - width: 82.97872339599999%; -} -.row-fluid > .span9 { - width: 74.468085099%; -} -.row-fluid > .span8 { - width: 65.95744680199999%; -} -.row-fluid > .span7 { - width: 57.446808505%; -} -.row-fluid > .span6 { - width: 48.93617020799999%; -} -.row-fluid > .span5 { - width: 40.425531911%; -} -.row-fluid > .span4 { - width: 31.914893614%; -} -.row-fluid > .span3 { - width: 23.404255317%; -} -.row-fluid > .span2 { - width: 14.89361702%; -} -.row-fluid > .span1 { - width: 6.382978723%; -} -.container { - margin-left: auto; - margin-right: auto; - *zoom: 1; -} -.container:before, -.container:after { - display: table; - content: ""; -} -.container:after { - clear: both; -} -.container-fluid { - padding-left: 20px; - padding-right: 20px; - *zoom: 1; -} -.container-fluid:before, -.container-fluid:after { - display: table; - content: ""; -} -.container-fluid:after { - clear: both; -} -p { - margin: 0 0 9px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - line-height: 18px; -} -p small { - font-size: 11px; - color: #999999; -} -.lead { - margin-bottom: 18px; - font-size: 20px; - font-weight: 200; - line-height: 27px; -} -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 0; - font-family: inherit; - font-weight: bold; - color: inherit; - text-rendering: optimizelegibility; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { - font-weight: normal; - color: #999999; -} -h1 { - font-size: 30px; - line-height: 36px; -} -h1 small { - font-size: 18px; -} -h2 { - font-size: 24px; - line-height: 36px; -} -h2 small { - font-size: 18px; -} -h3 { - line-height: 27px; - font-size: 18px; -} -h3 small { - font-size: 14px; -} -h4, -h5, -h6 { - line-height: 18px; -} -h4 { - font-size: 14px; -} -h4 small { - font-size: 12px; -} -h5 { - font-size: 12px; -} -h6 { - font-size: 11px; - color: #999999; - text-transform: uppercase; -} -.page-header { - padding-bottom: 17px; - margin: 18px 0; - border-bottom: 1px solid #eeeeee; -} -.page-header h1 { - line-height: 1; -} -ul, -ol { - padding: 0; - margin: 0 0 9px 25px; -} -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} -ul { - list-style: disc; -} -ol { - list-style: decimal; -} -li { - line-height: 18px; -} -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} -dl { - margin-bottom: 18px; -} -dt, -dd { - line-height: 18px; -} -dt { - font-weight: bold; - line-height: 17px; -} -dd { - margin-left: 9px; -} -.dl-horizontal dt { - float: left; - clear: left; - width: 120px; - text-align: right; -} -.dl-horizontal dd { - margin-left: 130px; -} -hr { - margin: 18px 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #ffffff; -} -strong { - font-weight: bold; -} -em { - font-style: italic; -} -.muted { - color: #999999; -} -abbr[title] { - border-bottom: 1px dotted #ddd; - cursor: help; -} -abbr.initialism { - font-size: 90%; - text-transform: uppercase; -} -blockquote { - padding: 0 0 0 15px; - margin: 0 0 18px; - border-left: 5px solid #eeeeee; -} -blockquote p { - margin-bottom: 0; - font-size: 16px; - font-weight: 300; - line-height: 22.5px; -} -blockquote small { - display: block; - line-height: 18px; - color: #999999; -} -blockquote small:before { - content: '\2014 \00A0'; -} -blockquote.pull-right { - float: right; - padding-left: 0; - padding-right: 15px; - border-left: 0; - border-right: 5px solid #eeeeee; -} -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; -} -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} -address { - display: block; - margin-bottom: 18px; - line-height: 18px; - font-style: normal; -} -small { - font-size: 100%; -} -cite { - font-style: normal; -} -code, -pre { - padding: 0 3px 2px; - font-family: Menlo, Monaco, "Courier New", monospace; - font-size: 12px; - color: #333333; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -code { - padding: 2px 4px; - color: #d14; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; -} -pre { - display: block; - padding: 8.5px; - margin: 0 0 9px; - font-size: 12.025px; - line-height: 18px; - background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - white-space: pre; - white-space: pre-wrap; - word-break: break-all; - word-wrap: break-word; -} -pre.prettyprint { - margin-bottom: 18px; -} -pre code { - padding: 0; - color: inherit; - background-color: transparent; - border: 0; -} -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} -form { - margin: 0 0 18px; -} -fieldset { - padding: 0; - margin: 0; - border: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 27px; - font-size: 19.5px; - line-height: 36px; - color: #333333; - border: 0; - border-bottom: 1px solid #eee; -} -legend small { - font-size: 13.5px; - color: #999999; -} -label, -input, -button, -select, -textarea { - font-size: 13px; - font-weight: normal; - line-height: 18px; -} -input, -button, -select, -textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} -label { - display: block; - margin-bottom: 5px; - color: #333333; -} -input, -textarea, -select, -.uneditable-input { - display: inline-block; - width: 210px; - height: 18px; - padding: 4px; - margin-bottom: 9px; - font-size: 13px; - line-height: 18px; - color: #555555; - border: 1px solid #cccccc; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.uneditable-textarea { - width: auto; - height: auto; -} -label input, -label textarea, -label select { - display: block; -} -input[type="image"], -input[type="checkbox"], -input[type="radio"] { - width: auto; - height: auto; - padding: 0; - margin: 3px 0; - *margin-top: 0; - /* IE7 */ - - line-height: normal; - cursor: pointer; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - border: 0 \9; - /* IE9 and down */ - -} -input[type="image"] { - border: 0; -} -input[type="file"] { - width: auto; - padding: initial; - line-height: initial; - border: initial; - background-color: #ffffff; - background-color: initial; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -input[type="button"], -input[type="reset"], -input[type="submit"] { - width: auto; - height: auto; -} -select, -input[type="file"] { - height: 28px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ - - line-height: 28px; -} -input[type="file"] { - line-height: 18px \9; -} -select { - width: 220px; - background-color: #ffffff; -} -select[multiple], -select[size] { - height: auto; -} -input[type="image"] { - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -textarea { - height: auto; -} -input[type="hidden"] { - display: none; -} -.radio, -.checkbox { - padding-left: 18px; -} -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -18px; -} -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; -} -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; -} -input, -textarea { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; - -moz-transition: border linear 0.2s, box-shadow linear 0.2s; - -ms-transition: border linear 0.2s, box-shadow linear 0.2s; - -o-transition: border linear 0.2s, box-shadow linear 0.2s; - transition: border linear 0.2s, box-shadow linear 0.2s; -} -input:focus, -textarea:focus { - border-color: rgba(82, 168, 236, 0.8); - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - outline: 0; - outline: thin dotted \9; - /* IE6-9 */ - -} -input[type="file"]:focus, -input[type="radio"]:focus, -input[type="checkbox"]:focus, -select:focus { - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.input-mini { - width: 60px; -} -.input-small { - width: 90px; -} -.input-medium { - width: 150px; -} -.input-large { - width: 210px; -} -.input-xlarge { - width: 270px; -} -.input-xxlarge { - width: 530px; -} -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input { - float: none; - margin-left: 0; -} -input, -textarea, -.uneditable-input { - margin-left: 0; -} -input.span12, textarea.span12, .uneditable-input.span12 { - width: 930px; -} -input.span11, textarea.span11, .uneditable-input.span11 { - width: 850px; -} -input.span10, textarea.span10, .uneditable-input.span10 { - width: 770px; -} -input.span9, textarea.span9, .uneditable-input.span9 { - width: 690px; -} -input.span8, textarea.span8, .uneditable-input.span8 { - width: 610px; -} -input.span7, textarea.span7, .uneditable-input.span7 { - width: 530px; -} -input.span6, textarea.span6, .uneditable-input.span6 { - width: 450px; -} -input.span5, textarea.span5, .uneditable-input.span5 { - width: 370px; -} -input.span4, textarea.span4, .uneditable-input.span4 { - width: 290px; -} -input.span3, textarea.span3, .uneditable-input.span3 { - width: 210px; -} -input.span2, textarea.span2, .uneditable-input.span2 { - width: 130px; -} -input.span1, textarea.span1, .uneditable-input.span1 { - width: 50px; -} -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - background-color: #eeeeee; - border-color: #ddd; - cursor: not-allowed; -} -.control-group.warning > label, -.control-group.warning .help-block, -.control-group.warning .help-inline { - color: #c09853; -} -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - color: #c09853; - border-color: #c09853; -} -.control-group.warning input:focus, -.control-group.warning select:focus, -.control-group.warning textarea:focus { - border-color: #a47e3c; - -webkit-box-shadow: 0 0 6px #dbc59e; - -moz-box-shadow: 0 0 6px #dbc59e; - box-shadow: 0 0 6px #dbc59e; -} -.control-group.warning .input-prepend .add-on, -.control-group.warning .input-append .add-on { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} -.control-group.error > label, -.control-group.error .help-block, -.control-group.error .help-inline { - color: #b94a48; -} -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - color: #b94a48; - border-color: #b94a48; -} -.control-group.error input:focus, -.control-group.error select:focus, -.control-group.error textarea:focus { - border-color: #953b39; - -webkit-box-shadow: 0 0 6px #d59392; - -moz-box-shadow: 0 0 6px #d59392; - box-shadow: 0 0 6px #d59392; -} -.control-group.error .input-prepend .add-on, -.control-group.error .input-append .add-on { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} -.control-group.success > label, -.control-group.success .help-block, -.control-group.success .help-inline { - color: #468847; -} -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - color: #468847; - border-color: #468847; -} -.control-group.success input:focus, -.control-group.success select:focus, -.control-group.success textarea:focus { - border-color: #356635; - -webkit-box-shadow: 0 0 6px #7aba7b; - -moz-box-shadow: 0 0 6px #7aba7b; - box-shadow: 0 0 6px #7aba7b; -} -.control-group.success .input-prepend .add-on, -.control-group.success .input-append .add-on { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} -input:focus:required:invalid, -textarea:focus:required:invalid, -select:focus:required:invalid { - color: #b94a48; - border-color: #ee5f5b; -} -input:focus:required:invalid:focus, -textarea:focus:required:invalid:focus, -select:focus:required:invalid:focus { - border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; - box-shadow: 0 0 6px #f8b9b7; -} -.form-actions { - padding: 17px 20px 18px; - margin-top: 18px; - margin-bottom: 18px; - background-color: #eeeeee; - border-top: 1px solid #ddd; - *zoom: 1; -} -.form-actions:before, -.form-actions:after { - display: table; - content: ""; -} -.form-actions:after { - clear: both; -} -.uneditable-input { - display: block; - background-color: #ffffff; - border-color: #eee; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - cursor: not-allowed; -} -:-moz-placeholder { - color: #999999; -} -::-webkit-input-placeholder { - color: #999999; -} -.help-block, -.help-inline { - color: #555555; -} -.help-block { - display: block; - margin-bottom: 9px; -} -.help-inline { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - vertical-align: middle; - padding-left: 5px; -} -.input-prepend, -.input-append { - margin-bottom: 5px; -} -.input-prepend input, -.input-append input, -.input-prepend select, -.input-append select, -.input-prepend .uneditable-input, -.input-append .uneditable-input { - *margin-left: 0; - -webkit-border-radius: 0 3px 3px 0; - -moz-border-radius: 0 3px 3px 0; - border-radius: 0 3px 3px 0; -} -.input-prepend input:focus, -.input-append input:focus, -.input-prepend select:focus, -.input-append select:focus, -.input-prepend .uneditable-input:focus, -.input-append .uneditable-input:focus { - position: relative; - z-index: 2; -} -.input-prepend .uneditable-input, -.input-append .uneditable-input { - border-left-color: #ccc; -} -.input-prepend .add-on, -.input-append .add-on { - display: inline-block; - width: auto; - min-width: 16px; - height: 18px; - padding: 4px 5px; - font-weight: normal; - line-height: 18px; - text-align: center; - text-shadow: 0 1px 0 #ffffff; - vertical-align: middle; - background-color: #eeeeee; - border: 1px solid #ccc; -} -.input-prepend .add-on, -.input-append .add-on, -.input-prepend .btn, -.input-append .btn { - -webkit-border-radius: 3px 0 0 3px; - -moz-border-radius: 3px 0 0 3px; - border-radius: 3px 0 0 3px; -} -.input-prepend .active, -.input-append .active { - background-color: #a9dba9; - border-color: #46a546; -} -.input-prepend .add-on, -.input-prepend .btn { - margin-right: -1px; -} -.input-append input, -.input-append select .uneditable-input { - -webkit-border-radius: 3px 0 0 3px; - -moz-border-radius: 3px 0 0 3px; - border-radius: 3px 0 0 3px; -} -.input-append .uneditable-input { - border-left-color: #eee; - border-right-color: #ccc; -} -.input-append .add-on, -.input-append .btn { - margin-left: -1px; - -webkit-border-radius: 0 3px 3px 0; - -moz-border-radius: 0 3px 3px 0; - border-radius: 0 3px 3px 0; -} -.input-prepend.input-append input, -.input-prepend.input-append select, -.input-prepend.input-append .uneditable-input { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.input-prepend.input-append .add-on:first-child, -.input-prepend.input-append .btn:first-child { - margin-right: -1px; - -webkit-border-radius: 3px 0 0 3px; - -moz-border-radius: 3px 0 0 3px; - border-radius: 3px 0 0 3px; -} -.input-prepend.input-append .add-on:last-child, -.input-prepend.input-append .btn:last-child { - margin-left: -1px; - -webkit-border-radius: 0 3px 3px 0; - -moz-border-radius: 0 3px 3px 0; - border-radius: 0 3px 3px 0; -} -.search-query { - padding-left: 14px; - padding-right: 14px; - margin-bottom: 0; - -webkit-border-radius: 14px; - -moz-border-radius: 14px; - border-radius: 14px; -} -.form-search input, -.form-inline input, -.form-horizontal input, -.form-search textarea, -.form-inline textarea, -.form-horizontal textarea, -.form-search select, -.form-inline select, -.form-horizontal select, -.form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, -.form-search .uneditable-input, -.form-inline .uneditable-input, -.form-horizontal .uneditable-input, -.form-search .input-prepend, -.form-inline .input-prepend, -.form-horizontal .input-prepend, -.form-search .input-append, -.form-inline .input-append, -.form-horizontal .input-append { - display: inline-block; - margin-bottom: 0; -} -.form-search .hide, -.form-inline .hide, -.form-horizontal .hide { - display: none; -} -.form-search label, -.form-inline label { - display: inline-block; -} -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-left: 0; - margin-right: 3px; -} -.control-group { - margin-bottom: 9px; -} -legend + .control-group { - margin-top: 18px; - -webkit-margin-top-collapse: separate; -} -.form-horizontal .control-group { - margin-bottom: 18px; - *zoom: 1; -} -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { - display: table; - content: ""; -} -.form-horizontal .control-group:after { - clear: both; -} -.form-horizontal .control-label { - float: left; - width: 140px; - padding-top: 5px; - text-align: right; -} -.form-horizontal .controls { - margin-left: 160px; - /* Super jank IE7 fix to ensure the inputs in .input-append and input-prepend don't inherit the margin of the parent, in this case .controls */ - - *display: inline-block; - *margin-left: 0; - *padding-left: 20px; -} -.form-horizontal .help-block { - margin-top: 9px; - margin-bottom: 0; -} -.form-horizontal .form-actions { - padding-left: 160px; -} -table { - max-width: 100%; - border-collapse: collapse; - border-spacing: 0; - background-color: transparent; -} -.table { - width: 100%; - margin-bottom: 18px; -} -.table th, -.table td { - padding: 8px; - line-height: 18px; - text-align: left; - vertical-align: top; - border-top: 1px solid #dddddd; -} -.table th { - font-weight: bold; -} -.table thead th { - vertical-align: bottom; -} -.table colgroup + thead tr:first-child th, -.table colgroup + thead tr:first-child td, -.table thead:first-child tr:first-child th, -.table thead:first-child tr:first-child td { - border-top: 0; -} -.table tbody + tbody { - border-top: 2px solid #dddddd; -} -.table-condensed th, -.table-condensed td { - padding: 4px 5px; -} -.table-bordered { - border: 1px solid #dddddd; - border-left: 0; - border-collapse: separate; - *border-collapse: collapsed; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.table-bordered th, -.table-bordered td { - border-left: 1px solid #dddddd; -} -.table-bordered thead:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child th, -.table-bordered tbody:first-child tr:first-child td { - border-top: 0; -} -.table-bordered thead:first-child tr:first-child th:first-child, -.table-bordered tbody:first-child tr:first-child td:first-child { - -webkit-border-radius: 4px 0 0 0; - -moz-border-radius: 4px 0 0 0; - border-radius: 4px 0 0 0; -} -.table-bordered thead:first-child tr:first-child th:last-child, -.table-bordered tbody:first-child tr:first-child td:last-child { - -webkit-border-radius: 0 4px 0 0; - -moz-border-radius: 0 4px 0 0; - border-radius: 0 4px 0 0; -} -.table-bordered thead:last-child tr:last-child th:first-child, -.table-bordered tbody:last-child tr:last-child td:first-child { - -webkit-border-radius: 0 0 0 4px; - -moz-border-radius: 0 0 0 4px; - border-radius: 0 0 0 4px; -} -.table-bordered thead:last-child tr:last-child th:last-child, -.table-bordered tbody:last-child tr:last-child td:last-child { - -webkit-border-radius: 0 0 4px 0; - -moz-border-radius: 0 0 4px 0; - border-radius: 0 0 4px 0; -} -.table-striped tbody tr:nth-child(odd) td, -.table-striped tbody tr:nth-child(odd) th { - background-color: #f9f9f9; -} -.table tbody tr:hover td, -.table tbody tr:hover th { - background-color: #f5f5f5; -} -table .span1 { - float: none; - width: 44px; - margin-left: 0; -} -table .span2 { - float: none; - width: 124px; - margin-left: 0; -} -table .span3 { - float: none; - width: 204px; - margin-left: 0; -} -table .span4 { - float: none; - width: 284px; - margin-left: 0; -} -table .span5 { - float: none; - width: 364px; - margin-left: 0; -} -table .span6 { - float: none; - width: 444px; - margin-left: 0; -} -table .span7 { - float: none; - width: 524px; - margin-left: 0; -} -table .span8 { - float: none; - width: 604px; - margin-left: 0; -} -table .span9 { - float: none; - width: 684px; - margin-left: 0; -} -table .span10 { - float: none; - width: 764px; - margin-left: 0; -} -table .span11 { - float: none; - width: 844px; - margin-left: 0; -} -table .span12 { - float: none; - width: 924px; - margin-left: 0; -} -table .span13 { - float: none; - width: 1004px; - margin-left: 0; -} -table .span14 { - float: none; - width: 1084px; - margin-left: 0; -} -table .span15 { - float: none; - width: 1164px; - margin-left: 0; -} -table .span16 { - float: none; - width: 1244px; - margin-left: 0; -} -table .span17 { - float: none; - width: 1324px; - margin-left: 0; -} -table .span18 { - float: none; - width: 1404px; - margin-left: 0; -} -table .span19 { - float: none; - width: 1484px; - margin-left: 0; -} -table .span20 { - float: none; - width: 1564px; - margin-left: 0; -} -table .span21 { - float: none; - width: 1644px; - margin-left: 0; -} -table .span22 { - float: none; - width: 1724px; - margin-left: 0; -} -table .span23 { - float: none; - width: 1804px; - margin-left: 0; -} -table .span24 { - float: none; - width: 1884px; - margin-left: 0; -} -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - line-height: 14px; - vertical-align: text-top; - background-image: url("../img/glyphicons-halflings.png"); - background-position: 14px 14px; - background-repeat: no-repeat; - *margin-right: .3em; -} -[class^="icon-"]:last-child, -[class*=" icon-"]:last-child { - *margin-left: 0; -} -.icon-white { - background-image: url("../img/glyphicons-halflings-white.png"); -} -.icon-glass { - background-position: 0 0; -} -.icon-music { - background-position: -24px 0; -} -.icon-search { - background-position: -48px 0; -} -.icon-envelope { - background-position: -72px 0; -} -.icon-heart { - background-position: -96px 0; -} -.icon-star { - background-position: -120px 0; -} -.icon-star-empty { - background-position: -144px 0; -} -.icon-user { - background-position: -168px 0; -} -.icon-film { - background-position: -192px 0; -} -.icon-th-large { - background-position: -216px 0; -} -.icon-th { - background-position: -240px 0; -} -.icon-th-list { - background-position: -264px 0; -} -.icon-ok { - background-position: -288px 0; -} -.icon-remove { - background-position: -312px 0; -} -.icon-zoom-in { - background-position: -336px 0; -} -.icon-zoom-out { - background-position: -360px 0; -} -.icon-off { - background-position: -384px 0; -} -.icon-signal { - background-position: -408px 0; -} -.icon-cog { - background-position: -432px 0; -} -.icon-trash { - background-position: -456px 0; -} -.icon-home { - background-position: 0 -24px; -} -.icon-file { - background-position: -24px -24px; -} -.icon-time { - background-position: -48px -24px; -} -.icon-road { - background-position: -72px -24px; -} -.icon-download-alt { - background-position: -96px -24px; -} -.icon-download { - background-position: -120px -24px; -} -.icon-upload { - background-position: -144px -24px; -} -.icon-inbox { - background-position: -168px -24px; -} -.icon-play-circle { - background-position: -192px -24px; -} -.icon-repeat { - background-position: -216px -24px; -} -.icon-refresh { - background-position: -240px -24px; -} -.icon-list-alt { - background-position: -264px -24px; -} -.icon-lock { - background-position: -287px -24px; -} -.icon-flag { - background-position: -312px -24px; -} -.icon-headphones { - background-position: -336px -24px; -} -.icon-volume-off { - background-position: -360px -24px; -} -.icon-volume-down { - background-position: -384px -24px; -} -.icon-volume-up { - background-position: -408px -24px; -} -.icon-qrcode { - background-position: -432px -24px; -} -.icon-barcode { - background-position: -456px -24px; -} -.icon-tag { - background-position: 0 -48px; -} -.icon-tags { - background-position: -25px -48px; -} -.icon-book { - background-position: -48px -48px; -} -.icon-bookmark { - background-position: -72px -48px; -} -.icon-print { - background-position: -96px -48px; -} -.icon-camera { - background-position: -120px -48px; -} -.icon-font { - background-position: -144px -48px; -} -.icon-bold { - background-position: -167px -48px; -} -.icon-italic { - background-position: -192px -48px; -} -.icon-text-height { - background-position: -216px -48px; -} -.icon-text-width { - background-position: -240px -48px; -} -.icon-align-left { - background-position: -264px -48px; -} -.icon-align-center { - background-position: -288px -48px; -} -.icon-align-right { - background-position: -312px -48px; -} -.icon-align-justify { - background-position: -336px -48px; -} -.icon-list { - background-position: -360px -48px; -} -.icon-indent-left { - background-position: -384px -48px; -} -.icon-indent-right { - background-position: -408px -48px; -} -.icon-facetime-video { - background-position: -432px -48px; -} -.icon-picture { - background-position: -456px -48px; -} -.icon-pencil { - background-position: 0 -72px; -} -.icon-map-marker { - background-position: -24px -72px; -} -.icon-adjust { - background-position: -48px -72px; -} -.icon-tint { - background-position: -72px -72px; -} -.icon-edit { - background-position: -96px -72px; -} -.icon-share { - background-position: -120px -72px; -} -.icon-check { - background-position: -144px -72px; -} -.icon-move { - background-position: -168px -72px; -} -.icon-step-backward { - background-position: -192px -72px; -} -.icon-fast-backward { - background-position: -216px -72px; -} -.icon-backward { - background-position: -240px -72px; -} -.icon-play { - background-position: -264px -72px; -} -.icon-pause { - background-position: -288px -72px; -} -.icon-stop { - background-position: -312px -72px; -} -.icon-forward { - background-position: -336px -72px; -} -.icon-fast-forward { - background-position: -360px -72px; -} -.icon-step-forward { - background-position: -384px -72px; -} -.icon-eject { - background-position: -408px -72px; -} -.icon-chevron-left { - background-position: -432px -72px; -} -.icon-chevron-right { - background-position: -456px -72px; -} -.icon-plus-sign { - background-position: 0 -96px; -} -.icon-minus-sign { - background-position: -24px -96px; -} -.icon-remove-sign { - background-position: -48px -96px; -} -.icon-ok-sign { - background-position: -72px -96px; -} -.icon-question-sign { - background-position: -96px -96px; -} -.icon-info-sign { - background-position: -120px -96px; -} -.icon-screenshot { - background-position: -144px -96px; -} -.icon-remove-circle { - background-position: -168px -96px; -} -.icon-ok-circle { - background-position: -192px -96px; -} -.icon-ban-circle { - background-position: -216px -96px; -} -.icon-arrow-left { - background-position: -240px -96px; -} -.icon-arrow-right { - background-position: -264px -96px; -} -.icon-arrow-up { - background-position: -289px -96px; -} -.icon-arrow-down { - background-position: -312px -96px; -} -.icon-share-alt { - background-position: -336px -96px; -} -.icon-resize-full { - background-position: -360px -96px; -} -.icon-resize-small { - background-position: -384px -96px; -} -.icon-plus { - background-position: -408px -96px; -} -.icon-minus { - background-position: -433px -96px; -} -.icon-asterisk { - background-position: -456px -96px; -} -.icon-exclamation-sign { - background-position: 0 -120px; -} -.icon-gift { - background-position: -24px -120px; -} -.icon-leaf { - background-position: -48px -120px; -} -.icon-fire { - background-position: -72px -120px; -} -.icon-eye-open { - background-position: -96px -120px; -} -.icon-eye-close { - background-position: -120px -120px; -} -.icon-warning-sign { - background-position: -144px -120px; -} -.icon-plane { - background-position: -168px -120px; -} -.icon-calendar { - background-position: -192px -120px; -} -.icon-random { - background-position: -216px -120px; -} -.icon-comment { - background-position: -240px -120px; -} -.icon-magnet { - background-position: -264px -120px; -} -.icon-chevron-up { - background-position: -288px -120px; -} -.icon-chevron-down { - background-position: -313px -119px; -} -.icon-retweet { - background-position: -336px -120px; -} -.icon-shopping-cart { - background-position: -360px -120px; -} -.icon-folder-close { - background-position: -384px -120px; -} -.icon-folder-open { - background-position: -408px -120px; -} -.icon-resize-vertical { - background-position: -432px -119px; -} -.icon-resize-horizontal { - background-position: -456px -118px; -} -.dropdown { - position: relative; -} -.dropdown-toggle { - *margin-bottom: -3px; -} -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid #000000; - opacity: 0.3; - filter: alpha(opacity=30); - content: ""; -} -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} -.dropdown:hover .caret, -.open.dropdown .caret { - opacity: 1; - filter: alpha(opacity=100); -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - float: left; - display: none; - min-width: 160px; - padding: 4px 0; - margin: 0; - list-style: none; - background-color: #ffffff; - border-color: #ccc; - border-color: rgba(0, 0, 0, 0.2); - border-style: solid; - border-width: 1px; - -webkit-border-radius: 0 0 5px 5px; - -moz-border-radius: 0 0 5px 5px; - border-radius: 0 0 5px 5px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - *border-right-width: 2px; - *border-bottom-width: 2px; -} -.dropdown-menu.pull-right { - right: 0; - left: auto; -} -.dropdown-menu .divider { - height: 1px; - margin: 8px 1px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; - *width: 100%; - *margin: -5px 0 5px; -} -.dropdown-menu a { - display: block; - padding: 3px 15px; - clear: both; - font-weight: normal; - line-height: 18px; - color: #333333; - white-space: nowrap; -} -.dropdown-menu li > a:hover, -.dropdown-menu .active > a, -.dropdown-menu .active > a:hover { - color: #ffffff; - text-decoration: none; - background-color: #0088cc; -} -.dropdown.open { - *z-index: 1000; -} -.dropdown.open .dropdown-toggle { - color: #ffffff; - background: #ccc; - background: rgba(0, 0, 0, 0.3); -} -.dropdown.open .dropdown-menu { - display: block; -} -.pull-right .dropdown-menu { - left: auto; - right: 0; -} -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid #000000; - content: "\2191"; -} -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; -} -.typeahead { - margin-top: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #eee; - border: 1px solid rgba(0, 0, 0, 0.05); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} -.well-large { - padding: 24px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.well-small { - padding: 9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.fade { - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -ms-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; - opacity: 0; -} -.fade.in { - opacity: 1; -} -.collapse { - -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -ms-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; - position: relative; - overflow: hidden; - height: 0; -} -.collapse.in { - height: auto; -} -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: 18px; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover { - color: #000000; - text-decoration: none; - opacity: 0.4; - filter: alpha(opacity=40); - cursor: pointer; -} -.btn { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - padding: 4px 10px 4px; - margin-bottom: 0; - font-size: 13px; - line-height: 18px; - color: #333333; - text-align: center; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - vertical-align: middle; - background-color: #f5f5f5; - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -ms-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(top, #ffffff, #e6e6e6); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:dximagetransform.microsoft.gradient(enabled=false); - border: 1px solid #cccccc; - border-bottom-color: #b3b3b3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - cursor: pointer; - *margin-left: .3em; -} -.btn:hover, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { - background-color: #e6e6e6; -} -.btn:active, -.btn.active { - background-color: #cccccc \9; -} -.btn:first-child { - *margin-left: 0; -} -.btn:hover { - color: #333333; - text-decoration: none; - background-color: #e6e6e6; - background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -ms-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; -} -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn.active, -.btn:active { - background-image: none; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - background-color: #e6e6e6; - background-color: #d9d9d9 \9; - outline: 0; -} -.btn.disabled, -.btn[disabled] { - cursor: default; - background-image: none; - background-color: #e6e6e6; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.btn-large { - padding: 9px 14px; - font-size: 15px; - line-height: normal; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} -.btn-large [class^="icon-"] { - margin-top: 1px; -} -.btn-small { - padding: 5px 9px; - font-size: 11px; - line-height: 16px; -} -.btn-small [class^="icon-"] { - margin-top: -1px; -} -.btn-mini { - padding: 2px 6px; - font-size: 11px; - line-height: 14px; -} -.btn-primary, -.btn-primary:hover, -.btn-warning, -.btn-warning:hover, -.btn-danger, -.btn-danger:hover, -.btn-success, -.btn-success:hover, -.btn-info, -.btn-info:hover, -.btn-inverse, -.btn-inverse:hover { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - color: #ffffff; -} -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255, 255, 255, 0.75); -} -.btn-primary { - background-color: #0074cc; - background-image: -moz-linear-gradient(top, #0088cc, #0055cc); - background-image: -ms-linear-gradient(top, #0088cc, #0055cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0055cc); - background-image: -o-linear-gradient(top, #0088cc, #0055cc); - background-image: linear-gradient(top, #0088cc, #0055cc); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0055cc', GradientType=0); - border-color: #0055cc #0055cc #003580; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:dximagetransform.microsoft.gradient(enabled=false); -} -.btn-primary:hover, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - background-color: #0055cc; -} -.btn-primary:active, -.btn-primary.active { - background-color: #004099 \9; -} -.btn-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -ms-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(top, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0); - border-color: #f89406 #f89406 #ad6704; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:dximagetransform.microsoft.gradient(enabled=false); -} -.btn-warning:hover, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - background-color: #f89406; -} -.btn-warning:active, -.btn-warning.active { - background-color: #c67605 \9; -} -.btn-danger { - background-color: #da4f49; - background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(top, #ee5f5b, #bd362f); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0); - border-color: #bd362f #bd362f #802420; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:dximagetransform.microsoft.gradient(enabled=false); -} -.btn-danger:hover, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - background-color: #bd362f; -} -.btn-danger:active, -.btn-danger.active { - background-color: #942a25 \9; -} -.btn-success { - background-color: #5bb75b; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -ms-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(top, #62c462, #51a351); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0); - border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:dximagetransform.microsoft.gradient(enabled=false); -} -.btn-success:hover, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - background-color: #51a351; -} -.btn-success:active, -.btn-success.active { - background-color: #408140 \9; -} -.btn-info { - background-color: #49afcd; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(top, #5bc0de, #2f96b4); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0); - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:dximagetransform.microsoft.gradient(enabled=false); -} -.btn-info:hover, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - background-color: #2f96b4; -} -.btn-info:active, -.btn-info.active { - background-color: #24748c \9; -} -.btn-inverse { - background-color: #414141; - background-image: -moz-linear-gradient(top, #555555, #222222); - background-image: -ms-linear-gradient(top, #555555, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222)); - background-image: -webkit-linear-gradient(top, #555555, #222222); - background-image: -o-linear-gradient(top, #555555, #222222); - background-image: linear-gradient(top, #555555, #222222); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0); - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:dximagetransform.microsoft.gradient(enabled=false); -} -.btn-inverse:hover, -.btn-inverse:active, -.btn-inverse.active, -.btn-inverse.disabled, -.btn-inverse[disabled] { - background-color: #222222; -} -.btn-inverse:active, -.btn-inverse.active { - background-color: #080808 \9; -} -button.btn, -input[type="submit"].btn { - *padding-top: 2px; - *padding-bottom: 2px; -} -button.btn::-moz-focus-inner, -input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; -} -button.btn.btn-large, -input[type="submit"].btn.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; -} -button.btn.btn-small, -input[type="submit"].btn.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; -} -button.btn.btn-mini, -input[type="submit"].btn.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; -} -.btn-group { - position: relative; - *zoom: 1; - *margin-left: .3em; -} -.btn-group:before, -.btn-group:after { - display: table; - content: ""; -} -.btn-group:after { - clear: both; -} -.btn-group:first-child { - *margin-left: 0; -} -.btn-group + .btn-group { - margin-left: 5px; -} -.btn-toolbar { - margin-top: 9px; - margin-bottom: 9px; -} -.btn-toolbar .btn-group { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; -} -.btn-group .btn { - position: relative; - float: left; - margin-left: -1px; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-group .btn:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.btn-group .btn:last-child, -.btn-group .dropdown-toggle { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.btn-group .btn.large:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 6px; - -moz-border-radius-topleft: 6px; - border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - border-bottom-left-radius: 6px; -} -.btn-group .btn.large:last-child, -.btn-group .large.dropdown-toggle { - -webkit-border-top-right-radius: 6px; - -moz-border-radius-topright: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-bottomright: 6px; - border-bottom-right-radius: 6px; -} -.btn-group .btn:hover, -.btn-group .btn:focus, -.btn-group .btn:active, -.btn-group .btn.active { - z-index: 2; -} -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; - -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - *padding-top: 3px; - *padding-bottom: 3px; -} -.btn-group .btn-mini.dropdown-toggle { - padding-left: 5px; - padding-right: 5px; - *padding-top: 1px; - *padding-bottom: 1px; -} -.btn-group .btn-small.dropdown-toggle { - *padding-top: 4px; - *padding-bottom: 4px; -} -.btn-group .btn-large.dropdown-toggle { - padding-left: 12px; - padding-right: 12px; -} -.btn-group.open { - *z-index: 1000; -} -.btn-group.open .dropdown-menu { - display: block; - margin-top: 1px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} -.btn-group.open .dropdown-toggle { - background-image: none; - -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); -} -.btn .caret { - margin-top: 7px; - margin-left: 0; -} -.btn:hover .caret, -.open.btn-group .caret { - opacity: 1; - filter: alpha(opacity=100); -} -.btn-mini .caret { - margin-top: 5px; -} -.btn-small .caret { - margin-top: 6px; -} -.btn-large .caret { - margin-top: 6px; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-top: 5px solid #000000; -} -.btn-primary .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret, -.btn-success .caret, -.btn-inverse .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 0.75; - filter: alpha(opacity=75); -} -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: 18px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - background-color: #fcf8e3; - border: 1px solid #fbeed5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - color: #c09853; -} -.alert-heading { - color: inherit; -} -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 18px; -} -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; - color: #468847; -} -.alert-danger, -.alert-error { - background-color: #f2dede; - border-color: #eed3d7; - color: #b94a48; -} -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; - color: #3a87ad; -} -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} -.alert-block p + p { - margin-top: 5px; -} -.nav { - margin-left: 0; - margin-bottom: 18px; - list-style: none; -} -.nav > li > a { - display: block; -} -.nav > li > a:hover { - text-decoration: none; - background-color: #eeeeee; -} -.nav .nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: 18px; - color: #999999; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - text-transform: uppercase; -} -.nav li + .nav-header { - margin-top: 9px; -} -.nav-list { - padding-left: 15px; - padding-right: 15px; - margin-bottom: 0; -} -.nav-list > li > a, -.nav-list .nav-header { - margin-left: -15px; - margin-right: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} -.nav-list > li > a { - padding: 3px 15px; -} -.nav-list > .active > a, -.nav-list > .active > a:hover { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - background-color: #0088cc; -} -.nav-list [class^="icon-"] { - margin-right: 2px; -} -.nav-list .divider { - height: 1px; - margin: 8px 1px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; - *width: 100%; - *margin: -5px 0 5px; -} -.nav-tabs, -.nav-pills { - *zoom: 1; -} -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { - display: table; - content: ""; -} -.nav-tabs:after, -.nav-pills:after { - clear: both; -} -.nav-tabs > li, -.nav-pills > li { - float: left; -} -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; -} -.nav-tabs { - border-bottom: 1px solid #ddd; -} -.nav-tabs > li { - margin-bottom: -1px; -} -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: 18px; - border: 1px solid transparent; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; -} -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover { - color: #555555; - background-color: #ffffff; - border: 1px solid #ddd; - border-bottom-color: transparent; - cursor: default; -} -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} -.nav-pills > .active > a, -.nav-pills > .active > a:hover { - color: #ffffff; - background-color: #0088cc; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li > a { - margin-right: 0; -} -.nav-tabs.nav-stacked { - border-bottom: 0; -} -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.nav-tabs.nav-stacked > li:first-child > a { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.nav-tabs.nav-stacked > li:last-child > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.nav-tabs.nav-stacked > li > a:hover { - border-color: #ddd; - z-index: 2; -} -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; -} -.nav-tabs .dropdown-menu, -.nav-pills .dropdown-menu { - margin-top: 1px; - border-width: 1px; -} -.nav-pills .dropdown-menu { - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.nav-tabs .dropdown-toggle .caret, -.nav-pills .dropdown-toggle .caret { - border-top-color: #0088cc; - border-bottom-color: #0088cc; - margin-top: 6px; -} -.nav-tabs .dropdown-toggle:hover .caret, -.nav-pills .dropdown-toggle:hover .caret { - border-top-color: #005580; - border-bottom-color: #005580; -} -.nav-tabs .active .dropdown-toggle .caret, -.nav-pills .active .dropdown-toggle .caret { - border-top-color: #333333; - border-bottom-color: #333333; -} -.nav > .dropdown.active > a:hover { - color: #000000; - cursor: pointer; -} -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > .open.active > a:hover { - color: #ffffff; - background-color: #999999; - border-color: #999999; -} -.nav .open .caret, -.nav .open.active .caret, -.nav .open a:hover .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 1; - filter: alpha(opacity=100); -} -.tabs-stacked .open > a:hover { - border-color: #999999; -} -.tabbable { - *zoom: 1; -} -.tabbable:before, -.tabbable:after { - display: table; - content: ""; -} -.tabbable:after { - clear: both; -} -.tab-content { - display: table; - width: 100%; -} -.tabs-below .nav-tabs, -.tabs-right .nav-tabs, -.tabs-left .nav-tabs { - border-bottom: 0; -} -.tab-content > .tab-pane, -.pill-content > .pill-pane { - display: none; -} -.tab-content > .active, -.pill-content > .active { - display: block; -} -.tabs-below .nav-tabs { - border-top: 1px solid #ddd; -} -.tabs-below .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} -.tabs-below .nav-tabs > li > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.tabs-below .nav-tabs > li > a:hover { - border-bottom-color: transparent; - border-top-color: #ddd; -} -.tabs-below .nav-tabs .active > a, -.tabs-below .nav-tabs .active > a:hover { - border-color: transparent #ddd #ddd #ddd; -} -.tabs-left .nav-tabs > li, -.tabs-right .nav-tabs > li { - float: none; -} -.tabs-left .nav-tabs > li > a, -.tabs-right .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} -.tabs-left .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} -.tabs-left .nav-tabs > li > a { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.tabs-left .nav-tabs > li > a:hover { - border-color: #eeeeee #dddddd #eeeeee #eeeeee; -} -.tabs-left .nav-tabs .active > a, -.tabs-left .nav-tabs .active > a:hover { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: #ffffff; -} -.tabs-right .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} -.tabs-right .nav-tabs > li > a { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.tabs-right .nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #eeeeee #dddddd; -} -.tabs-right .nav-tabs .active > a, -.tabs-right .nav-tabs .active > a:hover { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: #ffffff; -} -.navbar { - *position: relative; - *z-index: 2; - overflow: visible; - margin-bottom: 18px; -} -.navbar-inner { - padding-left: 20px; - padding-right: 20px; - background-color: #2c2c2c; - background-image: -moz-linear-gradient(top, #333333, #222222); - background-image: -ms-linear-gradient(top, #333333, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); - background-image: -webkit-linear-gradient(top, #333333, #222222); - background-image: -o-linear-gradient(top, #333333, #222222); - background-image: linear-gradient(top, #333333, #222222); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); -} -.navbar .container { - width: auto; -} -.btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-left: 5px; - margin-right: 5px; - background-color: #2c2c2c; - background-image: -moz-linear-gradient(top, #333333, #222222); - background-image: -ms-linear-gradient(top, #333333, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); - background-image: -webkit-linear-gradient(top, #333333, #222222); - background-image: -o-linear-gradient(top, #333333, #222222); - background-image: linear-gradient(top, #333333, #222222); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:dximagetransform.microsoft.gradient(enabled=false); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); -} -.btn-navbar:hover, -.btn-navbar:active, -.btn-navbar.active, -.btn-navbar.disabled, -.btn-navbar[disabled] { - background-color: #222222; -} -.btn-navbar:active, -.btn-navbar.active { - background-color: #080808 \9; -} -.btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); -} -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} -.nav-collapse.collapse { - height: auto; -} -.navbar { - color: #999999; -} -.navbar .brand:hover { - text-decoration: none; -} -.navbar .brand { - float: left; - display: block; - padding: 8px 20px 12px; - margin-left: -20px; - font-size: 20px; - font-weight: 200; - line-height: 1; - color: #ffffff; -} -.navbar .navbar-text { - margin-bottom: 0; - line-height: 40px; -} -.navbar .btn, -.navbar .btn-group { - margin-top: 5px; -} -.navbar .btn-group .btn { - margin-top: 0; -} -.navbar-form { - margin-bottom: 0; - *zoom: 1; -} -.navbar-form:before, -.navbar-form:after { - display: table; - content: ""; -} -.navbar-form:after { - clear: both; -} -.navbar-form input, -.navbar-form select, -.navbar-form .radio, -.navbar-form .checkbox { - margin-top: 5px; -} -.navbar-form input, -.navbar-form select { - display: inline-block; - margin-bottom: 0; -} -.navbar-form input[type="image"], -.navbar-form input[type="checkbox"], -.navbar-form input[type="radio"] { - margin-top: 3px; -} -.navbar-form .input-append, -.navbar-form .input-prepend { - margin-top: 6px; - white-space: nowrap; -} -.navbar-form .input-append input, -.navbar-form .input-prepend input { - margin-top: 0; -} -.navbar-search { - position: relative; - float: left; - margin-top: 6px; - margin-bottom: 0; -} -.navbar-search .search-query { - padding: 4px 9px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - font-weight: normal; - line-height: 1; - color: #ffffff; - background-color: #626262; - border: 1px solid #151515; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15); - -webkit-transition: none; - -moz-transition: none; - -ms-transition: none; - -o-transition: none; - transition: none; -} -.navbar-search .search-query:-moz-placeholder { - color: #cccccc; -} -.navbar-search .search-query::-webkit-input-placeholder { - color: #cccccc; -} -.navbar-search .search-query:focus, -.navbar-search .search-query.focused { - padding: 5px 10px; - color: #333333; - text-shadow: 0 1px 0 #ffffff; - background-color: #ffffff; - border: 0; - -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - outline: 0; -} -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; - margin-bottom: 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-left: 0; - padding-right: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; -} -.navbar-fixed-top { - top: 0; -} -.navbar-fixed-bottom { - bottom: 0; -} -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} -.navbar .nav.pull-right { - float: right; -} -.navbar .nav > li { - display: block; - float: left; -} -.navbar .nav > li > a { - float: none; - padding: 10px 10px 11px; - line-height: 19px; - color: #999999; - text-decoration: none; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.navbar .nav > li > a:hover { - background-color: transparent; - color: #ffffff; - text-decoration: none; -} -.navbar .nav .active > a, -.navbar .nav .active > a:hover { - color: #ffffff; - text-decoration: none; - background-color: #222222; -} -.navbar .divider-vertical { - height: 40px; - width: 1px; - margin: 0 9px; - overflow: hidden; - background-color: #222222; - border-right: 1px solid #333333; -} -.navbar .nav.pull-right { - margin-left: 10px; - margin-right: 0; -} -.navbar .dropdown-menu { - margin-top: 1px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.navbar .dropdown-menu:before { - content: ''; - display: inline-block; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-bottom-color: rgba(0, 0, 0, 0.2); - position: absolute; - top: -7px; - left: 9px; -} -.navbar .dropdown-menu:after { - content: ''; - display: inline-block; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - position: absolute; - top: -6px; - left: 10px; -} -.navbar-fixed-bottom .dropdown-menu:before { - border-top: 7px solid #ccc; - border-top-color: rgba(0, 0, 0, 0.2); - border-bottom: 0; - bottom: -7px; - top: auto; -} -.navbar-fixed-bottom .dropdown-menu:after { - border-top: 6px solid #ffffff; - border-bottom: 0; - bottom: -6px; - top: auto; -} -.navbar .nav .dropdown-toggle .caret, -.navbar .nav .open.dropdown .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; -} -.navbar .nav .active .caret { - opacity: 1; - filter: alpha(opacity=100); -} -.navbar .nav .open > .dropdown-toggle, -.navbar .nav .active > .dropdown-toggle, -.navbar .nav .open.active > .dropdown-toggle { - background-color: transparent; -} -.navbar .nav .active > .dropdown-toggle:hover { - color: #ffffff; -} -.navbar .nav.pull-right .dropdown-menu, -.navbar .nav .dropdown-menu.pull-right { - left: auto; - right: 0; -} -.navbar .nav.pull-right .dropdown-menu:before, -.navbar .nav .dropdown-menu.pull-right:before { - left: auto; - right: 12px; -} -.navbar .nav.pull-right .dropdown-menu:after, -.navbar .nav .dropdown-menu.pull-right:after { - left: auto; - right: 13px; -} -.breadcrumb { - padding: 7px 14px; - margin: 0 0 18px; - list-style: none; - background-color: #fbfbfb; - background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); - background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5)); - background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5); - background-image: -o-linear-gradient(top, #ffffff, #f5f5f5); - background-image: linear-gradient(top, #ffffff, #f5f5f5); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0); - border: 1px solid #ddd; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; -} -.breadcrumb li { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - text-shadow: 0 1px 0 #ffffff; -} -.breadcrumb .divider { - padding: 0 5px; - color: #999999; -} -.breadcrumb .active a { - color: #333333; -} -.pagination { - height: 36px; - margin: 18px 0; -} -.pagination ul { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - margin-left: 0; - margin-bottom: 0; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} -.pagination li { - display: inline; -} -.pagination a { - float: left; - padding: 0 14px; - line-height: 34px; - text-decoration: none; - border: 1px solid #ddd; - border-left-width: 0; -} -.pagination a:hover, -.pagination .active a { - background-color: #f5f5f5; -} -.pagination .active a { - color: #999999; - cursor: default; -} -.pagination .disabled span, -.pagination .disabled a, -.pagination .disabled a:hover { - color: #999999; - background-color: transparent; - cursor: default; -} -.pagination li:first-child a { - border-left-width: 1px; - -webkit-border-radius: 3px 0 0 3px; - -moz-border-radius: 3px 0 0 3px; - border-radius: 3px 0 0 3px; -} -.pagination li:last-child a { - -webkit-border-radius: 0 3px 3px 0; - -moz-border-radius: 0 3px 3px 0; - border-radius: 0 3px 3px 0; -} -.pagination-centered { - text-align: center; -} -.pagination-right { - text-align: right; -} -.pager { - margin-left: 0; - margin-bottom: 18px; - list-style: none; - text-align: center; - *zoom: 1; -} -.pager:before, -.pager:after { - display: table; - content: ""; -} -.pager:after { - clear: both; -} -.pager li { - display: inline; -} -.pager a { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} -.pager a:hover { - text-decoration: none; - background-color: #f5f5f5; -} -.pager .next a { - float: right; -} -.pager .previous a { - float: left; -} -.pager .disabled a, -.pager .disabled a:hover { - color: #999999; - background-color: #fff; - cursor: default; -} -.modal-open .dropdown-menu { - z-index: 2050; -} -.modal-open .dropdown.open { - *z-index: 2050; -} -.modal-open .popover { - z-index: 2060; -} -.modal-open .tooltip { - z-index: 2070; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} -.modal-backdrop.fade { - opacity: 0; -} -.modal-backdrop, -.modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.modal { - position: fixed; - top: 50%; - left: 50%; - z-index: 1050; - overflow: auto; - width: 560px; - margin: -250px 0 0 -280px; - background-color: #ffffff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - /* IE6-7 */ - - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; -} -.modal.fade { - -webkit-transition: opacity .3s linear, top .3s ease-out; - -moz-transition: opacity .3s linear, top .3s ease-out; - -ms-transition: opacity .3s linear, top .3s ease-out; - -o-transition: opacity .3s linear, top .3s ease-out; - transition: opacity .3s linear, top .3s ease-out; - top: -25%; -} -.modal.fade.in { - top: 50%; -} -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; -} -.modal-header .close { - margin-top: 2px; -} -.modal-body { - overflow-y: auto; - max-height: 400px; - padding: 15px; -} -.modal-form { - margin-bottom: 0; -} -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - text-align: right; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; - *zoom: 1; -} -.modal-footer:before, -.modal-footer:after { - display: table; - content: ""; -} -.modal-footer:after { - clear: both; -} -.modal-footer .btn + .btn { - margin-left: 5px; - margin-bottom: 0; -} -.modal-footer .btn-group .btn + .btn { - margin-left: -1px; -} -.tooltip { - position: absolute; - z-index: 1020; - display: block; - visibility: visible; - padding: 5px; - font-size: 11px; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.tooltip.top { - margin-top: -2px; -} -.tooltip.right { - margin-left: 2px; -} -.tooltip.bottom { - margin-top: 2px; -} -.tooltip.left { - margin-left: -2px; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-top: 5px solid #000000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; - border-left: 5px solid #000000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-bottom: 5px solid #000000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; - border-right: 5px solid #000000; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - padding: 5px; -} -.popover.top { - margin-top: -5px; -} -.popover.right { - margin-left: 5px; -} -.popover.bottom { - margin-top: 5px; -} -.popover.left { - margin-left: -5px; -} -.popover.top .arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-top: 5px solid #000000; -} -.popover.right .arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; - border-right: 5px solid #000000; -} -.popover.bottom .arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-bottom: 5px solid #000000; -} -.popover.left .arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; - border-left: 5px solid #000000; -} -.popover .arrow { - position: absolute; - width: 0; - height: 0; -} -.popover-inner { - padding: 3px; - width: 280px; - overflow: hidden; - background: #000000; - background: rgba(0, 0, 0, 0.8); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); -} -.popover-title { - padding: 9px 15px; - line-height: 1; - background-color: #f5f5f5; - border-bottom: 1px solid #eee; - -webkit-border-radius: 3px 3px 0 0; - -moz-border-radius: 3px 3px 0 0; - border-radius: 3px 3px 0 0; -} -.popover-content { - padding: 14px; - background-color: #ffffff; - -webkit-border-radius: 0 0 3px 3px; - -moz-border-radius: 0 0 3px 3px; - border-radius: 0 0 3px 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; -} -.popover-content p, -.popover-content ul, -.popover-content ol { - margin-bottom: 0; -} -.thumbnails { - margin-left: -20px; - list-style: none; - *zoom: 1; -} -.thumbnails:before, -.thumbnails:after { - display: table; - content: ""; -} -.thumbnails:after { - clear: both; -} -.thumbnails > li { - float: left; - margin: 0 0 18px 20px; -} -.thumbnail { - display: block; - padding: 4px; - line-height: 1; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); -} -a.thumbnail:hover { - border-color: #0088cc; - -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); -} -.thumbnail > img { - display: block; - max-width: 100%; - margin-left: auto; - margin-right: auto; -} -.thumbnail .caption { - padding: 9px; -} -.label { - padding: 1px 4px 2px; - font-size: 10.998px; - font-weight: bold; - line-height: 13px; - color: #ffffff; - vertical-align: middle; - white-space: nowrap; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #999999; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.label:hover { - color: #ffffff; - text-decoration: none; -} -.label-important { - background-color: #b94a48; -} -.label-important:hover { - background-color: #953b39; -} -.label-warning { - background-color: #f89406; -} -.label-warning:hover { - background-color: #c67605; -} -.label-success { - background-color: #468847; -} -.label-success:hover { - background-color: #356635; -} -.label-info { - background-color: #3a87ad; -} -.label-info:hover { - background-color: #2d6987; -} -.label-inverse { - background-color: #333333; -} -.label-inverse:hover { - background-color: #1a1a1a; -} -.badge { - padding: 1px 9px 2px; - font-size: 12.025px; - font-weight: bold; - white-space: nowrap; - color: #ffffff; - background-color: #999999; - -webkit-border-radius: 9px; - -moz-border-radius: 9px; - border-radius: 9px; -} -.badge:hover { - color: #ffffff; - text-decoration: none; - cursor: pointer; -} -.badge-error { - background-color: #b94a48; -} -.badge-error:hover { - background-color: #953b39; -} -.badge-warning { - background-color: #f89406; -} -.badge-warning:hover { - background-color: #c67605; -} -.badge-success { - background-color: #468847; -} -.badge-success:hover { - background-color: #356635; -} -.badge-info { - background-color: #3a87ad; -} -.badge-info:hover { - background-color: #2d6987; -} -.badge-inverse { - background-color: #333333; -} -.badge-inverse:hover { - background-color: #1a1a1a; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} -@-moz-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} -@-ms-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} -.progress { - overflow: hidden; - height: 18px; - margin-bottom: 18px; - background-color: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(top, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0); - -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); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.progress .bar { - width: 0%; - height: 18px; - color: #ffffff; - font-size: 12px; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -ms-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(top, #149bdf, #0480be); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0); - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - -ms-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -ms-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress-striped .bar { - background-color: #149bdf; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; -} -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-danger .bar { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(top, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); -} -.progress-danger.progress-striped .bar { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-success .bar { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -ms-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(top, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); -} -.progress-success.progress-striped .bar { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-info .bar { - background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(top, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0); -} -.progress-info.progress-striped .bar { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-warning .bar { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -ms-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(top, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0); -} -.progress-warning.progress-striped .bar { - background-color: #fbb450; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.accordion { - margin-bottom: 18px; -} -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.accordion-heading { - border-bottom: 0; -} -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} -.carousel { - position: relative; - margin-bottom: 18px; - line-height: 1; -} -.carousel-inner { - overflow: hidden; - width: 100%; - position: relative; -} -.carousel .item { - display: none; - position: relative; - -webkit-transition: 0.6s ease-in-out left; - -moz-transition: 0.6s ease-in-out left; - -ms-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} -.carousel .item > img { - display: block; - line-height: 1; -} -.carousel .active, -.carousel .next, -.carousel .prev { - display: block; -} -.carousel .active { - left: 0; -} -.carousel .next, -.carousel .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel .next { - left: 100%; -} -.carousel .prev { - left: -100%; -} -.carousel .next.left, -.carousel .prev.right { - left: 0; -} -.carousel .active.left { - left: -100%; -} -.carousel .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: #ffffff; - text-align: center; - background: #222222; - border: 3px solid #ffffff; - -webkit-border-radius: 23px; - -moz-border-radius: 23px; - border-radius: 23px; - opacity: 0.5; - filter: alpha(opacity=50); -} -.carousel-control.right { - left: auto; - right: 15px; -} -.carousel-control:hover { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} -.carousel-caption { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 10px 15px 5px; - background: #333333; - background: rgba(0, 0, 0, 0.75); -} -.carousel-caption h4, -.carousel-caption p { - color: #ffffff; -} -.hero-unit { - padding: 60px; - margin-bottom: 30px; - background-color: #eeeeee; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.hero-unit h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - color: inherit; - letter-spacing: -1px; -} -.hero-unit p { - font-size: 18px; - font-weight: 200; - line-height: 27px; - color: inherit; -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.hide { - display: none; -} -.show { - display: block; -} -.invisible { - visibility: hidden; -} diff --git a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap.min.css b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap.min.css deleted file mode 100644 index c951467732..0000000000 --- a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/css/bootstrap.min.css +++ /dev/null @@ -1,689 +0,0 @@ -article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} -audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} -audio:not([controls]){display:none;} -html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} -a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -a:hover,a:active{outline:0;} -sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;} -sup{top:-0.5em;} -sub{bottom:-0.25em;} -img{height:auto;border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;} -button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;} -button,input{*overflow:visible;line-height:normal;} -button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;} -button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;} -input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;} -input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;} -textarea{overflow:auto;vertical-align:top;} -.clearfix{*zoom:1;}.clearfix:before,.clearfix:after{display:table;content:"";} -.clearfix:after{clear:both;} -.hide-text{overflow:hidden;text-indent:100%;white-space:nowrap;} -.input-block-level{display:block;width:100%;min-height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;} -body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#333333;background-color:#ffffff;} -a{color:#0088cc;text-decoration:none;} -a:hover{color:#005580;text-decoration:underline;} -.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} -.row:after{clear:both;} -[class*="span"]{float:left;margin-left:20px;} -.container,.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} -.span12{width:940px;} -.span11{width:860px;} -.span10{width:780px;} -.span9{width:700px;} -.span8{width:620px;} -.span7{width:540px;} -.span6{width:460px;} -.span5{width:380px;} -.span4{width:300px;} -.span3{width:220px;} -.span2{width:140px;} -.span1{width:60px;} -.offset12{margin-left:980px;} -.offset11{margin-left:900px;} -.offset10{margin-left:820px;} -.offset9{margin-left:740px;} -.offset8{margin-left:660px;} -.offset7{margin-left:580px;} -.offset6{margin-left:500px;} -.offset5{margin-left:420px;} -.offset4{margin-left:340px;} -.offset3{margin-left:260px;} -.offset2{margin-left:180px;} -.offset1{margin-left:100px;} -.row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} -.row-fluid:after{clear:both;} -.row-fluid>[class*="span"]{float:left;margin-left:2.127659574%;} -.row-fluid>[class*="span"]:first-child{margin-left:0;} -.row-fluid > .span12{width:99.99999998999999%;} -.row-fluid > .span11{width:91.489361693%;} -.row-fluid > .span10{width:82.97872339599999%;} -.row-fluid > .span9{width:74.468085099%;} -.row-fluid > .span8{width:65.95744680199999%;} -.row-fluid > .span7{width:57.446808505%;} -.row-fluid > .span6{width:48.93617020799999%;} -.row-fluid > .span5{width:40.425531911%;} -.row-fluid > .span4{width:31.914893614%;} -.row-fluid > .span3{width:23.404255317%;} -.row-fluid > .span2{width:14.89361702%;} -.row-fluid > .span1{width:6.382978723%;} -.container{margin-left:auto;margin-right:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";} -.container:after{clear:both;} -.container-fluid{padding-left:20px;padding-right:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";} -.container-fluid:after{clear:both;} -p{margin:0 0 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;}p small{font-size:11px;color:#999999;} -.lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px;} -h1,h2,h3,h4,h5,h6{margin:0;font-family:inherit;font-weight:bold;color:inherit;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999999;} -h1{font-size:30px;line-height:36px;}h1 small{font-size:18px;} -h2{font-size:24px;line-height:36px;}h2 small{font-size:18px;} -h3{line-height:27px;font-size:18px;}h3 small{font-size:14px;} -h4,h5,h6{line-height:18px;} -h4{font-size:14px;}h4 small{font-size:12px;} -h5{font-size:12px;} -h6{font-size:11px;color:#999999;text-transform:uppercase;} -.page-header{padding-bottom:17px;margin:18px 0;border-bottom:1px solid #eeeeee;} -.page-header h1{line-height:1;} -ul,ol{padding:0;margin:0 0 9px 25px;} -ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} -ul{list-style:disc;} -ol{list-style:decimal;} -li{line-height:18px;} -ul.unstyled,ol.unstyled{margin-left:0;list-style:none;} -dl{margin-bottom:18px;} -dt,dd{line-height:18px;} -dt{font-weight:bold;line-height:17px;} -dd{margin-left:9px;} -.dl-horizontal dt{float:left;clear:left;width:120px;text-align:right;} -.dl-horizontal dd{margin-left:130px;} -hr{margin:18px 0;border:0;border-top:1px solid #eeeeee;border-bottom:1px solid #ffffff;} -strong{font-weight:bold;} -em{font-style:italic;} -.muted{color:#999999;} -abbr[title]{border-bottom:1px dotted #ddd;cursor:help;} -abbr.initialism{font-size:90%;text-transform:uppercase;} -blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px;} -blockquote small{display:block;line-height:18px;color:#999999;}blockquote small:before{content:'\2014 \00A0';} -blockquote.pull-right{float:right;padding-left:0;padding-right:15px;border-left:0;border-right:5px solid #eeeeee;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;} -q:before,q:after,blockquote:before,blockquote:after{content:"";} -address{display:block;margin-bottom:18px;line-height:18px;font-style:normal;} -small{font-size:100%;} -cite{font-style:normal;} -code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -code{padding:2px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;} -pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12.025px;line-height:18px;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;white-space:pre;white-space:pre-wrap;word-break:break-all;word-wrap:break-word;}pre.prettyprint{margin-bottom:18px;} -pre code{padding:0;color:inherit;background-color:transparent;border:0;} -.pre-scrollable{max-height:340px;overflow-y:scroll;} -form{margin:0 0 18px;} -fieldset{padding:0;margin:0;border:0;} -legend{display:block;width:100%;padding:0;margin-bottom:27px;font-size:19.5px;line-height:36px;color:#333333;border:0;border-bottom:1px solid #eee;}legend small{font-size:13.5px;color:#999999;} -label,input,button,select,textarea{font-size:13px;font-weight:normal;line-height:18px;} -input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;} -label{display:block;margin-bottom:5px;color:#333333;} -input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;margin-bottom:9px;font-size:13px;line-height:18px;color:#555555;border:1px solid #cccccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.uneditable-textarea{width:auto;height:auto;} -label input,label textarea,label select{display:block;} -input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;cursor:pointer;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border:0 \9;} -input[type="image"]{border:0;} -input[type="file"]{width:auto;padding:initial;line-height:initial;border:initial;background-color:#ffffff;background-color:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto;} -select,input[type="file"]{height:28px;*margin-top:4px;line-height:28px;} -input[type="file"]{line-height:18px \9;} -select{width:220px;background-color:#ffffff;} -select[multiple],select[size]{height:auto;} -input[type="image"]{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -textarea{height:auto;} -input[type="hidden"]{display:none;} -.radio,.checkbox{padding-left:18px;} -.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px;} -.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;} -.radio.inline,.checkbox.inline{display:inline-block;padding-top:5px;margin-bottom:0;vertical-align:middle;} -.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;} -input,textarea{-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;} -input:focus,textarea:focus{border-color:rgba(82, 168, 236, 0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);outline:0;outline:thin dotted \9;} -input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -.input-mini{width:60px;} -.input-small{width:90px;} -.input-medium{width:150px;} -.input-large{width:210px;} -.input-xlarge{width:270px;} -.input-xxlarge{width:530px;} -input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{float:none;margin-left:0;} -input,textarea,.uneditable-input{margin-left:0;} -input.span12, textarea.span12, .uneditable-input.span12{width:930px;} -input.span11, textarea.span11, .uneditable-input.span11{width:850px;} -input.span10, textarea.span10, .uneditable-input.span10{width:770px;} -input.span9, textarea.span9, .uneditable-input.span9{width:690px;} -input.span8, textarea.span8, .uneditable-input.span8{width:610px;} -input.span7, textarea.span7, .uneditable-input.span7{width:530px;} -input.span6, textarea.span6, .uneditable-input.span6{width:450px;} -input.span5, textarea.span5, .uneditable-input.span5{width:370px;} -input.span4, textarea.span4, .uneditable-input.span4{width:290px;} -input.span3, textarea.span3, .uneditable-input.span3{width:210px;} -input.span2, textarea.span2, .uneditable-input.span2{width:130px;} -input.span1, textarea.span1, .uneditable-input.span1{width:50px;} -input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#eeeeee;border-color:#ddd;cursor:not-allowed;} -.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;} -.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853;}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:0 0 6px #dbc59e;-moz-box-shadow:0 0 6px #dbc59e;box-shadow:0 0 6px #dbc59e;} -.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;} -.control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;} -.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;border-color:#b94a48;}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:0 0 6px #d59392;-moz-box-shadow:0 0 6px #d59392;box-shadow:0 0 6px #d59392;} -.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;} -.control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;} -.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847;}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:0 0 6px #7aba7b;-moz-box-shadow:0 0 6px #7aba7b;box-shadow:0 0 6px #7aba7b;} -.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;} -input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} -.form-actions{padding:17px 20px 18px;margin-top:18px;margin-bottom:18px;background-color:#eeeeee;border-top:1px solid #ddd;*zoom:1;}.form-actions:before,.form-actions:after{display:table;content:"";} -.form-actions:after{clear:both;} -.uneditable-input{display:block;background-color:#ffffff;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} -:-moz-placeholder{color:#999999;} -::-webkit-input-placeholder{color:#999999;} -.help-block,.help-inline{color:#555555;} -.help-block{display:block;margin-bottom:9px;} -.help-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle;padding-left:5px;} -.input-prepend,.input-append{margin-bottom:5px;}.input-prepend input,.input-append input,.input-prepend select,.input-append select,.input-prepend .uneditable-input,.input-append .uneditable-input{*margin-left:0;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}.input-prepend input:focus,.input-append input:focus,.input-prepend select:focus,.input-append select:focus,.input-prepend .uneditable-input:focus,.input-append .uneditable-input:focus{position:relative;z-index:2;} -.input-prepend .uneditable-input,.input-append .uneditable-input{border-left-color:#ccc;} -.input-prepend .add-on,.input-append .add-on{display:inline-block;width:auto;min-width:16px;height:18px;padding:4px 5px;font-weight:normal;line-height:18px;text-align:center;text-shadow:0 1px 0 #ffffff;vertical-align:middle;background-color:#eeeeee;border:1px solid #ccc;} -.input-prepend .add-on,.input-append .add-on,.input-prepend .btn,.input-append .btn{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.input-prepend .active,.input-append .active{background-color:#a9dba9;border-color:#46a546;} -.input-prepend .add-on,.input-prepend .btn{margin-right:-1px;} -.input-append input,.input-append select .uneditable-input{-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.input-append .uneditable-input{border-left-color:#eee;border-right-color:#ccc;} -.input-append .add-on,.input-append .btn{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} -.input-prepend.input-append input,.input-prepend.input-append select,.input-prepend.input-append .uneditable-input{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.input-prepend.input-append .add-on:first-child,.input-prepend.input-append .btn:first-child{margin-right:-1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.input-prepend.input-append .add-on:last-child,.input-prepend.input-append .btn:last-child{margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} -.search-query{padding-left:14px;padding-right:14px;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px;} -.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input,.form-search .input-prepend,.form-inline .input-prepend,.form-horizontal .input-prepend,.form-search .input-append,.form-inline .input-append,.form-horizontal .input-append{display:inline-block;margin-bottom:0;} -.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;} -.form-search label,.form-inline label{display:inline-block;} -.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0;} -.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle;} -.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-left:0;margin-right:3px;} -.control-group{margin-bottom:9px;} -legend+.control-group{margin-top:18px;-webkit-margin-top-collapse:separate;} -.form-horizontal .control-group{margin-bottom:18px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";} -.form-horizontal .control-group:after{clear:both;} -.form-horizontal .control-label{float:left;width:140px;padding-top:5px;text-align:right;} -.form-horizontal .controls{margin-left:160px;*display:inline-block;*margin-left:0;*padding-left:20px;} -.form-horizontal .help-block{margin-top:9px;margin-bottom:0;} -.form-horizontal .form-actions{padding-left:160px;} -table{max-width:100%;border-collapse:collapse;border-spacing:0;background-color:transparent;} -.table{width:100%;margin-bottom:18px;}.table th,.table td{padding:8px;line-height:18px;text-align:left;vertical-align:top;border-top:1px solid #dddddd;} -.table th{font-weight:bold;} -.table thead th{vertical-align:bottom;} -.table colgroup+thead tr:first-child th,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child th,.table thead:first-child tr:first-child td{border-top:0;} -.table tbody+tbody{border-top:2px solid #dddddd;} -.table-condensed th,.table-condensed td{padding:4px 5px;} -.table-bordered{border:1px solid #dddddd;border-left:0;border-collapse:separate;*border-collapse:collapsed;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th,.table-bordered td{border-left:1px solid #dddddd;} -.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;} -.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-radius:4px 0 0 0;-moz-border-radius:4px 0 0 0;border-radius:4px 0 0 0;} -.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0;} -.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;} -.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0;} -.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;} -.table tbody tr:hover td,.table tbody tr:hover th{background-color:#f5f5f5;} -table .span1{float:none;width:44px;margin-left:0;} -table .span2{float:none;width:124px;margin-left:0;} -table .span3{float:none;width:204px;margin-left:0;} -table .span4{float:none;width:284px;margin-left:0;} -table .span5{float:none;width:364px;margin-left:0;} -table .span6{float:none;width:444px;margin-left:0;} -table .span7{float:none;width:524px;margin-left:0;} -table .span8{float:none;width:604px;margin-left:0;} -table .span9{float:none;width:684px;margin-left:0;} -table .span10{float:none;width:764px;margin-left:0;} -table .span11{float:none;width:844px;margin-left:0;} -table .span12{float:none;width:924px;margin-left:0;} -table .span13{float:none;width:1004px;margin-left:0;} -table .span14{float:none;width:1084px;margin-left:0;} -table .span15{float:none;width:1164px;margin-left:0;} -table .span16{float:none;width:1244px;margin-left:0;} -table .span17{float:none;width:1324px;margin-left:0;} -table .span18{float:none;width:1404px;margin-left:0;} -table .span19{float:none;width:1484px;margin-left:0;} -table .span20{float:none;width:1564px;margin-left:0;} -table .span21{float:none;width:1644px;margin-left:0;} -table .span22{float:none;width:1724px;margin-left:0;} -table .span23{float:none;width:1804px;margin-left:0;} -table .span24{float:none;width:1884px;margin-left:0;} -[class^="icon-"],[class*=" icon-"]{display:inline-block;width:14px;height:14px;line-height:14px;vertical-align:text-top;background-image:url("../img/glyphicons-halflings.png");background-position:14px 14px;background-repeat:no-repeat;*margin-right:.3em;}[class^="icon-"]:last-child,[class*=" icon-"]:last-child{*margin-left:0;} -.icon-white{background-image:url("../img/glyphicons-halflings-white.png");} -.icon-glass{background-position:0 0;} -.icon-music{background-position:-24px 0;} -.icon-search{background-position:-48px 0;} -.icon-envelope{background-position:-72px 0;} -.icon-heart{background-position:-96px 0;} -.icon-star{background-position:-120px 0;} -.icon-star-empty{background-position:-144px 0;} -.icon-user{background-position:-168px 0;} -.icon-film{background-position:-192px 0;} -.icon-th-large{background-position:-216px 0;} -.icon-th{background-position:-240px 0;} -.icon-th-list{background-position:-264px 0;} -.icon-ok{background-position:-288px 0;} -.icon-remove{background-position:-312px 0;} -.icon-zoom-in{background-position:-336px 0;} -.icon-zoom-out{background-position:-360px 0;} -.icon-off{background-position:-384px 0;} -.icon-signal{background-position:-408px 0;} -.icon-cog{background-position:-432px 0;} -.icon-trash{background-position:-456px 0;} -.icon-home{background-position:0 -24px;} -.icon-file{background-position:-24px -24px;} -.icon-time{background-position:-48px -24px;} -.icon-road{background-position:-72px -24px;} -.icon-download-alt{background-position:-96px -24px;} -.icon-download{background-position:-120px -24px;} -.icon-upload{background-position:-144px -24px;} -.icon-inbox{background-position:-168px -24px;} -.icon-play-circle{background-position:-192px -24px;} -.icon-repeat{background-position:-216px -24px;} -.icon-refresh{background-position:-240px -24px;} -.icon-list-alt{background-position:-264px -24px;} -.icon-lock{background-position:-287px -24px;} -.icon-flag{background-position:-312px -24px;} -.icon-headphones{background-position:-336px -24px;} -.icon-volume-off{background-position:-360px -24px;} -.icon-volume-down{background-position:-384px -24px;} -.icon-volume-up{background-position:-408px -24px;} -.icon-qrcode{background-position:-432px -24px;} -.icon-barcode{background-position:-456px -24px;} -.icon-tag{background-position:0 -48px;} -.icon-tags{background-position:-25px -48px;} -.icon-book{background-position:-48px -48px;} -.icon-bookmark{background-position:-72px -48px;} -.icon-print{background-position:-96px -48px;} -.icon-camera{background-position:-120px -48px;} -.icon-font{background-position:-144px -48px;} -.icon-bold{background-position:-167px -48px;} -.icon-italic{background-position:-192px -48px;} -.icon-text-height{background-position:-216px -48px;} -.icon-text-width{background-position:-240px -48px;} -.icon-align-left{background-position:-264px -48px;} -.icon-align-center{background-position:-288px -48px;} -.icon-align-right{background-position:-312px -48px;} -.icon-align-justify{background-position:-336px -48px;} -.icon-list{background-position:-360px -48px;} -.icon-indent-left{background-position:-384px -48px;} -.icon-indent-right{background-position:-408px -48px;} -.icon-facetime-video{background-position:-432px -48px;} -.icon-picture{background-position:-456px -48px;} -.icon-pencil{background-position:0 -72px;} -.icon-map-marker{background-position:-24px -72px;} -.icon-adjust{background-position:-48px -72px;} -.icon-tint{background-position:-72px -72px;} -.icon-edit{background-position:-96px -72px;} -.icon-share{background-position:-120px -72px;} -.icon-check{background-position:-144px -72px;} -.icon-move{background-position:-168px -72px;} -.icon-step-backward{background-position:-192px -72px;} -.icon-fast-backward{background-position:-216px -72px;} -.icon-backward{background-position:-240px -72px;} -.icon-play{background-position:-264px -72px;} -.icon-pause{background-position:-288px -72px;} -.icon-stop{background-position:-312px -72px;} -.icon-forward{background-position:-336px -72px;} -.icon-fast-forward{background-position:-360px -72px;} -.icon-step-forward{background-position:-384px -72px;} -.icon-eject{background-position:-408px -72px;} -.icon-chevron-left{background-position:-432px -72px;} -.icon-chevron-right{background-position:-456px -72px;} -.icon-plus-sign{background-position:0 -96px;} -.icon-minus-sign{background-position:-24px -96px;} -.icon-remove-sign{background-position:-48px -96px;} -.icon-ok-sign{background-position:-72px -96px;} -.icon-question-sign{background-position:-96px -96px;} -.icon-info-sign{background-position:-120px -96px;} -.icon-screenshot{background-position:-144px -96px;} -.icon-remove-circle{background-position:-168px -96px;} -.icon-ok-circle{background-position:-192px -96px;} -.icon-ban-circle{background-position:-216px -96px;} -.icon-arrow-left{background-position:-240px -96px;} -.icon-arrow-right{background-position:-264px -96px;} -.icon-arrow-up{background-position:-289px -96px;} -.icon-arrow-down{background-position:-312px -96px;} -.icon-share-alt{background-position:-336px -96px;} -.icon-resize-full{background-position:-360px -96px;} -.icon-resize-small{background-position:-384px -96px;} -.icon-plus{background-position:-408px -96px;} -.icon-minus{background-position:-433px -96px;} -.icon-asterisk{background-position:-456px -96px;} -.icon-exclamation-sign{background-position:0 -120px;} -.icon-gift{background-position:-24px -120px;} -.icon-leaf{background-position:-48px -120px;} -.icon-fire{background-position:-72px -120px;} -.icon-eye-open{background-position:-96px -120px;} -.icon-eye-close{background-position:-120px -120px;} -.icon-warning-sign{background-position:-144px -120px;} -.icon-plane{background-position:-168px -120px;} -.icon-calendar{background-position:-192px -120px;} -.icon-random{background-position:-216px -120px;} -.icon-comment{background-position:-240px -120px;} -.icon-magnet{background-position:-264px -120px;} -.icon-chevron-up{background-position:-288px -120px;} -.icon-chevron-down{background-position:-313px -119px;} -.icon-retweet{background-position:-336px -120px;} -.icon-shopping-cart{background-position:-360px -120px;} -.icon-folder-close{background-position:-384px -120px;} -.icon-folder-open{background-position:-408px -120px;} -.icon-resize-vertical{background-position:-432px -119px;} -.icon-resize-horizontal{background-position:-456px -118px;} -.dropdown{position:relative;} -.dropdown-toggle{*margin-bottom:-3px;} -.dropdown-toggle:active,.open .dropdown-toggle{outline:0;} -.caret{display:inline-block;width:0;height:0;vertical-align:top;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000000;opacity:0.3;filter:alpha(opacity=30);content:"";} -.dropdown .caret{margin-top:8px;margin-left:2px;} -.dropdown:hover .caret,.open.dropdown .caret{opacity:1;filter:alpha(opacity=100);} -.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;display:none;min-width:160px;padding:4px 0;margin:0;list-style:none;background-color:#ffffff;border-color:#ccc;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:1px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;*border-right-width:2px;*border-bottom-width:2px;}.dropdown-menu.pull-right{right:0;left:auto;} -.dropdown-menu .divider{height:1px;margin:8px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;*margin:-5px 0 5px;} -.dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:18px;color:#333333;white-space:nowrap;} -.dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;background-color:#0088cc;} -.dropdown.open{*z-index:1000;}.dropdown.open .dropdown-toggle{color:#ffffff;background:#ccc;background:rgba(0, 0, 0, 0.3);} -.dropdown.open .dropdown-menu{display:block;} -.pull-right .dropdown-menu{left:auto;right:0;} -.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000000;content:"\2191";} -.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px;} -.typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);} -.well-large{padding:24px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} -.well-small{padding:9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.fade{-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;opacity:0;}.fade.in{opacity:1;} -.collapse{-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-ms-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;position:relative;overflow:hidden;height:0;}.collapse.in{height:auto;} -.close{float:right;font-size:20px;font-weight:bold;line-height:18px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover{color:#000000;text-decoration:none;opacity:0.4;filter:alpha(opacity=40);cursor:pointer;} -.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 10px 4px;margin-bottom:0;font-size:13px;line-height:18px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);vertical-align:middle;background-color:#f5f5f5;background-image:-moz-linear-gradient(top, #ffffff, #e6e6e6);background-image:-ms-linear-gradient(top, #ffffff, #e6e6e6);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(top, #ffffff, #e6e6e6);background-image:-o-linear-gradient(top, #ffffff, #e6e6e6);background-image:linear-gradient(top, #ffffff, #e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);border:1px solid #cccccc;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);cursor:pointer;*margin-left:.3em;}.btn:hover,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{background-color:#e6e6e6;} -.btn:active,.btn.active{background-color:#cccccc \9;} -.btn:first-child{*margin-left:0;} -.btn:hover{color:#333333;text-decoration:none;background-color:#e6e6e6;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-ms-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;} -.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -.btn.active,.btn:active{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);background-color:#e6e6e6;background-color:#d9d9d9 \9;outline:0;} -.btn.disabled,.btn[disabled]{cursor:default;background-image:none;background-color:#e6e6e6;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -.btn-large{padding:9px 14px;font-size:15px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.btn-large [class^="icon-"]{margin-top:1px;} -.btn-small{padding:5px 9px;font-size:11px;line-height:16px;} -.btn-small [class^="icon-"]{margin-top:-1px;} -.btn-mini{padding:2px 6px;font-size:11px;line-height:14px;} -.btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover,.btn-inverse,.btn-inverse:hover{text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);color:#ffffff;} -.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255, 255, 255, 0.75);} -.btn-primary{background-color:#0074cc;background-image:-moz-linear-gradient(top, #0088cc, #0055cc);background-image:-ms-linear-gradient(top, #0088cc, #0055cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0055cc));background-image:-webkit-linear-gradient(top, #0088cc, #0055cc);background-image:-o-linear-gradient(top, #0088cc, #0055cc);background-image:linear-gradient(top, #0088cc, #0055cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0055cc', GradientType=0);border-color:#0055cc #0055cc #003580;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#0055cc;} -.btn-primary:active,.btn-primary.active{background-color:#004099 \9;} -.btn-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;} -.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;} -.btn-danger{background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;} -.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;} -.btn-success{background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;} -.btn-success:active,.btn-success.active{background-color:#408140 \9;} -.btn-info{background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;} -.btn-info:active,.btn-info.active{background-color:#24748c \9;} -.btn-inverse{background-color:#414141;background-image:-moz-linear-gradient(top, #555555, #222222);background-image:-ms-linear-gradient(top, #555555, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#222222));background-image:-webkit-linear-gradient(top, #555555, #222222);background-image:-o-linear-gradient(top, #555555, #222222);background-image:linear-gradient(top, #555555, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#555555', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);}.btn-inverse:hover,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{background-color:#222222;} -.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9;} -button.btn,input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;} -button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px;} -button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px;} -button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px;} -.btn-group{position:relative;*zoom:1;*margin-left:.3em;}.btn-group:before,.btn-group:after{display:table;content:"";} -.btn-group:after{clear:both;} -.btn-group:first-child{*margin-left:0;} -.btn-group+.btn-group{margin-left:5px;} -.btn-toolbar{margin-top:9px;margin-bottom:9px;}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1;} -.btn-group .btn{position:relative;float:left;margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.btn-group .btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} -.btn-group .btn:last-child,.btn-group .dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} -.btn-group .btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} -.btn-group .btn.large:last-child,.btn-group .large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} -.btn-group .btn:hover,.btn-group .btn:focus,.btn-group .btn:active,.btn-group .btn.active{z-index:2;} -.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;} -.btn-group .dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);*padding-top:3px;*padding-bottom:3px;} -.btn-group .btn-mini.dropdown-toggle{padding-left:5px;padding-right:5px;*padding-top:1px;*padding-bottom:1px;} -.btn-group .btn-small.dropdown-toggle{*padding-top:4px;*padding-bottom:4px;} -.btn-group .btn-large.dropdown-toggle{padding-left:12px;padding-right:12px;} -.btn-group.open{*z-index:1000;}.btn-group.open .dropdown-menu{display:block;margin-top:1px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);} -.btn .caret{margin-top:7px;margin-left:0;} -.btn:hover .caret,.open.btn-group .caret{opacity:1;filter:alpha(opacity=100);} -.btn-mini .caret{margin-top:5px;} -.btn-small .caret{margin-top:6px;} -.btn-large .caret{margin-top:6px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} -.btn-primary .caret,.btn-warning .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret,.btn-inverse .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:0.75;filter:alpha(opacity=75);} -.alert{padding:8px 35px 8px 14px;margin-bottom:18px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;color:#c09853;} -.alert-heading{color:inherit;} -.alert .close{position:relative;top:-2px;right:-21px;line-height:18px;} -.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#468847;} -.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;color:#b94a48;} -.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#3a87ad;} -.alert-block{padding-top:14px;padding-bottom:14px;} -.alert-block>p,.alert-block>ul{margin-bottom:0;} -.alert-block p+p{margin-top:5px;} -.nav{margin-left:0;margin-bottom:18px;list-style:none;} -.nav>li>a{display:block;} -.nav>li>a:hover{text-decoration:none;background-color:#eeeeee;} -.nav .nav-header{display:block;padding:3px 15px;font-size:11px;font-weight:bold;line-height:18px;color:#999999;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);text-transform:uppercase;} -.nav li+.nav-header{margin-top:9px;} -.nav-list{padding-left:15px;padding-right:15px;margin-bottom:0;} -.nav-list>li>a,.nav-list .nav-header{margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} -.nav-list>li>a{padding:3px 15px;} -.nav-list>.active>a,.nav-list>.active>a:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;} -.nav-list [class^="icon-"]{margin-right:2px;} -.nav-list .divider{height:1px;margin:8px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;*margin:-5px 0 5px;} -.nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";} -.nav-tabs:after,.nav-pills:after{clear:both;} -.nav-tabs>li,.nav-pills>li{float:left;} -.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;} -.nav-tabs{border-bottom:1px solid #ddd;} -.nav-tabs>li{margin-bottom:-1px;} -.nav-tabs>li>a{padding-top:8px;padding-bottom:8px;line-height:18px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd;} -.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} -.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.nav-pills>.active>a,.nav-pills>.active>a:hover{color:#ffffff;background-color:#0088cc;} -.nav-stacked>li{float:none;} -.nav-stacked>li>a{margin-right:0;} -.nav-tabs.nav-stacked{border-bottom:0;} -.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;} -.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;} -.nav-tabs.nav-stacked>li>a:hover{border-color:#ddd;z-index:2;} -.nav-pills.nav-stacked>li>a{margin-bottom:3px;} -.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;} -.nav-tabs .dropdown-menu,.nav-pills .dropdown-menu{margin-top:1px;border-width:1px;} -.nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{border-top-color:#0088cc;border-bottom-color:#0088cc;margin-top:6px;} -.nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#005580;border-bottom-color:#005580;} -.nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333333;border-bottom-color:#333333;} -.nav>.dropdown.active>a:hover{color:#000000;cursor:pointer;} -.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>.open.active>a:hover{color:#ffffff;background-color:#999999;border-color:#999999;} -.nav .open .caret,.nav .open.active .caret,.nav .open a:hover .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;opacity:1;filter:alpha(opacity=100);} -.tabs-stacked .open>a:hover{border-color:#999999;} -.tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";} -.tabbable:after{clear:both;} -.tab-content{display:table;width:100%;} -.tabs-below .nav-tabs,.tabs-right .nav-tabs,.tabs-left .nav-tabs{border-bottom:0;} -.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;} -.tab-content>.active,.pill-content>.active{display:block;} -.tabs-below .nav-tabs{border-top:1px solid #ddd;} -.tabs-below .nav-tabs>li{margin-top:-1px;margin-bottom:0;} -.tabs-below .nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below .nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#ddd;} -.tabs-below .nav-tabs .active>a,.tabs-below .nav-tabs .active>a:hover{border-color:transparent #ddd #ddd #ddd;} -.tabs-left .nav-tabs>li,.tabs-right .nav-tabs>li{float:none;} -.tabs-left .nav-tabs>li>a,.tabs-right .nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;} -.tabs-left .nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;} -.tabs-left .nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} -.tabs-left .nav-tabs>li>a:hover{border-color:#eeeeee #dddddd #eeeeee #eeeeee;} -.tabs-left .nav-tabs .active>a,.tabs-left .nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;} -.tabs-right .nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;} -.tabs-right .nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} -.tabs-right .nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #eeeeee #dddddd;} -.tabs-right .nav-tabs .active>a,.tabs-right .nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;} -.navbar{*position:relative;*z-index:2;overflow:visible;margin-bottom:18px;} -.navbar-inner{padding-left:20px;padding-right:20px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);} -.navbar .container{width:auto;} -.btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:dximagetransform.microsoft.gradient(enabled=false);-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);}.btn-navbar:hover,.btn-navbar:active,.btn-navbar.active,.btn-navbar.disabled,.btn-navbar[disabled]{background-color:#222222;} -.btn-navbar:active,.btn-navbar.active{background-color:#080808 \9;} -.btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);} -.btn-navbar .icon-bar+.icon-bar{margin-top:3px;} -.nav-collapse.collapse{height:auto;} -.navbar{color:#999999;}.navbar .brand:hover{text-decoration:none;} -.navbar .brand{float:left;display:block;padding:8px 20px 12px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#ffffff;} -.navbar .navbar-text{margin-bottom:0;line-height:40px;} -.navbar .btn,.navbar .btn-group{margin-top:5px;} -.navbar .btn-group .btn{margin-top:0;} -.navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";} -.navbar-form:after{clear:both;} -.navbar-form input,.navbar-form select,.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;} -.navbar-form input,.navbar-form select{display:inline-block;margin-bottom:0;} -.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;} -.navbar-form .input-append,.navbar-form .input-prepend{margin-top:6px;white-space:nowrap;}.navbar-form .input-append input,.navbar-form .input-prepend input{margin-top:0;} -.navbar-search{position:relative;float:left;margin-top:6px;margin-bottom:0;}.navbar-search .search-query{padding:4px 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;color:#ffffff;background-color:#626262;border:1px solid #151515;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.navbar-search .search-query:-moz-placeholder{color:#cccccc;} -.navbar-search .search-query::-webkit-input-placeholder{color:#cccccc;} -.navbar-search .search-query:focus,.navbar-search .search-query.focused{padding:5px 10px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;} -.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;margin-bottom:0;} -.navbar-fixed-top .navbar-inner,.navbar-fixed-bottom .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.navbar-fixed-top .container,.navbar-fixed-bottom .container{width:940px;} -.navbar-fixed-top{top:0;} -.navbar-fixed-bottom{bottom:0;} -.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;} -.navbar .nav.pull-right{float:right;} -.navbar .nav>li{display:block;float:left;} -.navbar .nav>li>a{float:none;padding:10px 10px 11px;line-height:19px;color:#999999;text-decoration:none;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);} -.navbar .nav>li>a:hover{background-color:transparent;color:#ffffff;text-decoration:none;} -.navbar .nav .active>a,.navbar .nav .active>a:hover{color:#ffffff;text-decoration:none;background-color:#222222;} -.navbar .divider-vertical{height:40px;width:1px;margin:0 9px;overflow:hidden;background-color:#222222;border-right:1px solid #333333;} -.navbar .nav.pull-right{margin-left:10px;margin-right:0;} -.navbar .dropdown-menu{margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.navbar .dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;} -.navbar .dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;} -.navbar-fixed-bottom .dropdown-menu:before{border-top:7px solid #ccc;border-top-color:rgba(0, 0, 0, 0.2);border-bottom:0;bottom:-7px;top:auto;} -.navbar-fixed-bottom .dropdown-menu:after{border-top:6px solid #ffffff;border-bottom:0;bottom:-6px;top:auto;} -.navbar .nav .dropdown-toggle .caret,.navbar .nav .open.dropdown .caret{border-top-color:#ffffff;border-bottom-color:#ffffff;} -.navbar .nav .active .caret{opacity:1;filter:alpha(opacity=100);} -.navbar .nav .open>.dropdown-toggle,.navbar .nav .active>.dropdown-toggle,.navbar .nav .open.active>.dropdown-toggle{background-color:transparent;} -.navbar .nav .active>.dropdown-toggle:hover{color:#ffffff;} -.navbar .nav.pull-right .dropdown-menu,.navbar .nav .dropdown-menu.pull-right{left:auto;right:0;}.navbar .nav.pull-right .dropdown-menu:before,.navbar .nav .dropdown-menu.pull-right:before{left:auto;right:12px;} -.navbar .nav.pull-right .dropdown-menu:after,.navbar .nav .dropdown-menu.pull-right:after{left:auto;right:13px;} -.breadcrumb{padding:7px 14px;margin:0 0 18px;list-style:none;background-color:#fbfbfb;background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 0 #ffffff;} -.breadcrumb .divider{padding:0 5px;color:#999999;} -.breadcrumb .active a{color:#333333;} -.pagination{height:36px;margin:18px 0;} -.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} -.pagination li{display:inline;} -.pagination a{float:left;padding:0 14px;line-height:34px;text-decoration:none;border:1px solid #ddd;border-left-width:0;} -.pagination a:hover,.pagination .active a{background-color:#f5f5f5;} -.pagination .active a{color:#999999;cursor:default;} -.pagination .disabled span,.pagination .disabled a,.pagination .disabled a:hover{color:#999999;background-color:transparent;cursor:default;} -.pagination li:first-child a{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} -.pagination-centered{text-align:center;} -.pagination-right{text-align:right;} -.pager{margin-left:0;margin-bottom:18px;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";} -.pager:after{clear:both;} -.pager li{display:inline;} -.pager a{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} -.pager a:hover{text-decoration:none;background-color:#f5f5f5;} -.pager .next a{float:right;} -.pager .previous a{float:left;} -.pager .disabled a,.pager .disabled a:hover{color:#999999;background-color:#fff;cursor:default;} -.modal-open .dropdown-menu{z-index:2050;} -.modal-open .dropdown.open{*z-index:2050;} -.modal-open .popover{z-index:2060;} -.modal-open .tooltip{z-index:2070;} -.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;} -.modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);} -.modal{position:fixed;top:50%;left:50%;z-index:1050;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} -.modal.fade.in{top:50%;} -.modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;} -.modal-body{overflow-y:auto;max-height:400px;padding:15px;} -.modal-form{margin-bottom:0;} -.modal-footer{padding:14px 15px 15px;margin-bottom:0;text-align:right;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";} -.modal-footer:after{clear:both;} -.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0;} -.modal-footer .btn-group .btn+.btn{margin-left:-1px;} -.tooltip{position:absolute;z-index:1020;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);} -.tooltip.top{margin-top:-2px;} -.tooltip.right{margin-left:2px;} -.tooltip.bottom{margin-top:2px;} -.tooltip.left{margin-left:-2px;} -.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} -.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} -.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} -.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} -.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.tooltip-arrow{position:absolute;width:0;height:0;} -.popover{position:absolute;top:0;left:0;z-index:1010;display:none;padding:5px;}.popover.top{margin-top:-5px;} -.popover.right{margin-left:5px;} -.popover.bottom{margin-top:5px;} -.popover.left{margin-left:-5px;} -.popover.top .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} -.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} -.popover.bottom .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} -.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} -.popover .arrow{position:absolute;width:0;height:0;} -.popover-inner{padding:3px;width:280px;overflow:hidden;background:#000000;background:rgba(0, 0, 0, 0.8);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);} -.popover-title{padding:9px 15px;line-height:1;background-color:#f5f5f5;border-bottom:1px solid #eee;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;} -.popover-content{padding:14px;background-color:#ffffff;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0;} -.thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";} -.thumbnails:after{clear:both;} -.thumbnails>li{float:left;margin:0 0 18px 20px;} -.thumbnail{display:block;padding:4px;line-height:1;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);} -a.thumbnail:hover{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} -.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;} -.thumbnail .caption{padding:9px;} -.label{padding:1px 4px 2px;font-size:10.998px;font-weight:bold;line-height:13px;color:#ffffff;vertical-align:middle;white-space:nowrap;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.label:hover{color:#ffffff;text-decoration:none;} -.label-important{background-color:#b94a48;} -.label-important:hover{background-color:#953b39;} -.label-warning{background-color:#f89406;} -.label-warning:hover{background-color:#c67605;} -.label-success{background-color:#468847;} -.label-success:hover{background-color:#356635;} -.label-info{background-color:#3a87ad;} -.label-info:hover{background-color:#2d6987;} -.label-inverse{background-color:#333333;} -.label-inverse:hover{background-color:#1a1a1a;} -.badge{padding:1px 9px 2px;font-size:12.025px;font-weight:bold;white-space:nowrap;color:#ffffff;background-color:#999999;-webkit-border-radius:9px;-moz-border-radius:9px;border-radius:9px;} -.badge:hover{color:#ffffff;text-decoration:none;cursor:pointer;} -.badge-error{background-color:#b94a48;} -.badge-error:hover{background-color:#953b39;} -.badge-warning{background-color:#f89406;} -.badge-warning:hover{background-color:#c67605;} -.badge-success{background-color:#468847;} -.badge-success:hover{background-color:#356635;} -.badge-info{background-color:#3a87ad;} -.badge-info:hover{background-color:#2d6987;} -.badge-inverse{background-color:#333333;} -.badge-inverse:hover{background-color:#1a1a1a;} -@-webkit-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@-moz-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@-ms-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}.progress{overflow:hidden;height:18px;margin-bottom:18px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-ms-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(top, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);-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);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.progress .bar{width:0%;height:18px;color:#ffffff;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-ms-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(top, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-ms-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;} -.progress-striped .bar{background-color:#149bdf;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;} -.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;} -.progress-danger .bar{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);} -.progress-danger.progress-striped .bar{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} -.progress-success .bar{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);} -.progress-success.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} -.progress-info .bar{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);} -.progress-info.progress-striped .bar{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} -.progress-warning .bar{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);} -.progress-warning.progress-striped .bar{background-color:#fbb450;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} -.accordion{margin-bottom:18px;} -.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.accordion-heading{border-bottom:0;} -.accordion-heading .accordion-toggle{display:block;padding:8px 15px;} -.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;} -.carousel{position:relative;margin-bottom:18px;line-height:1;} -.carousel-inner{overflow:hidden;width:100%;position:relative;} -.carousel .item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-ms-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;} -.carousel .item>img{display:block;line-height:1;} -.carousel .active,.carousel .next,.carousel .prev{display:block;} -.carousel .active{left:0;} -.carousel .next,.carousel .prev{position:absolute;top:0;width:100%;} -.carousel .next{left:100%;} -.carousel .prev{left:-100%;} -.carousel .next.left,.carousel .prev.right{left:0;} -.carousel .active.left{left:-100%;} -.carousel .active.right{left:100%;} -.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;} -.carousel-control:hover{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);} -.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:10px 15px 5px;background:#333333;background:rgba(0, 0, 0, 0.75);} -.carousel-caption h4,.carousel-caption p{color:#ffffff;} -.hero-unit{padding:60px;margin-bottom:30px;background-color:#eeeeee;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;color:inherit;letter-spacing:-1px;} -.hero-unit p{font-size:18px;font-weight:200;line-height:27px;color:inherit;} -.pull-right{float:right;} -.pull-left{float:left;} -.hide{display:none;} -.show{display:block;} -.invisible{visibility:hidden;} diff --git a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/img/glyphicons-halflings-white.png b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/img/glyphicons-halflings-white.png deleted file mode 100644 index a20760bfde58d1c92cee95116059fba03c68d689..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4352 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 diff --git a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/js/bootstrap.js b/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/js/bootstrap.js deleted file mode 100644 index ca868671ca..0000000000 --- a/documentation/website/source/_themes/opendylan/static/bootstrap/2.0.2/js/bootstrap.js +++ /dev/null @@ -1,1726 +0,0 @@ -/* =================================================== - * bootstrap-transition.js v2.0.2 - * http://twitter.github.com/bootstrap/javascript.html#transitions - * =================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - -!function( $ ) { - - $(function () { - - "use strict" - - /* CSS TRANSITION SUPPORT (https://gist.github.com/373874) - * ======================================================= */ - - $.support.transition = (function () { - var thisBody = document.body || document.documentElement - , thisStyle = thisBody.style - , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined - - return support && { - end: (function () { - var transitionEnd = "TransitionEnd" - if ( $.browser.webkit ) { - transitionEnd = "webkitTransitionEnd" - } else if ( $.browser.mozilla ) { - transitionEnd = "transitionend" - } else if ( $.browser.opera ) { - transitionEnd = "oTransitionEnd" - } - return transitionEnd - }()) - } - })() - - }) - -}( window.jQuery );/* ========================================================== - * bootstrap-alert.js v2.0.2 - * http://twitter.github.com/bootstrap/javascript.html#alerts - * ========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function( $ ){ - - "use strict" - - /* ALERT CLASS DEFINITION - * ====================== */ - - var dismiss = '[data-dismiss="alert"]' - , Alert = function ( el ) { - $(el).on('click', dismiss, this.close) - } - - Alert.prototype = { - - constructor: Alert - - , close: function ( e ) { - var $this = $(this) - , selector = $this.attr('data-target') - , $parent - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - $parent = $(selector) - $parent.trigger('close') - - e && e.preventDefault() - - $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) - - $parent - .trigger('close') - .removeClass('in') - - function removeElement() { - $parent - .trigger('closed') - .remove() - } - - $.support.transition && $parent.hasClass('fade') ? - $parent.on($.support.transition.end, removeElement) : - removeElement() - } - - } - - - /* ALERT PLUGIN DEFINITION - * ======================= */ - - $.fn.alert = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('alert') - if (!data) $this.data('alert', (data = new Alert(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.alert.Constructor = Alert - - - /* ALERT DATA-API - * ============== */ - - $(function () { - $('body').on('click.alert.data-api', dismiss, Alert.prototype.close) - }) - -}( window.jQuery );/* ============================================================ - * bootstrap-button.js v2.0.2 - * http://twitter.github.com/bootstrap/javascript.html#buttons - * ============================================================ - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - -!function( $ ){ - - "use strict" - - /* BUTTON PUBLIC CLASS DEFINITION - * ============================== */ - - var Button = function ( element, options ) { - this.$element = $(element) - this.options = $.extend({}, $.fn.button.defaults, options) - } - - Button.prototype = { - - constructor: Button - - , setState: function ( state ) { - var d = 'disabled' - , $el = this.$element - , data = $el.data() - , val = $el.is('input') ? 'val' : 'html' - - state = state + 'Text' - data.resetText || $el.data('resetText', $el[val]()) - - $el[val](data[state] || this.options[state]) - - // push to event loop to allow forms to submit - setTimeout(function () { - state == 'loadingText' ? - $el.addClass(d).attr(d, d) : - $el.removeClass(d).removeAttr(d) - }, 0) - } - - , toggle: function () { - var $parent = this.$element.parent('[data-toggle="buttons-radio"]') - - $parent && $parent - .find('.active') - .removeClass('active') - - this.$element.toggleClass('active') - } - - } - - - /* BUTTON PLUGIN DEFINITION - * ======================== */ - - $.fn.button = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('button') - , options = typeof option == 'object' && option - if (!data) $this.data('button', (data = new Button(this, options))) - if (option == 'toggle') data.toggle() - else if (option) data.setState(option) - }) - } - - $.fn.button.defaults = { - loadingText: 'loading...' - } - - $.fn.button.Constructor = Button - - - /* BUTTON DATA-API - * =============== */ - - $(function () { - $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) { - var $btn = $(e.target) - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') - $btn.button('toggle') - }) - }) - -}( window.jQuery );/* ========================================================== - * bootstrap-carousel.js v2.0.2 - * http://twitter.github.com/bootstrap/javascript.html#carousel - * ========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function( $ ){ - - "use strict" - - /* CAROUSEL CLASS DEFINITION - * ========================= */ - - var Carousel = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.carousel.defaults, options) - this.options.slide && this.slide(this.options.slide) - this.options.pause == 'hover' && this.$element - .on('mouseenter', $.proxy(this.pause, this)) - .on('mouseleave', $.proxy(this.cycle, this)) - } - - Carousel.prototype = { - - cycle: function () { - this.interval = setInterval($.proxy(this.next, this), this.options.interval) - return this - } - - , to: function (pos) { - var $active = this.$element.find('.active') - , children = $active.parent().children() - , activePos = children.index($active) - , that = this - - if (pos > (children.length - 1) || pos < 0) return - - if (this.sliding) { - return this.$element.one('slid', function () { - that.to(pos) - }) - } - - if (activePos == pos) { - return this.pause().cycle() - } - - return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos])) - } - - , pause: function () { - clearInterval(this.interval) - this.interval = null - return this - } - - , next: function () { - if (this.sliding) return - return this.slide('next') - } - - , prev: function () { - if (this.sliding) return - return this.slide('prev') - } - - , slide: function (type, next) { - var $active = this.$element.find('.active') - , $next = next || $active[type]() - , isCycling = this.interval - , direction = type == 'next' ? 'left' : 'right' - , fallback = type == 'next' ? 'first' : 'last' - , that = this - - this.sliding = true - - isCycling && this.pause() - - $next = $next.length ? $next : this.$element.find('.item')[fallback]() - - if ($next.hasClass('active')) return - - if (!$.support.transition && this.$element.hasClass('slide')) { - this.$element.trigger('slide') - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger('slid') - } else { - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - this.$element.trigger('slide') - this.$element.one($.support.transition.end, function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { that.$element.trigger('slid') }, 0) - }) - } - - isCycling && this.cycle() - - return this - } - - } - - - /* CAROUSEL PLUGIN DEFINITION - * ========================== */ - - $.fn.carousel = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('carousel') - , options = typeof option == 'object' && option - if (!data) $this.data('carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (typeof option == 'string' || (option = options.slide)) data[option]() - else data.cycle() - }) - } - - $.fn.carousel.defaults = { - interval: 5000 - , pause: 'hover' - } - - $.fn.carousel.Constructor = Carousel - - - /* CAROUSEL DATA-API - * ================= */ - - $(function () { - $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) { - var $this = $(this), href - , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data()) - $target.carousel(options) - e.preventDefault() - }) - }) - -}( window.jQuery );/* ============================================================= - * bootstrap-collapse.js v2.0.2 - * http://twitter.github.com/bootstrap/javascript.html#collapse - * ============================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - -!function( $ ){ - - "use strict" - - var Collapse = function ( element, options ) { - this.$element = $(element) - this.options = $.extend({}, $.fn.collapse.defaults, options) - - if (this.options["parent"]) { - this.$parent = $(this.options["parent"]) - } - - this.options.toggle && this.toggle() - } - - Collapse.prototype = { - - constructor: Collapse - - , dimension: function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - , show: function () { - var dimension = this.dimension() - , scroll = $.camelCase(['scroll', dimension].join('-')) - , actives = this.$parent && this.$parent.find('.in') - , hasData - - if (actives && actives.length) { - hasData = actives.data('collapse') - actives.collapse('hide') - hasData || actives.data('collapse', null) - } - - this.$element[dimension](0) - this.transition('addClass', 'show', 'shown') - this.$element[dimension](this.$element[0][scroll]) - - } - - , hide: function () { - var dimension = this.dimension() - this.reset(this.$element[dimension]()) - this.transition('removeClass', 'hide', 'hidden') - this.$element[dimension](0) - } - - , reset: function ( size ) { - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - [dimension](size || 'auto') - [0].offsetWidth - - this.$element[size ? 'addClass' : 'removeClass']('collapse') - - return this - } - - , transition: function ( method, startEvent, completeEvent ) { - var that = this - , complete = function () { - if (startEvent == 'show') that.reset() - that.$element.trigger(completeEvent) - } - - this.$element - .trigger(startEvent) - [method]('in') - - $.support.transition && this.$element.hasClass('collapse') ? - this.$element.one($.support.transition.end, complete) : - complete() - } - - , toggle: function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - } - - /* COLLAPSIBLE PLUGIN DEFINITION - * ============================== */ - - $.fn.collapse = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('collapse') - , options = typeof option == 'object' && option - if (!data) $this.data('collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.collapse.defaults = { - toggle: true - } - - $.fn.collapse.Constructor = Collapse - - - /* COLLAPSIBLE DATA-API - * ==================== */ - - $(function () { - $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) { - var $this = $(this), href - , target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - , option = $(target).data('collapse') ? 'toggle' : $this.data() - $(target).collapse(option) - }) - }) - -}( window.jQuery );/* ============================================================ - * bootstrap-dropdown.js v2.0.2 - * http://twitter.github.com/bootstrap/javascript.html#dropdowns - * ============================================================ - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function( $ ){ - - "use strict" - - /* DROPDOWN CLASS DEFINITION - * ========================= */ - - var toggle = '[data-toggle="dropdown"]' - , Dropdown = function ( element ) { - var $el = $(element).on('click.dropdown.data-api', this.toggle) - $('html').on('click.dropdown.data-api', function () { - $el.parent().removeClass('open') - }) - } - - Dropdown.prototype = { - - constructor: Dropdown - - , toggle: function ( e ) { - var $this = $(this) - , selector = $this.attr('data-target') - , $parent - , isActive - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - $parent = $(selector) - $parent.length || ($parent = $this.parent()) - - isActive = $parent.hasClass('open') - - clearMenus() - !isActive && $parent.toggleClass('open') - - return false - } - - } - - function clearMenus() { - $(toggle).parent().removeClass('open') - } - - - /* DROPDOWN PLUGIN DEFINITION - * ========================== */ - - $.fn.dropdown = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('dropdown') - if (!data) $this.data('dropdown', (data = new Dropdown(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.dropdown.Constructor = Dropdown - - - /* APPLY TO STANDARD DROPDOWN ELEMENTS - * =================================== */ - - $(function () { - $('html').on('click.dropdown.data-api', clearMenus) - $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle) - }) - -}( window.jQuery );/* ========================================================= - * bootstrap-modal.js v2.0.2 - * http://twitter.github.com/bootstrap/javascript.html#modals - * ========================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================= */ - - -!function( $ ){ - - "use strict" - - /* MODAL CLASS DEFINITION - * ====================== */ - - var Modal = function ( content, options ) { - this.options = options - this.$element = $(content) - .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) - } - - Modal.prototype = { - - constructor: Modal - - , toggle: function () { - return this[!this.isShown ? 'show' : 'hide']() - } - - , show: function () { - var that = this - - if (this.isShown) return - - $('body').addClass('modal-open') - - this.isShown = true - this.$element.trigger('show') - - escape.call(this) - backdrop.call(this, function () { - var transition = $.support.transition && that.$element.hasClass('fade') - - !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position - - that.$element - .show() - - if (transition) { - that.$element[0].offsetWidth // force reflow - } - - that.$element.addClass('in') - - transition ? - that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) : - that.$element.trigger('shown') - - }) - } - - , hide: function ( e ) { - e && e.preventDefault() - - if (!this.isShown) return - - var that = this - this.isShown = false - - $('body').removeClass('modal-open') - - escape.call(this) - - this.$element - .trigger('hide') - .removeClass('in') - - $.support.transition && this.$element.hasClass('fade') ? - hideWithTransition.call(this) : - hideModal.call(this) - } - - } - - - /* MODAL PRIVATE METHODS - * ===================== */ - - function hideWithTransition() { - var that = this - , timeout = setTimeout(function () { - that.$element.off($.support.transition.end) - hideModal.call(that) - }, 500) - - this.$element.one($.support.transition.end, function () { - clearTimeout(timeout) - hideModal.call(that) - }) - } - - function hideModal( that ) { - this.$element - .hide() - .trigger('hidden') - - backdrop.call(this) - } - - function backdrop( callback ) { - var that = this - , animate = this.$element.hasClass('fade') ? 'fade' : '' - - if (this.isShown && this.options.backdrop) { - var doAnimate = $.support.transition && animate - - this.$backdrop = $('
",""],legend:[1,"
","
"],thead:[1,"
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 literal 0 HcmV?d00001 diff --git a/documentation/website/source/about/apple-dylan/eulogy.rst b/documentation/website/source/about/apple-dylan/eulogy.rst index 90ec12e5e2..72ee9ecdf5 100644 --- a/documentation/website/source/about/apple-dylan/eulogy.rst +++ b/documentation/website/source/about/apple-dylan/eulogy.rst @@ -111,8 +111,7 @@ by Apple is SK8. SK8 has an even cooler environment than Apple Dylan and has been used in dozens of projects many years ago. The programming language of SK8 is a kind of object-oriented AppleScript (written in MCL). Here is a `picture of Sk8 running on a PowerMac -`_. Sk8 has -been released by Apple as source code. +<../../_static/images/sk8.jpg>`_. Sk8 has been released by Apple as source code. Apple Dylan influences ====================== From b06a0f3204aca0641ce5981deb664ae01135f06a Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Mon, 21 Jan 2013 13:30:53 +0700 Subject: [PATCH 232/519] Improve home page title since I removed the big title text. --- documentation/website/source/_themes/opendylan/layout.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/documentation/website/source/_themes/opendylan/layout.html b/documentation/website/source/_themes/opendylan/layout.html index 23dda0c750..bf887fdc92 100644 --- a/documentation/website/source/_themes/opendylan/layout.html +++ b/documentation/website/source/_themes/opendylan/layout.html @@ -19,7 +19,9 @@ ('download/index', 'Download'), ] -%} {% set active_page = pagename|default('index') -%} - +{%- block htmltitle %} +{% if title == "<no title>" %}Open Dylan{% else %}{{ title|striptags|e }}{% endif %}{{ titlesuffix }} +{%- endblock %} {% block extrahead %} From 75dbd261df64e8478fe5220dc1819f48a6bc0c7e Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Mon, 21 Jan 2013 13:50:35 +0700 Subject: [PATCH 233/519] Improve footer appearance. --- .../source/_themes/opendylan/layout.html | 22 +++++++++---------- .../static/opendylan.org/css/opendylan.css | 4 ++++ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/documentation/website/source/_themes/opendylan/layout.html b/documentation/website/source/_themes/opendylan/layout.html index bf887fdc92..b295b7bb2a 100644 --- a/documentation/website/source/_themes/opendylan/layout.html +++ b/documentation/website/source/_themes/opendylan/layout.html @@ -72,16 +72,15 @@ {% endblock %} {% block footer %} -
-
-
+
+ +
@@ -112,8 +111,7 @@ } catch( err ) {} - -
+ {% endblock %} {% block relbar1 %}{% endblock %} diff --git a/documentation/website/source/_themes/opendylan/static/opendylan.org/css/opendylan.css b/documentation/website/source/_themes/opendylan/static/opendylan.org/css/opendylan.css index dd217348cc..796d96e262 100644 --- a/documentation/website/source/_themes/opendylan/static/opendylan.org/css/opendylan.css +++ b/documentation/website/source/_themes/opendylan/static/opendylan.org/css/opendylan.css @@ -17,6 +17,10 @@ body { -moz-border-radius:3px; border-radius:3px; } +footer.navbar { + margin-top: 20px; + margin-bottom: 0; +} /* Make the headerlink less obnoxiously visible */ a.headerlink { color: silver; From c12e4466448e25d034cab0df4e540f29374f0697 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Mon, 21 Jan 2013 14:01:50 +0700 Subject: [PATCH 234/519] OpenDylan -> Open Dylan. --- documentation/website/source/index.rst | 4 ++-- .../website/source/news/2012/10/18/editor-support.rst | 2 +- .../website/source/news/2012/12/20/new-release.rst | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/documentation/website/source/index.rst b/documentation/website/source/index.rst index cdd5205e79..9ac55fa67e 100644 --- a/documentation/website/source/index.rst +++ b/documentation/website/source/index.rst @@ -51,8 +51,8 @@ Dylan has a large amount of documentation available: A good, book length Dylan tutorial by several Harlequin employees. * `Dylan Reference Manual `_: The official definition of the Dylan language and standard library. -* `OpenDylan Documentation `_: - All of the OpenDylan documentation. +* `Open Dylan Documentation `_: + All of the Open Dylan documentation. .. raw:: html diff --git a/documentation/website/source/news/2012/10/18/editor-support.rst b/documentation/website/source/news/2012/10/18/editor-support.rst index e056a866e9..e028af7408 100644 --- a/documentation/website/source/news/2012/10/18/editor-support.rst +++ b/documentation/website/source/news/2012/10/18/editor-support.rst @@ -18,7 +18,7 @@ Sublime Text and Textmate Textmate and Sublime Text used the same plugin which can be found on GitHub at https://github.com/dylan-lang/dylan.tmbundle. -* Using OpenDylan specific modifiers (``dynamic``, ``sideways``, etc) +* Using Open Dylan specific modifiers (``dynamic``, ``sideways``, etc) won't break the highlighting. * ``locked`` and ``thread`` variable definitions are highlighted correctly now. diff --git a/documentation/website/source/news/2012/12/20/new-release.rst b/documentation/website/source/news/2012/12/20/new-release.rst index bd75993d18..1e81e66bf2 100644 --- a/documentation/website/source/news/2012/12/20/new-release.rst +++ b/documentation/website/source/news/2012/12/20/new-release.rst @@ -32,8 +32,8 @@ separately: ``strings`` and ``string-extensions`` libraries with a more consistent and straightforward API. ``string-extensions`` has been removed. * The ``command-line-parser`` library has been cleaned up and integrated - with the OpenDylan distribution. -* We no longer provide PowerPC builds of OpenDylan on Mac OS X. Also, + with the Open Dylan distribution. +* We no longer provide PowerPC builds of Open Dylan on Mac OS X. Also, our Intel builds are for Mac OS X Lion and later. If you desire Snow Leopard support, please get in touch with us. @@ -44,4 +44,4 @@ On Windows there is an installer, on UNIX systems unpack into ``/opt``. On 64 bit Linux, you will need to have the Boehm GC installed for our executables to run. (Ubuntu: ``apt-get install libgc``) -Good luck and happy Dylan hacking! \ No newline at end of file +Good luck and happy Dylan hacking! From 0015e2edbc063ff46e9ee7e46515688c87cf283d Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Mon, 21 Jan 2013 16:05:20 +0700 Subject: [PATCH 235/519] Add links to new PDF & ePub versions of DPG. --- documentation/website/source/documentation/index.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index f7ec3b8d02..f880533c73 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -33,6 +33,8 @@ Documentation Manual (DRM). `Dylan Programming `_ +[`pdf `__] +[`epub `__] A good, book length Dylan tutorial by several Harlequin employees. From 0be932a03ccd07aef77ca87a868dccdeea92b1d6 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Mon, 21 Jan 2013 16:25:16 +0700 Subject: [PATCH 236/519] Announce the DPG updates. --- .../2013/01/21/dylan-programming-guide.rst | 38 +++++++++++++++++++ documentation/website/source/news/index.rst | 18 +++++++++ .../website/source/news/recent.rst.inc | 27 +++++-------- 3 files changed, 65 insertions(+), 18 deletions(-) create mode 100644 documentation/website/source/news/2013/01/21/dylan-programming-guide.rst diff --git a/documentation/website/source/news/2013/01/21/dylan-programming-guide.rst b/documentation/website/source/news/2013/01/21/dylan-programming-guide.rst new file mode 100644 index 0000000000..665328d63d --- /dev/null +++ b/documentation/website/source/news/2013/01/21/dylan-programming-guide.rst @@ -0,0 +1,38 @@ +:Author: Bruce Mitchener, Jr. +:Date: 2013-01-21 00:00:00 + +Dylan Programming Guide +======================= + +The `Dylan Programming Guide`_ has been updated to +use our new documentation format. As a result it is +now available in `PDF`_ and `ePub`_ formats as well +as much improved HTML. + +The Dylan Programming Guide is a great introduction +to programming in Dylan and was written by Neil +Feinberg, Sonya E. Keene, Robert O. Matthews, and +P. Tucker Withington while they were employed by +Harlequin in the 1990s. The book covers everything +from the basics up through advanced concepts such as +Dylan macros and the condition system. + +This was exported from the 1996-era Framemaker files +and largely reformatted by hand. During this work, +we also rewrote the lexer used in `Pygments`_ for +processing and syntax highlighting Dylan source code. +This new lexer will be available in the upcoming +Pygments 1.6. + +In the future, we will add some errata to the book to +address some of the changes that have happened since +the book was originally published. + +We hope that this will be helpful in introducing a +new generation of programmers to the Dylan programming +language. + +.. _Dylan Programming Guide: http://opendylan.org/books/dpg/ +.. _PDF: http://opendylan.org/books/dpg/DylanProgramming.pdf +.. _ePub: http://opendylan.org/books/dpg/DylanProgramming.epub +.. _Pygments: http://pygments.org/ diff --git a/documentation/website/source/news/index.rst b/documentation/website/source/news/index.rst index 56ad3ac760..76ff4bfaa5 100644 --- a/documentation/website/source/news/index.rst +++ b/documentation/website/source/news/index.rst @@ -11,6 +11,24 @@ News & Articles .. include:: recent.rst.inc +**command-line-parser library** +*2012-10-15* + +The `command-line-parser +`_ library has been +completely rewritten. + +:doc:`Read more... ` + + +**New strings library** +*2012-05-18* + +A new library of basic string operations is now available as a +standard library. + +:doc:`Read more... ` + **C3 superclass linearization** *2012-01-25* diff --git a/documentation/website/source/news/recent.rst.inc b/documentation/website/source/news/recent.rst.inc index d2886c4a54..2ccb4947e0 100644 --- a/documentation/website/source/news/recent.rst.inc +++ b/documentation/website/source/news/recent.rst.inc @@ -1,3 +1,12 @@ +**Updated Dylan Programming Guide** +*2013-01-21* + +The Dylan Programming Guide has been updated to our +new documentation format and is now available in +PDF and ePub formats. + +:doc:`Read more... ` + **New release: 2012.1** *2012-12-20* @@ -13,21 +22,3 @@ Bugs in the syntax highlighting support for Textmate and Sublime Text as well as for vim have been fixed. :doc:`Read more... ` - -**command-line-parser library** -*2012-10-15* - -The `command-line-parser -`_ library has been -completely rewritten. - -:doc:`Read more... ` - - -**New strings library** -*2012-05-18* - -A new library of basic string operations is now available as a -standard library. - -:doc:`Read more... ` From 3741d1f9ff504f4ee3e0a2dec487169dd1f82cb0 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Tue, 22 Jan 2013 22:39:17 +0700 Subject: [PATCH 237/519] Add Scheme cheatsheet. This is from Jonathan Sobel from many years ago. It was originally located at http://www.cs.indiana.edu/~jsobel/forschemers.html and is reproduced here with his permission. --- .../documentation/cheatsheets/scheme.rst | 617 ++++++++++++++++++ .../website/source/documentation/index.rst | 1 + 2 files changed, 618 insertions(+) create mode 100644 documentation/website/source/documentation/cheatsheets/scheme.rst diff --git a/documentation/website/source/documentation/cheatsheets/scheme.rst b/documentation/website/source/documentation/cheatsheets/scheme.rst new file mode 100644 index 0000000000..69dc12fc57 --- /dev/null +++ b/documentation/website/source/documentation/cheatsheets/scheme.rst @@ -0,0 +1,617 @@ +A Dylan Primer for Scheme Programmers +===================================== + +This document was originally authored by Jonathan Sobel. + +Almost everything you already do in Scheme can be translated easily into +Dylan. In fact, with one exception, Dylan is a proper superset of Scheme. +The one exception is that continuations have indefinite extent in Scheme +and dynamic extent in Dylan. Some individual implementations of Dylan +might provide a mechanism for producing continuations with indefinite +extent, making all Scheme programs be Dylan programs, too. (Of course, +you won't be taking full advantage of the power of Dylan if you only +write Scheme programs in it.) + +This document is really just a large table in two columns. On the left, +you will see a Scheme expression, and on the right, its Dylan counterpart. +If one column contains N/A, then that language has no corresponding +direct way to express what is in the other column. + +Please remember, there is much more to Dylan than what you'll find here! +For example, this document doesn't show you how to define new classes or +create generic functions (functions which support ad hoc polymorphic +behavior). This document is only intended to help ease your transition +from Scheme to Dylan. + +Literals +-------- + ++------------------------+-----------------------+ +| Scheme | Dylan | ++========================+=======================+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| #t | #t | ++------------------------+-----------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| #f | #f | ++------------------------+-----------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| 23 | 23 | ++------------------------+-----------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| #b1011 | #b1011 | ++------------------------+-----------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| #o644 | #o644 | ++------------------------+-----------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| #x2A5F | #x2A5F | ++------------------------+-----------------------+ +| .. code-block:: scheme | N/A | +| | | +| -4/5 | | ++------------------------+-----------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| 6.02E23 | 6.02E23 | ++------------------------+-----------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| #\a | 'a' | ++------------------------+-----------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| #\newline | '\n' | ++------------------------+-----------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| "Hello" | "Hello" | ++------------------------+-----------------------+ +| N/A | .. code-block:: dylan | +| | | +| | "Hello\n" | ++------------------------+-----------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| 'apple | #"apple" | +| | apple: | ++------------------------+-----------------------+ +| N/A | .. code-block:: dylan | +| | | +| | #"two words" | ++------------------------+-----------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| '(1 #\a dog) | #(1, 'a', #"dog") | ++------------------------+-----------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| '#(5 10 15) | #[5, 10, 15] | ++------------------------+-----------------------+ +| .. code-block:: scheme | N/A | +| | | +| `(1 2 ,x ,@y) | | ++------------------------+-----------------------+ + +Syntax +------ + +Note that, in Dylan, any words after an ``end`` (e.g. +``end method``) are optional. + ++----------------------------------+---------------------------------------+ +| Scheme | Dylan | ++==================================+=======================================+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (define var exp) | define variable var = exp | +| | define constant var = exp | ++----------------------------------+---------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (f x y z) | f(x, y, z) | ++----------------------------------+---------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (begin 1 2 3) | begin 1; 2; 3; end | +| | begin 1; 2; 3 end | ++----------------------------------+---------------------------------------+ +| .. code-block:: scheme | N/A | +| | | +| (quote datum) | | ++----------------------------------+---------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (lambda (x y . z) | method (x, y, #rest z) | +| (say "hello") | say("hello"); | +| (f x y z) | f(x, y, z); | +| ) | end method | ++----------------------------------+---------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (let ((x 5)) | let x = 5; | +| body) | body | +| | // (Scope ends at next | +| | // "body-ender.") | ++----------------------------------+---------------------------------------+ +| N/A | .. code-block:: dylan | +| | | +| | let (x, y) = exp; | +| | // (Binds multiple values | +| | // returned by exp.) | ++----------------------------------+---------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (let ((x 5) (y 6)) | let (x, y) = values(5, 6); | +| (f x y)) | f(x, y) | ++----------------------------------+---------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (letrec ((f (lambda (x) | local method f (x) | +| f-body) | f-body | +| ) | end method f, | +| (g (lambda (y z) | method g (y, z) | +| g-body) | g-body | +| )) | end method g; | +| body) | body | ++----------------------------------+---------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (if test | if (test) | +| (begin then1 | then1; | +| then2) | then2; | +| (begin else1 | else | +| else2) | else1; | +| ) | else2; | +| | end if | ++----------------------------------+---------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (set! var value) | var := value | ++----------------------------------+---------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (and a b c) | a & b & c | ++----------------------------------+---------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (or a b c) | a | b | c | ++----------------------------------+---------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (cond | case | +| (test1 result1) | test1 => result1; | +| (test2 result2) | test2 => result2; | +| (else result) | otherwise => result; | +| ) | end case | ++----------------------------------+---------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (case exp | select (exp) | +| ((a 2) result1) | #"a", 2 => result1; | +| (('a' 'b') result2) | 'a', 'b' => result2; | +| (else result) | otherwise => result; | +| ) | end select | ++----------------------------------+---------------------------------------+ +| N/A | .. code-block:: dylan | +| | | +| | select (exp by comparison-func) | +| | f(x) => result1; | +| | g(y), h(z) => result2; | +| | otherwise => result; | +| | end select | ++----------------------------------+---------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (do ((var1 init1 step1) | for (var1 = init1 then step1, | +| (var2 init2 step2)) | var2 = init2 then step2, | +| (test result) | until: test) | +| body | body | +| ) | finally result | +| | end for | ++----------------------------------+---------------------------------------+ + +Predefined functions +-------------------- + +These are organized based on the "Standard Procedures" section of R4RS. + ++--------------------------------+-----------------------------------------------+ +| **Boolean functions** | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (not obj) | ~ obj | +| | ~obj | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (boolean? obj) | instance?(obj, ) | ++--------------------------------+-----------------------------------------------+ +| **Equivalance predicates** | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (eqv? x y) | x == y | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | N/A | +| | | +| (eq? x y) | | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (equal? x y) | x = y | ++--------------------------------+-----------------------------------------------+ +| **Pairs and Lists** | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (pair? obj) | instance?(obj, ) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (cons x y) | pair(x, y) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (car ls) | head(ls) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (cdr ls) | tail(ls) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (set-car! ls val) | head-setter(val, ls) | +| | head(ls) := val | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (set-cdr! ls val) | tail-setter(val, ls) | +| | tail(ls) := val | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (cadadr ls) | N/A | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (null? obj) | instance?(obj, ) | +| | obj = #() | +| | empty?(ls) // most common | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (list? obj) | instance?(obj, ) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (list x y z) | list(x, y, z) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (length ls) | size(ls) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (append ls1 ls2 ls3) | concatenate(ls1, ls2, ls3) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (reverse ls) | reverse(ls) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (list-ref ls n) | element(ls, n) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (member obj ls) | member?(obj, ls) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (memv obj ls) | member?(obj, ls, test: \==) | ++--------------------------------+-----------------------------------------------+ +| **Symbols** | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (symbol? obj) | instance?(obj, ) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (symbol->string sym) | as(, sym) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (string->symbol str) | as(, str) | ++--------------------------------+-----------------------------------------------+ +| **Numerical operations** | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (number? obj) | instance?(obj, ) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (complex? obj) | instance?(obj, ) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (real? obj) | instance?(obj, ) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (rational? obj) | instance?(obj, ) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (integer? obj) | instance?(obj, ) | +| | integral?(num) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (= n1 n2) | n1 = n2 | +| | n1 == n2 | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (< n1 n2) | n1 < n2 | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (> n1 n2) | n1 > n2 | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (<= n1 n2) | n1 <= n2 | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (>= n1 n2) | n1 >= n2 | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (zero? n) | zero?(n) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (positive? n) | positive?(n) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (negative? n) | negative?(n) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (odd? i) | odd?(i) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (even? i) | even?(i) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (+ 1 2 3) | 1 + 2 + 3 | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (* 1 2 3) | 1 * 2 * 3 | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (- 5 3) | 5 - 3 | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (/ 2.3 1.7) | 2.3 / 1.7 | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (- x) | - x | +| | -x | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (expt 2 16) | 2 ^ 16 | ++--------------------------------+-----------------------------------------------+ +| *[Most of the standard Scheme numeric functions (e.g. max, remainder) are | +| defined similarly in Dylan. No need to list them all here.]* | ++--------------------------------+-----------------------------------------------+ +| ** Characters** | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (char? obj) | instance?(obj, ) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (char=? char1 char2) | char1 = char2 | +| | char1 == char2 | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (char? char1 char2) | char1 > char2 | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (char<=? char1 char2) | char1 <= char2 | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (char>=? char1 char2) | char1 >= char2 | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (char->integer char) | as(, char) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (integer->char n) | as(, n) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (char-upcase char) | as-uppercase(char) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (char-downcase char) | as-lowercase(char) | ++--------------------------------+-----------------------------------------------+ +| **Strings** | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (string? obj) | instance?(obj, ) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (make-string k char) | make(, size: k, fill: char) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | N/A | +| | | +| (string char ...) | | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (string-length str) | size(str) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (string-ref str k) | element(str, k) | +| | str[k] | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (string-set! str k char) | element-setter(char, str, k) | +| | str[k] := char | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (string=? str1 str2) | str1 = str2 | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (stringlist str) | as(, str) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (list->string chars) | as(, chars) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (string-copy str) | shallow-copy(str) | +| | copy-sequence(str) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (string-fill! str char) | fill!(str, char) | ++--------------------------------+-----------------------------------------------+ +| **Vectors** | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (vector? obj) | instance?(obj, ) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (make-vector k fill) | make(, size: k, fill: fill) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (vector obj ...) | vector(obj, ...); | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (vector-length vec) | size(vec) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (vector-ref vec k) | element(vec, k) | +| | vec[k] | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (vector-set! vec k obj) | element-setter(obj, vec, k) | +| | vec[k] := obj | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (vector->list vec) | as(, vec) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (list>vector list) | as(, list) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (vector-fill! vec obj) | fill!(vec, obj) | ++--------------------------------+-----------------------------------------------+ +| **Control Features** | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (procedure? obj) | instance?(obj, ) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (apply proc arg1 arg2 args) | apply(proc, arg1, arg2, args) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (map proc list1 list2) | map(proc, list1, list2) | ++--------------------------------+-----------------------------------------------+ +| N/A | .. code-block:: dylan | +| | | +| | map(proc, vec1, vec2) | ++--------------------------------+-----------------------------------------------+ +| N/A | .. code-block:: dylan | +| | | +| | map(proc, string1, string2) | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (for-each proc list1 list2) | do(proc, list1, list2) | ++--------------------------------+-----------------------------------------------+ +| **Continuations** | +| | +| As mentioned before, continuations have dynamic extent in Dylan. Also, whereas | +| ``call/cc`` is a function, Dylan uses a syntax form to grab a continuation. | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (call/cc | block (k) | +| (lambda (k) | body | +| body)) | end block | ++--------------------------------+-----------------------------------------------+ +| .. code-block:: scheme | .. code-block:: dylan | +| | | +| (call/cc | block (k) | +| (lambda (k) | body | +| (dynamic-wind | cleanup | +| (lambda () #f) | cleanup-stuff | +| (lambda () body) | end block | +| (lambda () | | +| cleanup-stuff)))) | | ++--------------------------------+-----------------------------------------------+ diff --git a/documentation/website/source/documentation/index.rst b/documentation/website/source/documentation/index.rst index f880533c73..7261fc39fc 100644 --- a/documentation/website/source/documentation/index.rst +++ b/documentation/website/source/documentation/index.rst @@ -109,6 +109,7 @@ Documentation * `Iteration `_ * `Conditionals `_ * `Collections `_ + * `For Scheme programmers `_ .. raw:: html From d5a761ec02525b1628e52239e0139797860c82d2 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Tue, 22 Jan 2013 23:16:51 +0700 Subject: [PATCH 238/519] fix indentation error. --- .../website/source/documentation/cheatsheets/scheme.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/documentation/cheatsheets/scheme.rst b/documentation/website/source/documentation/cheatsheets/scheme.rst index 69dc12fc57..81da371ac8 100644 --- a/documentation/website/source/documentation/cheatsheets/scheme.rst +++ b/documentation/website/source/documentation/cheatsheets/scheme.rst @@ -189,7 +189,7 @@ Note that, in Dylan, any words after an ``end`` (e.g. | (test1 result1) | test1 => result1; | | (test2 result2) | test2 => result2; | | (else result) | otherwise => result; | -| ) | end case | +| ) | end case | +----------------------------------+---------------------------------------+ | .. code-block:: scheme | .. code-block:: dylan | | | | From fb77f1ab0e7d4d1617eef41bdf3de309c00ff858 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Fri, 25 Jan 2013 14:56:22 +0700 Subject: [PATCH 239/519] Fix a variety of broken links. --- documentation/website/source/community/gsoc/2012/cilk.rst | 2 +- documentation/website/source/community/gsoc/2012/cocoa.rst | 2 +- documentation/website/source/community/gsoc/2012/dylint.rst | 1 - .../website/source/community/gsoc/2012/frontend-lisp.rst | 2 +- .../website/source/news/2011/11/22/new_documentation.rst | 2 +- documentation/website/source/proposals/dep-0003.rst | 2 +- 6 files changed, 5 insertions(+), 6 deletions(-) diff --git a/documentation/website/source/community/gsoc/2012/cilk.rst b/documentation/website/source/community/gsoc/2012/cilk.rst index 4cd3d4c53f..250d8e6359 100644 --- a/documentation/website/source/community/gsoc/2012/cilk.rst +++ b/documentation/website/source/community/gsoc/2012/cilk.rst @@ -11,4 +11,4 @@ trying to interoperate with the existing Cilk runtime. Cilk information: -- http://software.intel.com/en-us/articles/intel-cilk-plus/ +- http://software.intel.com/en-us/intel-cilk-plus diff --git a/documentation/website/source/community/gsoc/2012/cocoa.rst b/documentation/website/source/community/gsoc/2012/cocoa.rst index 0a4948bfde..f8f1b677ed 100644 --- a/documentation/website/source/community/gsoc/2012/cocoa.rst +++ b/documentation/website/source/community/gsoc/2012/cocoa.rst @@ -18,4 +18,4 @@ Interesting prior art: - `LuaCocoa `_ - `Clozure CL Objective C bridge `_ - `LispWorks Objective C interface `_ -- `A list of a lot of Cocoa Bridges `_ +- `A list of a lot of Cocoa Bridges `_ diff --git a/documentation/website/source/community/gsoc/2012/dylint.rst b/documentation/website/source/community/gsoc/2012/dylint.rst index 33358d6c91..8c64857ea1 100644 --- a/documentation/website/source/community/gsoc/2012/dylint.rst +++ b/documentation/website/source/community/gsoc/2012/dylint.rst @@ -10,5 +10,4 @@ This can draw inspiration from: - `PMD `_ - `PyLint `_ -- `AnalysisTool `_ - Clang plugins diff --git a/documentation/website/source/community/gsoc/2012/frontend-lisp.rst b/documentation/website/source/community/gsoc/2012/frontend-lisp.rst index e48a23bb7f..2391ee6ddb 100644 --- a/documentation/website/source/community/gsoc/2012/frontend-lisp.rst +++ b/documentation/website/source/community/gsoc/2012/frontend-lisp.rst @@ -14,4 +14,4 @@ Some references: - `Dylan Interim Reference Manual `_ - `Dylan Macros with S-Expressions `_ -- `S-Expression Syntax `_ +- `S-Expression Syntax `_ diff --git a/documentation/website/source/news/2011/11/22/new_documentation.rst b/documentation/website/source/news/2011/11/22/new_documentation.rst index 292d3e30f8..b29778050f 100644 --- a/documentation/website/source/news/2011/11/22/new_documentation.rst +++ b/documentation/website/source/news/2011/11/22/new_documentation.rst @@ -27,7 +27,7 @@ There will still be a fair bit of work to update and improve the documentation, but this should prove much easier now that we have it in a modern format that we all can work with! -.. _Sphinx: http://sphinx.pocoo.org/ +.. _Sphinx: http://sphinx-doc.org/ .. _documentation: https://github.com/dylan-lang/opendylan/tree/master/documentation .. _sphinx-extensions: https://github.com/dylan-lang/sphinx-extensions diff --git a/documentation/website/source/proposals/dep-0003.rst b/documentation/website/source/proposals/dep-0003.rst index 0e487cb715..4a54b2d407 100644 --- a/documentation/website/source/proposals/dep-0003.rst +++ b/documentation/website/source/proposals/dep-0003.rst @@ -57,7 +57,7 @@ consistent superclass linearization algorithm is needed. After the C3 linearization was proposed in 1996, it was subsequently adapted in Python 2.3 (`article `__) and Perl 6 (`article -`__). +`__). Rationale ========= From 3e71fa9d62d414fe5fe19501ab9c5add3c991058 Mon Sep 17 00:00:00 2001 From: Bruce Mitchener Date: Sat, 9 Feb 2013 06:05:47 +0700 Subject: [PATCH 240/519] Bump to new Twitter Bootstrap version. --- documentation/website/source/_themes/opendylan/layout.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/documentation/website/source/_themes/opendylan/layout.html b/documentation/website/source/_themes/opendylan/layout.html index b295b7bb2a..307081174e 100644 --- a/documentation/website/source/_themes/opendylan/layout.html +++ b/documentation/website/source/_themes/opendylan/layout.html @@ -23,9 +23,9 @@ {% if title == "<no title>" %}Open Dylan{% else %}{{ title|striptags|e }}{% endif %}{{ titlesuffix }} {%- endblock %} {% block extrahead %} - - - + + + From 839392f57064a6d723d0f5d24a56695f2a26b48a Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Wed, 13 Feb 2013 10:31:53 -0500 Subject: [PATCH 241/519] Initial draft of DEP 6, single file libraries --- .../website/source/proposals/dep-0006.rst | 172 ++++++++++++++++++ .../website/source/proposals/index.rst | 2 + 2 files changed, 174 insertions(+) create mode 100644 documentation/website/source/proposals/dep-0006.rst diff --git a/documentation/website/source/proposals/dep-0006.rst b/documentation/website/source/proposals/dep-0006.rst new file mode 100644 index 0000000000..6c43715c38 --- /dev/null +++ b/documentation/website/source/proposals/dep-0006.rst @@ -0,0 +1,172 @@ +********************* +Single File Libraries +********************* + +============== ============================================= +DEP #: 6 +Type: Standards Track +Author: Carl Gay +Status: Draft +Created: 12-Feb-2013 (Darwin's birthday) +Last-Modified: 12-Feb-2013 +Post-History: None +Dylan-Version: 2012.1 +============== ============================================= + +.. contents:: Contents + :local: + + +Abstract +======== + +Open Dylan currently requires users to create three source files to +define a simple library like hello-world: + +#. A project file (i.e., .lid file) to describe source files to + include, link options, etc. + +#. A library definition source file, often named library.dylan. + +#. At least one source file for main program logic, in a module + defined by the library definition. + +This DEP proposes a standard way to define a Dylan library in a single +source file. This DEP targets implementations of Dylan but does not +propose a change to the Dylan language itself. In particular it is +proposed as an enhancement for Open Dylan. + +Rationale +========= + +The three files described above are a lot of overhead for new users +who want to get a feel for the language, who are generally used to +creating a single file and running it directly, perhaps after +compiling it. A simpler setup would provide a better initial +experience for new users, and would help to make Dylan more attractive +for "scripting" purposes. The mantra has been that Dylan was designed +for large projects, but there's no reason it can't also excel at +scripting, with this change and the right set of support libraries. + +Note that even though the ``make-dylan-app`` program will generate a +skeleton project with three files (and a registry), this does not +remove the need to jump back and forth between the library definition +file and the main source file as you figure out which modules you need +to use. There is also the issue of new users figuring out that +``make-dylan-app`` exists in the first place. + +Goals +===== + +* Make it possible to use the full power of the Dylan module system to + define the library and module for a single-file library. + +* Make all LID file options available in the single-file library + format. + +* Do not introduce any new syntax. + +Background +========== + +A typical hello-world application written in Dylan might look like +this: + +**hello-world.lid** + +.. code-block:: dylan + + Library: hello-world + Files: library.dylan + hello-world.dylan + +**library.dylan** + +.. code-block:: dylan + + Module: dylan-user + + define libary hello-world + use common-dylan; + use io; + end; + + define module hello-world + use common-dylan; + use format-out; + end; + +**hello-world.dylan** + +.. code-block:: dylan + + Module: hello-world + + format-out("Hello, world!\n"); + +Therefore a way to encode their information into a regular dylan +source file is needed. After the implementation of this DEP, the +above library can be defined in a single source file, as follows: + +**hello-world.dylan** + +.. code-block:: dylan + + Module: hello-world + + // ----module def---- + + define libary hello-world + use common-dylan; + use io; + end; + + define module hello-world + use common-dylan; + use format-out; + end; + + // ----main body---- + + format-out("Hello, world!\n"); + +This continues to use the standard `Dylan Interchange Format +`_ as defined +in the DRM, with a set of headers, followed by a blank line, followed +by a *code body*. In the above example comments have been added for +reference to show two logical sections: the module definition and the +main body of the program. + + +Specification +============= + +LID files have the same format as the header section of a Dylan +Interchange Format source file. When defining a Dylan library in a +single source file, all LID keywords may appear in the header section. +The compiler or interpreter should handle them in the same way it +would if they were in a separate .lid file. There is no conflict +between the keywords used in LID files and those used in Dylan source +files. (Is this true? --cgay) + +When a compiler or interpreter is given a .dylan file to compile or +execute it must read the headers and then scan the *code body* for the +library and module definitions. + +If a "Library" header is found, then that is the name of the library +to be generated. Otherwise, the library name is the same as the +module specified in the required "Module" header. + +If no "define library" source record is found having the same name as +that specified in the "Library" (or "Module") header, it is an error. + +If no "define module" is found that has the same name as that +specified in the "Module" header, it is an error. The library and +module definitions should precede any other Dylan code in the *code +body*, but comments are allowed. If there is not exactly one library +definition and one module definition it is an error. + +A single-file library has the same semantics as a multi-file library. +Indeed, one possible (if simplistic) implementation is to generate a +multi-file library from the single file, and compile or execute it in +the normal way. diff --git a/documentation/website/source/proposals/index.rst b/documentation/website/source/proposals/index.rst index 7e60614884..69ea1c726c 100644 --- a/documentation/website/source/proposals/index.rst +++ b/documentation/website/source/proposals/index.rst @@ -25,6 +25,7 @@ Open Proposals (under consideration) ==== ============= ========== ============================================= 1 Process Draft `DEP Purpose and Guidelines `_ (`source <../_sources/proposals/dep-0001.txt>`__) +6 Standard Draft `Single File Libraries `_ (`source <../_sources/proposals/dep-0006.txt>`__) ==== ============= ========== ============================================= @@ -37,4 +38,5 @@ All Proposals by Number 3 Standard Final `C3 superclass linearization `_ (`source <../_sources/proposals/dep-0003.txt>`__) 4 Standard Final `New strings library `_ (`source <../_sources/proposals/dep-0004.txt>`__) 5 Standard Final `Subclass `_ (`source <../_sources/proposals/dep-0005.txt>`__) +6 Standard Draft `Single File Libraries `_ (`source <../_sources/proposals/dep-0006.txt>`__) ==== ============= ========== ============================================= From 78d9b6b7e2bfa83d3cb9d8f1b3ea95661e32d0f0 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sat, 16 Feb 2013 22:46:02 -0500 Subject: [PATCH 242/519] Rewrite using headers to define the library and module. --- .../website/source/proposals/dep-0006.rst | 217 ++++++++++++++---- 1 file changed, 176 insertions(+), 41 deletions(-) diff --git a/documentation/website/source/proposals/dep-0006.rst b/documentation/website/source/proposals/dep-0006.rst index 6c43715c38..af80e69f20 100644 --- a/documentation/website/source/proposals/dep-0006.rst +++ b/documentation/website/source/proposals/dep-0006.rst @@ -8,7 +8,7 @@ Type: Standards Track Author: Carl Gay Status: Draft Created: 12-Feb-2013 (Darwin's birthday) -Last-Modified: 12-Feb-2013 +Last-Modified: 16-Feb-2013 Post-History: None Dylan-Version: 2012.1 ============== ============================================= @@ -55,16 +55,42 @@ file and the main source file as you figure out which modules you need to use. There is also the issue of new users figuring out that ``make-dylan-app`` exists in the first place. +There are plenty of libraries that are small enough to comfortably fit +in a single file. Of the existing libraries in `the dylan-lang github +repository `_, at least ten could +comfortably fit in a single file. + +Having a library in a single file simplifies sharing of examples and +small tests. Indeed, one of the motivations for this feature was to +be able to contribute Dylan solutions for the `The Computer Language +Benchmarks Game `_, which +prefers to receive one file per solution. Obviously it is possible to +explain to them about LID files and how to unpack and compile a +multi-file solution for each problem, but it is more complex than it +needs to be. + +This DEP is only the first step to adding better support for +scripting. More is needed, such as supporting "hash bang" lines +(``#!/usr/bin/dylan``) and only recompiling when the source has +changed. + +Gwydion Dylan already supports a simple form of single-file library, +but it has limitations that this DEP removes, specifically the +inability to deal with import conflicts. + + Goals ===== * Make it possible to use the full power of the Dylan module system to - define the library and module for a single-file library. + define a library in a single file. * Make all LID file options available in the single-file library format. -* Do not introduce any new syntax. +* Introduce a minimum of new syntax. It should be obvious to someone + already used to Dylan what's going on. + Background ========== @@ -113,60 +139,169 @@ above library can be defined in a single source file, as follows: .. code-block:: dylan Module: hello-world - - // ----module def---- - - define libary hello-world - use common-dylan; - use io; - end; - - define module hello-world - use common-dylan; - use format-out; - end; - - // ----main body---- + Use-Library: common-dylan + Use-Library: io + Use-Module: common-dylan + Use-Module: format-out format-out("Hello, world!\n"); This continues to use the standard `Dylan Interchange Format `_ as defined in the DRM, with a set of headers, followed by a blank line, followed -by a *code body*. In the above example comments have been added for -reference to show two logical sections: the module definition and the -main body of the program. +by a *code body*. Specification ============= +None of the headers mentioned in this document are case sensitive. + +Replacing the LID File +---------------------- + LID files have the same format as the header section of a Dylan Interchange Format source file. When defining a Dylan library in a single source file, all LID keywords may appear in the header section. The compiler or interpreter should handle them in the same way it would if they were in a separate .lid file. There is no conflict between the keywords used in LID files and those used in Dylan source -files. (Is this true? --cgay) +files. (TODO: Verify this. --cgay) + +Library Header +~~~~~~~~~~~~~~ + +The ``Library`` header is optional in a single-source library. If +present, it defines the name of the library. If missing, the library +name is the same as the module name specified by the ``Module`` +header. + +Files Header +~~~~~~~~~~~~ + +The ``Files`` header should not appear in a single-file library. If +it does, it may be ignored. + + +Replacing library.dylan +----------------------- When a compiler or interpreter is given a .dylan file to compile or -execute it must read the headers and then scan the *code body* for the -library and module definitions. - -If a "Library" header is found, then that is the name of the library -to be generated. Otherwise, the library name is the same as the -module specified in the required "Module" header. - -If no "define library" source record is found having the same name as -that specified in the "Library" (or "Module") header, it is an error. - -If no "define module" is found that has the same name as that -specified in the "Module" header, it is an error. The library and -module definitions should precede any other Dylan code in the *code -body*, but comments are allowed. If there is not exactly one library -definition and one module definition it is an error. - -A single-file library has the same semantics as a multi-file library. -Indeed, one possible (if simplistic) implementation is to generate a -multi-file library from the single file, and compile or execute it in -the normal way. +execute, these new headers should be respected: + +Use-Library Header +~~~~~~~~~~~~~~~~~~ + +The ``Use-Library`` header names a library used by the library being +defined. + +The format of this header is:: + + Use-Library: used-library-name [ , options... ] + +In brief, this is the exact same syntax as a *use-clause* in `define +library +`_, +but with the token ``use`` replaced by the ``Use-Library:`` header +keyword. Examples:: + + Use-Library: system + Use-library: system, import: { operating-system } + +Use-Module Header +~~~~~~~~~~~~~~~~~ + +The ``Use-Module`` header names a module used by the library being +defined. + +The format of this header is:: + + Use-Module: used-module-name [ , options... ] + +Again, this is the exact same syntax as a *use-clause* in `define +module +`_, +but with the token ``use`` replaced by the ``Use-Module:`` header +keyword. Examples:: + + Use-Module: operating-system + use-module: operating-system, import: { exit-application } + use-module: operating-system, + prefix: "os/", + export: all + +Module-Exports Header +~~~~~~~~~~~~~~~~~~~~~ + +The ``Module-Exports`` header specifies a list of names exported from +the module named in the ``Module`` header. The syntax matches the +syntax in the ``exports`` clause of `define module +`_, +but with the token ``exports`` replaced by the ``Module-Exports:`` +header keyword. Examples:: + + Module-Exports: foo, bar, baz + +Because it is only possible to define one module in a single-file +library there is no need for a way to specify which modules are +exported from the library. If the ``Module-Exports`` header is +missing then no modules are exported from the library. If the +``Module-Exports`` header is present then the module named in the +``Module`` header is the sole module exported from the library. + + +Model Implementation +==================== + +A simple (but probably not practical) way to implement this proposal +would be via the following source transformations. This example is +provided primarily to demonstrate that a single-file library has the +same semantics as a multi-file library and to make it clear that the +new headers defined in this proposal have the same syntax as that of +``define library`` and ``define module``. + +#. Generate a LID file that includes all the headers except for + ``Module`` and add a ``Files`` header listing ``library.dylan`` and + ``the-given-file.dylan``. + +#. Generate a ``library.dylan`` file:: + + Module: dylan-user + + define library + use <1st-Use-Library-header-value-here>; + use <2nd-Use-Library-header-value-here>; + ... + export ; + end; + + define module + use <1st-Use-Module-header-value-here>; + use <2nd-Use-Module-header-value-here>; + ... + export ; + end; + + Note the addition of semicolons where necessary. + +#. Compile the generated LID file as usual. + +Cost to Implementors +==================== + +[Someone needs to correct this. I (cgay) am not familiar with the +compiler internals.] + +For the current Open Dylan command-line tools the cost of this +proposal is likely fairly low. It should involve some code to handle +the case where a ".dylan" file is passed on the command line. It will +need to parse the file headers and create a "project" object in memory +with generated source records for the library and module definitions +and a LID file representation. Ideally the compiler will be able to +pinpoint errors in the library and module definitions to the +appropriate header lines. + +The Open Dylan IDE can leverage the work done on the command-line +tools, but no doubt it makes some assumptions about projects always +having LID files. There will be substantial work involved if anyone +wants to support this feature in the IDE. From 3abc322e9f226dc7126290343cfcb672b5d389d9 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Sat, 16 Feb 2013 23:35:21 -0500 Subject: [PATCH 243/519] Update Post-History header. --- documentation/website/source/proposals/dep-0006.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/proposals/dep-0006.rst b/documentation/website/source/proposals/dep-0006.rst index af80e69f20..3121f76f28 100644 --- a/documentation/website/source/proposals/dep-0006.rst +++ b/documentation/website/source/proposals/dep-0006.rst @@ -9,7 +9,7 @@ Author: Carl Gay Status: Draft Created: 12-Feb-2013 (Darwin's birthday) Last-Modified: 16-Feb-2013 -Post-History: None +Post-History: 16-Feb-2013 hackers@lists.opendylan.org Dylan-Version: 2012.1 ============== ============================================= From bc5cb672bef1cde78afb32cda0fd9765e1f5a50c Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Sun, 17 Feb 2013 17:28:23 +0100 Subject: [PATCH 244/519] link to C3 paper changed, old link is dead --- documentation/website/source/documentation/publications.rst | 2 +- documentation/website/source/proposals/dep-0003.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/website/source/documentation/publications.rst b/documentation/website/source/documentation/publications.rst index b5415f88f7..7bf9849b01 100644 --- a/documentation/website/source/documentation/publications.rst +++ b/documentation/website/source/documentation/publications.rst @@ -127,7 +127,7 @@ Toby Weinberg - Communications of the ACM May 1998 **A Monotonic Superclass Linearization for Dylan** (by Kim Barrett and Bob Cassels and Paul Haahr and David A. Moon and Keith Playford and P. Tucker Withington at OOPSLA 1996 -`html `__ +`html `__ `bib <../_static/documentation/barrett1996.bib>`__) Object-oriented languages with multiple inheritance and automatic diff --git a/documentation/website/source/proposals/dep-0003.rst b/documentation/website/source/proposals/dep-0003.rst index 4a54b2d407..2298dc42c6 100644 --- a/documentation/website/source/proposals/dep-0003.rst +++ b/documentation/website/source/proposals/dep-0003.rst @@ -34,7 +34,7 @@ The C3 superclass linearization has been proposed in 1996 by Kim Barrett, Bob Cassels, Paul Haahr, David A. Moon, Keith Playford, and P. Tucker Withington in a `paper `_ (`html version -`_). +`_). A superclass linearization (also known as a class precedence list) is used for resolving conflicts among multiply-inherited superclasses From 135c8bbfbdc1ee02859fdb1f58ba2d620b4d90c1 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Sun, 17 Feb 2013 17:31:14 +0100 Subject: [PATCH 245/519] remove reference from the news item, it is acceessible via the DEP --- documentation/website/source/news/2012/01/25/c3.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/documentation/website/source/news/2012/01/25/c3.rst b/documentation/website/source/news/2012/01/25/c3.rst index c8bb23c5b4..8aa0d3407d 100644 --- a/documentation/website/source/news/2012/01/25/c3.rst +++ b/documentation/website/source/news/2012/01/25/c3.rst @@ -15,6 +15,4 @@ issued if the new C3 linearization is different from the old `_. Further information is available in the accepted Dylan enhancement -proposal `here `_ and in the original `paper -`_ (`doi -`_). +proposal `here `_. From 7c1c41eafb3dd1a6c8758d4d8bc5b645e13d6232 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 18 Feb 2013 12:04:27 -0500 Subject: [PATCH 246/519] Module-Exports -> Export-Names --- .../website/source/proposals/dep-0006.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/documentation/website/source/proposals/dep-0006.rst b/documentation/website/source/proposals/dep-0006.rst index 3121f76f28..8c44273749 100644 --- a/documentation/website/source/proposals/dep-0006.rst +++ b/documentation/website/source/proposals/dep-0006.rst @@ -8,7 +8,7 @@ Type: Standards Track Author: Carl Gay Status: Draft Created: 12-Feb-2013 (Darwin's birthday) -Last-Modified: 16-Feb-2013 +Last-Modified: 17-Feb-2013 Post-History: 16-Feb-2013 hackers@lists.opendylan.org Dylan-Version: 2012.1 ============== ============================================= @@ -230,23 +230,23 @@ keyword. Examples:: prefix: "os/", export: all -Module-Exports Header -~~~~~~~~~~~~~~~~~~~~~ +Export-Names Header +~~~~~~~~~~~~~~~~~~~ -The ``Module-Exports`` header specifies a list of names exported from +The ``Export-Names`` header specifies a list of names exported from the module named in the ``Module`` header. The syntax matches the syntax in the ``exports`` clause of `define module `_, -but with the token ``exports`` replaced by the ``Module-Exports:`` +but with the token ``exports`` replaced by the ``Export-Names:`` header keyword. Examples:: - Module-Exports: foo, bar, baz + Export-Names: foo, bar, baz Because it is only possible to define one module in a single-file library there is no need for a way to specify which modules are -exported from the library. If the ``Module-Exports`` header is +exported from the library. If the ``Export-Names`` header is missing then no modules are exported from the library. If the -``Module-Exports`` header is present then the module named in the +``Export-Names`` header is present then the module named in the ``Module`` header is the sole module exported from the library. @@ -279,7 +279,7 @@ new headers defined in this proposal have the same syntax as that of use <1st-Use-Module-header-value-here>; use <2nd-Use-Module-header-value-here>; ... - export ; + export ; end; Note the addition of semicolons where necessary. From 9eb55441e886ee44ddc2653c6277ece4c5664097 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 18 Feb 2013 12:29:36 -0500 Subject: [PATCH 247/519] Minor changes related to case sensitivity. --- .../website/source/proposals/dep-0006.rst | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/documentation/website/source/proposals/dep-0006.rst b/documentation/website/source/proposals/dep-0006.rst index 8c44273749..c594a7ff2d 100644 --- a/documentation/website/source/proposals/dep-0006.rst +++ b/documentation/website/source/proposals/dep-0006.rst @@ -155,8 +155,6 @@ by a *code body*. Specification ============= -None of the headers mentioned in this document are case sensitive. - Replacing the LID File ---------------------- @@ -206,7 +204,7 @@ but with the token ``use`` replaced by the ``Use-Library:`` header keyword. Examples:: Use-Library: system - Use-library: system, import: { operating-system } + Use-Library: system, import: { operating-system } Use-Module Header ~~~~~~~~~~~~~~~~~ @@ -225,8 +223,8 @@ but with the token ``use`` replaced by the ``Use-Module:`` header keyword. Examples:: Use-Module: operating-system - use-module: operating-system, import: { exit-application } - use-module: operating-system, + Use-Module: operating-system, import: { exit-application } + Use-Module: operating-system, prefix: "os/", export: all @@ -253,26 +251,22 @@ missing then no modules are exported from the library. If the Model Implementation ==================== -A simple (but probably not practical) way to implement this proposal +A simple (but not recommended) way to implement this proposal would be via the following source transformations. This example is provided primarily to demonstrate that a single-file library has the same semantics as a multi-file library and to make it clear that the new headers defined in this proposal have the same syntax as that of ``define library`` and ``define module``. -#. Generate a LID file that includes all the headers except for - ``Module`` and add a ``Files`` header listing ``library.dylan`` and - ``the-given-file.dylan``. - #. Generate a ``library.dylan`` file:: Module: dylan-user - define library + define library use <1st-Use-Library-header-value-here>; use <2nd-Use-Library-header-value-here>; ... - export ; + export ; end; define module @@ -284,6 +278,10 @@ new headers defined in this proposal have the same syntax as that of Note the addition of semicolons where necessary. +#. Generate a LID file that includes all the headers except for + ``Module`` and add a ``Files`` header listing ``library.dylan`` and + ``the-given-file.dylan``. + #. Compile the generated LID file as usual. Cost to Implementors From b9bf514ae5b4a18883ccf3d1a43bf20f02474e9f Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 18 Feb 2013 16:42:37 -0500 Subject: [PATCH 248/519] Added link to revision history on github. --- documentation/website/source/proposals/dep-0006.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/documentation/website/source/proposals/dep-0006.rst b/documentation/website/source/proposals/dep-0006.rst index c594a7ff2d..6cf131a82c 100644 --- a/documentation/website/source/proposals/dep-0006.rst +++ b/documentation/website/source/proposals/dep-0006.rst @@ -16,6 +16,11 @@ Dylan-Version: 2012.1 .. contents:: Contents :local: +Revision History +================ + +The revision history of this document is available here: +https://github.com/cgay/website/commits/master/source/proposals/dep-0006.rst Abstract ======== @@ -247,7 +252,6 @@ missing then no modules are exported from the library. If the ``Export-Names`` header is present then the module named in the ``Module`` header is the sole module exported from the library. - Model Implementation ==================== From b1f872d4ffa271eca2371a7bd24c1f5e2f73d83a Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 18 Feb 2013 16:58:29 -0500 Subject: [PATCH 249/519] Use-Library/Module --> Use-Libraries/Modules --- .../website/source/proposals/dep-0006.rst | 69 ++++++++++--------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/documentation/website/source/proposals/dep-0006.rst b/documentation/website/source/proposals/dep-0006.rst index 6cf131a82c..d1e8ac3e33 100644 --- a/documentation/website/source/proposals/dep-0006.rst +++ b/documentation/website/source/proposals/dep-0006.rst @@ -144,10 +144,8 @@ above library can be defined in a single source file, as follows: .. code-block:: dylan Module: hello-world - Use-Library: common-dylan - Use-Library: io - Use-Module: common-dylan - Use-Module: format-out + Use-Libraries: common-dylan; io + Use-Modules: common-dylan; format-out format-out("Hello, world!\n"); @@ -192,46 +190,55 @@ Replacing library.dylan When a compiler or interpreter is given a .dylan file to compile or execute, these new headers should be respected: -Use-Library Header -~~~~~~~~~~~~~~~~~~ +Use-Libraries Header +~~~~~~~~~~~~~~~~~~~~ -The ``Use-Library`` header names a library used by the library being +The ``Use-Libraries`` header names libraries used by the library being defined. The format of this header is:: - Use-Library: used-library-name [ , options... ] + Use-Libraries: libspec1 ; libspec2 ; ... -In brief, this is the exact same syntax as a *use-clause* in `define -library +In brief, each *libspec* has the exact same syntax as a *use-clause* +in `define library `_, -but with the token ``use`` replaced by the ``Use-Library:`` header -keyword. Examples:: +but with the leading token ``use`` removed. Examples:: + + Use-Libraries: system; io { import: streams, format-out}; common-dylan + Use-Libraries: + system; + io { import: streams, format-out}; + common-dylan - Use-Library: system - Use-Library: system, import: { operating-system } +Note that Dylan source code comments are allowed in this header, and +must be ignored. -Use-Module Header -~~~~~~~~~~~~~~~~~ +Use-Modules Header +~~~~~~~~~~~~~~~~~~ -The ``Use-Module`` header names a module used by the library being +The ``Use-Modules`` header names modules used by the library being defined. The format of this header is:: - Use-Module: used-module-name [ , options... ] + Use-Modules: modspec1 ; modspec2 ; ... -Again, this is the exact same syntax as a *use-clause* in `define -module +Again, each *modspec* has the exact same syntax as a *use-clause* in +`define module `_, -but with the token ``use`` replaced by the ``Use-Module:`` header -keyword. Examples:: +but with the leading token ``use`` removed. Examples:: + + Use-Modules: operating-system; common-dylan; format-out + Use-Modules: + operating-system, // from system + prefix: "os/", + export: all; + common-dylan; + format-out // from io - Use-Module: operating-system - Use-Module: operating-system, import: { exit-application } - Use-Module: operating-system, - prefix: "os/", - export: all +Note that Dylan source code comments are allowed in this header, and +must be ignored. Export-Names Header ~~~~~~~~~~~~~~~~~~~ @@ -267,15 +274,15 @@ new headers defined in this proposal have the same syntax as that of Module: dylan-user define library - use <1st-Use-Library-header-value-here>; - use <2nd-Use-Library-header-value-here>; + use libspec1; + use libspec2; ... export ; end; define module - use <1st-Use-Module-header-value-here>; - use <2nd-Use-Module-header-value-here>; + use modspec1 + use modspec2 ... export ; end; From b6a8fe4f622cf9761f5ad04784b23f3c852e9fb9 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 18 Feb 2013 17:31:40 -0500 Subject: [PATCH 250/519] Update Post-History header. --- documentation/website/source/proposals/dep-0006.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/proposals/dep-0006.rst b/documentation/website/source/proposals/dep-0006.rst index d1e8ac3e33..32f94b5d4f 100644 --- a/documentation/website/source/proposals/dep-0006.rst +++ b/documentation/website/source/proposals/dep-0006.rst @@ -9,7 +9,7 @@ Author: Carl Gay Status: Draft Created: 12-Feb-2013 (Darwin's birthday) Last-Modified: 17-Feb-2013 -Post-History: 16-Feb-2013 hackers@lists.opendylan.org +Post-History: 17-Feb-2013 hackers@lists.opendylan.org Dylan-Version: 2012.1 ============== ============================================= From e67c2c72493b8026e599e73558648a5a377e4eea Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 18 Feb 2013 19:09:24 -0500 Subject: [PATCH 251/519] Fix revision history link. --- documentation/website/source/proposals/dep-0006.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/website/source/proposals/dep-0006.rst b/documentation/website/source/proposals/dep-0006.rst index 32f94b5d4f..343c84b73e 100644 --- a/documentation/website/source/proposals/dep-0006.rst +++ b/documentation/website/source/proposals/dep-0006.rst @@ -20,7 +20,7 @@ Revision History ================ The revision history of this document is available here: -https://github.com/cgay/website/commits/master/source/proposals/dep-0006.rst +https://github.com/dylan-lang/website/commits/master/source/proposals/dep-0006.rst Abstract ======== From c63e3da77bf5facba4eefdfc047ddaa3a4d2fe10 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Mon, 18 Feb 2013 20:15:08 -0500 Subject: [PATCH 252/519] Remove TODO comment about verifying no header conflicts. --- documentation/website/source/proposals/dep-0006.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/documentation/website/source/proposals/dep-0006.rst b/documentation/website/source/proposals/dep-0006.rst index 343c84b73e..9733209882 100644 --- a/documentation/website/source/proposals/dep-0006.rst +++ b/documentation/website/source/proposals/dep-0006.rst @@ -167,7 +167,8 @@ single source file, all LID keywords may appear in the header section. The compiler or interpreter should handle them in the same way it would if they were in a separate .lid file. There is no conflict between the keywords used in LID files and those used in Dylan source -files. (TODO: Verify this. --cgay) +files. See http://opendylan.org/documentation/library-reference/lid.html +for existing Open Dylan LID file keywords. Library Header ~~~~~~~~~~~~~~ From 2dd06356f469c311242edff5807672e6366f0640 Mon Sep 17 00:00:00 2001 From: Carl Gay Date: Wed, 20 Feb 2013 13:49:56 -0500 Subject: [PATCH 253/519] Fix grammar-o in home page, plus some word-smithing while I'm here. --- documentation/website/source/index.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/documentation/website/source/index.rst b/documentation/website/source/index.rst index 9ac55fa67e..fe84f11670 100644 --- a/documentation/website/source/index.rst +++ b/documentation/website/source/index.rst @@ -43,12 +43,12 @@ The `Dylan Foundry `_ has written about Dylan has a large amount of documentation available: * `Introduction to Dylan `_: - A tutorial is written primarily for those with solid programming + A tutorial written for those with solid programming experience in C++ or another object-oriented, static language. It provides a gentler introduction to Dylan than does the Dylan Reference Manual (DRM). * `Dylan Programming Guide `_: - A good, book length Dylan tutorial by several Harlequin employees. + A book length Dylan tutorial. * `Dylan Reference Manual `_: The official definition of the Dylan language and standard library. * `Open Dylan Documentation `_: From 604713522be9e60700b08a4382f092cdfb6ec683 Mon Sep 17 00:00:00 2001 From: fracek Date: Fri, 22 Feb 2013 10:03:48 +0100 Subject: [PATCH 254/519] Add carousel containing Dylan code samples --- .../static/opendylan.org/css/opendylan.css | 20 +++++ documentation/website/source/index.rst | 87 ++++++++++++++++--- 2 files changed, 97 insertions(+), 10 deletions(-) diff --git a/documentation/website/source/_themes/opendylan/static/opendylan.org/css/opendylan.css b/documentation/website/source/_themes/opendylan/static/opendylan.org/css/opendylan.css index 796d96e262..999dc1647b 100644 --- a/documentation/website/source/_themes/opendylan/static/opendylan.org/css/opendylan.css +++ b/documentation/website/source/_themes/opendylan/static/opendylan.org/css/opendylan.css @@ -25,6 +25,26 @@ footer.navbar { a.headerlink { color: silver; } +#code-carousel { + margin: 10px 0; +} +#code-carousel .carousel-inner { + margin: 0 70px; + width: auto; +} +#code-carousel .carousel-indicators { + margin-right: 70px; +} +#code-carousel .carousel-indicators li { + background-color: #EFEFEF; +} +#code-carousel .carousel-indicators li.active { + background-color: #D0D0D0; +} +#code-carousel pre { + height: 29em; + padding-top: 20px; +} /* Responsive Docs -------------------------------------------------- */ diff --git a/documentation/website/source/index.rst b/documentation/website/source/index.rst index fe84f11670..bb0cadb402 100644 --- a/documentation/website/source/index.rst +++ b/documentation/website/source/index.rst @@ -3,16 +3,83 @@
-
-

Dylan is an advanced, object-oriented, dynamic language which - supports rapid program development. When needed, programs can be - optimized for more efficient execution by supplying more type - information to the compiler. Nearly all entities in Dylan - (including functions, classes, and basic data types such as - integers) are first class objects. Additionally Dylan supports - multiple inheritance, polymorphism, multiple dispatch, keyword - arguments, object introspection, macros, and many other advanced - features... --Peter Hinely

+
","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() -{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); +/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0; +}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="
a",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:l.htmlSerialize?[0,"",""]:[1,"X
","
"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?""!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("