From 76fb2aae4a6f771bf840bb8b212bcfcbb00c6bf3 Mon Sep 17 00:00:00 2001 From: marian13 Date: Mon, 23 Mar 2020 23:14:19 +0200 Subject: [PATCH] T-39 Add dependecies section. Fix typo clamp? (#35) --- .gitignore | 1 - .travis.yml | 6 +- doc/apple-touch-icon.png | Bin 0 -> 86447 bytes doc/classes/BasicTemperature.html | 1224 +++++++++++++++++ .../InitializationArgumentsError.html | 94 ++ .../BasicTemperature/InvalidDegreesError.html | 94 ++ .../InvalidNumericOrTemperatureError.html | 94 ++ .../BasicTemperature/InvalidScaleError.html | 94 ++ doc/classes/Object.html | 274 ++++ doc/classes/Temperature.html | 1224 +++++++++++++++++ doc/created.rid | 4 + doc/css/github.css | 123 ++ doc/css/main.css | 374 +++++ doc/css/panel.css | 361 +++++ doc/css/reset.css | 48 + doc/favicon.ico | Bin 0 -> 1150 bytes .../lib/basic_temperature/temperature_rb.html | 73 + .../lib/basic_temperature/version_rb.html | 84 ++ doc/files/lib/basic_temperature_rb.html | 112 ++ doc/i/arrow-down.svg | 8 + doc/i/arrow-right.svg | 8 + doc/i/search.svg | 12 + doc/i/tree_bg.svg | 8 + doc/index.html | 11 + doc/js/highlight.pack.js | 1 + doc/js/jquery-1.3.2.min.js | 19 + doc/js/main.js | 25 + doc/js/navigation.js | 105 ++ doc/js/navigation.js.gz | Bin 0 -> 833 bytes doc/js/search_index.js | 1 + doc/js/search_index.js.gz | Bin 0 -> 1180 bytes doc/js/searchdoc.js | 465 +++++++ doc/js/searcher.js | 229 +++ doc/js/searcher.js.gz | Bin 0 -> 1688 bytes doc/panel/index.html | 47 + doc/panel/links.html | 12 + doc/panel/tree.js | 1 + 37 files changed, 5230 insertions(+), 6 deletions(-) create mode 100644 doc/apple-touch-icon.png create mode 100644 doc/classes/BasicTemperature.html create mode 100644 doc/classes/BasicTemperature/InitializationArgumentsError.html create mode 100644 doc/classes/BasicTemperature/InvalidDegreesError.html create mode 100644 doc/classes/BasicTemperature/InvalidNumericOrTemperatureError.html create mode 100644 doc/classes/BasicTemperature/InvalidScaleError.html create mode 100644 doc/classes/Object.html create mode 100644 doc/classes/Temperature.html create mode 100644 doc/created.rid create mode 100644 doc/css/github.css create mode 100644 doc/css/main.css create mode 100644 doc/css/panel.css create mode 100644 doc/css/reset.css create mode 100644 doc/favicon.ico create mode 100644 doc/files/lib/basic_temperature/temperature_rb.html create mode 100644 doc/files/lib/basic_temperature/version_rb.html create mode 100644 doc/files/lib/basic_temperature_rb.html create mode 100644 doc/i/arrow-down.svg create mode 100644 doc/i/arrow-right.svg create mode 100644 doc/i/search.svg create mode 100644 doc/i/tree_bg.svg create mode 100644 doc/index.html create mode 100644 doc/js/highlight.pack.js create mode 100644 doc/js/jquery-1.3.2.min.js create mode 100644 doc/js/main.js create mode 100644 doc/js/navigation.js create mode 100644 doc/js/navigation.js.gz create mode 100644 doc/js/search_index.js create mode 100644 doc/js/search_index.js.gz create mode 100644 doc/js/searchdoc.js create mode 100644 doc/js/searcher.js create mode 100644 doc/js/searcher.js.gz create mode 100644 doc/panel/index.html create mode 100644 doc/panel/links.html create mode 100644 doc/panel/tree.js diff --git a/.gitignore b/.gitignore index 7f579d6..349df86 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ /.yardoc /_yardoc/ /coverage/ -/doc/ /pkg/ /spec/reports/ /tmp/ diff --git a/.travis.yml b/.travis.yml index a7656da..e470727 100644 --- a/.travis.yml +++ b/.travis.yml @@ -20,14 +20,10 @@ script: - bundle exec rspec # DOCS: https://gist.github.com/maxpou/bc3eb944aa727d352f85bc0ce8bc082c -before_deploy: - - rm -rf sdoc/ - - bundle exec sdoc lib -T rails -o sdoc - deploy: provider: pages cleanup: true github_token: $GITHUB_TOKEN - local_dir: sdoc + local_dir: doc on: branch: master diff --git a/doc/apple-touch-icon.png b/doc/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..50f98b0ffa6eb390c9c022c5affbcecf0db2c7d7 GIT binary patch literal 86447 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 z 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∾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 + + + BasicTemperature + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Temperature is a simple Value Object for basic temperature operations like conversions from Celsius to Fahrenhait or Kelvin etc.

+ +

Supported scales: Celsius, Fahrenheit, Kelvin and Rankine.

+ +

Creating Temperatures

+ +

A new temperature can be created in multiple ways:

+
  • +

    Using keyword arguments:

    + +
    Temperature.new(degrees: 0, scale: :celsius)
    +
    +
  • +

    Using positional arguments:

    + +
    Temperature.new(0, :celsius)
    +
    +
  • +

    Even more concise way using Temperature.[] (an alias of Temperature.new):

    + +
    Temperature[0, :celsius]
    +
    +
+ +

Creating Temperatures from already existing temperature objects

+ +

Sometimes it is useful to create a new temperature from already existing one.

+ +

For such cases, there are set_degrees and set_scale.

+ +

Since temperatures are Value Objects, both methods returns new instances.

+ +

Examples:

+ +
temperature = Temperature[0, :celsius]
+# => 0 °C
+
+new_temperature = temperature.set_degrees(15)
+# => 15 °C
+
+temperature = Temperature[0, :celsius]
+# => 0 °C
+
+new_temperature = temperature.set_scale(:kelvin)
+# => 0 K
+
+ +

Conversions

+ +

Temperatures can be converted to diffirent scales.

+ +

Currently, the following scales are supported: Celsius, Fahrenheit, Kelvin and Rankine.

+ +
Temperature[20, :celsius].to_celsius
+# => 20 °C
+
+Temperature[20, :celsius].to_fahrenheit
+# => 68 °F
+
+Temperature[20, :celsius].to_kelvin
+# => 293.15 K
+
+Temperature[20, :celsius].to_rankine
+# => 527.67 °R
+
+ +

If it is necessary to convert scale dynamically, to_scale method is available.

+ +
Temperature[20, :celsius].to_scale(scale)
+
+ +

All conversion formulas are taken from RapidTables.

+ +

Conversion precision: 2 accurate digits after the decimal dot.

+ +

Comparison

+ +

Temperature implements idiomatic <=> spaceship operator and mixes in Comparable module.

+ +

As a result, all methods from Comparable are available, e.g:

+ +
Temperature[20, :celsius] < Temperature[25, :celsius]
+# => true
+
+Temperature[20, :celsius] <= Temperature[25, :celsius]
+# => true
+
+Temperature[20, :celsius] == Temperature[25, :celsius]
+# => false
+
+Temperature[20, :celsius] > Temperature[25, :celsius]
+# => false
+
+Temperature[20, :celsius] >= Temperature[25, :celsius]
+# => false
+
+Temperature[20, :celsius].between?(Temperature[15, :celsius], Temperature[25, :celsius])
+# => true
+
+# Starting from Ruby 2.4.6
+Temperature[20, :celsius].clamp?(Temperature[20, :celsius], Temperature[25, :celsius])
+# => 20 °C
+
+ +

Please note, if other temperature has a different scale, temperature is automatically converted to that scale before comparison.

+ +
Temperature[20, :celsius] == Temperature[293.15, :kelvin]
+# => true
+
+ +

IMPORTANT !!!

+ +

degrees are rounded to the nearest value with a precision of 2 decimal digits before comparison.

+ +

This means the following temperatures are considered as equal:

+ +
Temperature[20.020, :celsius] == Temperature[20.024, :celsius]
+# => true
+
+Temperature[20.025, :celsius] == Temperature[20.029, :celsius]
+# => true
+
+ +

while these ones are treated as NOT equal:

+ +
Temperature[20.024, :celsius] == Temperature[20.029, :celsius]
+# => false
+
+ +

Math

+ +

Addition/Subtraction.

+ +
Temperature[20, :celsius] + Temperature[10, :celsius]
+# => 30 °C
+
+Temperature[20, :celsius] - Temperature[10, :celsius]
+# => 10 °C
+
+ +

If second temperature has a different scale, first temperature is automatically converted to that scale before degrees addition/subtraction.

+ +
Temperature[283.15, :kelvin] + Temperature[10, :celsius]
+# => 10 °C
+
+ +

Returned temperature will have the same scale as the second temperature.

+ +

It is possible to add/subtract numerics.

+ +
Temperature[20, :celsius] + 10
+# => 30 °C
+
+Temperature[20, :celsius] - 10
+# => 10 °C
+
+ +

In such cases, returned temperature will have the same scale as the first temperature.

+ +

Also Ruby coersion mechanism is supported.

+ +
10 + Temperature[20, :celsius]
+# => 30 °C
+
+10 - Temperature[20, :celsius]
+# => -10 °C
+
+ +

Negation

+ +
-Temperature[20, :celsius]
+# => -20 °C
+
+ +
+ + + + + + + + + + + + + + + +
Methods
+
+ +
#
+
+
    + + +
  • + +, +
  • + + +
  • + -, +
  • + + +
  • + -@, +
  • + + +
  • + <=>, +
  • + + +
  • + [] +
  • + +
+
+ +
N
+
+
    + + +
  • + new +
  • + +
+
+ +
S
+
+ +
+ +
T
+
+ +
+ +
+ + + + +
Included Modules
+
    + +
  • + + Comparable + +
  • + +
+ + + + + + + + + + + + +
Constants
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CELSIUS='celsius'
 
FAHRENHEIT='fahrenheit'
 
KELVIN='kelvin'
 
RANKINE='rankine'
 
SCALES=[CELSIUS, FAHRENHEIT, KELVIN, RANKINE].freeze
 

A list of all currently supported scale values.

VERSION='0.2.1'
 
+ + + + + +
Attributes
+ + + + + + + + + + + + + + +
+ [R] + degrees

Degrees of the temperature.

+ [R] + scale

Scale of the temperature. Look at SCALES for possible values.

+ + + + + +
Class Public methods
+ +
+
+ + [](degrees:, scale:)
[](degrees, scale)
+ + +
+ + +
+

Creates a new instance of Temperature. Alias for new.

+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 206
+def self.[](*args, **kwargs)
+  new(*args, **kwargs)
+end
+
+
+ +
+ +
+
+ + new(degrees:, scale:)
new(degrees, scale)
+ + +
+ + +
+

Creates a new instance of Temperature. Is aliased as [].

+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 217
+def initialize(*positional_arguments, **keyword_arguments)
+  assert_either_positional_arguments_or_keyword_arguments!(positional_arguments, keyword_arguments)
+
+  if keyword_arguments.any?
+    initialize_via_keywords_arguments(keyword_arguments)
+  else # positional_arguments.any?
+    initialize_via_positional_arguments(positional_arguments)
+  end
+end
+
+
+ +
+ + + +
Instance Public methods
+ +
+
+ + +(temperature)
+(numeric)
+ + +
+ + +
+

Performs addition. Returns a new Temperature.

+ +
Temperature[20, :celsius] + Temperature[10, :celsius]
+# => 30 °C
+
+ +

If the second temperature has a different scale, the first temperature is automatically converted to that scale before degrees addition.

+ +
Temperature[283.15, :kelvin] + Temperature[20, :celsius]
+# => 30 °C
+
+ +

Returned temperature will have the same scale as the second temperature.

+ +

It is possible to add numerics.

+ +
Temperature[20, :celsius] + 10
+# => 30 °C
+
+ +

In such cases, returned temperature will have the same scale as the first temperature.

+ +

Also Ruby coersion mechanism is supported.

+ +
10 + Temperature[20, :celsius]
+# => 30 °C
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 484
+def +(other)
+  assert_numeric_or_temperature!(other)
+
+  degrees, scale =
+    case other
+    when Numeric
+      [self.degrees + other, self.scale]
+    when BasicTemperature
+      [self.to_scale(other.scale).degrees + other.degrees, other.scale]
+    end
+
+  BasicTemperature.new(degrees, scale)
+end
+
+
+ +
+ +
+
+ + -(temperature)
-(numeric)
+ + +
+ + +
+

Performs subtraction. Returns a new Temperature.

+ +
Temperature[20, :celsius] - Temperature[10, :celsius]
+# => 10 °C
+
+ +

If the second temperature has a different scale, the first temperature is automatically converted to that scale before degrees subtraction.

+ +
Temperature[283.15, :kelvin] + Temperature[10, :celsius]
+# => 10 °C
+
+ +

Returned temperature will have the same scale as the second temperature.

+ +

It is possible to subtract numerics.

+ +
Temperature[20, :celsius] - 10
+# => 10 °C
+
+ +

In such cases, returned temperature will have the same scale as the first temperature.

+ +

Also Ruby coersion mechanism is supported.

+ +
10 - Temperature[20, :celsius]
+# => -10 °C
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 528
+def -(other)
+  self + -other
+end
+
+
+ +
+ +
+
+ + -@() + + +
+ + +
+

Returns a new Temperature with negated degrees.

+ +
-Temperature[20, :celsius]
+# => -20 °C
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 538
+def -@
+  BasicTemperature.new(-self.degrees, self.scale)
+end
+
+
+ +
+ +
+
+ + <=>(other) + + +
+ + +
+

Compares temperture with other temperature.

+ +

Returns 0 if they are considered as equal.

+ +

Two temperatures are considered as equal when they have the same amount of degrees.

+ +

Returns -1 if temperature is lower than other temperature.

+ +

Returns 1 if temperature is higher than other temperature.

+ +

If other temperature has a different scale, temperature is automatically converted to that scale before degrees comparison.

+ +
Temperature[20, :celsius] <=> Temperature[20, :celsius]
+# => 0
+
+Temperature[20, :celsius] <=> Temperature[293.15, :kelvin]
+# => 0
+
+ +

IMPORTANT!!!

+ +

This method rounds degrees to the nearest value with a precision of 2 decimal digits.

+ +

This means the following:

+ +
Temperature[20.020, :celsius] <=> Temperature[20.024, :celsius]
+# => 0
+
+Temperature[20.025, :celsius] <=> Temperature[20.029, :celsius]
+# => 0
+
+Temperature[20.024, :celsius] <=> Temperature[20.029, :celsius]
+# => -1
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 448
+def <=>(other)
+  return unless assert_temperature(other)
+
+  compare_degrees(self.to_scale(other.scale).degrees, other.degrees)
+end
+
+
+ +
+ +
+
+ + set_degrees(degrees) + + +
+ + +
+

Returns a new Temperature with updated degrees.

+ +
temperature = Temperature[0, :celsius]
+# => 0 °C
+
+new_temperature = temperature.set_degrees(15)
+# => 15 °C
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 237
+def set_degrees(degrees)
+  BasicTemperature.new(degrees, scale)
+end
+
+
+ +
+ +
+
+ + set_scale(scale) + + +
+ + +
+

Returns a new Temperature with updated scale.

+ +
temperature = Temperature[0, :celsius]
+# => 0 °C
+
+new_temperature = temperature.set_scale(:kelvin)
+# => 0 K
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 252
+def set_scale(scale)
+  BasicTemperature.new(degrees, scale)
+end
+
+
+ +
+ +
+
+ + to_celsius() + + +
+ + +
+

Converts temperature to Celsius scale. If temperature is already in Celsius, returns current temperature object.

+ +

Memoizes subsequent calls.

+ +

Conversion formulas are taken from RapidTables:

+
  1. +

    Celsius to Fahrenheit.

    +
  2. +

    Celsius to Kelvin.

    +
  3. +

    Celsius to Rankine.

    +
+ +
Temperature[0, :fahrenheit].to_celsius
+# => -17.78 °C
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 299
+def to_celsius
+  memoized(:to_celsius) || memoize(:to_celsius, -> {
+    return self if self.scale == CELSIUS
+
+    degrees =
+      case self.scale
+      when FAHRENHEIT
+        (self.degrees - 32) * (5 / 9r)
+      when KELVIN
+        self.degrees - 273.15
+      when RANKINE
+        (self.degrees - 491.67) * (5 / 9r)
+      end
+
+    BasicTemperature.new(degrees, CELSIUS)
+  })
+end
+
+
+ +
+ +
+
+ + to_fahrenheit() + + +
+ + +
+

Converts temperature to Fahrenheit scale. If temperature is already in Fahrenheit, returns current temperature object.

+ +

Memoizes subsequent calls.

+ +

Conversion formulas are taken from RapidTables:

+
  1. +

    Fahrenheit to Celsius.

    +
  2. +

    Fahrenheit to Kelvin.

    +
  3. +

    Fahrenheit to Rankine.

    +
+ +
Temperature[0, :celsius].to_fahrenheit
+# => 32 °F
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 331
+def to_fahrenheit
+  memoized(:to_fahrenheit) || memoize(:to_fahrenheit, -> {
+    return self if self.scale == FAHRENHEIT
+
+    degrees =
+      case self.scale
+      when CELSIUS
+        self.degrees * (9 / 5r) + 32
+      when KELVIN
+        self.degrees * (9 / 5r) - 459.67
+      when RANKINE
+        self.degrees - 459.67
+      end
+
+    BasicTemperature.new(degrees, FAHRENHEIT)
+  })
+end
+
+
+ +
+ +
+
+ + to_kelvin() + + +
+ + +
+

Converts temperature to Kelvin scale. If temperature is already in Kelvin, returns current temperature object.

+ +

Memoizes subsequent calls.

+ +

Conversion formulas are taken from RapidTables:

+
  1. +

    Kelvin to Celsius.

    +
  2. +

    Kelvin to Fahrenheit.

    +
  3. +

    Kelvin to Rankine.

    +
+ +
Temperature[0, :kelvin].to_rankine
+# => 0 °R
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 363
+def to_kelvin
+  memoized(:to_kelvin) || memoize(:to_kelvin, -> {
+    return self if self.scale == KELVIN
+
+    degrees =
+      case self.scale
+      when CELSIUS
+        self.degrees + 273.15
+      when FAHRENHEIT
+        (self.degrees + 459.67) * (5 / 9r)
+      when RANKINE
+        self.degrees * (5 / 9r)
+      end
+
+    BasicTemperature.new(degrees, KELVIN)
+  })
+end
+
+
+ +
+ +
+
+ + to_rankine() + + +
+ + +
+

Converts temperature to Rankine scale. If temperature is already in Rankine, returns current temperature object.

+ +

Memoizes subsequent calls.

+ +

Conversion formulas are taken from RapidTables:

+
  1. +

    Rankine to Celsius.

    +
  2. +

    Rankine to Fahrenheit.

    +
  3. +

    Rankine to Kelvin.

    +
+ +
Temperature[0, :rankine].to_kelvin
+# => 0 K
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 395
+def to_rankine
+  memoized(:to_rankine) || memoize(:to_rankine, -> {
+    return self if self.scale == RANKINE
+
+    degrees =
+      case self.scale
+      when CELSIUS
+        (self.degrees + 273.15) * (9 / 5r)
+      when FAHRENHEIT
+        self.degrees + 459.67
+      when KELVIN
+        self.degrees * (9 / 5r)
+      end
+
+    BasicTemperature.new(degrees, RANKINE)
+  })
+end
+
+
+ +
+ +
+
+ + to_scale(scale) + + +
+ + +
+

Converts temperature to specific scale. If temperature is already in desired scale, returns current temperature object.

+ +

Raises InvalidScaleError when scale can not be casted to any possible scale value (see SCALES).

+ +
Temperature[60, :fahrenheit].to_scale(:celsius)
+# => 15.56 °C
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 268
+def to_scale(scale)
+  casted_scale = cast_scale(scale)
+
+  assert_valid_scale!(casted_scale)
+
+  case casted_scale
+  when CELSIUS
+    to_celsius
+  when FAHRENHEIT
+    to_fahrenheit
+  when KELVIN
+    to_kelvin
+  when RANKINE
+    to_rankine
+  end
+end
+
+
+ +
+ + + + +
+ +
+ + diff --git a/doc/classes/BasicTemperature/InitializationArgumentsError.html b/doc/classes/BasicTemperature/InitializationArgumentsError.html new file mode 100644 index 0000000..0dfc898 --- /dev/null +++ b/doc/classes/BasicTemperature/InitializationArgumentsError.html @@ -0,0 +1,94 @@ + + + + BasicTemperature::InitializationArgumentsError + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Raised when Temperature.new is called with mixed positional and keyword arguments or without arguments at all.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + diff --git a/doc/classes/BasicTemperature/InvalidDegreesError.html b/doc/classes/BasicTemperature/InvalidDegreesError.html new file mode 100644 index 0000000..b0e3ca8 --- /dev/null +++ b/doc/classes/BasicTemperature/InvalidDegreesError.html @@ -0,0 +1,94 @@ + + + + BasicTemperature::InvalidDegreesError + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Raised when degrees is not a Numeric.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + diff --git a/doc/classes/BasicTemperature/InvalidNumericOrTemperatureError.html b/doc/classes/BasicTemperature/InvalidNumericOrTemperatureError.html new file mode 100644 index 0000000..f61db10 --- /dev/null +++ b/doc/classes/BasicTemperature/InvalidNumericOrTemperatureError.html @@ -0,0 +1,94 @@ + + + + BasicTemperature::InvalidNumericOrTemperatureError + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Raised when other is not a Numeric or Temperature in math operations.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + diff --git a/doc/classes/BasicTemperature/InvalidScaleError.html b/doc/classes/BasicTemperature/InvalidScaleError.html new file mode 100644 index 0000000..c7fef09 --- /dev/null +++ b/doc/classes/BasicTemperature/InvalidScaleError.html @@ -0,0 +1,94 @@ + + + + BasicTemperature::InvalidScaleError + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Raised when scale can not be casted to any possible scale value. See SCALES.

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + diff --git a/doc/classes/Object.html b/doc/classes/Object.html new file mode 100644 index 0000000..c5774dd --- /dev/null +++ b/doc/classes/Object.html @@ -0,0 +1,274 @@ + + + + Object + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
Constants
+ + + + + + + + + + + + + + +
Temperature=BasicTemperature
 

Temperature is a simple Value Object for basic temperature operations like conversions from Celsius to Fahrenhait or Kelvin etc.

+ +

Supported scales: Celsius, Fahrenheit, Kelvin and Rankine.

+ +

Creating Temperatures

+ +

A new temperature can be created in multiple ways:

+
  • +

    Using keyword arguments:

    + +
    Temperature.new(degrees: 0, scale: :celsius)
    +
    +
  • +

    Using positional arguments:

    + +
    Temperature.new(0, :celsius)
    +
    +
  • +

    Even more concise way using Temperature.[] (an alias of Temperature.new):

    + +
    Temperature[0, :celsius]
    +
    +
+ +

Creating Temperatures from already existing temperature objects

+ +

Sometimes it is useful to create a new temperature from already existing one.

+ +

For such cases, there are set_degrees and set_scale.

+ +

Since temperatures are Value Objects, both methods returns new instances.

+ +

Examples:

+ +
temperature = Temperature[0, :celsius]
+# => 0 °C
+
+new_temperature = temperature.set_degrees(15)
+# => 15 °C
+
+temperature = Temperature[0, :celsius]
+# => 0 °C
+
+new_temperature = temperature.set_scale(:kelvin)
+# => 0 K
+
+ +

Conversions

+ +

Temperatures can be converted to diffirent scales.

+ +

Currently, the following scales are supported: Celsius, Fahrenheit, Kelvin and Rankine.

+ +
Temperature[20, :celsius].to_celsius
+# => 20 °C
+
+Temperature[20, :celsius].to_fahrenheit
+# => 68 °F
+
+Temperature[20, :celsius].to_kelvin
+# => 293.15 K
+
+Temperature[20, :celsius].to_rankine
+# => 527.67 °R
+
+ +

If it is necessary to convert scale dynamically, to_scale method is available.

+ +
Temperature[20, :celsius].to_scale(scale)
+
+ +

All conversion formulas are taken from RapidTables.

+ +

Conversion precision: 2 accurate digits after the decimal dot.

+ +

Comparison

+ +

Temperature implements idiomatic <=> spaceship operator and mixes in Comparable module.

+ +

As a result, all methods from Comparable are available, e.g:

+ +
Temperature[20, :celsius] < Temperature[25, :celsius]
+# => true
+
+Temperature[20, :celsius] <= Temperature[25, :celsius]
+# => true
+
+Temperature[20, :celsius] == Temperature[25, :celsius]
+# => false
+
+Temperature[20, :celsius] > Temperature[25, :celsius]
+# => false
+
+Temperature[20, :celsius] >= Temperature[25, :celsius]
+# => false
+
+Temperature[20, :celsius].between?(Temperature[15, :celsius], Temperature[25, :celsius])
+# => true
+
+# Starting from Ruby 2.4.6
+Temperature[20, :celsius].clamp?(Temperature[20, :celsius], Temperature[25, :celsius])
+# => 20 °C
+
+ +

Please note, if other temperature has a different scale, temperature is automatically converted to that scale before comparison.

+ +
Temperature[20, :celsius] == Temperature[293.15, :kelvin]
+# => true
+
+ +

IMPORTANT !!!

+ +

degrees are rounded to the nearest value with a precision of 2 decimal digits before comparison.

+ +

This means the following temperatures are considered as equal:

+ +
Temperature[20.020, :celsius] == Temperature[20.024, :celsius]
+# => true
+
+Temperature[20.025, :celsius] == Temperature[20.029, :celsius]
+# => true
+
+ +

while these ones are treated as NOT equal:

+ +
Temperature[20.024, :celsius] == Temperature[20.029, :celsius]
+# => false
+
+ +

Math

+ +

Addition/Subtraction.

+ +
Temperature[20, :celsius] + Temperature[10, :celsius]
+# => 30 °C
+
+Temperature[20, :celsius] - Temperature[10, :celsius]
+# => 10 °C
+
+ +

If second temperature has a different scale, first temperature is automatically converted to that scale before degrees addition/subtraction.

+ +
Temperature[283.15, :kelvin] + Temperature[10, :celsius]
+# => 10 °C
+
+ +

Returned temperature will have the same scale as the second temperature.

+ +

It is possible to add/subtract numerics.

+ +
Temperature[20, :celsius] + 10
+# => 30 °C
+
+Temperature[20, :celsius] - 10
+# => 10 °C
+
+ +

In such cases, returned temperature will have the same scale as the first temperature.

+ +

Also Ruby coersion mechanism is supported.

+ +
10 + Temperature[20, :celsius]
+# => 30 °C
+
+10 - Temperature[20, :celsius]
+# => -10 °C
+
+ +

Negation

+ +
-Temperature[20, :celsius]
+# => -20 °C
+
+ + + + + + + + + + + +
+ +
+ + diff --git a/doc/classes/Temperature.html b/doc/classes/Temperature.html new file mode 100644 index 0000000..6d05e61 --- /dev/null +++ b/doc/classes/Temperature.html @@ -0,0 +1,1224 @@ + + + + Temperature + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +

Temperature is a simple Value Object for basic temperature operations like conversions from Celsius to Fahrenhait or Kelvin etc.

+ +

Supported scales: Celsius, Fahrenheit, Kelvin and Rankine.

+ +

Creating Temperatures

+ +

A new temperature can be created in multiple ways:

+
  • +

    Using keyword arguments:

    + +
    Temperature.new(degrees: 0, scale: :celsius)
    +
    +
  • +

    Using positional arguments:

    + +
    Temperature.new(0, :celsius)
    +
    +
  • +

    Even more concise way using Temperature.[] (an alias of Temperature.new):

    + +
    Temperature[0, :celsius]
    +
    +
+ +

Creating Temperatures from already existing temperature objects

+ +

Sometimes it is useful to create a new temperature from already existing one.

+ +

For such cases, there are set_degrees and set_scale.

+ +

Since temperatures are Value Objects, both methods returns new instances.

+ +

Examples:

+ +
temperature = Temperature[0, :celsius]
+# => 0 °C
+
+new_temperature = temperature.set_degrees(15)
+# => 15 °C
+
+temperature = Temperature[0, :celsius]
+# => 0 °C
+
+new_temperature = temperature.set_scale(:kelvin)
+# => 0 K
+
+ +

Conversions

+ +

Temperatures can be converted to diffirent scales.

+ +

Currently, the following scales are supported: Celsius, Fahrenheit, Kelvin and Rankine.

+ +
Temperature[20, :celsius].to_celsius
+# => 20 °C
+
+Temperature[20, :celsius].to_fahrenheit
+# => 68 °F
+
+Temperature[20, :celsius].to_kelvin
+# => 293.15 K
+
+Temperature[20, :celsius].to_rankine
+# => 527.67 °R
+
+ +

If it is necessary to convert scale dynamically, to_scale method is available.

+ +
Temperature[20, :celsius].to_scale(scale)
+
+ +

All conversion formulas are taken from RapidTables.

+ +

Conversion precision: 2 accurate digits after the decimal dot.

+ +

Comparison

+ +

Temperature implements idiomatic <=> spaceship operator and mixes in Comparable module.

+ +

As a result, all methods from Comparable are available, e.g:

+ +
Temperature[20, :celsius] < Temperature[25, :celsius]
+# => true
+
+Temperature[20, :celsius] <= Temperature[25, :celsius]
+# => true
+
+Temperature[20, :celsius] == Temperature[25, :celsius]
+# => false
+
+Temperature[20, :celsius] > Temperature[25, :celsius]
+# => false
+
+Temperature[20, :celsius] >= Temperature[25, :celsius]
+# => false
+
+Temperature[20, :celsius].between?(Temperature[15, :celsius], Temperature[25, :celsius])
+# => true
+
+# Starting from Ruby 2.4.6
+Temperature[20, :celsius].clamp?(Temperature[20, :celsius], Temperature[25, :celsius])
+# => 20 °C
+
+ +

Please note, if other temperature has a different scale, temperature is automatically converted to that scale before comparison.

+ +
Temperature[20, :celsius] == Temperature[293.15, :kelvin]
+# => true
+
+ +

IMPORTANT !!!

+ +

degrees are rounded to the nearest value with a precision of 2 decimal digits before comparison.

+ +

This means the following temperatures are considered as equal:

+ +
Temperature[20.020, :celsius] == Temperature[20.024, :celsius]
+# => true
+
+Temperature[20.025, :celsius] == Temperature[20.029, :celsius]
+# => true
+
+ +

while these ones are treated as NOT equal:

+ +
Temperature[20.024, :celsius] == Temperature[20.029, :celsius]
+# => false
+
+ +

Math

+ +

Addition/Subtraction.

+ +
Temperature[20, :celsius] + Temperature[10, :celsius]
+# => 30 °C
+
+Temperature[20, :celsius] - Temperature[10, :celsius]
+# => 10 °C
+
+ +

If second temperature has a different scale, first temperature is automatically converted to that scale before degrees addition/subtraction.

+ +
Temperature[283.15, :kelvin] + Temperature[10, :celsius]
+# => 10 °C
+
+ +

Returned temperature will have the same scale as the second temperature.

+ +

It is possible to add/subtract numerics.

+ +
Temperature[20, :celsius] + 10
+# => 30 °C
+
+Temperature[20, :celsius] - 10
+# => 10 °C
+
+ +

In such cases, returned temperature will have the same scale as the first temperature.

+ +

Also Ruby coersion mechanism is supported.

+ +
10 + Temperature[20, :celsius]
+# => 30 °C
+
+10 - Temperature[20, :celsius]
+# => -10 °C
+
+ +

Negation

+ +
-Temperature[20, :celsius]
+# => -20 °C
+
+ +
+ + + + + + + + + + + + + + + +
Methods
+
+ +
#
+
+
    + + +
  • + +, +
  • + + +
  • + -, +
  • + + +
  • + -@, +
  • + + +
  • + <=>, +
  • + + +
  • + [] +
  • + +
+
+ +
N
+
+
    + + +
  • + new +
  • + +
+
+ +
S
+
+ +
+ +
T
+
+ +
+ +
+ + + + +
Included Modules
+
    + +
  • + + Comparable + +
  • + +
+ + + + + + + + + + + + +
Constants
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CELSIUS='celsius'
 
FAHRENHEIT='fahrenheit'
 
KELVIN='kelvin'
 
RANKINE='rankine'
 
SCALES=[CELSIUS, FAHRENHEIT, KELVIN, RANKINE].freeze
 

A list of all currently supported scale values.

VERSION='0.2.1'
 
+ + + + + +
Attributes
+ + + + + + + + + + + + + + +
+ [R] + degrees

Degrees of the temperature.

+ [R] + scale

Scale of the temperature. Look at SCALES for possible values.

+ + + + + +
Class Public methods
+ +
+
+ + [](degrees:, scale:)
[](degrees, scale)
+ + +
+ + +
+

Creates a new instance of Temperature. Alias for new.

+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 206
+def self.[](*args, **kwargs)
+  new(*args, **kwargs)
+end
+
+
+ +
+ +
+
+ + new(degrees:, scale:)
new(degrees, scale)
+ + +
+ + +
+

Creates a new instance of Temperature. Is aliased as [].

+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 217
+def initialize(*positional_arguments, **keyword_arguments)
+  assert_either_positional_arguments_or_keyword_arguments!(positional_arguments, keyword_arguments)
+
+  if keyword_arguments.any?
+    initialize_via_keywords_arguments(keyword_arguments)
+  else # positional_arguments.any?
+    initialize_via_positional_arguments(positional_arguments)
+  end
+end
+
+
+ +
+ + + +
Instance Public methods
+ +
+
+ + +(temperature)
+(numeric)
+ + +
+ + +
+

Performs addition. Returns a new Temperature.

+ +
Temperature[20, :celsius] + Temperature[10, :celsius]
+# => 30 °C
+
+ +

If the second temperature has a different scale, the first temperature is automatically converted to that scale before degrees addition.

+ +
Temperature[283.15, :kelvin] + Temperature[20, :celsius]
+# => 30 °C
+
+ +

Returned temperature will have the same scale as the second temperature.

+ +

It is possible to add numerics.

+ +
Temperature[20, :celsius] + 10
+# => 30 °C
+
+ +

In such cases, returned temperature will have the same scale as the first temperature.

+ +

Also Ruby coersion mechanism is supported.

+ +
10 + Temperature[20, :celsius]
+# => 30 °C
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 484
+def +(other)
+  assert_numeric_or_temperature!(other)
+
+  degrees, scale =
+    case other
+    when Numeric
+      [self.degrees + other, self.scale]
+    when BasicTemperature
+      [self.to_scale(other.scale).degrees + other.degrees, other.scale]
+    end
+
+  BasicTemperature.new(degrees, scale)
+end
+
+
+ +
+ +
+
+ + -(temperature)
-(numeric)
+ + +
+ + +
+

Performs subtraction. Returns a new Temperature.

+ +
Temperature[20, :celsius] - Temperature[10, :celsius]
+# => 10 °C
+
+ +

If the second temperature has a different scale, the first temperature is automatically converted to that scale before degrees subtraction.

+ +
Temperature[283.15, :kelvin] + Temperature[10, :celsius]
+# => 10 °C
+
+ +

Returned temperature will have the same scale as the second temperature.

+ +

It is possible to subtract numerics.

+ +
Temperature[20, :celsius] - 10
+# => 10 °C
+
+ +

In such cases, returned temperature will have the same scale as the first temperature.

+ +

Also Ruby coersion mechanism is supported.

+ +
10 - Temperature[20, :celsius]
+# => -10 °C
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 528
+def -(other)
+  self + -other
+end
+
+
+ +
+ +
+
+ + -@() + + +
+ + +
+

Returns a new Temperature with negated degrees.

+ +
-Temperature[20, :celsius]
+# => -20 °C
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 538
+def -@
+  BasicTemperature.new(-self.degrees, self.scale)
+end
+
+
+ +
+ +
+
+ + <=>(other) + + +
+ + +
+

Compares temperture with other temperature.

+ +

Returns 0 if they are considered as equal.

+ +

Two temperatures are considered as equal when they have the same amount of degrees.

+ +

Returns -1 if temperature is lower than other temperature.

+ +

Returns 1 if temperature is higher than other temperature.

+ +

If other temperature has a different scale, temperature is automatically converted to that scale before degrees comparison.

+ +
Temperature[20, :celsius] <=> Temperature[20, :celsius]
+# => 0
+
+Temperature[20, :celsius] <=> Temperature[293.15, :kelvin]
+# => 0
+
+ +

IMPORTANT!!!

+ +

This method rounds degrees to the nearest value with a precision of 2 decimal digits.

+ +

This means the following:

+ +
Temperature[20.020, :celsius] <=> Temperature[20.024, :celsius]
+# => 0
+
+Temperature[20.025, :celsius] <=> Temperature[20.029, :celsius]
+# => 0
+
+Temperature[20.024, :celsius] <=> Temperature[20.029, :celsius]
+# => -1
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 448
+def <=>(other)
+  return unless assert_temperature(other)
+
+  compare_degrees(self.to_scale(other.scale).degrees, other.degrees)
+end
+
+
+ +
+ +
+
+ + set_degrees(degrees) + + +
+ + +
+

Returns a new Temperature with updated degrees.

+ +
temperature = Temperature[0, :celsius]
+# => 0 °C
+
+new_temperature = temperature.set_degrees(15)
+# => 15 °C
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 237
+def set_degrees(degrees)
+  BasicTemperature.new(degrees, scale)
+end
+
+
+ +
+ +
+
+ + set_scale(scale) + + +
+ + +
+

Returns a new Temperature with updated scale.

+ +
temperature = Temperature[0, :celsius]
+# => 0 °C
+
+new_temperature = temperature.set_scale(:kelvin)
+# => 0 K
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 252
+def set_scale(scale)
+  BasicTemperature.new(degrees, scale)
+end
+
+
+ +
+ +
+
+ + to_celsius() + + +
+ + +
+

Converts temperature to Celsius scale. If temperature is already in Celsius, returns current temperature object.

+ +

Memoizes subsequent calls.

+ +

Conversion formulas are taken from RapidTables:

+
  1. +

    Celsius to Fahrenheit.

    +
  2. +

    Celsius to Kelvin.

    +
  3. +

    Celsius to Rankine.

    +
+ +
Temperature[0, :fahrenheit].to_celsius
+# => -17.78 °C
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 299
+def to_celsius
+  memoized(:to_celsius) || memoize(:to_celsius, -> {
+    return self if self.scale == CELSIUS
+
+    degrees =
+      case self.scale
+      when FAHRENHEIT
+        (self.degrees - 32) * (5 / 9r)
+      when KELVIN
+        self.degrees - 273.15
+      when RANKINE
+        (self.degrees - 491.67) * (5 / 9r)
+      end
+
+    BasicTemperature.new(degrees, CELSIUS)
+  })
+end
+
+
+ +
+ +
+
+ + to_fahrenheit() + + +
+ + +
+

Converts temperature to Fahrenheit scale. If temperature is already in Fahrenheit, returns current temperature object.

+ +

Memoizes subsequent calls.

+ +

Conversion formulas are taken from RapidTables:

+
  1. +

    Fahrenheit to Celsius.

    +
  2. +

    Fahrenheit to Kelvin.

    +
  3. +

    Fahrenheit to Rankine.

    +
+ +
Temperature[0, :celsius].to_fahrenheit
+# => 32 °F
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 331
+def to_fahrenheit
+  memoized(:to_fahrenheit) || memoize(:to_fahrenheit, -> {
+    return self if self.scale == FAHRENHEIT
+
+    degrees =
+      case self.scale
+      when CELSIUS
+        self.degrees * (9 / 5r) + 32
+      when KELVIN
+        self.degrees * (9 / 5r) - 459.67
+      when RANKINE
+        self.degrees - 459.67
+      end
+
+    BasicTemperature.new(degrees, FAHRENHEIT)
+  })
+end
+
+
+ +
+ +
+
+ + to_kelvin() + + +
+ + +
+

Converts temperature to Kelvin scale. If temperature is already in Kelvin, returns current temperature object.

+ +

Memoizes subsequent calls.

+ +

Conversion formulas are taken from RapidTables:

+
  1. +

    Kelvin to Celsius.

    +
  2. +

    Kelvin to Fahrenheit.

    +
  3. +

    Kelvin to Rankine.

    +
+ +
Temperature[0, :kelvin].to_rankine
+# => 0 °R
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 363
+def to_kelvin
+  memoized(:to_kelvin) || memoize(:to_kelvin, -> {
+    return self if self.scale == KELVIN
+
+    degrees =
+      case self.scale
+      when CELSIUS
+        self.degrees + 273.15
+      when FAHRENHEIT
+        (self.degrees + 459.67) * (5 / 9r)
+      when RANKINE
+        self.degrees * (5 / 9r)
+      end
+
+    BasicTemperature.new(degrees, KELVIN)
+  })
+end
+
+
+ +
+ +
+
+ + to_rankine() + + +
+ + +
+

Converts temperature to Rankine scale. If temperature is already in Rankine, returns current temperature object.

+ +

Memoizes subsequent calls.

+ +

Conversion formulas are taken from RapidTables:

+
  1. +

    Rankine to Celsius.

    +
  2. +

    Rankine to Fahrenheit.

    +
  3. +

    Rankine to Kelvin.

    +
+ +
Temperature[0, :rankine].to_kelvin
+# => 0 K
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 395
+def to_rankine
+  memoized(:to_rankine) || memoize(:to_rankine, -> {
+    return self if self.scale == RANKINE
+
+    degrees =
+      case self.scale
+      when CELSIUS
+        (self.degrees + 273.15) * (9 / 5r)
+      when FAHRENHEIT
+        self.degrees + 459.67
+      when KELVIN
+        self.degrees * (9 / 5r)
+      end
+
+    BasicTemperature.new(degrees, RANKINE)
+  })
+end
+
+
+ +
+ +
+
+ + to_scale(scale) + + +
+ + +
+

Converts temperature to specific scale. If temperature is already in desired scale, returns current temperature object.

+ +

Raises InvalidScaleError when scale can not be casted to any possible scale value (see SCALES).

+ +
Temperature[60, :fahrenheit].to_scale(:celsius)
+# => 15.56 °C
+
+
+ + + + + + + + +
+ + +
+
# File lib/basic_temperature.rb, line 268
+def to_scale(scale)
+  casted_scale = cast_scale(scale)
+
+  assert_valid_scale!(casted_scale)
+
+  case casted_scale
+  when CELSIUS
+    to_celsius
+  when FAHRENHEIT
+    to_fahrenheit
+  when KELVIN
+    to_kelvin
+  when RANKINE
+    to_rankine
+  end
+end
+
+
+ +
+ + + + +
+ +
+ + diff --git a/doc/created.rid b/doc/created.rid new file mode 100644 index 0000000..f24fa96 --- /dev/null +++ b/doc/created.rid @@ -0,0 +1,4 @@ +Mon, 23 Mar 2020 16:11:09 +0200 +lib/basic_temperature.rb Mon, 23 Mar 2020 16:09:51 +0200 +lib/basic_temperature/temperature.rb Thu, 19 Mar 2020 21:16:10 +0200 +lib/basic_temperature/version.rb Thu, 27 Feb 2020 21:32:32 +0200 diff --git a/doc/css/github.css b/doc/css/github.css new file mode 100644 index 0000000..ea7cde8 --- /dev/null +++ b/doc/css/github.css @@ -0,0 +1,123 @@ +/* + +github.com style (c) Vasily Polovnyov + +*/ + +pre .comment, +pre .template_comment, +pre .diff .header, +pre .javadoc { + color: #998; + font-style: italic +} + +pre .keyword, +pre .css .rule .keyword, +pre .winutils, +pre .javascript .title, +pre .lisp .title, +pre .subst { + color: #000; + font-weight: bold +} + +pre .number, +pre .hexcolor { + color: #40a070 +} + +pre .string, +pre .tag .value, +pre .phpdoc, +pre .tex .formula { + color: #d14 +} + +pre .title, +pre .id { + color: #900; + font-weight: bold +} + +pre .javascript .title, +pre .lisp .title, +pre .subst { + font-weight: normal +} + +pre .class .title, +pre .haskell .label, +pre .tex .command { + color: #458; + font-weight: bold +} + +pre .tag, +pre .tag .title, +pre .rules .property, +pre .django .tag .keyword { + color: #000080; + font-weight: normal +} + +pre .attribute, +pre .variable, +pre .instancevar, +pre .lisp .body { + color: #008080 +} + +pre .regexp { + color: #009926 +} + +pre .class { + color: #458; + font-weight: bold +} + +pre .symbol, +pre .ruby .symbol .string, +pre .ruby .symbol .keyword, +pre .ruby .symbol .keymethods, +pre .lisp .keyword, +pre .tex .special, +pre .input_number { + color: #990073 +} + +pre .builtin, +pre .built_in, +pre .lisp .title { + color: #0086b3 +} + +pre .preprocessor, +pre .pi, +pre .doctype, +pre .shebang, +pre .cdata { + color: #999; + font-weight: bold +} + +pre .deletion { + background: #fdd +} + +pre .addition { + background: #dfd +} + +pre .diff .change { + background: #0086b3 +} + +pre .chunk { + color: #aaa +} + +pre .tex .formula { + opacity: 0.5; +} diff --git a/doc/css/main.css b/doc/css/main.css new file mode 100644 index 0000000..9c43ed0 --- /dev/null +++ b/doc/css/main.css @@ -0,0 +1,374 @@ +body { + font-family: "Helvetica Neue", Arial, sans-serif; + background: #FFF; + color: #3B3B3B; + margin: 0px; + font-size: 15px; + line-height: 1.25em; +} + +a:link, a:active, a:visited, a:hover { + color: #CC0000; + text-decoration: none; +} + +a:hover { + color: #990000; + text-decoration: underline; +} + +.banner a:hover { + color: white; +} + +h1 a, h2 a, .banner a { + color: #fff; +} + +h1 a:hover, h2 a:hover { + color: #fff; +} + +p { + margin-bottom: 1em; + text-align: justify; +} + +h1 { + font-size: 2.1em; + font-weight: normal; + line-height: 1.2em; + margin: 1.4em 0 0.7em 0; +} + +h2 { + font-size: 1.6em; + margin: 1.8em 0 0.8em 0; + font-weight: normal; + line-height: 1.2em; +} + +h3 { + font-size: 1.4em; + color:#555; + margin: 1.4em 0 0.7em 0; + font-weight: normal; +} + +h4 { + margin: 1.4em 0 0.5em 0; + font-size: 1em; +} + +table +{ + margin-bottom: 1em; +} + +td, th +{ + padding: 0 0.7em 0.3em 0; +} + +th +{ + font-weight: bold; +} + +.clear +{ + clear: both; + width: 0; height: 0; +} + +dt +{ + margin-bottom: 0.3em; + font-weight: bold; +} + +dd +{ + margin-left: 2em; + margin-bottom: 1em; +} + +dd p +{ + margin-top: 0.6em; +} + +li +{ + margin: 0 0 0.5em 2em; +} + +ul li +{ + list-style: disc; +} + +ol li +{ + list-style: decimal; +} + +.banner +{ + background: #B61D1D; + color: #FFF; + border-bottom: 1px solid #9b281c; + padding: 1em; + box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.2); +} +.banner h1 +{ + font-size: 1.2em; + margin: 0; +} + +.banner h1 .type +{ + font-size: 0.833em; + display:block; +} + +.banner h1 .type, +.banner h1 .parent +{ + color: #CCC; +} + +.banner ul +{ + margin-top: 0.3em; + margin-bottom: 0; + font-size: 0.85em; +} + +.banner li +{ + list-style: none; + margin-left: 0; + margin-bottom: 0; +} + +.banner .github_url { + color: #CCC; +} + +pre +{ + margin-bottom: 1em; +} + +.methods dt +{ + width: 1em; + font-size: 1.5em; + color:#AAA; + position: absolute; + font-weight: normal; + margin: 0; +} + +.methods dd +{ + margin-left: 2.5em; + min-height: 1.8em; + -height: 1.8em; + padding-bottom: 0.8em; +} + + +.methods ul li +{ + margin-right: 0.7em; + margin-left: 0; + list-style: none; + display: inline; +} + +#content { + margin: 2em; + margin-left: 3.5em; + margin-right: 3.5em; + max-width: 980px; +} + + +.sectiontitle { + margin-top: 2em; + margin-bottom: 1.3em; + margin-left: -1.2em; + font-size: 1.2em; + padding: 0 0 0.25em 0; + font-weight: bold; + border-bottom: 1px solid #000; +} + +.contenttitle { + margin-top: 4em; + margin-bottom: 1.3em; + margin-left: -0.9em; + font-size: 1.6em; + padding: 0 0 0.25em 0; + font-weight: bold; +} + +.attr-rw { + padding-right: 1em; + text-align: center; + color: #055; +} + +.attr-name { + font-weight: bold; + padding-right: 1em; +} + +.attr-desc { +} + +tt { + font-size: 1.15em; +} + +.attr-value { + font-family: monospace; + padding-left: 1em; + font-size: 1.15em; +} + +.dyn-source { + display: none; + background: #fffde8; + color: #000; + border: #ffe0bb dotted 1px; + margin: 0.5em 2em 0.5em 0; + padding: 0.5em; +} + +.dyn-source .cmt { + color: #00F; + font-style: italic; +} + +.dyn-source .kw { + color: #070; + font-weight: bold; +} + +.description pre { + padding: 0.5em; + background: #EEEEEE; + font-size: 15px; + overflow-x: scroll; +} + +.method { + margin-bottom: 2em; +} +.method .description, +.method .sourcecode +{ + margin-left: 1.2em; +} +.method h4 +{ + border-bottom: 1px dotted #999; + padding: 0 0 0.2em 0; + margin-bottom: 0.8em; + font-size: 1.1em; + color:#333; +} +.method .method-title { + border-bottom: 1px dotted #666; + padding: 0 0 0.15em 0; + margin: 0 0 0.5em 0; + font-size: 1.2em; + line-height: 1.25em; + position: relative; +} + +.method .method-title a.permalink { + position: absolute; + font-size: 0.75em; + right: 0; +} + +.method .sourcecode p.source-link { + text-indent: 0em; + margin-top: 0.5em; +} + +.method .aka { + margin-top: 0.3em; + margin-left: 1em; + font-style: italic; + text-indent: 2em; +} + +.method .source-link +{ + font-size: 0.85em; +} + +.ruby-constant { + color: teal; +} +.ruby-keyword { + color: #000; + font-weight: bold +} +.ruby-title { + color: #900; + font-weight: bold; +} +.ruby-ivar { + color: teal; +} +.ruby-operator { + color: #000; + font-weight: bold +} +.ruby-identifier { + color: #000; +} +.ruby-string, +.ruby-node { + color: #D14; +} +.ruby-comment { + color: #998; + font-style: italic; +} +.ruby-regexp { + color: #009926; +} +.ruby-value { + color: #990073; +} +.ruby-number { + color: #40A070; +} + +@keyframes highlight { + from { background-color: yellow; } + to { background-color: white; } +} + +.highlight { + animation-name: highlight; + animation-duration: 1s; +} + +p code { + background: #eeeeee; + border-radius: 2px; + border: 1px solid #dddddd; + font-family: Consolas, Menlo, Courier, monospace; + font-size: 14px; + margin-bottom: 1px; + padding: 0 5px; +} diff --git a/doc/css/panel.css b/doc/css/panel.css new file mode 100644 index 0000000..23c4c99 --- /dev/null +++ b/doc/css/panel.css @@ -0,0 +1,361 @@ +/* Panel (begin) */ + .panel + { + position: absolute; + width: 100%; + height: 100%; + top: 0; + left: 0; + background: #FFF; + z-index: 2; + font-family: "Helvetica Neue", "Arial", sans-serif; + overflow-x: hidden; + } + + .panel_tree .results, + .panel_results .tree + { + display: none; + } + + /* Header with search box (begin) */ + .panel .header + { + background: white url(../i/search.svg) no-repeat; + background-position: 5px; + box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.2); + height: 40px; + width: 100%; + position: absolute; + left: 0; top: 0; + z-index: 300; + overflow: hidden; + } + + .panel .header input + { + border: 0; + box-sizing: border-box; + display: inline-block; + font-size: 14px; + height: 40px; + width: 100%; + padding: 0 5px; + margin: 0; + margin-left: 25px; + outline: none; + } + + /* Header with search box (end) */ + + + /* Results (begin) */ + .panel .result + { + position: absolute; + top: 40px; + bottom: 0; + left: 0; + width: 100%; + overflow-y: scroll; + overflow-x: hidden; + z-index: 2; + } + + .panel .result ul + { + font-size: 0.8em; + width: 100%; + } + + .panel .result ul li + { + height: 46px; + overflow: hidden; + padding: 4px 10px 0 10px; + cursor: pointer; + } + + .panel .result ul li:nth-child(2n) { + background: #F0EFEF; + } + + .panel .result ul li h1 + { + font-size: 13px; + font-weight: normal; + color: #333; + margin-bottom: 2px; + white-space: nowrap; + } + + .panel .result ul li p + { + font-size: 11px; + color: #333; + margin-bottom: 2px; + white-space: nowrap; + } + + .panel .result ul li h1 i, + .panel .result ul li p.snippet + { + color: #777; + } + + .panel .result ul li b + { + color: #000; + } + + .panel .result ul li.current + { + background: #B61D1D; + } + + .panel .result ul li.current h1, + .panel .result ul li.current p + { + color: #D9D9D9; + } + + .panel .result ul li.current h1 i, + .panel .result ul li.current p.snippet + { + color: #ACACAC; + } + + .panel .result ul li.current b + { + color: #FFF; + } + + + .panel .result ul li:hover, + .panel .result ul li.selected + { + background: #d0d0d0; + } + + .panel .result ul li.current:hover + { + background: #B61D1D; + } + + .panel .result ul li .badge + { + margin-right: 0.4em; + margin-left: -0.2em; + padding: 0 0.2em; + color: #000; + border-radius: 3px; + } + + .panel .result ul li .badge_1 + { + background: #ACDBF4; + } + + .panel .result ul li.current .badge_1 + { + background: #97BFD7; + } + + .panel .result ul li .badge_2 + { + background: #ACF3C3; + } + + .panel .result ul li.current .badge_2 + { + background: #98D7AC; + } + + .panel .result ul li .badge_3 + { + background: #E0F3AC; + } + + .panel .result ul li.current .badge_3 + { + background: #C4D798; + } + + .panel .result ul li .badge_4 + { + background: #D7CA98; + } + + .panel .result ul li.current .badge_4 + { + background: #A6B0AC; + } + + .panel .result ul li .badge_5 + { + background: #F3C8AC; + } + + .panel .result ul li.current .badge_5 + { + background: #D7B198; + } + + .panel .result ul li .badge_6 + { + background: #F3ACC3; + } + + .panel .result ul li.current .badge_6 + { + background: #D798AB; + } + + /* Results (end) */ + + /* Tree (begin) */ /**/ + .panel .tree + { + background: white; + position: absolute; + top: 40px; + bottom: 0; + left: 0; + width: 100%; + overflow-y: scroll; + overflow-x: hidden; + z-index: 30; + } + + .panel .tree ul:first-child + { + background: url(../i/tree_bg.svg); + background-size: 1px 60px; + } + + .panel .tree li + { + cursor: pointer; + overflow: hidden; + height: 30px; + line-height: 100%; + } + + + .panel .tree li .content + { + padding-left: 18px; + padding-top: 5px; + height: 18px; + overflow: hidden; + position: relative; + } + + .panel .tree li .icon + { + width: 10px; + height: 9px; + background: url(../i/arrow-down.svg); + background-size: 10px; + position: absolute; + left: 1px; + top: 8px; + cursor: default; + } + + .panel .tree li.closed .icon + { + background: url(../i/arrow-right.svg); + background-size: 10px; + } + + .panel .tree ul li h1 + { + font-size: 13px; + font-weight: normal; + color: #000; + margin-bottom: 2px; + white-space: nowrap; + } + + .panel .tree ul li p + { + font-size: 11px; + color: #666; + margin-bottom: 2px; + white-space: nowrap; + } + + .panel .tree ul li h1 i + { + color: #999; + font-style: normal; + } + + .panel .tree ul li.current h1 i + { + color: #CCC; + } + + .panel .tree ul li.empty + { + cursor: text; + } + + .panel .tree ul li.empty h1, + .panel .tree ul li.empty p + { + color: #666; + font-style: italic; + } + + .panel .tree ul li.current + { + background: #B61D1D; + } + + .panel .tree ul li.current .icon + { + background: url(../i/arrow-right.svg); + background-size: 10px; + } + + .panel .tree ul li.current.closed .icon + { + background: url(../i/arrow-down.svg); + background-size: 10px; + } + + .panel .tree ul li.current h1 + { + color: #FFF; + } + + .panel .tree ul li.current p + { + color: #CCC; + } + + .panel .tree ul li.current.empty h1, + .panel .tree ul li.current.empty p + { + color: #999; + } + + .panel .tree ul li:hover + { + background: #d0d0d0; + } + + .panel .tree ul li.current:hover + { + background: #B61D1D; + } + + .panel .tree .stopper + { + display: none; + } + /* Tree (end) */ /**/ + +/* Panel (end) */ diff --git a/doc/css/reset.css b/doc/css/reset.css new file mode 100644 index 0000000..da4a239 --- /dev/null +++ b/doc/css/reset.css @@ -0,0 +1,48 @@ +/* http://meyerweb.com/eric/tools/css/reset/ */ +/* v1.0 | 20080212 */ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, font, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} + +/* remember to highlight inserts somehow! */ +ins { + text-decoration: none; +} +del { + text-decoration: line-through; +} + +/* tables still need 'cellspacing="0"' in the markup */ +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/doc/favicon.ico b/doc/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..e0e80cf8f15fa622499bd8879479cbbe1dcd9ba9 GIT binary patch literal 1150 zcmZ8fYfKzf6h5;%yF0tHGqW?ZyF3GKON82FHI4qT(#H>D{8Q5ywf<>hOKOT5ntoKE zbIjb(M@elCdD82Ca>*UblF~je zs-YW_-a09p;kfK;d*AKvY*f;E%G8X35+g9WKkcE3X9JH;?{sIKkz7WkN%6KoHlmQE zKDd-l2<|f=cRfV429g$q+Z=?Nasfu>Wu$EU3YnYcU~Cvb-q!gb-@o8g+n{A!gpoA~ zS?z|^9cKQ!uqq7@mD7+or&}L~o-zqD^BN>y7@}E^tj&x0lBaW7_6{QO#1F`R{3i7D zF^H~kvIdLNn&jJ*ayZj*hmzTi7hm}jdrFqD zWA9C9*)h)F$Zy&Rn^p(W$@ftxcJJO_+Lmo?3uLcJas~fc2!7VDcfsZBMQwNi!xO8J zyzL<8d+cd6>8V|F0JrBDc zflE6vm*6MH8sI57G&4@(IX>5)>D(-n+k%j@j* zd2J2y;nJ@MN$zK@A8;Mxu%=yRKd<6w_a2J zv;?KQcs1>qV1y9&pX`D2cZ=S5>-OY{ znqPk|t6Ex0&zo7aYL^y7wc~r2UR|%HmTE-#uM%zFO;mV@X!ky%;%A5s + + + temperature.rb + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + diff --git a/doc/files/lib/basic_temperature/version_rb.html b/doc/files/lib/basic_temperature/version_rb.html new file mode 100644 index 0000000..f1280fc --- /dev/null +++ b/doc/files/lib/basic_temperature/version_rb.html @@ -0,0 +1,84 @@ + + + + version.rb + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + +
Namespace
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + diff --git a/doc/files/lib/basic_temperature_rb.html b/doc/files/lib/basic_temperature_rb.html new file mode 100644 index 0000000..c345f68 --- /dev/null +++ b/doc/files/lib/basic_temperature_rb.html @@ -0,0 +1,112 @@ + + + + basic_temperature.rb + + + + + + + + + + + + + +
+
+ + + + + +
Required Files
+
    + +
  • basic_temperature/version
  • + +
+ + + + + + + + + +
Namespace
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + diff --git a/doc/i/arrow-down.svg b/doc/i/arrow-down.svg new file mode 100644 index 0000000..88c5138 --- /dev/null +++ b/doc/i/arrow-down.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/doc/i/arrow-right.svg b/doc/i/arrow-right.svg new file mode 100644 index 0000000..5b1569e --- /dev/null +++ b/doc/i/arrow-right.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/doc/i/search.svg b/doc/i/search.svg new file mode 100644 index 0000000..7f4a365 --- /dev/null +++ b/doc/i/search.svg @@ -0,0 +1,12 @@ + + + + search + Created with Sketch. + + + + + + + diff --git a/doc/i/tree_bg.svg b/doc/i/tree_bg.svg new file mode 100644 index 0000000..fd6a213 --- /dev/null +++ b/doc/i/tree_bg.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/doc/index.html b/doc/index.html new file mode 100644 index 0000000..31f4d2b --- /dev/null +++ b/doc/index.html @@ -0,0 +1,11 @@ + + + + + RDoc Documentation + + + + + + diff --git a/doc/js/highlight.pack.js b/doc/js/highlight.pack.js new file mode 100644 index 0000000..01b5927 --- /dev/null +++ b/doc/js/highlight.pack.js @@ -0,0 +1 @@ +var hljs=new function(){function l(o){return o.replace(/&/gm,"&").replace(/"}while(x.length||y.length){var u=t().splice(0,1)[0];v+=l(w.substr(q,u.offset-q));q=u.offset;if(u.event=="start"){v+=r(u.node);s.push(u.node)}else{if(u.event=="stop"){var p=s.length;do{p--;var o=s[p];v+=("")}while(o!=u.node);s.splice(p,1);while(p'+l(K[0])+""}else{M+=l(K[0])}O=N.lR.lastIndex;K=N.lR.exec(L)}M+=l(L.substr(O,L.length-O));return M}function J(r,L){if(L.sL&&d[L.sL]){var K=f(L.sL,r);s+=K.keyword_count;return K.value}else{return E(r,L)}}function H(L,r){var K=L.cN?'':"";if(L.rB){p+=K;L.buffer=""}else{if(L.eB){p+=l(r)+K;L.buffer=""}else{p+=K;L.buffer=r}}B.push(L);A+=L.r}function D(N,K,P){var Q=B[B.length-1];if(P){p+=J(Q.buffer+N,Q);return false}var L=y(K,Q);if(L){p+=J(Q.buffer+N,Q);H(L,K);return L.rB}var r=v(B.length-1,K);if(r){var M=Q.cN?"":"";if(Q.rE){p+=J(Q.buffer+N,Q)+M}else{if(Q.eE){p+=J(Q.buffer+N,Q)+M+l(K)}else{p+=J(Q.buffer+N+K,Q)+M}}while(r>1){M=B[B.length-2].cN?"":"";p+=M;r--;B.length--}var O=B[B.length-1];B.length--;B[B.length-1].buffer="";if(O.starts){H(O.starts,"")}return Q.rE}if(w(K,Q)){throw"Illegal"}}var G=d[I];var B=[G.dM];var A=0;var s=0;var p="";try{var u=0;G.dM.buffer="";do{var x=q(C,u);var t=D(x[0],x[1],x[2]);u+=x[0].length;if(!t){u+=x[1].length}}while(!x[2]);if(B.length>1){throw"Illegal"}return{language:I,r:A,keyword_count:s,value:p}}catch(F){if(F=="Illegal"){return{language:null,r:0,keyword_count:0,value:l(C)}}else{throw F}}}function h(){function o(t,s,u){if(t.compiled){return}if(!u){t.bR=c(s,t.b?t.b:"\\B|\\b");if(!t.e&&!t.eW){t.e="\\B|\\b"}if(t.e){t.eR=c(s,t.e)}}if(t.i){t.iR=c(s,t.i)}if(t.r==undefined){t.r=1}if(t.k){t.lR=c(s,t.l||hljs.IR,true)}for(var r in t.k){if(!t.k.hasOwnProperty(r)){continue}if(t.k[r] instanceof Object){t.kG=t.k}else{t.kG={keyword:t.k}}break}if(!t.c){t.c=[]}t.compiled=true;for(var q=0;qx.keyword_count+x.r){x=u}if(u.keyword_count+u.r>w.keyword_count+w.r){x=w;w=u}}}var s=t.className;if(!s.match(w.language)){s=s?(s+" "+w.language):w.language}var o=b(t);if(o.length){var q=document.createElement("pre");q.innerHTML=w.value;w.value=k(o,b(q),A)}if(y){w.value=w.value.replace(/^((<[^>]+>|\t)+)/gm,function(B,E,D,C){return E.replace(/\t/g,y)})}if(p){w.value=w.value.replace(/\n/g,"
")}if(/MSIE [678]/.test(navigator.userAgent)&&t.tagName=="CODE"&&t.parentNode.tagName=="PRE"){var q=t.parentNode;var v=document.createElement("div");v.innerHTML="
"+w.value+"
";t=v.firstChild.firstChild;v.firstChild.cN=q.cN;q.parentNode.replaceChild(v.firstChild,q)}else{t.innerHTML=w.value}t.className=s;t.dataset={};t.dataset.result={language:w.language,kw:w.keyword_count,re:w.r};if(x&&x.language){t.dataset.second_best={language:x.language,kw:x.keyword_count,re:x.r}}}function j(){if(j.called){return}j.called=true;e();var q=document.getElementsByTagName("pre");for(var o=0;o|>=|>>|>>=|>>>|>>>=|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~";this.BE={b:"\\\\.",r:0};this.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[this.BE],r:0};this.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[this.BE],r:0};this.CLCM={cN:"comment",b:"//",e:"$"};this.CBLCLM={cN:"comment",b:"/\\*",e:"\\*/"};this.HCM={cN:"comment",b:"#",e:"$"};this.NM={cN:"number",b:this.NR,r:0};this.CNM={cN:"number",b:this.CNR,r:0};this.inherit=function(o,r){var q={};for(var p in o){q[p]=o[p]}if(r){for(var p in r){q[p]=r[p]}}return q}}();hljs.LANGUAGES.ruby=function(){var g="[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?";var a="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?";var n={keyword:{and:1,"false":1,then:1,defined:1,module:1,"in":1,"return":1,redo:1,"if":1,BEGIN:1,retry:1,end:1,"for":1,"true":1,self:1,when:1,next:1,until:1,"do":1,begin:1,unless:1,END:1,rescue:1,nil:1,"else":1,"break":1,undef:1,not:1,"super":1,"class":1,"case":1,require:1,yield:1,alias:1,"while":1,ensure:1,elsif:1,or:1,def:1},keymethods:{__id__:1,__send__:1,abort:1,abs:1,"all?":1,allocate:1,ancestors:1,"any?":1,arity:1,assoc:1,at:1,at_exit:1,autoload:1,"autoload?":1,"between?":1,binding:1,binmode:1,"block_given?":1,call:1,callcc:1,caller:1,capitalize:1,"capitalize!":1,casecmp:1,"catch":1,ceil:1,center:1,chomp:1,"chomp!":1,chop:1,"chop!":1,chr:1,"class":1,class_eval:1,"class_variable_defined?":1,class_variables:1,clear:1,clone:1,close:1,close_read:1,close_write:1,"closed?":1,coerce:1,collect:1,"collect!":1,compact:1,"compact!":1,concat:1,"const_defined?":1,const_get:1,const_missing:1,const_set:1,constants:1,count:1,crypt:1,"default":1,default_proc:1,"delete":1,"delete!":1,delete_at:1,delete_if:1,detect:1,display:1,div:1,divmod:1,downcase:1,"downcase!":1,downto:1,dump:1,dup:1,each:1,each_byte:1,each_index:1,each_key:1,each_line:1,each_pair:1,each_value:1,each_with_index:1,"empty?":1,entries:1,eof:1,"eof?":1,"eql?":1,"equal?":1,"eval":1,exec:1,exit:1,"exit!":1,extend:1,fail:1,fcntl:1,fetch:1,fileno:1,fill:1,find:1,find_all:1,first:1,flatten:1,"flatten!":1,floor:1,flush:1,for_fd:1,foreach:1,fork:1,format:1,freeze:1,"frozen?":1,fsync:1,getc:1,gets:1,global_variables:1,grep:1,gsub:1,"gsub!":1,"has_key?":1,"has_value?":1,hash:1,hex:1,id:1,include:1,"include?":1,included_modules:1,index:1,indexes:1,indices:1,induced_from:1,inject:1,insert:1,inspect:1,instance_eval:1,instance_method:1,instance_methods:1,"instance_of?":1,"instance_variable_defined?":1,instance_variable_get:1,instance_variable_set:1,instance_variables:1,"integer?":1,intern:1,invert:1,ioctl:1,"is_a?":1,isatty:1,"iterator?":1,join:1,"key?":1,keys:1,"kind_of?":1,lambda:1,last:1,length:1,lineno:1,ljust:1,load:1,local_variables:1,loop:1,lstrip:1,"lstrip!":1,map:1,"map!":1,match:1,max:1,"member?":1,merge:1,"merge!":1,method:1,"method_defined?":1,method_missing:1,methods:1,min:1,module_eval:1,modulo:1,name:1,nesting:1,"new":1,next:1,"next!":1,"nil?":1,nitems:1,"nonzero?":1,object_id:1,oct:1,open:1,pack:1,partition:1,pid:1,pipe:1,pop:1,popen:1,pos:1,prec:1,prec_f:1,prec_i:1,print:1,printf:1,private_class_method:1,private_instance_methods:1,"private_method_defined?":1,private_methods:1,proc:1,protected_instance_methods:1,"protected_method_defined?":1,protected_methods:1,public_class_method:1,public_instance_methods:1,"public_method_defined?":1,public_methods:1,push:1,putc:1,puts:1,quo:1,raise:1,rand:1,rassoc:1,read:1,read_nonblock:1,readchar:1,readline:1,readlines:1,readpartial:1,rehash:1,reject:1,"reject!":1,remainder:1,reopen:1,replace:1,require:1,"respond_to?":1,reverse:1,"reverse!":1,reverse_each:1,rewind:1,rindex:1,rjust:1,round:1,rstrip:1,"rstrip!":1,scan:1,seek:1,select:1,send:1,set_trace_func:1,shift:1,singleton_method_added:1,singleton_methods:1,size:1,sleep:1,slice:1,"slice!":1,sort:1,"sort!":1,sort_by:1,split:1,sprintf:1,squeeze:1,"squeeze!":1,srand:1,stat:1,step:1,store:1,strip:1,"strip!":1,sub:1,"sub!":1,succ:1,"succ!":1,sum:1,superclass:1,swapcase:1,"swapcase!":1,sync:1,syscall:1,sysopen:1,sysread:1,sysseek:1,system:1,syswrite:1,taint:1,"tainted?":1,tell:1,test:1,"throw":1,times:1,to_a:1,to_ary:1,to_f:1,to_hash:1,to_i:1,to_int:1,to_io:1,to_proc:1,to_s:1,to_str:1,to_sym:1,tr:1,"tr!":1,tr_s:1,"tr_s!":1,trace_var:1,transpose:1,trap:1,truncate:1,"tty?":1,type:1,ungetc:1,uniq:1,"uniq!":1,unpack:1,unshift:1,untaint:1,untrace_var:1,upcase:1,"upcase!":1,update:1,upto:1,"value?":1,values:1,values_at:1,warn:1,write:1,write_nonblock:1,"zero?":1,zip:1}};var h={cN:"yardoctag",b:"@[A-Za-z]+"};var d={cN:"comment",b:"#",e:"$",c:[h]};var c={cN:"comment",b:"^\\=begin",e:"^\\=end",c:[h],r:10};var b={cN:"comment",b:"^__END__",e:"\\n$"};var u={cN:"subst",b:"#\\{",e:"}",l:g,k:n};var p=[hljs.BE,u];var s={cN:"string",b:"'",e:"'",c:p,r:0};var r={cN:"string",b:'"',e:'"',c:p,r:0};var q={cN:"string",b:"%[qw]?\\(",e:"\\)",c:p,r:10};var o={cN:"string",b:"%[qw]?\\[",e:"\\]",c:p,r:10};var m={cN:"string",b:"%[qw]?{",e:"}",c:p,r:10};var l={cN:"string",b:"%[qw]?<",e:">",c:p,r:10};var k={cN:"string",b:"%[qw]?/",e:"/",c:p,r:10};var j={cN:"string",b:"%[qw]?%",e:"%",c:p,r:10};var i={cN:"string",b:"%[qw]?-",e:"-",c:p,r:10};var t={cN:"string",b:"%[qw]?\\|",e:"\\|",c:p,r:10};var e={cN:"function",b:"\\bdef\\s+",e:" |$|;",l:g,k:n,c:[{cN:"title",b:a,l:g,k:n},{cN:"params",b:"\\(",e:"\\)",l:g,k:n},d,c,b]};var f={cN:"identifier",b:g,l:g,k:n,r:0};var v=[d,c,b,s,r,q,o,m,l,k,j,i,t,{cN:"class",b:"\\b(class|module)\\b",e:"$|;",k:{"class":1,module:1},c:[{cN:"title",b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?",r:0},{cN:"inheritance",b:"<\\s*",c:[{cN:"parent",b:"("+hljs.IR+"::)?"+hljs.IR}]},d,c,b]},e,{cN:"constant",b:"(::)?([A-Z]\\w*(::)?)+",r:0},{cN:"symbol",b:":",c:[s,r,q,o,m,l,k,j,i,t,f],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{cN:"number",b:"\\?\\w"},{cN:"variable",b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},f,{b:"("+hljs.RSR+")\\s*",c:[d,c,b,{cN:"regexp",b:"/",e:"/[a-z]*",i:"\\n",c:[hljs.BE]}],r:0}];u.c=v;e.c[1].c=v;return{dM:{l:g,k:n,c:v}}}();hljs.LANGUAGES.javascript={dM:{k:{keyword:{"in":1,"if":1,"for":1,"while":1,"finally":1,"var":1,"new":1,"function":1,"do":1,"return":1,"void":1,"else":1,"break":1,"catch":1,"instanceof":1,"with":1,"throw":1,"case":1,"default":1,"try":1,"this":1,"switch":1,"continue":1,"typeof":1,"delete":1},literal:{"true":1,"false":1,"null":1}},c:[hljs.ASM,hljs.QSM,hljs.CLCM,hljs.CBLCLM,hljs.CNM,{b:"("+hljs.RSR+"|case|return|throw)\\s*",k:{"return":1,"throw":1,"case":1},c:[hljs.CLCM,hljs.CBLCLM,{cN:"regexp",b:"/.*?[^\\\\/]/[gim]*"}],r:0},{cN:"function",b:"\\bfunction\\b",e:"{",k:{"function":1},c:[{cN:"title",b:"[A-Za-z$_][0-9A-Za-z$_]*"},{cN:"params",b:"\\(",e:"\\)",c:[hljs.ASM,hljs.QSM,hljs.CLCM,hljs.CBLCLM]}]}]}};hljs.LANGUAGES.css=function(){var a={cN:"function",b:hljs.IR+"\\(",e:"\\)",c:[{eW:true,eE:true,c:[hljs.NM,hljs.ASM,hljs.QSM]}]};return{cI:true,dM:{i:"[=/|']",c:[hljs.CBLCLM,{cN:"id",b:"\\#[A-Za-z0-9_-]+"},{cN:"class",b:"\\.[A-Za-z0-9_-]+",r:0},{cN:"attr_selector",b:"\\[",e:"\\]",i:"$"},{cN:"pseudo",b:":(:)?[a-zA-Z0-9\\_\\-\\+\\(\\)\\\"\\']+"},{cN:"at_rule",b:"@font-face",l:"[a-z-]+",k:{"font-face":1}},{cN:"at_rule",b:"@",e:"[{;]",eE:true,k:{"import":1,page:1,media:1,charset:1},c:[a,hljs.ASM,hljs.QSM,hljs.NM]},{cN:"tag",b:hljs.IR,r:0},{cN:"rules",b:"{",e:"}",i:"[^\\s]",r:0,c:[hljs.CBLCLM,{cN:"rule",b:"[^\\s]",rB:true,e:";",eW:true,c:[{cN:"attribute",b:"[A-Z\\_\\.\\-]+",e:":",eE:true,i:"[^\\s]",starts:{cN:"value",eW:true,eE:true,c:[a,hljs.NM,hljs.QSM,hljs.ASM,hljs.CBLCLM,{cN:"hexcolor",b:"\\#[0-9A-F]+"},{cN:"important",b:"!important"}]}}]}]}]}}}();hljs.LANGUAGES.xml=function(){var b="[A-Za-z0-9\\._:-]+";var a={eW:true,c:[{cN:"attribute",b:b,r:0},{b:'="',rB:true,e:'"',c:[{cN:"value",b:'"',eW:true}]},{b:"='",rB:true,e:"'",c:[{cN:"value",b:"'",eW:true}]},{b:"=",c:[{cN:"value",b:"[^\\s/>]+"}]}]};return{cI:true,dM:{c:[{cN:"pi",b:"<\\?",e:"\\?>",r:10},{cN:"doctype",b:"",r:10},{cN:"comment",b:"",r:10},{cN:"cdata",b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{cN:"tag",b:"",k:{title:{style:1}},c:[a],starts:{cN:"css",e:"",rE:true,sL:"css"}},{cN:"tag",b:"",k:{title:{script:1}},c:[a],starts:{cN:"javascript",e:"<\/script>",rE:true,sL:"javascript"}},{cN:"vbscript",b:"<%",e:"%>",sL:"vbscript"},{cN:"tag",b:"",c:[{cN:"title",b:"[^ />]+"},a]}]}}}();hljs.LANGUAGES.cpp=function(){var b={keyword:{"false":1,"int":1,"float":1,"while":1,"private":1,"char":1,"catch":1,"export":1,virtual:1,operator:2,sizeof:2,dynamic_cast:2,typedef:2,const_cast:2,"const":1,struct:1,"for":1,static_cast:2,union:1,namespace:1,unsigned:1,"long":1,"throw":1,"volatile":2,"static":1,"protected":1,bool:1,template:1,mutable:1,"if":1,"public":1,friend:2,"do":1,"return":1,"goto":1,auto:1,"void":2,"enum":1,"else":1,"break":1,"new":1,extern:1,using:1,"true":1,"class":1,asm:1,"case":1,typeid:1,"short":1,reinterpret_cast:2,"default":1,"double":1,register:1,explicit:1,signed:1,typename:1,"try":1,"this":1,"switch":1,"continue":1,wchar_t:1,inline:1,"delete":1,alignof:1,char16_t:1,char32_t:1,constexpr:1,decltype:1,noexcept:1,nullptr:1,static_assert:1,thread_local:1},built_in:{std:1,string:1,cin:1,cout:1,cerr:1,clog:1,stringstream:1,istringstream:1,ostringstream:1,auto_ptr:1,deque:1,list:1,queue:1,stack:1,vector:1,map:1,set:1,bitset:1,multiset:1,multimap:1,unordered_set:1,unordered_map:1,unordered_multiset:1,unordered_multimap:1,array:1,shared_ptr:1}};var a={cN:"stl_container",b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:b.built_in,r:10};a.c=[a];return{dM:{k:b,i:")[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
","
"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); +/* + * Sizzle CSS Selector Engine - v0.9.3 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); \ No newline at end of file diff --git a/doc/js/main.js b/doc/js/main.js new file mode 100644 index 0000000..0a4af0f --- /dev/null +++ b/doc/js/main.js @@ -0,0 +1,25 @@ +function toggleSource(id) { + var src = $('#' + id).toggle(); + var isVisible = src.is(':visible'); + $('#l_' + id).html(isVisible ? 'hide' : 'show'); +} + +window.highlight = function(url) { + var hash = url.match(/#([^#]+)$/); + if (hash) { + var parent = document.querySelector('a[name=' + hash[1] + ']').parentElement; + + parent.classList.add('highlight'); + + setTimeout(function() { + parent.classList.remove('highlight'); + }, 1000); + } +}; + +$(function() { + highlight('#' + location.hash); + $('.description pre').each(function() { + hljs.highlightBlock(this); + }); +}); diff --git a/doc/js/navigation.js b/doc/js/navigation.js new file mode 100644 index 0000000..dfad74b --- /dev/null +++ b/doc/js/navigation.js @@ -0,0 +1,105 @@ +/* + * Navigation allows movement using the arrow keys through the search results. + * + * When using this library you will need to set scrollIntoView to the + * appropriate function for your layout. Use scrollInWindow if the container + * is not scrollable and scrollInElement if the container is a separate + * scrolling region. + */ +Navigation = new function() { + this.initNavigation = function() { + var _this = this; + + document.addEventListener('keydown', function(e) { + _this.onkeydown(e); + }); + + this.navigationActive = true; + } + + this.setNavigationActive = function(state) { + this.navigationActive = state; + } + + this.onkeydown = function(e) { + if (!this.navigationActive) return; + switch(e.keyCode) { + case 37: //Event.KEY_LEFT: + if (this.moveLeft()) e.preventDefault(); + break; + case 38: //Event.KEY_UP: + if (e.keyCode == 38 || e.ctrlKey) { + if (this.moveUp()) e.preventDefault(); + } + break; + case 39: //Event.KEY_RIGHT: + if (this.moveRight()) e.preventDefault(); + break; + case 40: //Event.KEY_DOWN: + if (e.keyCode == 40 || e.ctrlKey) { + if (this.moveDown()) e.preventDefault(); + } + break; + case 13: //Event.KEY_RETURN: + if (this.current) e.preventDefault(); + this.select(this.current); + break; + } + if (e.ctrlKey && e.shiftKey) this.select(this.current); + } + + this.moveRight = function() { + } + + this.moveLeft = function() { + } + + this.move = function(isDown) { + } + + this.moveUp = function() { + return this.move(false); + } + + this.moveDown = function() { + return this.move(true); + } + + /* + * Scrolls to the given element in the scrollable element view. + */ + this.scrollInElement = function(element, view) { + var offset, viewHeight, viewScroll, height; + offset = element.offsetTop; + height = element.offsetHeight; + viewHeight = view.offsetHeight; + viewScroll = view.scrollTop; + + if (offset - viewScroll + height > viewHeight) { + view.scrollTop = offset - viewHeight + height; + } + if (offset < viewScroll) { + view.scrollTop = offset; + } + } + + /* + * Scrolls to the given element in the window. The second argument is + * ignored + */ + this.scrollInWindow = function(element, ignored) { + var offset, viewHeight, viewScroll, height; + offset = element.offsetTop; + height = element.offsetHeight; + viewHeight = window.innerHeight; + viewScroll = window.scrollY; + + if (offset - viewScroll + height > viewHeight) { + window.scrollTo(window.scrollX, offset - viewHeight + height); + } + if (offset < viewScroll) { + window.scrollTo(window.scrollX, offset); + } + } +} + diff --git a/doc/js/navigation.js.gz b/doc/js/navigation.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..849668d6a28629139e968e993af7d09c4f8f49f1 GIT binary patch literal 833 zcmV-H1HSwpiwFn;F#}!z18!kV>WYI6Y1R!vVEF%Z4yS4=Ok3F(Fkq_)sh zs+zPQP+HNXlv8DPy&H?gj%;tDsN}zQZ0~2X2~aNOLSnyp^WJzoPOsB~4vfg0#Y8i~ zfh37oD7Y7MdQZ8AR52cdo>CxEiUr)!rNXaLr18`)D@tTA1xZz!XyqfFVZ5GFUc@p5 z3A>d#PPz(mo43ai(j)H4wm@Nce3_*0&+2ExR0wAT{!Q5{AP$ zez;^xQ&u116{Rp@px3D zOr`^*M=h8RrXKZ??6U|f6$l8n$I;sp z==E&n{EOku@5|wr@ks`7No)?&_Lnr$Ub_v{pGj&01~ekr+g?^V^LHyLxjU^Tcvnv_ z`Cg|lgh9WLV0d`I1c8>x1zna}H^fY4k4ahW67{|=>gxRK**4o(ES~;@@8iRIiov(* z(GKUwhfj4rFx~nB?{ALQybs5dt5JjbAe9n9yEA1MAfbV-M>W=FRkUv56!!Kofts>N zTi-hg%ga%m%;v19gG|>xhNDG-F))9OI1HJVl>nVqRC_2f2ig zl|s10UxQe~-ke!zf3@VlE^N zo4X+UUC`77S=|592bovK@pa$Y2pPz^yLnk7)VRjNt9}2~-PsrIXEnytGPSFXg01ow L>E&|hqzV84gSDJ2 literal 0 HcmV?d00001 diff --git a/doc/js/search_index.js b/doc/js/search_index.js new file mode 100644 index 0000000..65826ea --- /dev/null +++ b/doc/js/search_index.js @@ -0,0 +1 @@ +var search_data = {"index":{"searchIndex":["temperature","initializationargumentserror","invaliddegreeserror","invalidnumericortemperatureerror","invalidscaleerror","object","temperature","+()","+()","-()","-()","-@()","-@()","<=>()","<=>()","[]()","[]()","new()","new()","set_degrees()","set_degrees()","set_scale()","set_scale()","to_celsius()","to_celsius()","to_fahrenheit()","to_fahrenheit()","to_kelvin()","to_kelvin()","to_rankine()","to_rankine()","to_scale()","to_scale()"],"longSearchIndex":["basictemperature","basictemperature::initializationargumentserror","basictemperature::invaliddegreeserror","basictemperature::invalidnumericortemperatureerror","basictemperature::invalidscaleerror","object","temperature","basictemperature#+()","basictemperature#+()","basictemperature#-()","basictemperature#-()","basictemperature#-@()","basictemperature#-@()","basictemperature#<=>()","basictemperature#<=>()","basictemperature::[]()","basictemperature::[]()","basictemperature::new()","basictemperature::new()","basictemperature#set_degrees()","basictemperature#set_degrees()","basictemperature#set_scale()","basictemperature#set_scale()","basictemperature#to_celsius()","basictemperature#to_celsius()","basictemperature#to_fahrenheit()","basictemperature#to_fahrenheit()","basictemperature#to_kelvin()","basictemperature#to_kelvin()","basictemperature#to_rankine()","basictemperature#to_rankine()","basictemperature#to_scale()","basictemperature#to_scale()"],"info":[["BasicTemperature","","classes/BasicTemperature.html","","

Temperature is a simple Value Object for basic temperature operations like conversions from Celsius to …\n"],["BasicTemperature::InitializationArgumentsError","","classes/BasicTemperature/InitializationArgumentsError.html","","

Raised when Temperature.new is called with mixed positional and keyword arguments or without arguments …\n"],["BasicTemperature::InvalidDegreesError","","classes/BasicTemperature/InvalidDegreesError.html","","

Raised when degrees is not a Numeric.\n"],["BasicTemperature::InvalidNumericOrTemperatureError","","classes/BasicTemperature/InvalidNumericOrTemperatureError.html","","

Raised when other is not a Numeric or Temperature in math operations.\n"],["BasicTemperature::InvalidScaleError","","classes/BasicTemperature/InvalidScaleError.html","","

Raised when scale can not be casted to any possible scale value. See SCALES.\n"],["Object","","classes/Object.html","",""],["Temperature","","classes/Temperature.html","","

Temperature is a simple Value Object for basic temperature operations like conversions from Celsius to …\n"],["+","BasicTemperature","classes/BasicTemperature.html#method-i-2B","(other)","

Performs addition. Returns a new Temperature.\n\n

Temperature[20, :celsius] + Temperature[10, :celsius]\n# ...\n
\n"],["+","BasicTemperature","classes/BasicTemperature.html#method-i-2B","(other)","

Performs addition. Returns a new Temperature.\n\n

Temperature[20, :celsius] + Temperature[10, :celsius]\n# ...\n
\n"],["-","BasicTemperature","classes/BasicTemperature.html#method-i-2D","(other)","

Performs subtraction. Returns a new Temperature.\n\n

Temperature[20, :celsius] - Temperature[10, :celsius] ...\n
\n"],["-","BasicTemperature","classes/BasicTemperature.html#method-i-2D","(other)","

Performs subtraction. Returns a new Temperature.\n\n

Temperature[20, :celsius] - Temperature[10, :celsius] ...\n
\n"],["-@","BasicTemperature","classes/BasicTemperature.html#method-i-2D-40","()","

Returns a new Temperature with negated degrees.\n\n

-Temperature[20, :celsius]\n# => -20 °C\n
\n"],["-@","BasicTemperature","classes/BasicTemperature.html#method-i-2D-40","()","

Returns a new Temperature with negated degrees.\n\n

-Temperature[20, :celsius]\n# => -20 °C\n
\n"],["<=>","BasicTemperature","classes/BasicTemperature.html#method-i-3C-3D-3E","(other)","

Compares temperture with other temperature.\n

Returns 0 if they are considered as equal.\n

Two temperatures …\n"],["<=>","BasicTemperature","classes/BasicTemperature.html#method-i-3C-3D-3E","(other)","

Compares temperture with other temperature.\n

Returns 0 if they are considered as equal.\n

Two temperatures …\n"],["[]","BasicTemperature","classes/BasicTemperature.html#method-c-5B-5D","(*args, **kwargs)","

Creates a new instance of Temperature. Alias for new.\n"],["[]","BasicTemperature","classes/BasicTemperature.html#method-c-5B-5D","(*args, **kwargs)","

Creates a new instance of Temperature. Alias for new.\n"],["new","BasicTemperature","classes/BasicTemperature.html#method-c-new","(*positional_arguments, **keyword_arguments)","

Creates a new instance of Temperature. Is aliased as [].\n"],["new","BasicTemperature","classes/BasicTemperature.html#method-c-new","(*positional_arguments, **keyword_arguments)","

Creates a new instance of Temperature. Is aliased as [].\n"],["set_degrees","BasicTemperature","classes/BasicTemperature.html#method-i-set_degrees","(degrees)","

Returns a new Temperature with updated degrees.\n\n

temperature = Temperature[0, :celsius]\n# => 0 °C\n\nnew_temperature ...\n
\n"],["set_degrees","BasicTemperature","classes/BasicTemperature.html#method-i-set_degrees","(degrees)","

Returns a new Temperature with updated degrees.\n\n

temperature = Temperature[0, :celsius]\n# => 0 °C\n\nnew_temperature ...\n
\n"],["set_scale","BasicTemperature","classes/BasicTemperature.html#method-i-set_scale","(scale)","

Returns a new Temperature with updated scale.\n\n

temperature = Temperature[0, :celsius]\n# => 0 °C\n\nnew_temperature ...\n
\n"],["set_scale","BasicTemperature","classes/BasicTemperature.html#method-i-set_scale","(scale)","

Returns a new Temperature with updated scale.\n\n

temperature = Temperature[0, :celsius]\n# => 0 °C\n\nnew_temperature ...\n
\n"],["to_celsius","BasicTemperature","classes/BasicTemperature.html#method-i-to_celsius","()","

Converts temperature to Celsius scale. If temperature is already in Celsius, returns current temperature …\n"],["to_celsius","BasicTemperature","classes/BasicTemperature.html#method-i-to_celsius","()","

Converts temperature to Celsius scale. If temperature is already in Celsius, returns current temperature …\n"],["to_fahrenheit","BasicTemperature","classes/BasicTemperature.html#method-i-to_fahrenheit","()","

Converts temperature to Fahrenheit scale. If temperature is already in Fahrenheit, returns current temperature …\n"],["to_fahrenheit","BasicTemperature","classes/BasicTemperature.html#method-i-to_fahrenheit","()","

Converts temperature to Fahrenheit scale. If temperature is already in Fahrenheit, returns current temperature …\n"],["to_kelvin","BasicTemperature","classes/BasicTemperature.html#method-i-to_kelvin","()","

Converts temperature to Kelvin scale. If temperature is already in Kelvin, returns current temperature …\n"],["to_kelvin","BasicTemperature","classes/BasicTemperature.html#method-i-to_kelvin","()","

Converts temperature to Kelvin scale. If temperature is already in Kelvin, returns current temperature …\n"],["to_rankine","BasicTemperature","classes/BasicTemperature.html#method-i-to_rankine","()","

Converts temperature to Rankine scale. If temperature is already in Rankine, returns current temperature …\n"],["to_rankine","BasicTemperature","classes/BasicTemperature.html#method-i-to_rankine","()","

Converts temperature to Rankine scale. If temperature is already in Rankine, returns current temperature …\n"],["to_scale","BasicTemperature","classes/BasicTemperature.html#method-i-to_scale","(scale)","

Converts temperature to specific scale. If temperature is already in desired scale, returns current temperature …\n"],["to_scale","BasicTemperature","classes/BasicTemperature.html#method-i-to_scale","(scale)","

Converts temperature to specific scale. If temperature is already in desired scale, returns current temperature …\n"]]}} \ No newline at end of file diff --git a/doc/js/search_index.js.gz b/doc/js/search_index.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..32e927df85d04d5ec2299545530b49d2c1acdd52 GIT binary patch literal 1180 zcmV;N1Y`RjiwFpP!+2f*19N3za${&;X>Md?crI#l0PUIYZt6A^z+c6p(!^~E?b_Wh zj8<)FCslV^ugcZFP=ri!0I$Jewt?GSUFkl}KJOX!D0`BfI0>=S1Ol0~?NSMm*giJr zcXIyNVL=6vK!rOQcvMkxPCnHb_uyl#^{EyO+(pe^O~G^qf~vWIS_7q+V$^59QN;pI z#dtmit|SN%2tB;OLC=G+0Lb=oloiYkgt25sM7q>p^##LUz*Tr-t8i3*v-)<-?@RO2 zKEJT8y}o(ju(Ylc)F4*6u&s5=X{lh~f-l)z7Bok6B7jeTsp6g|@E45dw*=)+j6*@w zQY2~g8#O=R(sw~!IljE@2g z1->0DfGbN(u5fJKCJ6sUL~7XBWl*VUkcH*>vUu`I-82Aon`F$S4p*D?Qs?+HT;%MJIY@?PJ{{DjYAeqjGKB3$rPw>19 zghy8Ck)X9g@nEiu&h^kbv)x3oRgU$=j7^Af zHpGzA;$#s9UXyeINVjwK<83zqxKB!*p<~o%=%FPGQ^9{U3ml;mIXP@?0y~%jMwsU? z=kyw7>)K1+L^SU~psrKo@H`!lBIuo-G)OBhIel_u zPV0SZjy>`N(rn^VF<$#PTyQVwoN9D8g>-U0RD!zy7@$)OxVLnd74e+!PC~*Mt`H+C zo*c$BOnZ6NC=2Qol7`NB{>@l@Pn^>e^5-9&y+gxOLM67dj&pY7oZV)9vlC2bRDg`L zdrFs6hLz=`hJhm4lU2DM5uEmn+aO&SB=bO^ov0-6>zw-0+z-pZT+rMq?GtOSUjfy1 z-d;Ozb-p>oJ*RAt!^5X#c$W|hKo?Csm~p8ncd>eptb9YRe1-~#l|G_N_rlHpmzvm9 zNzZ70{V?6^4_145t#!2PPdm2*xI>AMA##uiqSyZl8H{%Zl_J?*ryk#yOV9I}S2{hL zTibK1sOG2YI8i@x{N;f;xv=WKS|raR`tVcP9?2?oeY1-#%ro1oCH_52q%Zp_nZjD8 zzN-G=5mia+9E&H?_>3AI#4*2(EP?P`>| viewHeight) { + view.scrollTop = offset - viewHeight + height; + } + if (offset < viewScroll) { + view.scrollTop = offset; + } +} + +// panel.js ----------------------------------------------- + +Searchdoc.Panel = function(element, data, tree, frame) { + this.$element = $(element); + this.$input = $('input', element).eq(0); + this.$result = $('.result ul', element).eq(0); + this.frame = frame; + this.$current = null; + this.$view = this.$result.parent(); + this.data = data; + this.searcher = new Searcher(data.index); + this.tree = new Searchdoc.Tree($('.tree', element), tree, this); + this.init(); +}; + +Searchdoc.Panel.prototype = $.extend({}, Searchdoc.Navigation, new function() { + var suid = 1; + + this.init = function() { + var _this = this; + var observer = function() { + _this.search(_this.$input[0].value); + }; + this.$input.keyup(observer); + this.$input.click(observer); // mac's clear field + + this.searcher.ready(function(results, isLast) { + _this.addResults(results, isLast); + }); + + this.$result.click(function(e) { + _this.$current.removeClass('current'); + _this.$current = $(e.target).closest('li').addClass('current'); + _this.select(); + _this.$input.focus(); + }); + + this.initNavigation(); + this.setNavigationActive(false); + }; + + this.search = function(value, selectFirstMatch) { + value = jQuery.trim(value).toLowerCase(); + this.selectFirstMatch = selectFirstMatch; + if (value) { + this.$element.removeClass('panel_tree').addClass('panel_results'); + this.tree.setNavigationActive(false); + this.setNavigationActive(true); + } else { + this.$element.addClass('panel_tree').removeClass('panel_results'); + this.tree.setNavigationActive(true); + this.setNavigationActive(false); + } + if (value != this.lastQuery) { + this.lastQuery = value; + this.firstRun = true; + this.searcher.find(value); + } + }; + + this.addResults = function(results, isLast) { + var target = this.$result.get(0); + if (this.firstRun && (results.length > 0 || isLast)) { + this.$current = null; + this.$result.empty(); + } + for (var i = 0, l = results.length; i < l; i++) { + target.appendChild(renderItem.call(this, results[i])); + } + if (this.firstRun && results.length > 0) { + this.firstRun = false; + this.$current = $(target.firstChild); + this.$current.addClass('current'); + if (this.selectFirstMatch) this.select(); + scrollIntoView(this.$current[0], this.$view[0]); + } + if (jQuery.browser.msie) this.$element[0].className += ''; + }; + + this.open = function(src) { + this.frame.location.href = '../' + src; + if (this.frame.highlight) this.frame.highlight(src); + }; + + this.select = function() { + this.open(this.$current.data('path')); + }; + + this.move = function(isDown) { + if (!this.$current) return; + var $next = this.$current[isDown ? 'next' : 'prev'](); + if ($next.length) { + this.$current.removeClass('current'); + $next.addClass('current'); + scrollIntoView($next[0], this.$view[0]); + this.$current = $next; + } + return true; + }; + + function renderItem(result) { + var li = document.createElement('li'), + html = '', + badge = result.badge; + html += '

' + hlt(result.title); + if (result.params) html += '' + result.params + ''; + html += '

'; + html += '

'; + if (typeof badge != 'undefined') { + html += '' + stripHTML(this.data.badges[badge] || 'unknown') + ''; + } + html += hlt(result.namespace) + '

'; + if (result.snippet) html += '

' + stripHTML(result.snippet) + '

'; + li.innerHTML = html; + jQuery.data(li, 'path', result.path); + return li; + } + + function hlt(html) { + return escapeHTML(html).replace(/\u0001/g, '').replace(/\u0002/g, ''); + } + + function escapeHTML(html) { + return html.replace(/[&<>]/g, function(c) { + return '&#' + c.charCodeAt(0) + ';'; + }); + } + + function stripHTML(html) { + var in_tag = false; + var output = ""; + + for (var i = 0; i < html.length; i++) { + if (html[i] == '<'){ + in_tag = true; + } else if (html[i] == '>') { + in_tag = false; + i++; + } + + if (!in_tag && i < html.length) + output += html[i]; + } + + return output; + } + +}); + +// tree.js ------------------------------------------------ + +Searchdoc.Tree = function(element, tree, panel) { + this.$element = $(element); + this.$list = $('ul', element); + this.tree = tree; + this.panel = panel; + this.init(); +}; + +Searchdoc.Tree.prototype = $.extend({}, Searchdoc.Navigation, new function() { + this.init = function() { + var stopper = document.createElement('li'); + stopper.className = 'stopper'; + this.$list[0].appendChild(stopper); + for (var i = 0, l = this.tree.length; i < l; i++) { + buildAndAppendItem.call(this, this.tree[i], 0, stopper); + } + var _this = this; + this.$list.click(function(e) { + var $target = $(e.target), + $li = $target.closest('li'); + if ($target.hasClass('icon')) { + _this.toggle($li); + } else { + _this.select($li); + } + }); + + this.initNavigation(); + if (jQuery.browser.msie) document.body.className += ''; + }; + + this.select = function($li) { + this.highlight($li); + var path = $li[0].searchdoc_tree_data.path; + if (path) this.panel.open(path); + }; + + this.highlight = function($li) { + if (this.$current) this.$current.removeClass('current'); + this.$current = $li.addClass('current'); + }; + + this.toggle = function($li) { + var closed = !$li.hasClass('closed'), + children = $li[0].searchdoc_tree_data.children; + $li.toggleClass('closed'); + for (var i = 0, l = children.length; i < l; i++) { + toggleVis.call(this, $(children[i].li), !closed); + } + }; + + this.moveRight = function() { + if (!this.$current) { + this.highlight(this.$list.find('li:first')); + return; + } + if (this.$current.hasClass('closed')) { + this.toggle(this.$current); + } + }; + + this.moveLeft = function() { + if (!this.$current) { + this.highlight(this.$list.find('li:first')); + return; + } + if (!this.$current.hasClass('closed')) { + this.toggle(this.$current); + } else { + var level = this.$current[0].searchdoc_tree_data.level; + if (level === 0) return; + var $next = this.$current.prevAll('li.level_' + (level - 1) + ':visible:first'); + this.$current.removeClass('current'); + $next.addClass('current'); + scrollIntoView($next[0], this.$element[0]); + this.$current = $next; + } + }; + + this.move = function(isDown) { + if (!this.$current) { + this.highlight(this.$list.find('li:first')); + return true; + } + var next = this.$current[0]; + if (isDown) { + do { + next = next.nextSibling; + if (next && next.style && next.style.display != 'none') break; + } while (next); + } else { + do { + next = next.previousSibling; + if (next && next.style && next.style.display != 'none') break; + } while (next); + } + if (next && next.className.indexOf('stopper') == -1) { + this.$current.removeClass('current'); + $(next).addClass('current'); + scrollIntoView(next, this.$element[0]); + this.$current = $(next); + } + return true; + }; + + function toggleVis($li, show) { + var closed = $li.hasClass('closed'), + children = $li[0].searchdoc_tree_data.children; + $li.css('display', show ? '' : 'none'); + if (!show && this.$current && $li[0] == this.$current[0]) { + this.$current.removeClass('current'); + this.$current = null; + } + for (var i = 0, l = children.length; i < l; i++) { + toggleVis.call(this, $(children[i].li), show && !closed); + } + } + + function buildAndAppendItem(item, level, before) { + var li = renderItem(item, level), + list = this.$list[0]; + item.li = li; + list.insertBefore(li, before); + for (var i = 0, l = item[3].length; i < l; i++) { + buildAndAppendItem.call(this, item[3][i], level + 1, before); + } + return li; + } + + function renderItem(item, level) { + var li = document.createElement('li'), + cnt = document.createElement('div'), + h1 = document.createElement('h1'), + p = document.createElement('p'), + icon, i; + + li.appendChild(cnt); + li.style.paddingLeft = getOffset(level); + cnt.className = 'content'; + if (!item[1]) li.className = 'empty '; + cnt.appendChild(h1); + // cnt.appendChild(p); + h1.appendChild(document.createTextNode(item[0])); + // p.appendChild(document.createTextNode(item[4])); + if (item[2]) { + i = document.createElement('i'); + i.appendChild(document.createTextNode(item[2])); + h1.appendChild(i); + } + if (item[3].length > 0) { + icon = document.createElement('div'); + icon.className = 'icon'; + cnt.appendChild(icon); + } + + // user direct assignement instead of $() + // it's 8x faster + // $(li).data('path', item[1]) + // .data('children', item[3]) + // .data('level', level) + // .css('display', level == 0 ? '' : 'none') + // .addClass('level_' + level) + // .addClass('closed'); + li.searchdoc_tree_data = { + path: item[1], + children: item[3], + level: level + }; + li.style.display = level === 0 ? '' : 'none'; + li.className += 'level_' + level + ' closed'; + return li; + } + + function getOffset(level) { + return 5 + 18 * level + 'px'; + } +}); diff --git a/doc/js/searcher.js b/doc/js/searcher.js new file mode 100644 index 0000000..e200a16 --- /dev/null +++ b/doc/js/searcher.js @@ -0,0 +1,229 @@ +Searcher = function(data) { + this.data = data; + this.handlers = []; +} + +Searcher.prototype = new function() { + // search is performed in chunks of 1000 for non-blocking user input + var CHUNK_SIZE = 1000; + // do not try to find more than 100 results + var MAX_RESULTS = 100; + var huid = 1; + var suid = 1; + var runs = 0; + + this.find = function(query) { + var queries = splitQuery(query); + var regexps = buildRegexps(queries); + var highlighters = buildHilighters(queries); + var state = { from: 0, pass: 0, limit: MAX_RESULTS, n: suid++}; + var _this = this; + + this.currentSuid = state.n; + + if (!query) return; + + var run = function() { + // stop current search thread if new search started + if (state.n != _this.currentSuid) return; + + var results = + performSearch(_this.data, regexps, queries, highlighters, state); + var hasMore = (state.limit > 0 && state.pass < 4); + + triggerResults.call(_this, results, !hasMore); + if (hasMore) { + setTimeout(run, 2); + } + runs++; + }; + runs = 0; + + // start search thread + run(); + } + + /* ----- Events ------ */ + this.ready = function(fn) { + fn.huid = huid; + this.handlers.push(fn); + } + + /* ----- Utilities ------ */ + function splitQuery(query) { + return query.split(/(\s+|::?|\(\)?)/).filter(function(string) { + return string.match(/\S/); + }); + } + + function buildRegexps(queries) { + return queries.map(function(query) { + return new RegExp(query.replace(/(.)/g, '([$1])([^$1]*?)'), 'i'); + }); + } + + function buildHilighters(queries) { + return queries.map(function(query) { + return query.split('').map(function(l, i) { + return '\u0001$' + (i*2+1) + '\u0002$' + (i*2+2); + }).join(''); + }); + } + + // function longMatchRegexp(index, longIndex, regexps) { + // for (var i = regexps.length - 1; i >= 0; i--){ + // if (!index.match(regexps[i]) && !longIndex.match(regexps[i])) return false; + // }; + // return true; + // } + + + /* ----- Mathchers ------ */ + + /* + * This record matches if the index starts with queries[0] and the record + * matches all of the regexps + */ + function matchPassBeginning(index, longIndex, queries, regexps) { + if (index.indexOf(queries[0]) != 0) return false; + for (var i=1, l = regexps.length; i < l; i++) { + if (!index.match(regexps[i]) && !longIndex.match(regexps[i])) + return false; + }; + return true; + } + + /* + * This record matches if the longIndex starts with queries[0] and the + * longIndex matches all of the regexps + */ + function matchPassLongIndex(index, longIndex, queries, regexps) { + if (longIndex.indexOf(queries[0]) != 0) return false; + for (var i=1, l = regexps.length; i < l; i++) { + if (!longIndex.match(regexps[i])) + return false; + }; + return true; + } + + /* + * This record matches if the index contains queries[0] and the record + * matches all of the regexps + */ + function matchPassContains(index, longIndex, queries, regexps) { + if (index.indexOf(queries[0]) == -1) return false; + for (var i=1, l = regexps.length; i < l; i++) { + if (!index.match(regexps[i]) && !longIndex.match(regexps[i])) + return false; + }; + return true; + } + + /* + * This record matches if regexps[0] matches the index and the record + * matches all of the regexps + */ + function matchPassRegexp(index, longIndex, queries, regexps) { + if (!index.match(regexps[0])) return false; + for (var i=1, l = regexps.length; i < l; i++) { + if (!index.match(regexps[i]) && !longIndex.match(regexps[i])) + return false; + }; + return true; + } + + + /* ----- Highlighters ------ */ + function highlightRegexp(info, queries, regexps, highlighters) { + var result = createResult(info); + for (var i=0, l = regexps.length; i < l; i++) { + result.title = result.title.replace(regexps[i], highlighters[i]); + result.namespace = result.namespace.replace(regexps[i], highlighters[i]); + }; + return result; + } + + function hltSubstring(string, pos, length) { + return string.substring(0, pos) + '\u0001' + string.substring(pos, pos + length) + '\u0002' + string.substring(pos + length); + } + + function highlightQuery(info, queries, regexps, highlighters) { + var result = createResult(info); + var pos = 0; + var lcTitle = result.title.toLowerCase(); + + pos = lcTitle.indexOf(queries[0]); + if (pos != -1) { + result.title = hltSubstring(result.title, pos, queries[0].length); + } + + result.namespace = result.namespace.replace(regexps[0], highlighters[0]); + for (var i=1, l = regexps.length; i < l; i++) { + result.title = result.title.replace(regexps[i], highlighters[i]); + result.namespace = result.namespace.replace(regexps[i], highlighters[i]); + }; + return result; + } + + function createResult(info) { + var result = {}; + result.title = info[0]; + result.namespace = info[1]; + result.path = info[2]; + result.params = info[3]; + result.snippet = info[4]; + result.badge = info[6]; + return result; + } + + /* ----- Searching ------ */ + function performSearch(data, regexps, queries, highlighters, state) { + var searchIndex = data.searchIndex; + var longSearchIndex = data.longSearchIndex; + var info = data.info; + var result = []; + var i = state.from; + var l = searchIndex.length; + var togo = CHUNK_SIZE; + var matchFunc, hltFunc; + + while (state.pass < 4 && state.limit > 0 && togo > 0) { + if (state.pass == 0) { + matchFunc = matchPassBeginning; + hltFunc = highlightQuery; + } else if (state.pass == 1) { + matchFunc = matchPassLongIndex; + hltFunc = highlightQuery; + } else if (state.pass == 2) { + matchFunc = matchPassContains; + hltFunc = highlightQuery; + } else if (state.pass == 3) { + matchFunc = matchPassRegexp; + hltFunc = highlightRegexp; + } + + for (; togo > 0 && i < l && state.limit > 0; i++, togo--) { + if (info[i].n == state.n) continue; + if (matchFunc(searchIndex[i], longSearchIndex[i], queries, regexps)) { + info[i].n = state.n; + result.push(hltFunc(info[i], queries, regexps, highlighters)); + state.limit--; + } + }; + if (searchIndex.length <= i) { + state.pass++; + i = state.from = 0; + } else { + state.from = i; + } + } + return result; + } + + function triggerResults(results, isLast) { + this.handlers.forEach(function(fn) { + fn.call(this, results, isLast) + }); + } +} + diff --git a/doc/js/searcher.js.gz b/doc/js/searcher.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..e13fa4b79512ff4be7185b25e4e0b9500a9cd25b GIT binary patch literal 1688 zcmV;J250#niwFn;F#}!z19N3za${&^axQ9f0NohS~q3bp=Bx>h<-}}1fHzjE~Uy~9hu&mjf z)0{<%l&3L#*aP5eS|#EqqQzruVC$4EGE!CuKbwvBwtIV1Ehs6;&9F~+VV3U^wEl-)CgOXHr#w#u6)wjQ1ygr`3 zIXRswIb)4j*K{Eu=6AL8yR4aT0MZ+`NL`*M|Ex)Qt;eW0oA*o+b18HHXc*;dwKESffH%Bn+L6KIKe97pB z@+03HJzz)j(B1CV$+!?FMH%8DPp;2Cugj7!K2=VVni8f7=n|rR?TnJ}x-U#ZT#m#U_#HaEQa}0t2Ln?qg7eys{E``Smn_l6Cmv&$WTx*VMP020LyN*U z97}+UDhqTPHOxh8h+Zd>C>liPRrll3(X)@|(RutV9>iGU8HPBrMpqajwsL;f zQWQAZq#QG6a6TPqXK$Uw)}YoZZyJSAlvhOU-NllMqCjEC?+ZnMelD_fPVg{EJXrOh z6P-O6&En|ncYGW?i#svGXy-NqTN=xqZS;NI>BJ#R)&uJ2t>)>R*Vy7m4?56=h#nkv zM=`!B=%IspSsf>T*ns7PX7e=xX}D?w6!J&-a@W zn{diAB3ax|J6t(eh2{z0jYBys-H@t4CMU~+zCd2+btR}dx~(((;JH-OsGe2vn=eNv zsuS?Q_B+hVmju^Q9wJr4wtFhPFU7(g~Z zZHq9^Px32LK2IwWnGZ9?s~Orl>DZRFAl+AO^@e;3LgeFgpq$vmbC`D7-Lh)9n^o52 zyLFbYxk8#b(w0ddtgzsuf*zeWz9|wCKML^$j@|}!xQi;&O=XaeLS)5gQ4nshk3;Nb zx>#9_-^@OBbk~#BWyBM)p2{C zVD%&AKNT~te@}a?lZlT6rxmSgelCqIoi<5yn4q27?_(f%g|}!M-Kxz_{`a8m@K$YR z%)JL?k8V|_MvqUb3Q4wRS0`KN*v3=DR`$x4xXbq0lcfE=Z;~3%v4ZI=VZva&#f;^L z1Z6cD2ekGGk(a`yI!Qk82|wI{W(ei literal 0 HcmV?d00001 diff --git a/doc/panel/index.html b/doc/panel/index.html new file mode 100644 index 0000000..204d883 --- /dev/null +++ b/doc/panel/index.html @@ -0,0 +1,47 @@ + + + + search index + + + + + + + + + + + +
+
+ +
+
+
    +
+
+
+
    +
+
+
+ index + + + diff --git a/doc/panel/links.html b/doc/panel/links.html new file mode 100644 index 0000000..ef96d4b --- /dev/null +++ b/doc/panel/links.html @@ -0,0 +1,12 @@ + + File index + + + lib/basic_temperature.rb + + lib/basic_temperature/temperature.rb + + lib/basic_temperature/version.rb + + + diff --git a/doc/panel/tree.js b/doc/panel/tree.js new file mode 100644 index 0000000..2a35864 --- /dev/null +++ b/doc/panel/tree.js @@ -0,0 +1 @@ +var tree = [["","","files",[["","","lib",[["","","basic_temperature",[["temperature.rb","files/lib/basic_temperature/temperature_rb.html","",[]],["version.rb","files/lib/basic_temperature/version_rb.html","",[]]]],["basic_temperature.rb","files/lib/basic_temperature_rb.html","",[]]]]]],["Temperature","classes/BasicTemperature.html"," < Object",[]],["Object","classes/Object.html"," < BasicObject",[]],["Temperature","classes/Temperature.html"," < Object",[]]] \ No newline at end of file