From 6a330990b579f9dd3aeadb9f8a8608ca1488fdfe Mon Sep 17 00:00:00 2001 From: Travis Tilley Date: Fri, 23 Oct 2009 16:41:57 -0400 Subject: [PATCH] sdoc generated documentation --- apple-touch-icon.png | Bin 0 -> 86447 bytes classes/AASM.html | 236 +++++++ classes/AASM/ClassMethods.html | 330 +++++++++ classes/AASM/InvalidTransition.html | 60 ++ classes/AASM/Persistence.html | 121 ++++ .../Persistence/ActiveRecordPersistence.html | 190 ++++++ .../ActiveRecordPersistence/ClassMethods.html | 287 ++++++++ .../InstanceMethods.html | 118 ++++ .../NamedScopeMethods.html | 98 +++ .../ActiveRecordPersistence/ReadState.html | 137 ++++ .../ActiveRecordPersistence/WriteState.html | 123 ++++ .../WriteStateWithoutPersistence.html | 118 ++++ classes/AASM/StateMachine.html | 288 ++++++++ classes/AASM/SupportingClasses.html | 69 ++ classes/AASM/SupportingClasses/Event.html | 451 +++++++++++++ classes/AASM/SupportingClasses/State.html | 318 +++++++++ .../SupportingClasses/StateTransition.html | 288 ++++++++ classes/AASM/UndefinedState.html | 60 ++ created.rid | 1 + css/main.css | 263 ++++++++ css/panel.css | 383 +++++++++++ css/reset.css | 53 ++ favicon.ico | Bin 0 -> 1150 bytes files/README_rdoc.html | 204 ++++++ files/lib/aasm/aasm_rb.html | 59 ++ files/lib/aasm/event_rb.html | 59 ++ .../active_record_persistence_rb.html | 59 ++ files/lib/aasm/persistence_rb.html | 59 ++ files/lib/aasm/state_machine_rb.html | 66 ++ files/lib/aasm/state_rb.html | 59 ++ files/lib/aasm/state_transition_rb.html | 59 ++ files/lib/aasm_rb.html | 52 ++ i/arrows.png | Bin 0 -> 477 bytes i/results_bg.png | Bin 0 -> 696 bytes i/tree_bg.png | Bin 0 -> 207 bytes index.html | 16 +- js/jquery-1.3.2.min.js | 19 + js/jquery-effect.js | 593 +++++++++++++++++ js/main.js | 22 + js/searchdoc.js | 628 ++++++++++++++++++ panel/index.html | 71 ++ panel/search_index.js | 1 + panel/tree.js | 1 + 43 files changed, 6018 insertions(+), 1 deletion(-) create mode 100644 apple-touch-icon.png create mode 100644 classes/AASM.html create mode 100644 classes/AASM/ClassMethods.html create mode 100644 classes/AASM/InvalidTransition.html create mode 100644 classes/AASM/Persistence.html create mode 100644 classes/AASM/Persistence/ActiveRecordPersistence.html create mode 100644 classes/AASM/Persistence/ActiveRecordPersistence/ClassMethods.html create mode 100644 classes/AASM/Persistence/ActiveRecordPersistence/InstanceMethods.html create mode 100644 classes/AASM/Persistence/ActiveRecordPersistence/NamedScopeMethods.html create mode 100644 classes/AASM/Persistence/ActiveRecordPersistence/ReadState.html create mode 100644 classes/AASM/Persistence/ActiveRecordPersistence/WriteState.html create mode 100644 classes/AASM/Persistence/ActiveRecordPersistence/WriteStateWithoutPersistence.html create mode 100644 classes/AASM/StateMachine.html create mode 100644 classes/AASM/SupportingClasses.html create mode 100644 classes/AASM/SupportingClasses/Event.html create mode 100644 classes/AASM/SupportingClasses/State.html create mode 100644 classes/AASM/SupportingClasses/StateTransition.html create mode 100644 classes/AASM/UndefinedState.html create mode 100644 created.rid create mode 100755 css/main.css create mode 100755 css/panel.css create mode 100755 css/reset.css create mode 100644 favicon.ico create mode 100644 files/README_rdoc.html create mode 100644 files/lib/aasm/aasm_rb.html create mode 100644 files/lib/aasm/event_rb.html create mode 100644 files/lib/aasm/persistence/active_record_persistence_rb.html create mode 100644 files/lib/aasm/persistence_rb.html create mode 100644 files/lib/aasm/state_machine_rb.html create mode 100644 files/lib/aasm/state_rb.html create mode 100644 files/lib/aasm/state_transition_rb.html create mode 100644 files/lib/aasm_rb.html create mode 100755 i/arrows.png create mode 100755 i/results_bg.png create mode 100755 i/tree_bg.png create mode 100755 js/jquery-1.3.2.min.js create mode 100644 js/jquery-effect.js create mode 100755 js/main.js create mode 100755 js/searchdoc.js create mode 100755 panel/index.html create mode 100644 panel/search_index.js create mode 100644 panel/tree.js diff --git a/apple-touch-icon.png b/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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 + + + + AASM + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
A
+
+ +
+ +
+ + + + + + + +
Classes and Modules
+ + + + + + + + +
Instance Public methods
+ +
+
+ + aasm_current_state() + +
+ +
+

+Instance methods +

+ +
+ + + + +
+ +
+
# File lib/aasm/aasm.rb, line 80
+  def aasm_current_state
+    return @aasm_current_state if @aasm_current_state
+
+    if self.respond_to?(:aasm_read_state) || self.private_methods.include?('aasm_read_state')
+      @aasm_current_state = aasm_read_state
+    end
+    return @aasm_current_state if @aasm_current_state
+
+    aasm_enter_initial_state
+  end
+
+
+ +
+ +
+
+ + aasm_enter_initial_state() + +
+ + + + +
+ +
+
# File lib/aasm/aasm.rb, line 91
+  def aasm_enter_initial_state
+    state_name = aasm_determine_state_name(self.class.aasm_initial_state)
+    state = aasm_state_object_for_state(state_name)
+
+    state.call_action(:before_enter, self)
+    state.call_action(:enter, self)
+    self.aasm_current_state = state_name
+    state.call_action(:after_enter, self)
+
+    state_name
+  end
+
+
+ +
+ +
+
+ + aasm_events_for_current_state() + +
+ + + + +
+ +
+
# File lib/aasm/aasm.rb, line 103
+  def aasm_events_for_current_state
+    aasm_events_for_state(aasm_current_state)
+  end
+
+
+ +
+ +
+
+ + aasm_events_for_state(state) + +
+ + + + +
+ +
+
# File lib/aasm/aasm.rb, line 107
+  def aasm_events_for_state(state)
+    events = self.class.aasm_events.values.select {|event| event.transitions_from_state?(state) }
+    events.map {|event| event.name}
+  end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/AASM/ClassMethods.html b/classes/AASM/ClassMethods.html new file mode 100644 index 00000000..6c3c662d --- /dev/null +++ b/classes/AASM/ClassMethods.html @@ -0,0 +1,330 @@ + + + + + AASM::ClassMethods + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
A
+
+ +
+ +
I
+
+ +
+ +
+ + + + + + + + + + + + + +
Instance Public methods
+ +
+
+ + aasm_event(name, options = {}, &block) + +
+ + + + +
+ +
+
# File lib/aasm/aasm.rb, line 49
+    def aasm_event(name, options = {}, &block)
+      sm = AASM::StateMachine[self]
+
+      unless sm.events.has_key?(name)
+        sm.events[name] = AASM::SupportingClasses::Event.new(name, options, &block)
+      end
+
+      define_method("#{name.to_s}!") do |*args|
+        aasm_fire_event(name, true, *args)
+      end
+
+      define_method("#{name.to_s}") do |*args|
+        aasm_fire_event(name, false, *args)
+      end
+    end
+
+
+ +
+ +
+
+ + aasm_events() + +
+ + + + +
+ +
+
# File lib/aasm/aasm.rb, line 69
+    def aasm_events
+      AASM::StateMachine[self].events
+    end
+
+
+ +
+ +
+
+ + aasm_initial_state(set_state=nil) + +
+ + + + +
+ +
+
# File lib/aasm/aasm.rb, line 27
+    def aasm_initial_state(set_state=nil)
+      if set_state
+        AASM::StateMachine[self].initial_state = set_state
+      else
+        AASM::StateMachine[self].initial_state
+      end
+    end
+
+
+ +
+ +
+
+ + aasm_initial_state=(state) + +
+ + + + +
+ +
+
# File lib/aasm/aasm.rb, line 35
+    def aasm_initial_state=(state)
+      AASM::StateMachine[self].initial_state = state
+    end
+
+
+ +
+ +
+
+ + aasm_state(name, options={}) + +
+ + + + +
+ +
+
# File lib/aasm/aasm.rb, line 39
+    def aasm_state(name, options={})
+      sm = AASM::StateMachine[self]
+      sm.create_state(name, options)
+      sm.initial_state = name unless sm.initial_state
+
+      define_method("#{name.to_s}?") do
+        aasm_current_state == name
+      end
+    end
+
+
+ +
+ +
+
+ + aasm_states() + +
+ + + + +
+ +
+
# File lib/aasm/aasm.rb, line 65
+    def aasm_states
+      AASM::StateMachine[self].states
+    end
+
+
+ +
+ +
+
+ + aasm_states_for_select() + +
+ + + + +
+ +
+
# File lib/aasm/aasm.rb, line 73
+    def aasm_states_for_select
+      AASM::StateMachine[self].states.map { |state| state.for_select }
+    end
+
+
+ +
+ +
+
+ + inherited(klass) + +
+ + + + +
+ +
+
# File lib/aasm/aasm.rb, line 22
+    def inherited(klass)
+      AASM::StateMachine[klass] = AASM::StateMachine[self].clone
+      super
+    end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/AASM/InvalidTransition.html b/classes/AASM/InvalidTransition.html new file mode 100644 index 00000000..40e44420 --- /dev/null +++ b/classes/AASM/InvalidTransition.html @@ -0,0 +1,60 @@ + + + + + AASM::InvalidTransition + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + \ No newline at end of file diff --git a/classes/AASM/Persistence.html b/classes/AASM/Persistence.html new file mode 100644 index 00000000..468469c9 --- /dev/null +++ b/classes/AASM/Persistence.html @@ -0,0 +1,121 @@ + + + + + AASM::Persistence + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
S
+
+ +
+ +
+ + + + + + + +
Classes and Modules
+ + + + + + + + +
Class Public methods
+ +
+
+ + set_persistence(base) + +
+ +
+

+Checks to see this class or any of it’s superclasses inherit from +ActiveRecord::Base and if so includes ActiveRecordPersistence +

+ +
+ + + + +
+ +
+
# File lib/aasm/persistence.rb, line 6
+    def self.set_persistence(base)
+      # Use a fancier auto-loading thingy, perhaps.  When there are more persistence engines.
+      hierarchy = base.ancestors.map {|klass| klass.to_s}
+
+      if hierarchy.include?("ActiveRecord::Base")
+        require File.join(File.dirname(__FILE__), 'persistence', 'active_record_persistence')
+        base.send(:include, AASM::Persistence::ActiveRecordPersistence)
+      end
+    end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/AASM/Persistence/ActiveRecordPersistence.html b/classes/AASM/Persistence/ActiveRecordPersistence.html new file mode 100644 index 00000000..9bd76af5 --- /dev/null +++ b/classes/AASM/Persistence/ActiveRecordPersistence.html @@ -0,0 +1,190 @@ + + + + + AASM::Persistence::ActiveRecordPersistence + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
I
+
+ +
+ +
+ + + + + + + +
Classes and Modules
+ + + + + + + + +
Class Public methods
+ +
+
+ + included(base) + +
+ +
+

+This method: +

+ +

+Unless the corresponding methods are already defined, it includes +

+ +

+Adds +

+
+  before_validation_on_create :aasm_ensure_initial_state
+
+

+As a result, it doesn’t matter when you define your methods - the +following 2 are equivalent +

+
+  class Foo < ActiveRecord::Base
+    def aasm_write_state(state)
+      "bar"
+    end
+    include AASM
+  end
+
+  class Foo < ActiveRecord::Base
+    include AASM
+    def aasm_write_state(state)
+      "bar"
+    end
+  end
+
+ +
+ + + + +
+ +
+
# File lib/aasm/persistence/active_record_persistence.rb, line 34
+      def self.included(base)
+        base.extend AASM::Persistence::ActiveRecordPersistence::ClassMethods
+        base.send(:include, AASM::Persistence::ActiveRecordPersistence::InstanceMethods)
+        base.send(:include, AASM::Persistence::ActiveRecordPersistence::ReadState) unless base.method_defined?(:aasm_read_state)
+        base.send(:include, AASM::Persistence::ActiveRecordPersistence::WriteState) unless base.method_defined?(:aasm_write_state)
+        base.send(:include, AASM::Persistence::ActiveRecordPersistence::WriteStateWithoutPersistence) unless base.method_defined?(:aasm_write_state_without_persistence)
+
+        if base.respond_to?(:named_scope)
+          base.extend(AASM::Persistence::ActiveRecordPersistence::NamedScopeMethods)
+
+          base.class_eval do
+            class << self
+              unless method_defined?(:aasm_state_without_named_scope)
+                alias_method :aasm_state_without_named_scope, :aasm_state
+                alias_method :aasm_state, :aasm_state_with_named_scope
+              end
+            end
+          end
+        end
+
+        base.before_validation_on_create :aasm_ensure_initial_state
+      end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/AASM/Persistence/ActiveRecordPersistence/ClassMethods.html b/classes/AASM/Persistence/ActiveRecordPersistence/ClassMethods.html new file mode 100644 index 00000000..2443a7e9 --- /dev/null +++ b/classes/AASM/Persistence/ActiveRecordPersistence/ClassMethods.html @@ -0,0 +1,287 @@ + + + + + AASM::Persistence::ActiveRecordPersistence::ClassMethods + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
A
+
+ +
+ +
C
+
+ +
+ +
F
+
+ +
+ +
W
+
+ +
+ +
+ + + + + + + + + + + + + +
Instance Public methods
+ +
+
+ + aasm_column(column_name=nil) + +
+ +
+

+Maps to the aasm_column in the +database. Deafults to “aasm_state“. You can write: +

+
+  create_table :foos do |t|
+    t.string :name
+    t.string :aasm_state
+  end
+
+  class Foo < ActiveRecord::Base
+    include AASM
+  end
+
+

+OR: +

+
+  create_table :foos do |t|
+    t.string :name
+    t.string :status
+  end
+
+  class Foo < ActiveRecord::Base
+    include AASM
+    aasm_column :status
+  end
+
+

+This method is both a getter and a setter +

+ +
+ + + + +
+ +
+
# File lib/aasm/persistence/active_record_persistence.rb, line 82
+        def aasm_column(column_name=nil)
+          if column_name
+            AASM::StateMachine[self].config.column = column_name.to_sym
+            # @aasm_column = column_name.to_sym
+          else
+            AASM::StateMachine[self].config.column ||= :aasm_state
+            # @aasm_column ||= :aasm_state
+          end
+          # @aasm_column
+          AASM::StateMachine[self].config.column
+        end
+
+
+ +
+ +
+
+ + calculate_in_state(state, *args) + +
+ + + + +
+ +
+
# File lib/aasm/persistence/active_record_persistence.rb, line 106
+        def calculate_in_state(state, *args)
+          with_state_scope state do
+            calculate(*args)
+          end
+        end
+
+
+ +
+ +
+
+ + count_in_state(state, *args) + +
+ + + + +
+ +
+
# File lib/aasm/persistence/active_record_persistence.rb, line 100
+        def count_in_state(state, *args)
+          with_state_scope state do
+            count(*args)
+          end
+        end
+
+
+ +
+ +
+
+ + find_in_state(number, state, *args) + +
+ + + + +
+ +
+
# File lib/aasm/persistence/active_record_persistence.rb, line 94
+        def find_in_state(number, state, *args)
+          with_state_scope state do
+            find(number, *args)
+          end
+        end
+
+
+ +
+ +
Instance Protected methods
+ +
+
+ + with_state_scope(state) + +
+ + + + +
+ +
+
# File lib/aasm/persistence/active_record_persistence.rb, line 113
+        def with_state_scope(state)
+          with_scope :find => {:conditions => ["#{table_name}.#{aasm_column} = ?", state.to_s]} do
+            yield if block_given?
+          end
+        end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/AASM/Persistence/ActiveRecordPersistence/InstanceMethods.html b/classes/AASM/Persistence/ActiveRecordPersistence/InstanceMethods.html new file mode 100644 index 00000000..07e1e107 --- /dev/null +++ b/classes/AASM/Persistence/ActiveRecordPersistence/InstanceMethods.html @@ -0,0 +1,118 @@ + + + + + AASM::Persistence::ActiveRecordPersistence::InstanceMethods + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
A
+
+ +
+ +
+ + + + + + + + + + + + + +
Instance Public methods
+ +
+
+ + aasm_current_state() + +
+ +
+

+Returns the current aasm_state of the object. Respects reload and any +changes made to the aasm_state field directly +

+

+Internally just calls aasm_read_state +

+
+  foo = Foo.find(1)
+  foo.aasm_current_state # => :pending
+  foo.aasm_state = "opened"
+  foo.aasm_current_state # => :opened
+  foo.close # => calls aasm_write_state_without_persistence
+  foo.aasm_current_state # => :closed
+  foo.reload
+  foo.aasm_current_state # => :pending
+
+ +
+ + + + +
+ +
+
# File lib/aasm/persistence/active_record_persistence.rb, line 136
+        def aasm_current_state
+          @current_state = aasm_read_state
+        end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/AASM/Persistence/ActiveRecordPersistence/NamedScopeMethods.html b/classes/AASM/Persistence/ActiveRecordPersistence/NamedScopeMethods.html new file mode 100644 index 00000000..05e3fb8a --- /dev/null +++ b/classes/AASM/Persistence/ActiveRecordPersistence/NamedScopeMethods.html @@ -0,0 +1,98 @@ + + + + + AASM::Persistence::ActiveRecordPersistence::NamedScopeMethods + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
A
+
+ +
+ +
+ + + + + + + + + + + + + +
Instance Public methods
+ +
+
+ + aasm_state_with_named_scope(name, options = {}) + +
+ + + + +
+ +
+
# File lib/aasm/persistence/active_record_persistence.rb, line 241
+        def aasm_state_with_named_scope name, options = {}
+          aasm_state_without_named_scope name, options
+          self.named_scope name, :conditions => { "#{table_name}.#{self.aasm_column}" => name.to_s} unless self.respond_to?(name)
+        end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/AASM/Persistence/ActiveRecordPersistence/ReadState.html b/classes/AASM/Persistence/ActiveRecordPersistence/ReadState.html new file mode 100644 index 00000000..45029493 --- /dev/null +++ b/classes/AASM/Persistence/ActiveRecordPersistence/ReadState.html @@ -0,0 +1,137 @@ + + + + + AASM::Persistence::ActiveRecordPersistence::ReadState + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
A
+
+ +
+ +
+ + + + + + + + + + + + + +
Instance Public methods
+ +
+
+ + aasm_read_state() + +
+ +
+

+Returns the value of the aasm_column - called from +aasm_current_state +

+

+If it’s a new record, and the aasm state column is blank it returns +the initial state: +

+
+  class Foo < ActiveRecord::Base
+    include AASM
+    aasm_column :status
+    aasm_state :opened
+    aasm_state :closed
+  end
+
+  foo = Foo.new
+  foo.current_state # => :opened
+  foo.close
+  foo.current_state # => :closed
+
+  foo = Foo.find(1)
+  foo.current_state # => :opened
+  foo.aasm_state = nil
+  foo.current_state # => nil
+
+

+NOTE: intended to be called from an event +

+

+This allows for nil aasm states - be sure to add validation to your model +

+ +
+ + + + +
+ +
+
# File lib/aasm/persistence/active_record_persistence.rb, line 231
+        def aasm_read_state
+          if new_record?
+            send(self.class.aasm_column).blank? ? aasm_determine_state_name(self.class.aasm_initial_state) : send(self.class.aasm_column).to_sym
+          else
+            send(self.class.aasm_column).nil? ? nil : send(self.class.aasm_column).to_sym
+          end
+        end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/AASM/Persistence/ActiveRecordPersistence/WriteState.html b/classes/AASM/Persistence/ActiveRecordPersistence/WriteState.html new file mode 100644 index 00000000..7d18004e --- /dev/null +++ b/classes/AASM/Persistence/ActiveRecordPersistence/WriteState.html @@ -0,0 +1,123 @@ + + + + + AASM::Persistence::ActiveRecordPersistence::WriteState + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
A
+
+ +
+ +
+ + + + + + + + + + + + + +
Instance Public methods
+ +
+
+ + aasm_write_state(state) + +
+ +
+

+Writes state to the state column and persists it to the database +using update_attribute (which bypasses validation) +

+
+  foo = Foo.find(1)
+  foo.aasm_current_state # => :opened
+  foo.close!
+  foo.aasm_current_state # => :closed
+  Foo.find(1).aasm_current_state # => :closed
+
+

+NOTE: intended to be called from an event +

+ +
+ + + + +
+ +
+
# File lib/aasm/persistence/active_record_persistence.rb, line 192
+        def aasm_write_state(state)
+          old_value = read_attribute(self.class.aasm_column)
+          write_attribute(self.class.aasm_column, state.to_s)
+
+          unless self.save(false)
+            write_attribute(self.class.aasm_column, old_value)
+            return false
+          end
+
+          true
+        end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/AASM/Persistence/ActiveRecordPersistence/WriteStateWithoutPersistence.html b/classes/AASM/Persistence/ActiveRecordPersistence/WriteStateWithoutPersistence.html new file mode 100644 index 00000000..f0060008 --- /dev/null +++ b/classes/AASM/Persistence/ActiveRecordPersistence/WriteStateWithoutPersistence.html @@ -0,0 +1,118 @@ + + + + + AASM::Persistence::ActiveRecordPersistence::WriteStateWithoutPersistence + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
A
+
+ +
+ +
+ + + + + + + + + + + + + +
Instance Public methods
+ +
+
+ + aasm_write_state_without_persistence(state) + +
+ +
+

+Writes state to the state column, but does not persist it to the +database +

+
+  foo = Foo.find(1)
+  foo.aasm_current_state # => :opened
+  foo.close
+  foo.aasm_current_state # => :closed
+  Foo.find(1).aasm_current_state # => :opened
+  foo.save
+  foo.aasm_current_state # => :closed
+  Foo.find(1).aasm_current_state # => :closed
+
+

+NOTE: intended to be called from an event +

+ +
+ + + + +
+ +
+
# File lib/aasm/persistence/active_record_persistence.rb, line 176
+        def aasm_write_state_without_persistence(state)
+          write_attribute(self.class.aasm_column, state.to_s)
+        end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/AASM/StateMachine.html b/classes/AASM/StateMachine.html new file mode 100644 index 00000000..464c00be --- /dev/null +++ b/classes/AASM/StateMachine.html @@ -0,0 +1,288 @@ + + + + + AASM::StateMachine + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
#
+
+ +
+ +
C
+
+ +
+ +
N
+
+ +
+ +
+ + + + + + + + + + + +
Attributes
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ [RW] + states
+ [RW] + events
+ [RW] + initial_state
+ [RW] + config
+ [R] + name
+ + + +
Class Public methods
+ +
+
+ + [](*args) + +
+ + + + +
+ +
+
# File lib/aasm/state_machine.rb, line 5
+    def self.[](*args)
+      (@machines ||= {})[args]
+    end
+
+
+ +
+ +
+
+ + []=(*args) + +
+ + + + +
+ +
+
# File lib/aasm/state_machine.rb, line 9
+    def self.[]=(*args)
+      val = args.pop
+      (@machines ||= {})[args] = val
+    end
+
+
+ +
+ +
+
+ + new(name) + +
+ + + + +
+ +
+
# File lib/aasm/state_machine.rb, line 17
+    def initialize(name)
+      @name = name
+      @initial_state = nil
+      @states = []
+      @events = {}
+      @config = OpenStruct.new
+    end
+
+
+ +
+ +
Instance Public methods
+ +
+
+ + clone() + +
+ + + + +
+ +
+
# File lib/aasm/state_machine.rb, line 25
+    def clone
+      klone = super
+      klone.states = states.clone
+      klone.events = events.clone
+      klone
+    end
+
+
+ +
+ +
+
+ + create_state(name, options) + +
+ + + + +
+ +
+
# File lib/aasm/state_machine.rb, line 32
+    def create_state(name, options)
+      @states << AASM::SupportingClasses::State.new(name, options) unless @states.include?(name)
+    end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/AASM/SupportingClasses.html b/classes/AASM/SupportingClasses.html new file mode 100644 index 00000000..f9b35734 --- /dev/null +++ b/classes/AASM/SupportingClasses.html @@ -0,0 +1,69 @@ + + + + + AASM::SupportingClasses + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
Classes and Modules
+ + + + + + + + +
+
+ + \ No newline at end of file diff --git a/classes/AASM/SupportingClasses/Event.html b/classes/AASM/SupportingClasses/Event.html new file mode 100644 index 00000000..dc74aa2e --- /dev/null +++ b/classes/AASM/SupportingClasses/Event.html @@ -0,0 +1,451 @@ + + + + + AASM::SupportingClasses::Event + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
#
+
+
    + +
  • ==
  • + +
+
+ +
A
+
+ +
+ +
C
+
+ +
+ +
E
+
+ +
+ +
F
+
+ +
+ +
N
+
+ +
+ +
T
+
+ +
+ +
U
+
+ +
+ +
+ + + + + + + + + + + +
Attributes
+ + + + + + + + + + + + + + + + + + + + +
+ [R] + name
+ [R] + success
+ [R] + options
+ + + +
Class Public methods
+ +
+
+ + new(name, options = {}, &block) + +
+ + + + +
+ +
+
# File lib/aasm/event.rb, line 8
+      def initialize(name, options = {}, &block)
+        @name = name
+        @transitions = []
+        update(options, &block)
+      end
+
+
+ +
+ +
Instance Public methods
+ +
+
+ + ==(event) + +
+ + + + +
+ +
+
# File lib/aasm/event.rb, line 49
+      def ==(event)
+        if event.is_a? Symbol
+          name == event
+        else
+          name == event.name
+        end
+      end
+
+
+ +
+ +
+
+ + all_transitions() + +
+ + + + +
+ +
+
# File lib/aasm/event.rb, line 38
+      def all_transitions
+        @transitions
+      end
+
+
+ +
+ +
+
+ + call_action(action, record) + +
+ + + + +
+ +
+
# File lib/aasm/event.rb, line 42
+      def call_action(action, record)
+        action = @options[action]
+        action.is_a?(Array) ?
+                action.each {|a| _call_action(a, record)} :
+                _call_action(action, record)
+      end
+
+
+ +
+ +
+
+ + execute_success_callback(obj, success = nil) + +
+ + + + +
+ +
+
# File lib/aasm/event.rb, line 68
+      def execute_success_callback(obj, success = nil)
+        callback = success || @success
+        case(callback)
+          when String, Symbol
+            obj.send(callback)
+          when Proc
+            callback.call(obj)
+          when Array
+            callback.each{|meth|self.execute_success_callback(obj, meth)}
+        end
+      end
+
+
+ +
+ +
+
+ + fire(obj, to_state=nil, *args) + +
+ + + + +
+ +
+
# File lib/aasm/event.rb, line 14
+      def fire(obj, to_state=nil, *args)
+        transitions = @transitions.select { |t| t.from == obj.aasm_current_state }
+        raise AASM::InvalidTransition, "Event '#{name}' cannot transition from '#{obj.aasm_current_state}'" if transitions.size == 0
+
+        next_state = nil
+        transitions.each do |transition|
+          next if to_state and !Array(transition.to).include?(to_state)
+          if transition.perform(obj)
+            next_state = to_state || Array(transition.to).first
+            transition.execute(obj, *args)
+            break
+          end
+        end
+        next_state
+      end
+
+
+ +
+ +
+
+ + transitions_from_state(state) + +
+ + + + +
+ +
+
# File lib/aasm/event.rb, line 34
+      def transitions_from_state(state)
+        @transitions.select { |t| t.from == state }
+      end
+
+
+ +
+ +
+
+ + transitions_from_state?(state) + +
+ + + + +
+ +
+
# File lib/aasm/event.rb, line 30
+      def transitions_from_state?(state)
+        @transitions.any? { |t| t.from == state }
+      end
+
+
+ +
+ +
+
+ + update(options = {}, &block) + +
+ + + + +
+ +
+
# File lib/aasm/event.rb, line 57
+      def update(options = {}, &block)
+        if options.key?(:success) then
+          @success = options[:success]
+        end
+        if block then
+          instance_eval(&block)
+        end
+        @options = options
+        self
+      end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/AASM/SupportingClasses/State.html b/classes/AASM/SupportingClasses/State.html new file mode 100644 index 00000000..0f1a4505 --- /dev/null +++ b/classes/AASM/SupportingClasses/State.html @@ -0,0 +1,318 @@ + + + + + AASM::SupportingClasses::State + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
#
+
+
    + +
  • ==
  • + +
+
+ +
C
+
+ +
+ +
D
+
+ +
+ +
F
+
+ +
+ +
N
+
+ +
+ +
U
+
+ +
+ +
+ + + + + + + + + + + +
Attributes
+ + + + + + + + + + + + + + +
+ [R] + name
+ [R] + options
+ + + +
Class Public methods
+ +
+
+ + new(name, options={}) + +
+ + + + +
+ +
+
# File lib/aasm/state.rb, line 6
+      def initialize(name, options={})
+        @name = name
+        update(options)
+      end
+
+
+ +
+ +
Instance Public methods
+ +
+
+ + ==(state) + +
+ + + + +
+ +
+
# File lib/aasm/state.rb, line 11
+      def ==(state)
+        if state.is_a? Symbol
+          name == state
+        else
+          name == state.name
+        end
+      end
+
+
+ +
+ +
+
+ + call_action(action, record) + +
+ + + + +
+ +
+
# File lib/aasm/state.rb, line 19
+      def call_action(action, record)
+        action = @options[action]
+        action.is_a?(Array) ?
+                action.each {|a| _call_action(a, record)} :
+                _call_action(action, record)
+      end
+
+
+ +
+ +
+
+ + display_name() + +
+ + + + +
+ +
+
# File lib/aasm/state.rb, line 26
+      def display_name
+        @display_name ||= name.to_s.gsub(/_/, ' ').capitalize
+      end
+
+
+ +
+ +
+
+ + for_select() + +
+ + + + +
+ +
+
# File lib/aasm/state.rb, line 30
+      def for_select
+        [display_name, name.to_s]
+      end
+
+
+ +
+ +
+
+ + update(options = {}) + +
+ + + + +
+ +
+
# File lib/aasm/state.rb, line 34
+      def update(options = {})
+        if options.key?(:display) then
+          @display_name = options.delete(:display)
+        end
+        @options = options
+        self
+      end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/AASM/SupportingClasses/StateTransition.html b/classes/AASM/SupportingClasses/StateTransition.html new file mode 100644 index 00000000..f5234c0b --- /dev/null +++ b/classes/AASM/SupportingClasses/StateTransition.html @@ -0,0 +1,288 @@ + + + + + AASM::SupportingClasses::StateTransition + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
#
+
+
    + +
  • ==
  • + +
+
+ +
E
+
+ +
+ +
F
+
+ +
+ +
N
+
+ +
+ +
P
+
+ +
+ +
+ + + + + + + + + + + +
Attributes
+ + + + + + + + + + + + + + + + + + + + +
+ [R] + from
+ [R] + to
+ [R] + opts
+ + + +
Class Public methods
+ +
+
+ + new(opts) + +
+ + + + +
+ +
+
# File lib/aasm/state_transition.rb, line 7
+      def initialize(opts)
+        @from, @to, @guard, @on_transition = opts[:from], opts[:to], opts[:guard], opts[:on_transition]
+        @opts = opts
+      end
+
+
+ +
+ +
Instance Public methods
+ +
+
+ + ==(obj) + +
+ + + + +
+ +
+
# File lib/aasm/state_transition.rb, line 29
+      def ==(obj)
+        @from == obj.from && @to == obj.to
+      end
+
+
+ +
+ +
+
+ + execute(obj, *args) + +
+ + + + +
+ +
+
# File lib/aasm/state_transition.rb, line 23
+      def execute(obj, *args)
+        @on_transition.is_a?(Array) ?
+                @on_transition.each {|ot| _execute(obj, ot, *args)} :
+                _execute(obj, @on_transition, *args)
+      end
+
+
+ +
+ +
+
+ + from?(value) + +
+ + + + +
+ +
+
# File lib/aasm/state_transition.rb, line 33
+      def from?(value)
+        @from == value
+      end
+
+
+ +
+ +
+
+ + perform(obj) + +
+ + + + +
+ +
+
# File lib/aasm/state_transition.rb, line 12
+      def perform(obj)
+        case @guard
+          when Symbol, String
+            obj.send(@guard)
+          when Proc
+            @guard.call(obj)
+          else
+            true
+        end
+      end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/AASM/UndefinedState.html b/classes/AASM/UndefinedState.html new file mode 100644 index 00000000..8dadba4f --- /dev/null +++ b/classes/AASM/UndefinedState.html @@ -0,0 +1,60 @@ + + + + + AASM::UndefinedState + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + \ No newline at end of file diff --git a/created.rid b/created.rid new file mode 100644 index 00000000..1337e84c --- /dev/null +++ b/created.rid @@ -0,0 +1 @@ +Fri, 23 Oct 2009 16:40:51 -0400 diff --git a/css/main.css b/css/main.css new file mode 100755 index 00000000..e2209386 --- /dev/null +++ b/css/main.css @@ -0,0 +1,263 @@ +body { + font-family: "Helvetica Neue", Arial, sans-serif; + background: #FFF; + color: #000; + margin: 0px; + font-size: 0.82em; + line-height: 1.25em; +} + +a { + color: #00F; + text-decoration: none; +} + +a:hover { + color: #333; + background: #FE8; +} + +p { + margin-bottom: 1em; +} + +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; +} + +.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: #EDF3FE; + border-bottom: 1px solid #ccc; + padding: 1em 2em 0.5em 2em; +} +.banner h1 +{ + font-size: 1.2em; + margin: 0; +} + +.banner h1 .type +{ + font-size: 0.833em; + display:block; +} + +.banner h1 .type, +.banner h1 .parent +{ + color: #666; +} + +.banner ul +{ + margin-top: 0.3em; + margin-bottom: 0; + font-size: 0.85em; +} + +.banner li +{ + list-style: none; + margin-left: 0; + margin-bottom: 0; +} + +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; +} + + +.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; +} + +.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; + border: #ffe0bb dotted 1px; + background: #fffde8; +} + +.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 .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; +} + +.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; +} \ No newline at end of file diff --git a/css/panel.css b/css/panel.css new file mode 100755 index 00000000..5390c923 --- /dev/null +++ b/css/panel.css @@ -0,0 +1,383 @@ +/* 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; + //zoom: 1; + } + + .panel_tree .results, + .panel_results .tree + { + display: none; + } + + /* Header with search box (begin) */ + .panel .header + { + width: 100%; + height: 29px; + border-bottom: 1px solid #666; + position: relative; + left: 0; top: 0; + background: #e8e8e8; + } + + .panel .header div + { + margin: 0 7px; + } + .panel .header table + { + height: 29px; + width: 100%; + } + + .panel .header table td + { + vertical-align: middle; + text-align: middle; + } + + .panel .header label + { + position: absolute; + font-size: 12px; + line-height: 29px; + margin-left: 3px; + color: #999; + cursor: text; + } + + .panel .header table input + { + width: 100%; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + display: inline-block; + -webkit-appearance: searchfield; + height: 22px; + //height: auto; + } + + /* Header with search box (end) */ + + + /* Results (begin) */ + .panel .result + { + position: absolute; + top: 30px; + bottom: 0; + left: 0; + width: 100%; + //height: expression((this.parentNode.offsetHeight - 31)); + overflow-y: scroll; + overflow-x: hidden; + -overflow-y: hidden; + background: #EDF3FE url(../i/results_bg.png); + z-index: 2; + //zoom:1; + } + + .panel .result ul + { + font-size: 0.8em; + width: 100%; + background: #EDF3FE url(../i/results_bg.png); + //zoom:1; + } + + .panel .result ul li + { + height: 46px; + -height: 50px; + //display: inline; + //width: 100%; + //zoom: 1; + overflow: hidden; + padding: 4px 10px 0 10px; + cursor: pointer; + } + + .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: #999; + } + + .panel .result ul li b + { + color: #000; + } + + .panel .result ul li.current + { + background: #3875D7; + } + + .panel .result ul li.current h1, + .panel .result ul li.current p + { + color: #DDD; + } + + .panel .result ul li.current h1 i, + .panel .result ul li.current p.snippet + { + color: #AAA; + } + + .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: #2965C0; + } + + .panel .result ul li .badge + { + margin-right: 0.4em; + margin-left: -0.2em; + padding: 0 0.2em; + color: #000; + } + + .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 + { + position: absolute; + top: 30px; + bottom: 0; + left: 0; + width: 100%; + //zoom: 1; + //height: expression((this.parentNode.offsetHeight - 31)); + overflow-y: scroll; + overflow-x: hidden; + -overflow-y: hidden; + background: #EDF3FE url(../i/tree_bg.png); + z-index: 30; + } + + .panel .tree ul + { + background: #EDF3FE url(../i/tree_bg.png); + } + + .panel .tree li + { + cursor: pointer; + overflow: hidden; + //height: 23px; + //display: inline; + //zoom: 1; + //width: 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/arrows.png); + background-position: 0 -9px; + position: absolute; + left: 1px; + top: 8px; + cursor: default; + } + + .panel .tree li.closed .icon + { + background-position: 0 0; + } + + .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.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: #3875D7; + } + + .panel .tree ul li.current .icon + { + background-position: -10px -9px; + } + + .panel .tree ul li.current.closed .icon + { + background-position: -10px 0; + } + + .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: #2965C0; + } + + .panel .tree .stopper + { + display: none; + } + /* Tree (end) */ /**/ + +/* Panel (end) */ \ No newline at end of file diff --git a/css/reset.css b/css/reset.css new file mode 100755 index 00000000..13f8e0a1 --- /dev/null +++ b/css/reset.css @@ -0,0 +1,53 @@ +/* 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 define focus styles! */ +:focus { + outline: 0; +} + +/* 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/favicon.ico b/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 + + + + README.rdoc + + + + + + + + + + + +
+
+ +
+

AASM - Ruby state machines

+

+This package contains AASM, a library +for adding finite state machines to Ruby classes. +

+

+AASM started as the +acts_as_state_machine plugin but has evolved into a more generic library +that no longer targets only ActiveRecord models. +

+

+AASM has the following features: +

+
    +
  • States + +
  • +
  • Machines + +
  • +
  • Events + +
  • +
  • Transitions + +
  • +
+

New Callbacks

+

+The callback chain & order on a successful event looks like: +

+
+  oldstate:exit*
+  event:before
+  __find transition, if possible__
+  transition:on_transition*
+  oldstate:before_exit
+  newstate:before_enter
+  newstate:enter*
+  __update state__
+  event:success*
+  oldstate:after_exit
+  newstate:after_enter
+  event:after
+  obj:aasm_event_fired*
+
+  (*) marks old callbacks
+
+

Download

+

+The latest AASM can currently be pulled +from the git repository on github. +

+ +

Installation

+

From gemcutter

+
+  % sudo gem install gemcutter
+  % sudo gem tumble
+  % sudo gem install aasm
+
+

From GitHub hosted gems (only older releases are available)

+
+  % sudo gem sources -a http://gems.github.com # (you only need to do this once)
+  % sudo gem install rubyist-aasm
+
+

Building your own gems

+
+  % rake gem
+  % sudo gem install pkg/aasm-2.1.gem
+
+

Simple Example

+

+Here’s a quick example highlighting some of the features. +

+
+  class Conversation
+    include AASM
+
+    aasm_initial_state :unread
+
+    aasm_state :unread
+    aasm_state :read
+    aasm_state :closed
+
+    aasm_event :view do
+      transitions :to => :read, :from => [:unread]
+    end
+
+    aasm_event :close do
+      transitions :to => :closed, :from => [:read, :unread]
+    end
+  end
+
+

A Slightly More Complex Example

+

+This example uses a few of the more complex features available. +

+
+  class Relationship
+    include AASM
+
+    aasm_initial_state Proc.new { |relationship| relationship.strictly_for_fun? ? :intimate : :dating }
+
+    aasm_state :dating,   :enter => :make_happy,        :exit => :make_depressed
+    aasm_state :intimate, :enter => :make_very_happy,   :exit => :never_speak_again
+    aasm_state :married,  :enter => :give_up_intimacy,  :exit => :buy_exotic_car_and_wear_a_combover
+
+    aasm_event :get_intimate do
+      transitions :to => :intimate, :from => [:dating], :guard => :drunk?
+    end
+
+    aasm_event :get_married do
+      transitions :to => :married, :from => [:dating, :intimate], :guard => :willing_to_give_up_manhood?
+    end
+
+    def strictly_for_fun?; end
+    def drunk?; end
+    def willing_to_give_up_manhood?; end
+    def make_happy; end
+    def make_depressed; end
+    def make_very_happy; end
+    def never_speak_again; end
+    def give_up_intimacy; end
+    def buy_exotic_car_and_wear_a_combover; end
+  end
+
+

Other Stuff

+ + + +
Author:Scott Barron + +
License:Original code Copyright 2006, 2007, 2008 by Scott Barron. Released under an +MIT-style license. See the LICENSE file included in the distribution. + +
+

Warranty

+

+This software is provided “as is” and without any express or +implied warranties, including, without limitation, the implied warranties +of merchantibility and fitness for a particular purpose. +

+ +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/aasm/aasm_rb.html b/files/lib/aasm/aasm_rb.html new file mode 100644 index 00000000..bc4fbe8c --- /dev/null +++ b/files/lib/aasm/aasm_rb.html @@ -0,0 +1,59 @@ + + + + + aasm.rb + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
Classes and Modules
+
    + +
  • MODULE AASM
  • + +
+ + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/aasm/event_rb.html b/files/lib/aasm/event_rb.html new file mode 100644 index 00000000..fceaa3a2 --- /dev/null +++ b/files/lib/aasm/event_rb.html @@ -0,0 +1,59 @@ + + + + + event.rb + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
Classes and Modules
+
    + +
  • MODULE AASM
  • + +
+ + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/aasm/persistence/active_record_persistence_rb.html b/files/lib/aasm/persistence/active_record_persistence_rb.html new file mode 100644 index 00000000..aa4bf6f2 --- /dev/null +++ b/files/lib/aasm/persistence/active_record_persistence_rb.html @@ -0,0 +1,59 @@ + + + + + active_record_persistence.rb + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
Classes and Modules
+
    + +
  • MODULE AASM
  • + +
+ + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/aasm/persistence_rb.html b/files/lib/aasm/persistence_rb.html new file mode 100644 index 00000000..e2a3cec0 --- /dev/null +++ b/files/lib/aasm/persistence_rb.html @@ -0,0 +1,59 @@ + + + + + persistence.rb + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
Classes and Modules
+
    + +
  • MODULE AASM
  • + +
+ + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/aasm/state_machine_rb.html b/files/lib/aasm/state_machine_rb.html new file mode 100644 index 00000000..bdc6d35c --- /dev/null +++ b/files/lib/aasm/state_machine_rb.html @@ -0,0 +1,66 @@ + + + + + state_machine.rb + + + + + + + + + + + +
+
+ + + +
Required Files
+
    + +
  • ostruct
  • + +
+ + + + + + + + + + + + + +
Classes and Modules
+
    + +
  • MODULE AASM
  • + +
+ + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/aasm/state_rb.html b/files/lib/aasm/state_rb.html new file mode 100644 index 00000000..4479f661 --- /dev/null +++ b/files/lib/aasm/state_rb.html @@ -0,0 +1,59 @@ + + + + + state.rb + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
Classes and Modules
+
    + +
  • MODULE AASM
  • + +
+ + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/aasm/state_transition_rb.html b/files/lib/aasm/state_transition_rb.html new file mode 100644 index 00000000..6354d028 --- /dev/null +++ b/files/lib/aasm/state_transition_rb.html @@ -0,0 +1,59 @@ + + + + + state_transition.rb + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
Classes and Modules
+
    + +
  • MODULE AASM
  • + +
+ + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/aasm_rb.html b/files/lib/aasm_rb.html new file mode 100644 index 00000000..f4938e23 --- /dev/null +++ b/files/lib/aasm_rb.html @@ -0,0 +1,52 @@ + + + + + aasm.rb + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + \ No newline at end of file diff --git a/i/arrows.png b/i/arrows.png new file mode 100755 index 0000000000000000000000000000000000000000..e54060f44ce73e7acfb92725eabea5440a0f9f24 GIT binary patch literal 477 zcmV<30V4j1P)dbVG7wVRUJ4ZXi@?ZDjy6FEKPPFgfE{K9m3e0X9iQ zK~y-6t(3uW!Y~j;-+EF29Y8t>owx*MmOJ5Y&5#P>PN0L70CZp~_#AB6im~h*@-MRG zr}baWmym=c-2LqC8#0QVq_d4h^%0POdBCG!pN1)M?% zO>`K|PH|?|j2)(00SDm6-OCxbJtwIIc$f?6>;cm)*T8O}P|w9eQE9;oZF~2HLKoWhCOJ#u@GmlVKhuUa>!_-# zEwIP|+X5&Tep-&kS+3~ztj<7nRaJL@ZqKqDaEIZf>}Vs9s_EuaEpi1w7m?Ele92%J zkrytFj-_AR{Yra`ZXtws7%l~~0hQEqX7-C4AHC1fnA2Z5aQ8#{9xv9hBu#Qp(hi|Z Tx-exV00000NkvXXu0mjf5Awjp literal 0 HcmV?d00001 diff --git a/i/results_bg.png b/i/results_bg.png new file mode 100755 index 0000000000000000000000000000000000000000..199ba692349c83b68ac3479f107cdf2f79c39509 GIT binary patch literal 696 zcmeAS@N?(olHy`uVBq!ia0y~yV15B)r*N9O>AjNQC0nj*yCP#Ll5JNK`P=t|97DzJjSOG~Ei4q{mVF2=s rK*9w^1_lL)hK3QP0qFZ74t^YAov@rGA@oL5Daa?Du6{1-oD!M<--cx* literal 0 HcmV?d00001 diff --git a/i/tree_bg.png b/i/tree_bg.png new file mode 100755 index 0000000000000000000000000000000000000000..7d236633d723288991f4cafe4ee2908c6746d0e7 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^tU#>C!3HEBuv``ZQY^(zo*^7SP{WbZ0pxQQctjR6 zFi7tKVa8qC7wiTK%9OZ9lmzFem6RtIr7}3Cl$uzQnV+W+l9`*zV61OwqHkdNIMQwkP=SW0i(`n!#NDtd0LD|QyIg>2rmC~YhJDc>S6G7^>bP0l+XkKJ?K7d literal 0 HcmV?d00001 diff --git a/index.html b/index.html index 03f98016..266ea3d8 100644 --- a/index.html +++ b/index.html @@ -1 +1,15 @@ -My GitHub Page + + + + + + aasm 2.1.3 + + + + + + + diff --git a/js/jquery-1.3.2.min.js b/js/jquery-1.3.2.min.js new file mode 100755 index 00000000..b1ae21d8 --- /dev/null +++ b/js/jquery-1.3.2.min.js @@ -0,0 +1,19 @@ +/* + * jQuery JavaScript Library v1.3.2 + * http://jquery.com/ + * + * Copyright (c) 2009 John Resig + * Dual licensed under the MIT and GPL licenses. + * http://docs.jquery.com/License + * + * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) + * Revision: 6246 + */ +(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\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/js/jquery-effect.js b/js/jquery-effect.js new file mode 100644 index 00000000..5b25307c --- /dev/null +++ b/js/jquery-effect.js @@ -0,0 +1,593 @@ +/* + * jQuery UI Effects 1.6rc6 + * + * Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/ + */ +;(function($) { + +$.effects = $.effects || {}; //Add the 'effects' scope + +$.extend($.effects, { + version: "1.6rc6", + + // Saves a set of properties in a data storage + save: function(element, set) { + for(var i=0; i < set.length; i++) { + if(set[i] !== null) element.data("ec.storage."+set[i], element[0].style[set[i]]); + } + }, + + // Restores a set of previously saved properties from a data storage + restore: function(element, set) { + for(var i=0; i < set.length; i++) { + if(set[i] !== null) element.css(set[i], element.data("ec.storage."+set[i])); + } + }, + + setMode: function(el, mode) { + if (mode == 'toggle') mode = el.is(':hidden') ? 'show' : 'hide'; // Set for toggle + return mode; + }, + + getBaseline: function(origin, original) { // Translates a [top,left] array into a baseline value + // this should be a little more flexible in the future to handle a string & hash + var y, x; + switch (origin[0]) { + case 'top': y = 0; break; + case 'middle': y = 0.5; break; + case 'bottom': y = 1; break; + default: y = origin[0] / original.height; + }; + switch (origin[1]) { + case 'left': x = 0; break; + case 'center': x = 0.5; break; + case 'right': x = 1; break; + default: x = origin[1] / original.width; + }; + return {x: x, y: y}; + }, + + // Wraps the element around a wrapper that copies position properties + createWrapper: function(element) { + + //if the element is already wrapped, return it + if (element.parent().is('.ui-effects-wrapper')) + return element.parent(); + + //Cache width,height and float properties of the element, and create a wrapper around it + var props = { width: element.outerWidth(true), height: element.outerHeight(true), 'float': element.css('float') }; + element.wrap('
'); + var wrapper = element.parent(); + + //Transfer the positioning of the element to the wrapper + if (element.css('position') == 'static') { + wrapper.css({ position: 'relative' }); + element.css({ position: 'relative'} ); + } else { + var top = element.css('top'); if(isNaN(parseInt(top,10))) top = 'auto'; + var left = element.css('left'); if(isNaN(parseInt(left,10))) left = 'auto'; + wrapper.css({ position: element.css('position'), top: top, left: left, zIndex: element.css('z-index') }).show(); + element.css({position: 'relative', top: 0, left: 0 }); + } + + wrapper.css(props); + return wrapper; + }, + + removeWrapper: function(element) { + if (element.parent().is('.ui-effects-wrapper')) + return element.parent().replaceWith(element); + return element; + }, + + setTransition: function(element, list, factor, value) { + value = value || {}; + $.each(list, function(i, x){ + unit = element.cssUnit(x); + if (unit[0] > 0) value[x] = unit[0] * factor + unit[1]; + }); + return value; + }, + + //Base function to animate from one class to another in a seamless transition + animateClass: function(value, duration, easing, callback) { + + var cb = (typeof easing == "function" ? easing : (callback ? callback : null)); + var ea = (typeof easing == "string" ? easing : null); + + return this.each(function() { + + var offset = {}; var that = $(this); var oldStyleAttr = that.attr("style") || ''; + if(typeof oldStyleAttr == 'object') oldStyleAttr = oldStyleAttr["cssText"]; /* Stupidly in IE, style is a object.. */ + if(value.toggle) { that.hasClass(value.toggle) ? value.remove = value.toggle : value.add = value.toggle; } + + //Let's get a style offset + var oldStyle = $.extend({}, (document.defaultView ? document.defaultView.getComputedStyle(this,null) : this.currentStyle)); + if(value.add) that.addClass(value.add); if(value.remove) that.removeClass(value.remove); + var newStyle = $.extend({}, (document.defaultView ? document.defaultView.getComputedStyle(this,null) : this.currentStyle)); + if(value.add) that.removeClass(value.add); if(value.remove) that.addClass(value.remove); + + // The main function to form the object for animation + for(var n in newStyle) { + if( typeof newStyle[n] != "function" && newStyle[n] /* No functions and null properties */ + && n.indexOf("Moz") == -1 && n.indexOf("length") == -1 /* No mozilla spezific render properties. */ + && newStyle[n] != oldStyle[n] /* Only values that have changed are used for the animation */ + && (n.match(/color/i) || (!n.match(/color/i) && !isNaN(parseInt(newStyle[n],10)))) /* Only things that can be parsed to integers or colors */ + && (oldStyle.position != "static" || (oldStyle.position == "static" && !n.match(/left|top|bottom|right/))) /* No need for positions when dealing with static positions */ + ) offset[n] = newStyle[n]; + } + + that.animate(offset, duration, ea, function() { // Animate the newly constructed offset object + // Change style attribute back to original. For stupid IE, we need to clear the damn object. + if(typeof $(this).attr("style") == 'object') { $(this).attr("style")["cssText"] = ""; $(this).attr("style")["cssText"] = oldStyleAttr; } else $(this).attr("style", oldStyleAttr); + if(value.add) $(this).addClass(value.add); if(value.remove) $(this).removeClass(value.remove); + if(cb) cb.apply(this, arguments); + }); + + }); + } +}); + + +function _normalizeArguments(a, m) { + + var o = a[1] && a[1].constructor == Object ? a[1] : {}; if(m) o.mode = m; + var speed = a[1] && a[1].constructor != Object ? a[1] : o.duration; //either comes from options.duration or the second argument + speed = $.fx.off ? 0 : typeof speed === "number" ? speed : $.fx.speeds[speed] || $.fx.speeds._default; + var callback = o.callback || ( $.isFunction(a[2]) && a[2] ) || ( $.isFunction(a[3]) && a[3] ); + + return [a[0], o, speed, callback]; + +} + +//Extend the methods of jQuery +$.fn.extend({ + + //Save old methods + _show: $.fn.show, + _hide: $.fn.hide, + __toggle: $.fn.toggle, + _addClass: $.fn.addClass, + _removeClass: $.fn.removeClass, + _toggleClass: $.fn.toggleClass, + + // New effect methods + effect: function(fx, options, speed, callback) { + return $.effects[fx] ? $.effects[fx].call(this, {method: fx, options: options || {}, duration: speed, callback: callback }) : null; + }, + + show: function() { + if(!arguments[0] || (arguments[0].constructor == Number || (/(slow|normal|fast)/).test(arguments[0]))) + return this._show.apply(this, arguments); + else { + return this.effect.apply(this, _normalizeArguments(arguments, 'show')); + } + }, + + hide: function() { + if(!arguments[0] || (arguments[0].constructor == Number || (/(slow|normal|fast)/).test(arguments[0]))) + return this._hide.apply(this, arguments); + else { + return this.effect.apply(this, _normalizeArguments(arguments, 'hide')); + } + }, + + toggle: function(){ + if(!arguments[0] || (arguments[0].constructor == Number || (/(slow|normal|fast)/).test(arguments[0])) || (arguments[0].constructor == Function)) + return this.__toggle.apply(this, arguments); + else { + return this.effect.apply(this, _normalizeArguments(arguments, 'toggle')); + } + }, + + addClass: function(classNames, speed, easing, callback) { + return speed ? $.effects.animateClass.apply(this, [{ add: classNames },speed,easing,callback]) : this._addClass(classNames); + }, + removeClass: function(classNames,speed,easing,callback) { + return speed ? $.effects.animateClass.apply(this, [{ remove: classNames },speed,easing,callback]) : this._removeClass(classNames); + }, + toggleClass: function(classNames,speed,easing,callback) { + return ( (typeof speed !== "boolean") && speed ) ? $.effects.animateClass.apply(this, [{ toggle: classNames },speed,easing,callback]) : this._toggleClass(classNames, speed); + }, + morph: function(remove,add,speed,easing,callback) { + return $.effects.animateClass.apply(this, [{ add: add, remove: remove },speed,easing,callback]); + }, + switchClass: function() { + return this.morph.apply(this, arguments); + }, + + // helper functions + cssUnit: function(key) { + var style = this.css(key), val = []; + $.each( ['em','px','%','pt'], function(i, unit){ + if(style.indexOf(unit) > 0) + val = [parseFloat(style), unit]; + }); + return val; + } +}); + +/* + * jQuery Color Animations + * Copyright 2007 John Resig + * Released under the MIT and GPL licenses. + */ + +// We override the animation for all of these color styles +$.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i,attr){ + $.fx.step[attr] = function(fx) { + if ( fx.state == 0 ) { + fx.start = getColor( fx.elem, attr ); + fx.end = getRGB( fx.end ); + } + + fx.elem.style[attr] = "rgb(" + [ + Math.max(Math.min( parseInt((fx.pos * (fx.end[0] - fx.start[0])) + fx.start[0],10), 255), 0), + Math.max(Math.min( parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1],10), 255), 0), + Math.max(Math.min( parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2],10), 255), 0) + ].join(",") + ")"; + }; +}); + +// Color Conversion functions from highlightFade +// By Blair Mitchelmore +// http://jquery.offput.ca/highlightFade/ + +// Parse strings looking for color tuples [255,255,255] +function getRGB(color) { + var result; + + // Check if we're already dealing with an array of colors + if ( color && color.constructor == Array && color.length == 3 ) + return color; + + // Look for rgb(num,num,num) + if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) + return [parseInt(result[1],10), parseInt(result[2],10), parseInt(result[3],10)]; + + // Look for rgb(num%,num%,num%) + if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) + return [parseFloat(result[1])*2.55, parseFloat(result[2])*2.55, parseFloat(result[3])*2.55]; + + // Look for #a0b1c2 + if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) + return [parseInt(result[1],16), parseInt(result[2],16), parseInt(result[3],16)]; + + // Look for #fff + if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) + return [parseInt(result[1]+result[1],16), parseInt(result[2]+result[2],16), parseInt(result[3]+result[3],16)]; + + // Look for rgba(0, 0, 0, 0) == transparent in Safari 3 + if (result = /rgba\(0, 0, 0, 0\)/.exec(color)) + return colors['transparent']; + + // Otherwise, we're most likely dealing with a named color + return colors[$.trim(color).toLowerCase()]; +} + +function getColor(elem, attr) { + var color; + + do { + color = $.curCSS(elem, attr); + + // Keep going until we find an element that has color, or we hit the body + if ( color != '' && color != 'transparent' || $.nodeName(elem, "body") ) + break; + + attr = "backgroundColor"; + } while ( elem = elem.parentNode ); + + return getRGB(color); +}; + +// Some named colors to work with +// From Interface by Stefan Petre +// http://interface.eyecon.ro/ + +var colors = { + aqua:[0,255,255], + azure:[240,255,255], + beige:[245,245,220], + black:[0,0,0], + blue:[0,0,255], + brown:[165,42,42], + cyan:[0,255,255], + darkblue:[0,0,139], + darkcyan:[0,139,139], + darkgrey:[169,169,169], + darkgreen:[0,100,0], + darkkhaki:[189,183,107], + darkmagenta:[139,0,139], + darkolivegreen:[85,107,47], + darkorange:[255,140,0], + darkorchid:[153,50,204], + darkred:[139,0,0], + darksalmon:[233,150,122], + darkviolet:[148,0,211], + fuchsia:[255,0,255], + gold:[255,215,0], + green:[0,128,0], + indigo:[75,0,130], + khaki:[240,230,140], + lightblue:[173,216,230], + lightcyan:[224,255,255], + lightgreen:[144,238,144], + lightgrey:[211,211,211], + lightpink:[255,182,193], + lightyellow:[255,255,224], + lime:[0,255,0], + magenta:[255,0,255], + maroon:[128,0,0], + navy:[0,0,128], + olive:[128,128,0], + orange:[255,165,0], + pink:[255,192,203], + purple:[128,0,128], + violet:[128,0,128], + red:[255,0,0], + silver:[192,192,192], + white:[255,255,255], + yellow:[255,255,0], + transparent: [255,255,255] +}; + +/* + * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ + * + * Uses the built in easing capabilities added In jQuery 1.1 + * to offer multiple easing options + * + * TERMS OF USE - jQuery Easing + * + * Open source under the BSD License. + * + * Copyright 2008 George McGinley Smith + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * +*/ + +// t: current time, b: begInnIng value, c: change In value, d: duration +$.easing.jswing = $.easing.swing; + +$.extend($.easing, +{ + def: 'easeOutQuad', + swing: function (x, t, b, c, d) { + //alert($.easing.default); + return $.easing[$.easing.def](x, t, b, c, d); + }, + easeInQuad: function (x, t, b, c, d) { + return c*(t/=d)*t + b; + }, + easeOutQuad: function (x, t, b, c, d) { + return -c *(t/=d)*(t-2) + b; + }, + easeInOutQuad: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t + b; + return -c/2 * ((--t)*(t-2) - 1) + b; + }, + easeInCubic: function (x, t, b, c, d) { + return c*(t/=d)*t*t + b; + }, + easeOutCubic: function (x, t, b, c, d) { + return c*((t=t/d-1)*t*t + 1) + b; + }, + easeInOutCubic: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t + b; + return c/2*((t-=2)*t*t + 2) + b; + }, + easeInQuart: function (x, t, b, c, d) { + return c*(t/=d)*t*t*t + b; + }, + easeOutQuart: function (x, t, b, c, d) { + return -c * ((t=t/d-1)*t*t*t - 1) + b; + }, + easeInOutQuart: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t*t + b; + return -c/2 * ((t-=2)*t*t*t - 2) + b; + }, + easeInQuint: function (x, t, b, c, d) { + return c*(t/=d)*t*t*t*t + b; + }, + easeOutQuint: function (x, t, b, c, d) { + return c*((t=t/d-1)*t*t*t*t + 1) + b; + }, + easeInOutQuint: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; + return c/2*((t-=2)*t*t*t*t + 2) + b; + }, + easeInSine: function (x, t, b, c, d) { + return -c * Math.cos(t/d * (Math.PI/2)) + c + b; + }, + easeOutSine: function (x, t, b, c, d) { + return c * Math.sin(t/d * (Math.PI/2)) + b; + }, + easeInOutSine: function (x, t, b, c, d) { + return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; + }, + easeInExpo: function (x, t, b, c, d) { + return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; + }, + easeOutExpo: function (x, t, b, c, d) { + return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; + }, + easeInOutExpo: function (x, t, b, c, d) { + if (t==0) return b; + if (t==d) return b+c; + if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; + return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; + }, + easeInCirc: function (x, t, b, c, d) { + return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; + }, + easeOutCirc: function (x, t, b, c, d) { + return c * Math.sqrt(1 - (t=t/d-1)*t) + b; + }, + easeInOutCirc: function (x, t, b, c, d) { + if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; + return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; + }, + easeInElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + }, + easeOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; + }, + easeInOutElastic: function (x, t, b, c, d) { + var s=1.70158;var p=0;var a=c; + if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); + if (a < Math.abs(c)) { a=c; var s=p/4; } + else var s = p/(2*Math.PI) * Math.asin (c/a); + if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; + return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; + }, + easeInBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c*(t/=d)*t*((s+1)*t - s) + b; + }, + easeOutBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; + }, + easeInOutBack: function (x, t, b, c, d, s) { + if (s == undefined) s = 1.70158; + if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; + return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; + }, + easeInBounce: function (x, t, b, c, d) { + return c - $.easing.easeOutBounce (x, d-t, 0, c, d) + b; + }, + easeOutBounce: function (x, t, b, c, d) { + if ((t/=d) < (1/2.75)) { + return c*(7.5625*t*t) + b; + } else if (t < (2/2.75)) { + return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; + } else if (t < (2.5/2.75)) { + return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; + } else { + return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; + } + }, + easeInOutBounce: function (x, t, b, c, d) { + if (t < d/2) return $.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; + return $.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; + } +}); +/* + * + * TERMS OF USE - EASING EQUATIONS + * + * Open source under the BSD License. + * + * Copyright 2001 Robert Penner + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * Neither the name of the author nor the names of contributors may be used to endorse + * or promote products derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * + */ + +})(jQuery); + +/* + * jQuery UI Effects Highlight 1.6rc6 + * + * Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * http://docs.jquery.com/UI/Effects/Highlight + * + * Depends: + * effects.core.js + */ +(function($) { + +$.effects.highlight = function(o) { + + return this.queue(function() { + + // Create element + var el = $(this), props = ['backgroundImage','backgroundColor','opacity']; + + // Set options + var mode = $.effects.setMode(el, o.options.mode || 'show'); // Set Mode + var color = o.options.color || "#ffff99"; // Default highlight color + var oldColor = el.css("backgroundColor"); + + // Adjust + $.effects.save(el, props); el.show(); // Save & Show + el.css({backgroundImage: 'none', backgroundColor: color}); // Shift + + // Animation + var animation = {backgroundColor: oldColor }; + if (mode == "hide") animation['opacity'] = 0; + + // Animate + el.animate(animation, { queue: false, duration: o.duration, easing: o.options.easing, complete: function() { + if(mode == "hide") el.hide(); + $.effects.restore(el, props); + if (mode == "show" && $.browser.msie) this.style.removeAttribute('filter'); + if(o.callback) o.callback.apply(this, arguments); + el.dequeue(); + }}); + + }); + +}; + +})(jQuery); \ No newline at end of file diff --git a/js/main.js b/js/main.js new file mode 100755 index 00000000..31e96c3a --- /dev/null +++ b/js/main.js @@ -0,0 +1,22 @@ +function toggleSource( id ) +{ + var $src = $('#' + id).toggle(); + $('#l_' + id).html($src.css('display') == 'none' ? 'show' : 'hide'); +} + +function openCode( url ) +{ + window.open( url, "SOURCE_CODE", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=480,width=750" ).focus(); +} + + +window.highlight = function(url) { + var hash = url.match(/#([^#]+)$/) + if(hash) { + $('a[name=' + hash[1] + ']').parent().effect('highlight', {}, 'slow') + } +} + +$(function() { + highlight('#' + location.hash); +}); diff --git a/js/searchdoc.js b/js/searchdoc.js new file mode 100755 index 00000000..06b278ec --- /dev/null +++ b/js/searchdoc.js @@ -0,0 +1,628 @@ +Searchdoc = {}; + +// navigation.js ------------------------------------------ + +Searchdoc.Navigation = new function() { + this.initNavigation = function() { + var _this = this; + + $(document).keydown(function(e) { + _this.onkeydown(e); + }).keyup(function(e) { + _this.onkeyup(e); + }); + + this.navigationActive = true; + } + + this.setNavigationActive = function(state) { + this.navigationActive = state; + this.clearMoveTimeout(); + } + + + this.onkeyup = function(e) { + if (!this.navigationActive) return; + switch(e.keyCode) { + case 37: //Event.KEY_LEFT: + case 38: //Event.KEY_UP: + case 39: //Event.KEY_RIGHT: + case 40: //Event.KEY_DOWN: + case 73: // i - qwerty + case 74: // j + case 75: // k + case 76: // l + case 67: // c - dvorak + case 72: // h + case 84: // t + case 78: // n + this.clearMoveTimeout(); + break; + } + } + + this.onkeydown = function(e) { + if (!this.navigationActive) return; + switch(e.keyCode) { + case 37: //Event.KEY_LEFT: + case 74: // j (qwerty) + case 72: // h (dvorak) + if (this.moveLeft()) e.preventDefault(); + break; + case 38: //Event.KEY_UP: + case 73: // i (qwerty) + case 67: // c (dvorak) + if (e.keyCode == 38 || e.ctrlKey) { + if (this.moveUp()) e.preventDefault(); + this.startMoveTimeout(false); + } + break; + case 39: //Event.KEY_RIGHT: + case 76: // l (qwerty) + case 78: // n (dvorak) + if (this.moveRight()) e.preventDefault(); + break; + case 40: //Event.KEY_DOWN: + case 75: // k (qwerty) + case 84: // t (dvorak) + if (e.keyCode == 40 || e.ctrlKey) { + if (this.moveDown()) e.preventDefault(); + this.startMoveTimeout(true); + } + break; + case 9: //Event.KEY_TAB: + case 13: //Event.KEY_RETURN: + if (this.$current) this.select(this.$current); + break; + } + if (e.ctrlKey && e.shiftKey) this.select(this.$current); + } + + this.clearMoveTimeout = function() { + clearTimeout(this.moveTimeout); + this.moveTimeout = null; + } + + this.startMoveTimeout = function(isDown) { + if (!$.browser.mozilla && !$.browser.opera) return; + if (this.moveTimeout) this.clearMoveTimeout(); + var _this = this; + + var go = function() { + if (!_this.moveTimeout) return; + _this[isDown ? 'moveDown' : 'moveUp'](); + _this.moveTimout = setTimeout(go, 100); + } + this.moveTimeout = setTimeout(go, 200); + } + + this.moveRight = function() { + } + + this.moveLeft = function() { + } + + this.move = function(isDown) { + } + + this.moveUp = function() { + return this.move(false); + } + + this.moveDown = function() { + return this.move(true); + } +} + + +// scrollIntoView.js -------------------------------------- + +function scrollIntoView(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; + } +} + + +// searcher.js -------------------------------------------- + +Searchdoc.Searcher = function(data) { + this.data = data; + this.handlers = []; +} + +Searchdoc.Searcher.prototype = new function() { + var CHUNK_SIZE = 1000, // search is performed in chunks of 1000 for non-bloking user input + MAX_RESULTS = 100, // do not try to find more than 100 results + huid = 1, suid = 1, + runs = 0; + + + this.find = function(query) { + var queries = splitQuery(query), + regexps = buildRegexps(queries), + highlighters = buildHilighters(queries), + state = { from: 0, pass: 0, limit: MAX_RESULTS, n: suid++}, + _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), + hasMore = (state.limit > 0 && state.pass < 3); + + 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 jQuery.grep(query.split(/(\s+|\(\)?)/), function(string) { return string.match(/\S/) }); + } + + function buildRegexps(queries) { + return jQuery.map(queries, function(query) { return new RegExp(query.replace(/(.)/g, '([$1])([^$1]*?)'), 'i') }); + } + + function buildHilighters(queries) { + return jQuery.map(queries, function(query) { + return jQuery.map( query.split(''), 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 ------ */ + function matchPass1(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; + } + + function matchPass2(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; + } + + 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]); + if (i > 0) + 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), pos = 0, lcTitle = result.title.toLowerCase(); + pos = lcTitle.indexOf(queries[0]); + if (pos != -1) { + result.title = hltSubstring(result.title, pos, queries[0].length); + } + 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, // search by title first and then by source + longSearchIndex = data.longSearchIndex, + info = data.info, + result = [], + i = state.from, + l = searchIndex.length, + togo = CHUNK_SIZE, + matchFunc, hltFunc; + + while (state.pass < 3 && state.limit > 0 && togo > 0) { + if (state.pass == 0) { + matchFunc = matchPass1; + hltFunc = highlightQuery; + } else if (state.pass == 1) { + matchFunc = matchPass2; + hltFunc = highlightQuery; + } else if (state.pass == 2) { + 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) { + jQuery.each(this.handlers, function(i, fn) { fn.call(this, results, isLast) }) + } +} + + + + +// 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 Searchdoc.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 += '' + escapeHTML(this.data.badges[badge] || 'unknown') + ''; + } + html += hlt(result.namespace) + '

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

' + escapeHTML(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) + ';'; + }); + } + +}); + +// 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/panel/index.html b/panel/index.html new file mode 100755 index 00000000..683c6269 --- /dev/null +++ b/panel/index.html @@ -0,0 +1,71 @@ + + + + + + layout + + + + + + + + + +
+
+
+ + + +
+ +
+
+
+
    +
+
+
+
    +
+
+
+ + diff --git a/panel/search_index.js b/panel/search_index.js new file mode 100644 index 00000000..587626d0 --- /dev/null +++ b/panel/search_index.js @@ -0,0 +1 @@ +var search_data = {"index":{"info":[["AASM","lib/aasm/state_transition.rb","classes/AASM.html"," < ","",1],["ClassMethods","AASM","classes/AASM/ClassMethods.html"," < ","",1],["InvalidTransition","AASM","classes/AASM/InvalidTransition.html"," < RuntimeError","",1],["Persistence","AASM","classes/AASM/Persistence.html"," < ","",1],["ActiveRecordPersistence","AASM::Persistence","classes/AASM/Persistence/ActiveRecordPersistence.html"," < ","",1],["ClassMethods","AASM::Persistence::ActiveRecordPersistence","classes/AASM/Persistence/ActiveRecordPersistence/ClassMethods.html"," < ","",1],["InstanceMethods","AASM::Persistence::ActiveRecordPersistence","classes/AASM/Persistence/ActiveRecordPersistence/InstanceMethods.html"," < ","",1],["NamedScopeMethods","AASM::Persistence::ActiveRecordPersistence","classes/AASM/Persistence/ActiveRecordPersistence/NamedScopeMethods.html"," < ","",1],["ReadState","AASM::Persistence::ActiveRecordPersistence","classes/AASM/Persistence/ActiveRecordPersistence/ReadState.html"," < ","",1],["WriteState","AASM::Persistence::ActiveRecordPersistence","classes/AASM/Persistence/ActiveRecordPersistence/WriteState.html"," < ","",1],["WriteStateWithoutPersistence","AASM::Persistence::ActiveRecordPersistence","classes/AASM/Persistence/ActiveRecordPersistence/WriteStateWithoutPersistence.html"," < ","",1],["StateMachine","AASM","classes/AASM/StateMachine.html"," < Object","",1],["SupportingClasses","AASM","classes/AASM/SupportingClasses.html"," < ","",1],["Event","AASM::SupportingClasses","classes/AASM/SupportingClasses/Event.html"," < Object","",1],["State","AASM::SupportingClasses","classes/AASM/SupportingClasses/State.html"," < Object","",1],["StateTransition","AASM::SupportingClasses","classes/AASM/SupportingClasses/StateTransition.html"," < Object","",1],["UndefinedState","AASM","classes/AASM/UndefinedState.html"," < RuntimeError","",1],["==","AASM::SupportingClasses::Event","classes/AASM/SupportingClasses/Event.html#M000020","(event)","",2],["==","AASM::SupportingClasses::State","classes/AASM/SupportingClasses/State.html#M000039","(state)","",2],["==","AASM::SupportingClasses::StateTransition","classes/AASM/SupportingClasses/StateTransition.html#M000057","(obj)","",2],["[]","AASM::StateMachine","classes/AASM/StateMachine.html#M000049","(*args)","",2],["[]=","AASM::StateMachine","classes/AASM/StateMachine.html#M000050","(*args)","",2],["aasm_column","AASM::Persistence::ActiveRecordPersistence::ClassMethods","classes/AASM/Persistence/ActiveRecordPersistence/ClassMethods.html#M000031","(column_name=nil)","Maps to the aasm_column in the database. Deafults to \"aasm_state\". You can write: create_table :foos",2],["aasm_current_state","AASM","classes/AASM.html#M000011","()","Instance methods ",2],["aasm_current_state","AASM::Persistence::ActiveRecordPersistence::InstanceMethods","classes/AASM/Persistence/ActiveRecordPersistence/InstanceMethods.html#M000037","()","Returns the current aasm_state of the object. Respects reload and any changes made to the aasm_state",2],["aasm_enter_initial_state","AASM","classes/AASM.html#M000012","()","",2],["aasm_event","AASM::ClassMethods","classes/AASM/ClassMethods.html#M000005","(name, options = {}, &block)","",2],["aasm_events","AASM::ClassMethods","classes/AASM/ClassMethods.html#M000007","()","",2],["aasm_events_for_current_state","AASM","classes/AASM.html#M000015","()","",2],["aasm_events_for_state","AASM","classes/AASM.html#M000016","(state)","",2],["aasm_initial_state","AASM::ClassMethods","classes/AASM/ClassMethods.html#M000002","(set_state=nil)","",2],["aasm_initial_state=","AASM::ClassMethods","classes/AASM/ClassMethods.html#M000003","(state)","",2],["aasm_read_state","AASM::Persistence::ActiveRecordPersistence::ReadState","classes/AASM/Persistence/ActiveRecordPersistence/ReadState.html#M000047","()","Returns the value of the aasm_column - called from aasm_current_state If it's a new record,",2],["aasm_state","AASM::ClassMethods","classes/AASM/ClassMethods.html#M000004","(name, options={})","",2],["aasm_state_with_named_scope","AASM::Persistence::ActiveRecordPersistence::NamedScopeMethods","classes/AASM/Persistence/ActiveRecordPersistence/NamedScopeMethods.html#M000048","(name, options = {})","",2],["aasm_states","AASM::ClassMethods","classes/AASM/ClassMethods.html#M000006","()","",2],["aasm_states_for_select","AASM::ClassMethods","classes/AASM/ClassMethods.html#M000008","()","",2],["aasm_write_state","AASM::Persistence::ActiveRecordPersistence::WriteState","classes/AASM/Persistence/ActiveRecordPersistence/WriteState.html#M000044","(state)","Writes state to the state column and persists it to the database using update_attribute (which",2],["aasm_write_state_without_persistence","AASM::Persistence::ActiveRecordPersistence::WriteStateWithoutPersistence","classes/AASM/Persistence/ActiveRecordPersistence/WriteStateWithoutPersistence.html#M000043","(state)","Writes state to the state column, but does not persist it to the database foo = Foo.find(1)",2],["all_transitions","AASM::SupportingClasses::Event","classes/AASM/SupportingClasses/Event.html#M000018","()","",2],["calculate_in_state","AASM::Persistence::ActiveRecordPersistence::ClassMethods","classes/AASM/Persistence/ActiveRecordPersistence/ClassMethods.html#M000034","(state, *args)","",2],["call_action","AASM::SupportingClasses::Event","classes/AASM/SupportingClasses/Event.html#M000019","(action, record)","",2],["call_action","AASM::SupportingClasses::State","classes/AASM/SupportingClasses/State.html#M000040","(action, record)","",2],["clone","AASM::StateMachine","classes/AASM/StateMachine.html#M000052","()","",2],["count_in_state","AASM::Persistence::ActiveRecordPersistence::ClassMethods","classes/AASM/Persistence/ActiveRecordPersistence/ClassMethods.html#M000033","(state, *args)","",2],["create_state","AASM::StateMachine","classes/AASM/StateMachine.html#M000053","(name, options)","",2],["display_name","AASM::SupportingClasses::State","classes/AASM/SupportingClasses/State.html#M000041","()","",2],["execute","AASM::SupportingClasses::StateTransition","classes/AASM/SupportingClasses/StateTransition.html#M000056","(obj, *args)","",2],["execute_success_callback","AASM::SupportingClasses::Event","classes/AASM/SupportingClasses/Event.html#M000025","(obj, success = nil)","",2],["find_in_state","AASM::Persistence::ActiveRecordPersistence::ClassMethods","classes/AASM/Persistence/ActiveRecordPersistence/ClassMethods.html#M000032","(number, state, *args)","",2],["fire","AASM::SupportingClasses::Event","classes/AASM/SupportingClasses/Event.html#M000010","(obj, to_state=nil, *args)","",2],["for_select","AASM::SupportingClasses::State","classes/AASM/SupportingClasses/State.html#M000042","()","",2],["from?","AASM::SupportingClasses::StateTransition","classes/AASM/SupportingClasses/StateTransition.html#M000058","(value)","",2],["included","AASM::Persistence::ActiveRecordPersistence","classes/AASM/Persistence/ActiveRecordPersistence.html#M000029","(base)","This method: * extends the model with ClassMethods * includes InstanceMethods Unless the corresponding",2],["inherited","AASM::ClassMethods","classes/AASM/ClassMethods.html#M000001","(klass)","",2],["new","AASM::StateMachine","classes/AASM/StateMachine.html#M000051","(name)","",2],["new","AASM::SupportingClasses::Event","classes/AASM/SupportingClasses/Event.html#M000009","(name, options = {}, &block)","",2],["new","AASM::SupportingClasses::State","classes/AASM/SupportingClasses/State.html#M000036","(name, options={})","",2],["new","AASM::SupportingClasses::StateTransition","classes/AASM/SupportingClasses/StateTransition.html#M000054","(opts)","",2],["perform","AASM::SupportingClasses::StateTransition","classes/AASM/SupportingClasses/StateTransition.html#M000055","(obj)","",2],["set_persistence","AASM::Persistence","classes/AASM/Persistence.html#M000030","(base)","Checks to see this class or any of it's superclasses inherit from ActiveRecord::Base and if so includes",2],["transitions_from_state","AASM::SupportingClasses::Event","classes/AASM/SupportingClasses/Event.html#M000014","(state)","",2],["transitions_from_state?","AASM::SupportingClasses::Event","classes/AASM/SupportingClasses/Event.html#M000013","(state)","",2],["update","AASM::SupportingClasses::Event","classes/AASM/SupportingClasses/Event.html#M000021","(options = {}, &block)","",2],["update","AASM::SupportingClasses::State","classes/AASM/SupportingClasses/State.html#M000045","(options = {})","",2],["with_state_scope","AASM::Persistence::ActiveRecordPersistence::ClassMethods","classes/AASM/Persistence/ActiveRecordPersistence/ClassMethods.html#M000035","(state)","",2],["README.rdoc","files/README_rdoc.html","files/README_rdoc.html","","= AASM - Ruby state machines This package contains AASM, a library for adding finite state machines",3],["aasm.rb","files/lib/aasm_rb.html","files/lib/aasm_rb.html","","",3],["aasm.rb","files/lib/aasm/aasm_rb.html","files/lib/aasm/aasm_rb.html","","",3],["event.rb","files/lib/aasm/event_rb.html","files/lib/aasm/event_rb.html","","",3],["persistence.rb","files/lib/aasm/persistence_rb.html","files/lib/aasm/persistence_rb.html","","",3],["active_record_persistence.rb","files/lib/aasm/persistence/active_record_persistence_rb.html","files/lib/aasm/persistence/active_record_persistence_rb.html","","",3],["state.rb","files/lib/aasm/state_rb.html","files/lib/aasm/state_rb.html","","",3],["state_machine.rb","files/lib/aasm/state_machine_rb.html","files/lib/aasm/state_machine_rb.html","","",3],["state_transition.rb","files/lib/aasm/state_transition_rb.html","files/lib/aasm/state_transition_rb.html","","",3]],"searchIndex":["aasm","classmethods","invalidtransition","persistence","activerecordpersistence","classmethods","instancemethods","namedscopemethods","readstate","writestate","writestatewithoutpersistence","statemachine","supportingclasses","event","state","statetransition","undefinedstate","==()","==()","==()","[]()","[]=()","aasm_column()","aasm_current_state()","aasm_current_state()","aasm_enter_initial_state()","aasm_event()","aasm_events()","aasm_events_for_current_state()","aasm_events_for_state()","aasm_initial_state()","aasm_initial_state=()","aasm_read_state()","aasm_state()","aasm_state_with_named_scope()","aasm_states()","aasm_states_for_select()","aasm_write_state()","aasm_write_state_without_persistence()","all_transitions()","calculate_in_state()","call_action()","call_action()","clone()","count_in_state()","create_state()","display_name()","execute()","execute_success_callback()","find_in_state()","fire()","for_select()","from?()","included()","inherited()","new()","new()","new()","new()","perform()","set_persistence()","transitions_from_state()","transitions_from_state?()","update()","update()","with_state_scope()","readme.rdoc","aasm.rb","aasm.rb","event.rb","persistence.rb","active_record_persistence.rb","state.rb","state_machine.rb","state_transition.rb"],"longSearchIndex":["lib/aasm/state_transition.rb","aasm","aasm","aasm","aasm::persistence","aasm::persistence::activerecordpersistence","aasm::persistence::activerecordpersistence","aasm::persistence::activerecordpersistence","aasm::persistence::activerecordpersistence","aasm::persistence::activerecordpersistence","aasm::persistence::activerecordpersistence","aasm","aasm","aasm::supportingclasses","aasm::supportingclasses","aasm::supportingclasses","aasm","aasm::supportingclasses::event","aasm::supportingclasses::state","aasm::supportingclasses::statetransition","aasm::statemachine","aasm::statemachine","aasm::persistence::activerecordpersistence::classmethods","aasm","aasm::persistence::activerecordpersistence::instancemethods","aasm","aasm::classmethods","aasm::classmethods","aasm","aasm","aasm::classmethods","aasm::classmethods","aasm::persistence::activerecordpersistence::readstate","aasm::classmethods","aasm::persistence::activerecordpersistence::namedscopemethods","aasm::classmethods","aasm::classmethods","aasm::persistence::activerecordpersistence::writestate","aasm::persistence::activerecordpersistence::writestatewithoutpersistence","aasm::supportingclasses::event","aasm::persistence::activerecordpersistence::classmethods","aasm::supportingclasses::event","aasm::supportingclasses::state","aasm::statemachine","aasm::persistence::activerecordpersistence::classmethods","aasm::statemachine","aasm::supportingclasses::state","aasm::supportingclasses::statetransition","aasm::supportingclasses::event","aasm::persistence::activerecordpersistence::classmethods","aasm::supportingclasses::event","aasm::supportingclasses::state","aasm::supportingclasses::statetransition","aasm::persistence::activerecordpersistence","aasm::classmethods","aasm::statemachine","aasm::supportingclasses::event","aasm::supportingclasses::state","aasm::supportingclasses::statetransition","aasm::supportingclasses::statetransition","aasm::persistence","aasm::supportingclasses::event","aasm::supportingclasses::event","aasm::supportingclasses::event","aasm::supportingclasses::state","aasm::persistence::activerecordpersistence::classmethods","files/readme_rdoc.html","files/lib/aasm_rb.html","files/lib/aasm/aasm_rb.html","files/lib/aasm/event_rb.html","files/lib/aasm/persistence_rb.html","files/lib/aasm/persistence/active_record_persistence_rb.html","files/lib/aasm/state_rb.html","files/lib/aasm/state_machine_rb.html","files/lib/aasm/state_transition_rb.html"]}} \ No newline at end of file diff --git a/panel/tree.js b/panel/tree.js new file mode 100644 index 00000000..689382ad --- /dev/null +++ b/panel/tree.js @@ -0,0 +1 @@ +var tree = [["","","files",[["README.rdoc","files/README_rdoc.html","",[]],["","","lib",[["","","aasm",[["aasm.rb","files/lib/aasm/aasm_rb.html","",[]],["event.rb","files/lib/aasm/event_rb.html","",[]],["","","persistence",[["active_record_persistence.rb","files/lib/aasm/persistence/active_record_persistence_rb.html","",[]]]],["persistence.rb","files/lib/aasm/persistence_rb.html","",[]],["state.rb","files/lib/aasm/state_rb.html","",[]],["state_machine.rb","files/lib/aasm/state_machine_rb.html","",[]],["state_transition.rb","files/lib/aasm/state_transition_rb.html","",[]]]],["aasm.rb","files/lib/aasm_rb.html","",[]]]]]],["AASM","classes/AASM.html","",[["ClassMethods","classes/AASM/ClassMethods.html","",[]],["InvalidTransition","classes/AASM/InvalidTransition.html"," < RuntimeError",[]],["Persistence","classes/AASM/Persistence.html","",[["ActiveRecordPersistence","classes/AASM/Persistence/ActiveRecordPersistence.html","",[["ClassMethods","classes/AASM/Persistence/ActiveRecordPersistence/ClassMethods.html","",[]],["InstanceMethods","classes/AASM/Persistence/ActiveRecordPersistence/InstanceMethods.html","",[]],["NamedScopeMethods","classes/AASM/Persistence/ActiveRecordPersistence/NamedScopeMethods.html","",[]],["ReadState","classes/AASM/Persistence/ActiveRecordPersistence/ReadState.html","",[]],["WriteState","classes/AASM/Persistence/ActiveRecordPersistence/WriteState.html","",[]],["WriteStateWithoutPersistence","classes/AASM/Persistence/ActiveRecordPersistence/WriteStateWithoutPersistence.html","",[]]]]]],["StateMachine","classes/AASM/StateMachine.html"," < Object",[]],["SupportingClasses","classes/AASM/SupportingClasses.html","",[["Event","classes/AASM/SupportingClasses/Event.html"," < Object",[]],["State","classes/AASM/SupportingClasses/State.html"," < Object",[]],["StateTransition","classes/AASM/SupportingClasses/StateTransition.html"," < Object",[]]]],["UndefinedState","classes/AASM/UndefinedState.html"," < RuntimeError",[]]]]] \ No newline at end of file