diff --git a/apple-touch-icon.png b/apple-touch-icon.png new file mode 100644 index 00000000..50f98b0f Binary files /dev/null and b/apple-touch-icon.png differ diff --git a/classes/AASM.html b/classes/AASM.html new file mode 100644 index 00000000..a8478df0 --- /dev/null +++ b/classes/AASM.html @@ -0,0 +1,236 @@ + + + + + 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 00000000..e0e80cf8 Binary files /dev/null and b/favicon.ico differ diff --git a/files/README_rdoc.html b/files/README_rdoc.html new file mode 100644 index 00000000..b31a5689 --- /dev/null +++ b/files/README_rdoc.html @@ -0,0 +1,204 @@ + + + + + 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
+ + + + + + + + +
+
+ + \ 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
+ + + + + + + + +
+
+ + \ 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
+ + + + + + + + +
+
+ + \ 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
+ + + + + + + + +
+
+ + \ 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
+ + + + + + + + + + + + + + +
Classes and Modules
+ + + + + + + + +
+
+ + \ 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
+ + + + + + + + +
+
+ + \ 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
+ + + + + + + + +
+
+ + \ 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 00000000..e54060f4 Binary files /dev/null and b/i/arrows.png differ diff --git a/i/results_bg.png b/i/results_bg.png new file mode 100755 index 00000000..199ba692 Binary files /dev/null and b/i/results_bg.png differ diff --git a/i/tree_bg.png b/i/tree_bg.png new file mode 100755 index 00000000..7d236633 Binary files /dev/null and b/i/tree_bg.png differ 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