diff --git a/apple-touch-icon.png b/apple-touch-icon.png new file mode 100644 index 0000000..50f98b0 Binary files /dev/null and b/apple-touch-icon.png differ diff --git a/classes/FakeFS.html b/classes/FakeFS.html new file mode 100644 index 0000000..504f247 --- /dev/null +++ b/classes/FakeFS.html @@ -0,0 +1,196 @@ + + + + + FakeFS + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
A
+
+ +
+ +
D
+
+ +
+ +
+ + + + + + + +
Classes and Modules
+ + + + + + + + +
Class Public methods
+ +
+
+ + activate!() + +
+ + + + +
+ +
+
# File lib/fakefs/base.rb, line 7
+  def self.activate!
+    Object.class_eval do
+      remove_const(:Dir)
+      remove_const(:File)
+      remove_const(:FileTest)
+      remove_const(:FileUtils)
+
+      const_set(:Dir,       FakeFS::Dir)
+      const_set(:File,      FakeFS::File)
+      const_set(:FileUtils, FakeFS::FileUtils)
+      const_set(:FileTest,  FakeFS::FileTest)
+    end
+    true
+  end
+
+
+ +
+ +
+
+ + deactivate!() + +
+ + + + +
+ +
+
# File lib/fakefs/base.rb, line 22
+  def self.deactivate!
+    Object.class_eval do
+      remove_const(:Dir)
+      remove_const(:File)
+      remove_const(:FileTest)
+      remove_const(:FileUtils)
+
+      const_set(:Dir,       RealDir)
+      const_set(:File,      RealFile)
+      const_set(:FileTest,  RealFileTest)
+      const_set(:FileUtils, RealFileUtils)
+    end
+    true
+  end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/FakeFS/Dir.html b/classes/FakeFS/Dir.html new file mode 100644 index 0000000..bb56a5f --- /dev/null +++ b/classes/FakeFS/Dir.html @@ -0,0 +1,736 @@ + + + + + FakeFS::Dir + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
#
+
+
    + +
  • []
  • + +
+
+ +
C
+
+ +
+ +
D
+
+ +
+ +
E
+
+ +
+ +
F
+
+ +
+ +
G
+
+ +
+ +
M
+
+ +
+ +
N
+
+ +
+ +
O
+
+ +
+ +
P
+
+ +
+ +
R
+
+ +
+ +
S
+
+ +
+ +
T
+
+ +
+ +
+ + + +
Included Modules
+ + + + + + + + + + + + +
Class Public methods
+ +
+
+ + [](pattern) + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 55
+    def self.[](pattern)
+      glob(pattern)
+    end
+
+
+ +
+ +
+
+ + chdir(dir, &blk) + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 59
+    def self.chdir(dir, &blk)
+      FileSystem.chdir(dir, &blk)
+    end
+
+
+ +
+ +
+
+ + chroot(string) + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 63
+    def self.chroot(string)
+      # Not implemented yet
+    end
+
+
+ +
+ +
+
+ + delete(string) + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 67
+    def self.delete(string)
+      raise SystemCallError, "No such file or directory - #{string}" unless FileSystem.find(string).values.empty?
+      FileSystem.delete(string)
+    end
+
+
+ +
+ +
+
+ + entries(dirname) + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 72
+    def self.entries(dirname)
+      raise SystemCallError, dirname unless FileSystem.find(dirname)
+      Dir.new(dirname).map { |file| File.basename(file) }
+    end
+
+
+ +
+ +
+
+ + foreach(dirname, &block) + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 77
+    def self.foreach(dirname, &block)
+      Dir.open(dirname) { |file| yield file }
+    end
+
+
+ +
+ +
+
+ + glob(pattern) + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 81
+    def self.glob(pattern)
+      [FileSystem.find(pattern) || []].flatten.map{|e| e.to_s}.sort
+    end
+
+
+ +
+ +
+
+ + mkdir(string, integer = 0) + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 85
+    def self.mkdir(string, integer = 0)
+      parent = string.split('/')
+      parent.pop
+      raise Errno::ENOENT, "No such file or directory - #{string}" unless parent.join == "" || FileSystem.find(parent.join('/'))
+      raise Errno::EEXIST, "File exists - #{string}" if File.exists?(string)
+      FileUtils.mkdir_p(string)
+    end
+
+
+ +
+ +
+
+ + new(string) + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 5
+    def initialize(string)
+      raise Errno::ENOENT, string unless FileSystem.find(string)
+      @path = string
+      @open = true
+      @pointer = 0
+      @contents = [ '.', '..', ] + FileSystem.find(@path).values
+    end
+
+
+ +
+ +
+
+ + open(string, &block) + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 93
+    def self.open(string, &block)
+      if block_given?
+        Dir.new(string).each { |file| yield(file) }
+      else
+        Dir.new(string)
+      end
+    end
+
+
+ +
+ +
+
+ + pwd() + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 105
+    def self.pwd
+      FileSystem.current_dir.to_s
+    end
+
+
+ +
+ +
+
+ + tmpdir() + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 101
+    def self.tmpdir
+      '/tmp'
+    end
+
+
+ +
+ +
Instance Public methods
+ +
+
+ + close() + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 13
+    def close
+      @open = false
+      @pointer = nil
+      @contents = nil
+      nil
+    end
+
+
+ +
+ +
+
+ + each(&block) + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 20
+    def each(&block)
+      while f = read
+        yield f
+      end
+    end
+
+
+ +
+ +
+
+ + path() + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 26
+    def path
+      @path
+    end
+
+
+ +
+ +
+
+ + pos() + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 30
+    def pos
+      @pointer
+    end
+
+
+ +
+ +
+
+ + pos=(integer) + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 34
+    def pos=(integer)
+      @pointer = integer
+    end
+
+
+ +
+ +
+
+ + read() + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 38
+    def read
+      raise IOError, "closed directory" if @pointer == nil
+      n = @contents[@pointer]
+      @pointer += 1
+      n.to_s.gsub(path + '/', '') if n
+    end
+
+
+ +
+ +
+
+ + rewind() + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 45
+    def rewind
+      @pointer = 0
+    end
+
+
+ +
+ +
+
+ + seek(integer) + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 49
+    def seek(integer)
+      raise IOError, "closed directory" if @pointer == nil
+      @pointer = integer
+      @contents[integer]
+    end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/FakeFS/FakeDir.html b/classes/FakeFS/FakeDir.html new file mode 100644 index 0000000..b9b9eb3 --- /dev/null +++ b/classes/FakeFS/FakeDir.html @@ -0,0 +1,328 @@ + + + + + FakeFS::FakeDir + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
C
+
+ +
+ +
D
+
+ +
+ +
E
+
+ +
+ +
I
+
+ +
+ +
N
+
+ +
+ +
T
+
+ +
+ +
+ + + + + + + + + + + +
Attributes
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
+ [RW] + name
+ [RW] + parent
+ [R] + ctime
+ [R] + mtime
+ + + +
Class Public methods
+ +
+
+ + new(name = nil, parent = nil) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/dir.rb, line 6
+    def initialize(name = nil, parent = nil)
+      @name   = name
+      @parent = parent
+      @ctime  = Time.now
+      @mtime  = @ctime
+    end
+
+
+ +
+ +
Instance Public methods
+ +
+
+ + clone(parent = nil) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/dir.rb, line 21
+    def clone(parent = nil)
+      clone = Marshal.load(Marshal.dump(self))
+      clone.each do |key, value|
+        value.parent = clone
+      end
+      clone.parent = parent if parent
+      clone
+    end
+
+
+ +
+ +
+
+ + delete(node = self) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/dir.rb, line 40
+    def delete(node = self)
+      if node == self
+        parent.delete(self)
+      else
+        super(node.name)
+      end
+    end
+
+
+ +
+ +
+
+ + entry() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/dir.rb, line 13
+    def entry
+      self
+    end
+
+
+ +
+ +
+
+ + inspect() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/dir.rb, line 17
+    def inspect
+      "(FakeDir name:#{name.inspect} parent:#{parent.to_s.inspect} size:#{size})"
+    end
+
+
+ +
+ +
+
+ + to_s() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/dir.rb, line 30
+    def to_s
+      if parent && parent.to_s != '.'
+        File.join(parent.to_s, name)
+      elsif parent && parent.to_s == '.'
+        "#{File::PATH_SEPARATOR}#{name}"
+      else
+        name
+      end
+    end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/FakeFS/FakeFile.html b/classes/FakeFS/FakeFile.html new file mode 100644 index 0000000..5bd0713 --- /dev/null +++ b/classes/FakeFS/FakeFile.html @@ -0,0 +1,456 @@ + + + + + FakeFS::FakeFile + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
C
+
+ +
+ +
D
+
+ +
+ +
E
+
+ +
+ +
I
+
+ +
+ +
L
+
+ +
+ +
N
+
+ +
+ +
T
+
+ +
+ +
+ + + + + + + +
Classes and Modules
+ + + + + + +
Attributes
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ [RW] + name
+ [RW] + parent
+ [RW] + content
+ [R] + ctime
+ [R] + mtime
+ [RW] + inode
+ + + +
Class Public methods
+ +
+
+ + new(name = nil, parent = nil) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 31
+    def initialize(name = nil, parent = nil)
+      @name   = name
+      @parent = parent
+      @inode  = Inode.new(self)
+      @ctime  = Time.now
+      @mtime  = @ctime
+    end
+
+
+ +
+ +
Instance Public methods
+ +
+
+ + clone(parent = nil) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 57
+    def clone(parent = nil)
+      clone = super()
+      clone.parent = parent if parent
+      clone.inode  = inode.clone
+      clone
+    end
+
+
+ +
+ +
+
+ + content() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 41
+    def content
+      @inode.content
+    end
+
+
+ +
+ +
+
+ + content=(str) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 45
+    def content=(str)
+      @inode.content = str
+    end
+
+
+ +
+ +
+
+ + delete() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 76
+    def delete
+      inode.unlink(self)
+      parent.delete(self)
+    end
+
+
+ +
+ +
+
+ + entry() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 64
+    def entry
+      self
+    end
+
+
+ +
+ +
+
+ + inspect() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 68
+    def inspect
+      "(FakeFile name:#{name.inspect} parent:#{parent.to_s.inspect} size:#{content.size})"
+    end
+
+
+ +
+ +
+
+ + link(other_file) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 53
+    def link(other_file)
+      @inode.link(other_file)
+    end
+
+
+ +
+ +
+
+ + links() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 49
+    def links
+      @inode.links
+    end
+
+
+ +
+ +
+
+ + to_s() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 72
+    def to_s
+      File.join(parent.to_s, name)
+    end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/FakeFS/FakeFile/Inode.html b/classes/FakeFS/FakeFile/Inode.html new file mode 100644 index 0000000..597b83f --- /dev/null +++ b/classes/FakeFS/FakeFile/Inode.html @@ -0,0 +1,230 @@ + + + + + FakeFS::FakeFile::Inode + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
C
+
+ +
+ +
L
+
+ +
+ +
N
+
+ +
+ +
U
+
+ +
+ +
+ + + + + + + + + + + +
Attributes
+ + + + + + + + + + + + + + +
+ [RW] + content
+ [RW] + links
+ + + +
Class Public methods
+ +
+
+ + new(file_owner) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 7
+      def initialize(file_owner)
+        @content = ""
+        @links   = [file_owner]
+      end
+
+
+ +
+ +
Instance Public methods
+ +
+
+ + clone() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 24
+      def clone
+        clone = super
+        clone.content = content.dup
+        clone
+      end
+
+
+ +
+ +
+
+ + link(file) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 15
+      def link(file)
+        links << file unless links.include?(file)
+        file.inode = self
+      end
+
+
+ +
+ +
+
+ + unlink(file) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 20
+      def unlink(file)
+        links.delete(file)
+      end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/FakeFS/FakeSymlink.html b/classes/FakeFS/FakeSymlink.html new file mode 100644 index 0000000..186feff --- /dev/null +++ b/classes/FakeFS/FakeSymlink.html @@ -0,0 +1,260 @@ + + + + + FakeFS::FakeSymlink + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
D
+
+ +
+ +
E
+
+ +
+ +
I
+
+ +
+ +
N
+
+ +
+ +
R
+
+ +
+ +
+ + + + + + + + + + + +
Attributes
+ + + + + + + + + + + + + + +
+ [RW] + name
+ [RW] + target
+ + + +
Class Public methods
+ +
+
+ + new(target) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/symlink.rb, line 6
+    def initialize(target)
+      @target = target
+    end
+
+
+ +
+ +
Instance Public methods
+ +
+
+ + delete() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/symlink.rb, line 18
+    def delete
+      parent.delete(self)
+    end
+
+
+ +
+ +
+
+ + entry() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/symlink.rb, line 14
+    def entry
+      FileSystem.find(target)
+    end
+
+
+ +
+ +
+
+ + inspect() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/symlink.rb, line 10
+    def inspect
+      "symlink(#{target.split('/').last})"
+    end
+
+
+ +
+ +
+
+ + respond_to?(method) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/symlink.rb, line 22
+    def respond_to?(method)
+      entry.respond_to?(method)
+    end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/FakeFS/File.html b/classes/FakeFS/File.html new file mode 100644 index 0000000..0fc0218 --- /dev/null +++ b/classes/FakeFS/File.html @@ -0,0 +1,1490 @@ + + + + + FakeFS::File + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
A
+
+ +
+ +
B
+
+ +
+ +
C
+
+ +
+ +
D
+
+ +
+ +
E
+
+ +
+ +
F
+
+ +
+ +
I
+
+ +
+ +
J
+
+ +
+ +
L
+
+ +
+ +
M
+
+ +
+ +
N
+
+ +
+ +
R
+
+ +
+ +
S
+
+ +
+ +
T
+
+ +
+ +
W
+
+ +
+ +
+ + + + + + + +
Classes and Modules
+ + + + +
Constants
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PATH_SEPARATOR='/'
MODES=[ READ_ONLY = "r", READ_WRITE = "r+", WRITE_ONLY = "w", READ_WRITE_TRUNCATE = "w+", APPEND_WRITE_ONLY = "a", APPEND_READ_WRITE = "a+" ]
FILE_CREATION_MODES=MODES - [READ_ONLY, READ_WRITE]
MODE_BITMASK=RealFile::RDONLY | RealFile::WRONLY | RealFile::RDWR | RealFile::APPEND | RealFile::CREAT | RealFile::EXCL | RealFile::NONBLOCK | RealFile::TRUNC | RealFile::NOCTTY | RealFile::SYNC
FILE_CREATION_BITMASK=RealFile::CREAT
+ + + +
Attributes
+ + + + + + + + +
+ [R] + path
+ + + +
Class Public methods
+ +
+
+ + basename(*args) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 113
+    def self.basename(*args)
+      RealFile.basename(*args)
+    end
+
+
+ +
+ +
+
+ + const_missing(name) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 79
+    def self.const_missing(name)
+      RealFile.const_get(name)
+    end
+
+
+ +
+ +
+
+ + ctime(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 59
+    def self.ctime(path)
+      if exists?(path)
+        FileSystem.find(path).ctime
+      else
+        raise Errno::ENOENT
+      end
+    end
+
+
+ +
+ +
+
+ + delete(file_name, *additional_file_names) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 159
+    def self.delete(file_name, *additional_file_names)
+      if !exists?(file_name)
+        raise Errno::ENOENT, "No such file or directory - #{file_name}"
+      end
+
+      FileUtils.rm(file_name)
+
+      additional_file_names.each do |file_name|
+        FileUtils.rm(file_name)
+      end
+
+      additional_file_names.size + 1
+    end
+
+
+ +
+ +
+
+ + directory?(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 83
+    def self.directory?(path)
+      if path.respond_to? :entry
+        path.entry.is_a? FakeDir
+      else
+        result = FileSystem.find(path)
+        result ? result.entry.is_a?(FakeDir) : false
+      end
+    end
+
+
+ +
+ +
+
+ + dirname(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 117
+    def self.dirname(path)
+      RealFile.dirname(path)
+    end
+
+
+ +
+ +
+
+ + exist?(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 39
+    def self.exist?(path)
+      !!FileSystem.find(path)
+    end
+
+
+ +
+ +
+
+ + expand_path(*args) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 109
+    def self.expand_path(*args)
+      RealFile.expand_path(*args)
+    end
+
+
+ +
+ +
+
+ + extname(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 31
+    def self.extname(path)
+      RealFile.extname(path)
+    end
+
+
+ +
+ +
+
+ + file?(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 100
+    def self.file?(path)
+      if path.respond_to? :entry
+        path.entry.is_a? FakeFile
+      else
+        result = FileSystem.find(path)
+        result ? result.entry.is_a?(FakeFile) : false
+      end
+    end
+
+
+ +
+ +
+
+ + join(*parts) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 35
+    def self.join(*parts)
+      parts * PATH_SEPARATOR
+    end
+
+
+ +
+ +
+
+ + link(source, dest) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 139
+    def self.link(source, dest)
+      if directory?(source)
+        raise Errno::EPERM, "Operation not permitted - #{source} or #{dest}"
+      end
+
+      if !exists?(source)
+        raise Errno::ENOENT, "No such file or directory - #{source} or #{dest}"
+      end
+
+      if exists?(dest)
+        raise Errno::EEXIST, "File exists - #{source} or #{dest}"
+      end
+
+      source = FileSystem.find(source)
+      dest = FileSystem.add(dest, source.entry.clone)
+      source.link(dest)
+
+      0
+    end
+
+
+ +
+ +
+
+ + lstat(file) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 185
+    def self.lstat(file)
+      File::Stat.new(file, true)
+    end
+
+
+ +
+ +
+
+ + mtime(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 51
+    def self.mtime(path)
+      if exists?(path)
+        FileSystem.find(path).mtime
+      else
+        raise Errno::ENOENT
+      end
+    end
+
+
+ +
+ +
+
+ + new(path, mode = READ_ONLY, perm = nil) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 227
+    def initialize(path, mode = READ_ONLY, perm = nil)
+      @path = path
+      @mode = mode
+      @file = FileSystem.find(path)
+      @autoclose = true
+
+      check_modes!
+
+      file_creation_mode? ? create_missing_file : check_file_existence!
+
+      super(@file.content, mode)
+    end
+
+
+ +
+ +
+
+ + read(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 126
+    def self.read(path)
+      file = new(path)
+      if file.exists?
+        file.read
+      else
+        raise Errno::ENOENT
+      end
+    end
+
+
+ +
+ +
+
+ + readlines(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 135
+    def self.readlines(path)
+      read(path).split("\n")
+    end
+
+
+ +
+ +
+
+ + readlink(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 121
+    def self.readlink(path)
+      symlink = FileSystem.find(path)
+      FileSystem.find(symlink.target).to_s
+    end
+
+
+ +
+ +
+
+ + size(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 67
+    def self.size(path)
+      read(path).length
+    end
+
+
+ +
+ +
+
+ + size?(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 71
+    def self.size?(path)
+      if exists?(path) && !size(path).zero?
+        true
+      else
+        nil
+      end
+    end
+
+
+ +
+ +
+
+ + stat(file) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 181
+    def self.stat(file)
+      File::Stat.new(file)
+    end
+
+
+ +
+ +
+
+ + symlink(source, dest) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 177
+    def self.symlink(source, dest)
+      FileUtils.ln_s(source, dest)
+    end
+
+
+ +
+ +
+
+ + symlink?(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 92
+    def self.symlink?(path)
+      if path.respond_to? :entry
+        path.is_a? FakeSymlink
+      else
+        FileSystem.find(path).is_a? FakeSymlink
+      end
+    end
+
+
+ +
+ +
Instance Public methods
+ +
+
+ + atime() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 290
+    def atime
+      raise NotImplementedError
+    end
+
+
+ +
+ +
+
+ + autoclose?() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 335
+      def autoclose?
+        @autoclose
+      end
+
+
+ +
+ +
+
+ + binmode?() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 315
+      def binmode?
+        raise NotImplementedError
+      end
+
+
+ +
+ +
+
+ + chmod(mode_int) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 294
+    def chmod(mode_int)
+      raise NotImplementedError
+    end
+
+
+ +
+ +
+
+ + chown(owner_int, group_int) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 298
+    def chown(owner_int, group_int)
+      raise NotImplementedError
+    end
+
+
+ +
+ +
+
+ + close_on_exec=(bool) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 319
+      def close_on_exec=(bool)
+        raise NotImplementedError
+      end
+
+
+ +
+ +
+
+ + close_on_exec?() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 323
+      def close_on_exec?
+        raise NotImplementedError
+      end
+
+
+ +
+ +
+
+ + ctime() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 302
+    def ctime
+      self.class.ctime(@path)
+    end
+
+
+ +
+ +
+
+ + exists?() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 240
+    def exists?
+      true
+    end
+
+
+ +
+ +
+
+ + flock(locking_constant) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 306
+    def flock(locking_constant)
+      raise NotImplementedError
+    end
+
+
+ +
+ +
+
+ + ioctl(integer_cmd, arg) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 255
+    def ioctl(integer_cmd, arg)
+      raise NotImplementedError
+    end
+
+
+ +
+ +
+
+ + lstat() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 267
+    def lstat
+      self.class.lstat(@path)
+    end
+
+
+ +
+ +
+
+ + mtime() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 310
+    def mtime
+      self.class.mtime(@path)
+    end
+
+
+ +
+ +
+
+ + read_nonblock(maxlen, outbuf = nil) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 259
+    def read_nonblock(maxlen, outbuf = nil)
+      raise NotImplementedError
+    end
+
+
+ +
+ +
+
+ + readpartial(maxlen, outbuf = nil) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 286
+    def readpartial(maxlen, outbuf = nil)
+      raise NotImplementedError
+    end
+
+
+ +
+ +
+
+ + size() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 341
+      def size
+        File.size(@path)
+      end
+
+
+ +
+ +
+
+ + stat() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 263
+    def stat
+      self.class.stat(@path)
+    end
+
+
+ +
+ +
+
+ + sysseek(position, whence = SEEK_SET) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 271
+    def sysseek(position, whence = SEEK_SET)
+      seek(position, whence)
+      pos
+    end
+
+
+ +
+ +
+
+ + to_io() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 278
+    def to_io
+      self
+    end
+
+
+ +
+ +
+
+ + to_path() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 327
+      def to_path
+        raise NotImplementedError
+      end
+
+
+ +
+ +
+
+ + write_nonblock(string) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 282
+    def write_nonblock(string)
+      raise NotImplementedError
+    end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/FakeFS/File/Stat.html b/classes/FakeFS/File/Stat.html new file mode 100644 index 0000000..2d392d4 --- /dev/null +++ b/classes/FakeFS/File/Stat.html @@ -0,0 +1,258 @@ + + + + + FakeFS::File::Stat + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
D
+
+ +
+ +
N
+
+ +
+ +
S
+
+ +
+ +
+ + + + + + + + + + + +
Attributes
+ + + + + + + + + + + + + + +
+ [R] + ctime
+ [R] + mtime
+ + + +
Class Public methods
+ +
+
+ + new(file, __lstat = false) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 192
+      def initialize(file, __lstat = false)
+        if !File.exists?(file)
+          raise(Errno::ENOENT, "No such file or directory - #{file}")
+        end
+
+        @file      = file
+        @fake_file = FileSystem.find(@file)
+        @__lstat   = __lstat
+        @ctime     = @fake_file.ctime
+        @mtime     = @fake_file.mtime
+      end
+
+
+ +
+ +
Instance Public methods
+ +
+
+ + directory?() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 208
+      def directory?
+        File.directory?(@file)
+      end
+
+
+ +
+ +
+
+ + nlink() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 212
+      def nlink
+        @fake_file.links.size
+      end
+
+
+ +
+ +
+
+ + size() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 216
+      def size
+        if @__lstat && symlink?
+          @fake_file.target.size
+        else
+          File.size(@file)
+        end
+      end
+
+
+ +
+ +
+
+ + symlink?() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 204
+      def symlink?
+        File.symlink?(@file)
+      end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/FakeFS/FileSystem.html b/classes/FakeFS/FileSystem.html new file mode 100644 index 0000000..0fffb4d --- /dev/null +++ b/classes/FakeFS/FileSystem.html @@ -0,0 +1,482 @@ + + + + + FakeFS::FileSystem + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
A
+
+ +
+ +
C
+
+ +
+ +
D
+
+ +
+ +
F
+
+ +
+ +
N
+
+ +
+ +
P
+
+ +
+ +
+ + + + + + + + + + + + + +
Instance Public methods
+ +
+
+ + add(path, object=FakeDir.new) + +
+ + + + +
+ +
+
# File lib/fakefs/file_system.rb, line 35
+    def add(path, object=FakeDir.new)
+      parts = path_parts(normalize_path(path))
+
+      d = parts[0...-1].inject(fs) do |dir, part|
+        dir[part] ||= FakeDir.new(part, dir)
+      end
+
+      object.name = parts.last
+      object.parent = d
+      d[parts.last] ||= object
+    end
+
+
+ +
+ +
+
+ + chdir(dir, &blk) + +
+ + + + +
+ +
+
# File lib/fakefs/file_system.rb, line 74
+    def chdir(dir, &blk)
+      new_dir = find(dir)
+      dir_levels.push dir if blk
+
+      raise Errno::ENOENT, dir unless new_dir
+
+      dir_levels.push dir if !blk
+      blk.call if blk
+    ensure
+      dir_levels.pop if blk
+    end
+
+
+ +
+ +
+
+ + clear() + +
+ + + + +
+ +
+
# File lib/fakefs/file_system.rb, line 13
+    def clear
+      @dir_levels = nil
+      @fs = nil
+    end
+
+
+ +
+ +
+
+ + clone(path) + +
+ +
+

+copies directories and files from the real filesystem into our fake one +

+ +
+ + + + +
+ +
+
# File lib/fakefs/file_system.rb, line 49
+    def clone(path)
+      path    = File.expand_path(path)
+      pattern = File.join(path, '**', '*')
+      files   = RealFile.file?(path) ? [path] : [path] + RealDir.glob(pattern, RealFile::FNM_DOTMATCH)
+
+      files.each do |f|
+        if RealFile.file?(f)
+          FileUtils.mkdir_p(File.dirname(f))
+          File.open(f, File::WRITE_ONLY) do |g|
+            g.print RealFile.open(f){|h| h.read }
+          end
+        elsif RealFile.directory?(f)
+          FileUtils.mkdir_p(f)
+        elsif RealFile.symlink?(f)
+          FileUtils.ln_s()
+        end
+      end
+    end
+
+
+ +
+ +
+
+ + current_dir() + +
+ + + + +
+ +
+
# File lib/fakefs/file_system.rb, line 99
+    def current_dir
+      find(normalize_path('.'))
+    end
+
+
+ +
+ +
+
+ + delete(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file_system.rb, line 68
+    def delete(path)
+      if node = FileSystem.find(path)
+        node.delete
+      end
+    end
+
+
+ +
+ +
+
+ + dir_levels() + +
+ + + + +
+ +
+
# File lib/fakefs/file_system.rb, line 5
+    def dir_levels
+      @dir_levels ||= []
+    end
+
+
+ +
+ +
+
+ + files() + +
+ + + + +
+ +
+
# File lib/fakefs/file_system.rb, line 18
+    def files
+      fs.values
+    end
+
+
+ +
+ +
+
+ + find(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file_system.rb, line 22
+    def find(path)
+      parts = path_parts(normalize_path(path))
+      return fs if parts.empty? # '/'
+
+      entries = find_recurser(fs, parts).flatten
+
+      case entries.length
+      when 0 then nil
+      when 1 then entries.first
+      else entries
+      end
+    end
+
+
+ +
+ +
+
+ + fs() + +
+ + + + +
+ +
+
# File lib/fakefs/file_system.rb, line 9
+    def fs
+      @fs ||= FakeDir.new('.')
+    end
+
+
+ +
+ +
+
+ + normalize_path(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file_system.rb, line 90
+    def normalize_path(path)
+      if Pathname.new(path).absolute?
+        File.expand_path(path)
+      else
+        parts = dir_levels + [path]
+        File.expand_path(File.join(*parts))
+      end
+    end
+
+
+ +
+ +
+
+ + path_parts(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file_system.rb, line 86
+    def path_parts(path)
+      path.split(File::PATH_SEPARATOR).reject { |part| part.empty? }
+    end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/FakeFS/FileTest.html b/classes/FakeFS/FileTest.html new file mode 100644 index 0000000..85028b9 --- /dev/null +++ b/classes/FakeFS/FileTest.html @@ -0,0 +1,101 @@ + + + + + FakeFS::FileTest + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
E
+
+ +
+ +
+ + + + + + + + + + + + + +
Class Public methods
+ +
+
+ + exist?(file_name) + +
+ + + + +
+ +
+
# File lib/fakefs/file_test.rb, line 3
+    def self.exist?(file_name)
+      File.exist?(file_name)
+    end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/FakeFS/FileUtils.html b/classes/FakeFS/FileUtils.html new file mode 100644 index 0000000..d1dcd4f --- /dev/null +++ b/classes/FakeFS/FileUtils.html @@ -0,0 +1,616 @@ + + + + + FakeFS::FileUtils + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
C
+
+ +
+ +
L
+
+ +
+ +
M
+
+ +
+ +
R
+
+ +
+ +
T
+
+ +
+ +
+ + + + + + + + + + + + + +
Instance Public methods
+ +
+
+ + cd(dir) + +
+ + +
+ This method is also aliased as + + chdir + +
+ + + +
+ +
+
# File lib/fakefs/fileutils.rb, line 124
+    def cd(dir)
+      FileSystem.chdir(dir)
+    end
+
+
+ +
+ +
+
+ + chdir(dir) + +
+ +
+

+Alias for cd +

+ +
+ + + +
+ +
+
+ + chown(user, group, list, options={}) + +
+ + + + +
+ +
+
# File lib/fakefs/fileutils.rb, line 98
+    def chown(user, group, list, options={})
+      list = Array(list)
+      list.each do |f|
+        unless File.exists?(f)
+          raise Errno::ENOENT, f
+        end
+      end
+      list
+    end
+
+
+ +
+ +
+
+ + chown_R(user, group, list, options={}) + +
+ + + + +
+ +
+
# File lib/fakefs/fileutils.rb, line 108
+    def chown_R(user, group, list, options={})
+      chown(user, group, list, options={})
+    end
+
+
+ +
+ +
+
+ + cp(src, dest) + +
+ + + + +
+ +
+
# File lib/fakefs/fileutils.rb, line 41
+    def cp(src, dest)
+      dst_file = FileSystem.find(dest)
+      src_file = FileSystem.find(src)
+
+      if !src_file
+        raise Errno::ENOENT, src
+      end
+
+      if File.directory? src_file
+        raise Errno::EISDIR, src
+      end
+
+      if dst_file && File.directory?(dst_file)
+        FileSystem.add(File.join(dest, src), src_file.entry.clone(dst_file))
+      else
+        FileSystem.delete(dest)
+        FileSystem.add(dest, src_file.entry.clone)
+      end
+    end
+
+
+ +
+ +
+
+ + cp_r(src, dest) + +
+ + + + +
+ +
+
# File lib/fakefs/fileutils.rb, line 61
+    def cp_r(src, dest)
+      # This error sucks, but it conforms to the original Ruby
+      # method.
+      raise "unknown file type: #{src}" unless dir = FileSystem.find(src)
+
+      new_dir = FileSystem.find(dest)
+
+      if new_dir && !File.directory?(dest)
+        raise Errno::EEXIST, dest
+      end
+
+      if !new_dir && !FileSystem.find(dest+'/../')
+        raise Errno::ENOENT, dest
+      end
+
+      # This last bit is a total abuse and should be thought hard
+      # about and cleaned up.
+      if new_dir
+        if src[-2..-1] == '/.'
+          dir.values.each{|f| new_dir[f.name] = f.clone(new_dir) }
+        else
+          new_dir[dir.name] = dir.entry.clone(new_dir)
+        end
+      else
+        FileSystem.add(dest, dir.entry.clone)
+      end
+    end
+
+
+ +
+ +
+
+ + ln_s(target, path, options = {}) + +
+ + + + +
+ +
+
# File lib/fakefs/fileutils.rb, line 32
+    def ln_s(target, path, options = {})
+      options = { :force => false }.merge(options)
+      (FileSystem.find(path) and !options[:force]) ? raise(Errno::EEXIST, path) : FileSystem.delete(path)
+      FileSystem.add(path, FakeSymlink.new(target))
+    end
+
+
+ +
+ +
+
+ + ln_sf(target, path) + +
+ + + + +
+ +
+
# File lib/fakefs/fileutils.rb, line 37
+    def ln_sf(target, path)
+      ln_s(target, path, { :force => true })
+    end
+
+
+ +
+ +
+
+ + mkdir_p(path, options = {}) + +
+ + +
+ This method is also aliased as + + mkpath + +
+ + + +
+ +
+
# File lib/fakefs/fileutils.rb, line 5
+    def mkdir_p(path, options = {})
+      FileSystem.add(path, FakeDir.new)
+    end
+
+
+ +
+ +
+
+ + mkpath(path, options = {}) + +
+ +
+

+Alias for mkdir_p +

+ +
+ + + +
+ +
+
+ + mv(src, dest, options={}) + +
+ + + + +
+ +
+
# File lib/fakefs/fileutils.rb, line 89
+    def mv(src, dest, options={})
+      if target = FileSystem.find(src)
+        FileSystem.add(dest, target.entry.clone)
+        FileSystem.delete(src)
+      else
+        raise Errno::ENOENT, src
+      end
+    end
+
+
+ +
+ +
+
+ + rm(list, options = {}) + +
+ + +
+ This method is also aliased as + + rm_rf + + rm_r + + rm_f + +
+ + + +
+ +
+
# File lib/fakefs/fileutils.rb, line 22
+    def rm(list, options = {})
+      Array(list).each do |path|
+        FileSystem.delete(path)
+      end
+    end
+
+
+ +
+ +
+
+ + rm_f(list, options = {}) + +
+ +
+

+Alias for rm +

+ +
+ + + +
+ +
+
+ + rm_r(list, options = {}) + +
+ +
+

+Alias for rm +

+ +
+ + + +
+ +
+
+ + rm_rf(list, options = {}) + +
+ +
+

+Alias for rm +

+ +
+ + + +
+ +
+
+ + rmdir(list, options = {}) + +
+ + + + +
+ +
+
# File lib/fakefs/fileutils.rb, line 10
+    def rmdir(list, options = {})
+      list = [ list ] unless list.is_a?(Array)
+      list.each do |l|
+        parent = l.split('/')
+        parent.pop
+        raise Errno::ENOENT, "No such file or directory - #{l}" unless parent.join == "" || FileSystem.find(parent.join('/'))
+        raise Errno::ENOENT, l unless FileSystem.find(l)
+        raise Errno::ENOTEMPTY, l unless FileSystem.find(l).values.empty?
+        rm(l)
+      end
+    end
+
+
+ +
+ +
+
+ + touch(list, options={}) + +
+ + + + +
+ +
+
# File lib/fakefs/fileutils.rb, line 112
+    def touch(list, options={})
+      Array(list).each do |f|
+        directory = File.dirname(f)
+        # FIXME this explicit check for '.' shouldn't need to happen
+        if File.exists?(directory) || directory == '.'
+          FileSystem.add(f, FakeFile.new)
+        else
+          raise Errno::ENOENT, f
+        end
+      end
+    end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/FakeFS/SpecHelpers.html b/classes/FakeFS/SpecHelpers.html new file mode 100644 index 0000000..a77448f --- /dev/null +++ b/classes/FakeFS/SpecHelpers.html @@ -0,0 +1,172 @@ + + + + + FakeFS::SpecHelpers + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
E
+
+ +
+ +
I
+
+ +
+ +
U
+
+ +
+ +
+ + + + + + + + + + + + + +
Class Public methods
+ +
+
+ + extended(example_group) + +
+ + + + +
+ +
+
# File lib/fakefs/spec_helpers.rb, line 27
+    def self.extended(example_group)
+      example_group.use_fakefs(example_group)
+    end
+
+
+ +
+ +
+
+ + included(example_group) + +
+ + + + +
+ +
+
# File lib/fakefs/spec_helpers.rb, line 31
+    def self.included(example_group)
+      example_group.extend self
+    end
+
+
+ +
+ +
Instance Public methods
+ +
+
+ + use_fakefs(describe_block) + +
+ + + + +
+ +
+
# File lib/fakefs/spec_helpers.rb, line 35
+    def use_fakefs(describe_block)
+      describe_block.before :each do
+        FakeFS.activate!
+      end
+
+      describe_block.after :each do
+        FakeFS.deactivate!
+        FakeFS::FileSystem.clear
+      end
+    end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/FakeFS/Version.html b/classes/FakeFS/Version.html new file mode 100644 index 0000000..0f20583 --- /dev/null +++ b/classes/FakeFS/Version.html @@ -0,0 +1,107 @@ + + + + + FakeFS::Version + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
T
+
+ +
+ +
+ + + + + + + + + +
Constants
+ + + + + + + + + +
VERSION="0.3.0"
+ + + + + +
Class Public methods
+ +
+
+ + to_s() + +
+ + + + +
+ +
+
# File lib/fakefs/version.rb, line 5
+    def self.to_s
+      VERSION
+    end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/classes/Object.html b/classes/Object.html new file mode 100644 index 0000000..422fbf3 --- /dev/null +++ b/classes/Object.html @@ -0,0 +1,103 @@ + + + + + Object + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
F
+
+ +
+ +
+ + + + + + + + + + + + + +
Instance Public methods
+ +
+
+ + FakeFS() + +
+ + + + +
+ +
+
# File lib/fakefs/base.rb, line 38
+def FakeFS
+  return ::FakeFS unless block_given?
+  ::FakeFS.activate!
+  yield
+ensure
+::FakeFS.deactivate!
+end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/created.rid b/created.rid new file mode 100644 index 0000000..9688812 --- /dev/null +++ b/created.rid @@ -0,0 +1 @@ +Sat, 18 Dec 2010 14:13:30 -0500 diff --git a/css/main.css b/css/main.css new file mode 100755 index 0000000..4b403ad --- /dev/null +++ b/css/main.css @@ -0,0 +1,278 @@ +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; +} + +table +{ + margin-bottom: 1em; +} + +td, th +{ + padding: 0 0.7em 0.3em 0; +} + +th +{ + font-weight: bold; +} + +.clear +{ + clear: both; + width: 0; height: 0; +} + +dt +{ + margin-bottom: 0.3em; + font-weight: bold; +} + +dd +{ + margin-left: 2em; + margin-bottom: 1em; +} + +dd p +{ + margin-top: 0.6em; +} + +li +{ + margin: 0 0 0.5em 2em; +} + +ul li +{ + list-style: disc; +} + +ol li +{ + list-style: decimal; +} + +.banner +{ + background: #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 0000000..5390c92 --- /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 0000000..13f8e0a --- /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 0000000..e0e80cf Binary files /dev/null and b/favicon.ico differ diff --git a/files/CONTRIBUTORS.html b/files/CONTRIBUTORS.html new file mode 100644 index 0000000..78fe134 --- /dev/null +++ b/files/CONTRIBUTORS.html @@ -0,0 +1,121 @@ + + + + + CONTRIBUTORS + + + + + + + + + + + +
+
+ +
+
    +
  • Chris Wanstrath + +
  • +
  • Scott Taylor + +
  • +
  • Jeff Hodges + +
  • +
  • Pat Nakajima + +
  • +
  • Myles Eftos + +
  • +
  • Matt Freels + +
  • +
  • Nick Quaranto + +
  • +
  • Tymon Tobolski + +
  • +
  • Ben Mabey + +
  • +
  • Jon Yurek + +
  • +
  • Scott Barron + +
  • +
  • dmathieu + +
  • +
  • Rob Sanheim + +
  • +
  • David Reese + +
  • +
  • msassak + +
  • +
  • Sam Goldstein + +
  • +
  • jameswilding + +
  • +
  • Greg Campbell + +
  • +
  • Thiago Marano + +
  • +
  • Víctor Martínez + +
  • +
  • Victor Costan + +
  • +
+ +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/LICENSE.html b/files/LICENSE.html new file mode 100644 index 0000000..0b56992 --- /dev/null +++ b/files/LICENSE.html @@ -0,0 +1,81 @@ + + + + + LICENSE + + + + + + + + + + + +
+
+ +
+

+Copyright © 2009 Chris Wanstrath +

+

+Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +“Software”), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, +publish, distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to the +following conditions: +

+

+The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. +

+

+THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +USE OR OTHER DEALINGS IN THE SOFTWARE. +

+ +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/README_markdown.html b/files/README_markdown.html new file mode 100644 index 0000000..f0f945e --- /dev/null +++ b/files/README_markdown.html @@ -0,0 +1,234 @@ + + + + + README.markdown + + + + + + + + + + + +
+
+ +
+

+FakeFS +

+
+

+Mocha is great. But when your library is all about manipulating the +filesystem, you really want to test the behavior and not the +implementation. +

+

+If you’re mocking and stubbing every call to FileUtils or File, +you’re tightly coupling your tests with the implementation. +

+
+    def test_creates_directory
+      FileUtils.expects(:mkdir).with("directory").once
+      Library.add "directory"
+    end
+
+

+The above test will break if we decide to use `mkdir_p` in our code. +Refactoring code shouldn’t necessitate refactoring tests. +

+

+With FakeFS: +

+
+    def test_creates_directory
+      Library.add "directory"
+      assert File.directory?("directory")
+    end
+
+

+Woot. +

+

+Usage +

+
+    require 'fakefs'
+
+    # That's it.
+
+

+Don’t Fake the FS Immediately +

+
+    require 'fakefs/safe'
+
+    FakeFS.activate!
+    # your code
+    FakeFS.deactivate!
+
+    # or
+    FakeFS do
+      # your code
+    end
+
+

+RSpec +

+

+The above approach works with RSpec as well. In addition you may include FakeFS::SpecHelpers to turn +FakeFS on and off in a given example +group: +

+
+    require 'fakefs/spec_helpers'
+
+    describe "my spec" do
+      include FakeFS::SpecHelpers
+    end
+
+

+See `lib/fakefs/spec_helpers.rb` for +more info. +

+

+How is this different than MockFS? +

+

+FakeFS provides a test suite and works +with symlinks. It’s also strictly a test-time dependency: your actual +library does not need to use or know about FakeFS. +

+

+Caveats +

+

+FakeFS internally uses the `Pathname` +and `FileUtils` constants. If you use these in your app, be certain +you’re properly requiring them and not counting on FakeFS’ own +require. +

+

+Speed? +

+

+<gist.github.com/156091> +

+

+Installation +

+

+### [Gemcutter](gemcutter.org/) +

+
+    $ gem install fakefs
+
+

+### [Rip](hellorip.com) +

+
+    $ rip install git://github.com/defunkt/fakefs.git
+
+

+Contributing +

+

+Once you’ve made your great commits: +

+
    +
  1. [Fork][0] FakeFS + +
  2. +
  3. Create a topic branch - `git checkout -b my_branch` + +
  4. +
  5. Push to your branch - `git push origin my_branch` + +
  6. +
  7. Create an [Issue][1] with a link to your branch + +
  8. +
  9. That’s it! + +
  10. +
+

+Meta +

+
+

+[0]: help.github.com/forking/ +[1]: github.com/defunkt/fakefs/issues +

+ +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/fakefs/base_rb.html b/files/lib/fakefs/base_rb.html new file mode 100644 index 0000000..f75112b --- /dev/null +++ b/files/lib/fakefs/base_rb.html @@ -0,0 +1,94 @@ + + + + + base.rb + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
Classes and Modules
+ + + + +
Constants
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RealFile=File
RealFileTest=FileTest
RealFileUtils=FileUtils
RealDir=Dir
+ + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/fakefs/dir_rb.html b/files/lib/fakefs/dir_rb.html new file mode 100644 index 0000000..f4b0571 --- /dev/null +++ b/files/lib/fakefs/dir_rb.html @@ -0,0 +1,59 @@ + + + + + dir.rb + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
Classes and Modules
+ + + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/fakefs/fake/dir_rb.html b/files/lib/fakefs/fake/dir_rb.html new file mode 100644 index 0000000..bc1ecc7 --- /dev/null +++ b/files/lib/fakefs/fake/dir_rb.html @@ -0,0 +1,59 @@ + + + + + dir.rb + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
Classes and Modules
+ + + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/fakefs/fake/file_rb.html b/files/lib/fakefs/fake/file_rb.html new file mode 100644 index 0000000..26e99b3 --- /dev/null +++ b/files/lib/fakefs/fake/file_rb.html @@ -0,0 +1,59 @@ + + + + + file.rb + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
Classes and Modules
+ + + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/fakefs/fake/symlink_rb.html b/files/lib/fakefs/fake/symlink_rb.html new file mode 100644 index 0000000..e1cfabe --- /dev/null +++ b/files/lib/fakefs/fake/symlink_rb.html @@ -0,0 +1,59 @@ + + + + + symlink.rb + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
Classes and Modules
+ + + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/fakefs/file_rb.html b/files/lib/fakefs/file_rb.html new file mode 100644 index 0000000..3e91ce7 --- /dev/null +++ b/files/lib/fakefs/file_rb.html @@ -0,0 +1,66 @@ + + + + + file.rb + + + + + + + + + + + +
+
+ + + +
Required Files
+ + + + + + + + + + + + + + +
Classes and Modules
+ + + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/fakefs/file_system_rb.html b/files/lib/fakefs/file_system_rb.html new file mode 100644 index 0000000..1859510 --- /dev/null +++ b/files/lib/fakefs/file_system_rb.html @@ -0,0 +1,59 @@ + + + + + file_system.rb + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
Classes and Modules
+ + + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/fakefs/file_test_rb.html b/files/lib/fakefs/file_test_rb.html new file mode 100644 index 0000000..a1513ba --- /dev/null +++ b/files/lib/fakefs/file_test_rb.html @@ -0,0 +1,59 @@ + + + + + file_test.rb + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
Classes and Modules
+ + + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/fakefs/fileutils_rb.html b/files/lib/fakefs/fileutils_rb.html new file mode 100644 index 0000000..4f2f3dd --- /dev/null +++ b/files/lib/fakefs/fileutils_rb.html @@ -0,0 +1,59 @@ + + + + + fileutils.rb + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
Classes and Modules
+ + + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/fakefs/safe_rb.html b/files/lib/fakefs/safe_rb.html new file mode 100644 index 0000000..f91ca00 --- /dev/null +++ b/files/lib/fakefs/safe_rb.html @@ -0,0 +1,79 @@ + + + + + safe.rb + + + + + + + + + + + +
+
+ + + +
Required Files
+ + + + + + + + + + + + + + + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/fakefs/spec_helpers_rb.html b/files/lib/fakefs/spec_helpers_rb.html new file mode 100644 index 0000000..7891ff3 --- /dev/null +++ b/files/lib/fakefs/spec_helpers_rb.html @@ -0,0 +1,104 @@ + + + + + spec_helpers.rb + + + + + + + + + + + +
+
+ +
+

+FakeFS::SpecHelpers +provides a simple macro for RSpec example groups to turn FakeFS on and off. To use it simply +require ‘fakefs/spec_helpers’, then include FakeFS::SpecHelpers +into any example groups that you wish to use FakeFS in. For example: +

+
+  require 'fakefs/spec_helpers'
+
+  describe "Some specs that deal with files" do
+    include FakeFS::SpecHelpers
+    ...
+  end
+
+

+Alternatively, you can include FakeFS::SpecHelpers in +all your example groups using RSpec’s configuration block in your +spec helper: +

+
+  require 'fakefs/spec_helpers'
+
+  Spec::Runner.configure do |config|
+    config.include FakeFS::SpecHelpers
+  end
+
+

+If you do the above then use_fakefs will be available in all of your +example groups. +

+ +
+ + + +
Required Files
+ + + + + + + + + + + + + + +
Classes and Modules
+ + + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/fakefs/version_rb.html b/files/lib/fakefs/version_rb.html new file mode 100644 index 0000000..8f58634 --- /dev/null +++ b/files/lib/fakefs/version_rb.html @@ -0,0 +1,59 @@ + + + + + version.rb + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
Classes and Modules
+ + + + + + + + +
+
+ + \ No newline at end of file diff --git a/files/lib/fakefs_rb.html b/files/lib/fakefs_rb.html new file mode 100644 index 0000000..7b0e8df --- /dev/null +++ b/files/lib/fakefs_rb.html @@ -0,0 +1,59 @@ + + + + + fakefs.rb + + + + + + + + + + + +
+
+ + + +
Required Files
+ + + + + + + + + + + + + + + + + + + + +
+
+ + \ No newline at end of file diff --git a/i/arrows.png b/i/arrows.png new file mode 100755 index 0000000..e54060f 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 0000000..199ba69 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 0000000..7d23663 Binary files /dev/null and b/i/tree_bg.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..d906c82 --- /dev/null +++ b/index.html @@ -0,0 +1,14 @@ + + + + + + RDoc Documentation + + + + + + diff --git a/js/jquery-1.3.2.min.js b/js/jquery-1.3.2.min.js new file mode 100755 index 0000000..b1ae21d --- /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 0000000..5b25307 --- /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 0000000..31e96c3 --- /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 0000000..06b278e --- /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 0000000..683c626 --- /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 0000000..9ea0a67 --- /dev/null +++ b/panel/search_index.js @@ -0,0 +1 @@ +var search_data = {"index":{"searchIndex":["fakefs","dir","fakedir","fakefile","inode","fakesymlink","file","stat","filesystem","filetest","fileutils","spechelpers","version","object","fakefs()","[]()","activate!()","add()","atime()","autoclose?()","basename()","binmode?()","cd()","chdir()","chdir()","chdir()","chmod()","chown()","chown()","chown_r()","chroot()","clear()","clone()","clone()","clone()","clone()","close()","close_on_exec=()","close_on_exec?()","const_missing()","content()","content=()","cp()","cp_r()","ctime()","ctime()","current_dir()","deactivate!()","delete()","delete()","delete()","delete()","delete()","delete()","dir_levels()","directory?()","directory?()","dirname()","each()","entries()","entry()","entry()","entry()","exist?()","exist?()","exists?()","expand_path()","extended()","extname()","file?()","files()","find()","flock()","foreach()","fs()","glob()","included()","inspect()","inspect()","inspect()","ioctl()","join()","link()","link()","link()","links()","ln_s()","ln_sf()","lstat()","lstat()","mkdir()","mkdir_p()","mkpath()","mtime()","mtime()","mv()","new()","new()","new()","new()","new()","new()","new()","nlink()","normalize_path()","open()","path()","path_parts()","pos()","pos=()","pwd()","read()","read()","read_nonblock()","readlines()","readlink()","readpartial()","respond_to?()","rewind()","rm()","rm_f()","rm_r()","rm_rf()","rmdir()","seek()","size()","size()","size()","size?()","stat()","stat()","symlink()","symlink?()","symlink?()","sysseek()","tmpdir()","to_io()","to_path()","to_s()","to_s()","to_s()","touch()","unlink()","use_fakefs()","write_nonblock()","contributors","license","readme.markdown","fakefs.rb","base.rb","dir.rb","dir.rb","file.rb","symlink.rb","file.rb","file_system.rb","file_test.rb","fileutils.rb","safe.rb","spec_helpers.rb","version.rb"],"info":[["FakeFS","lib/fakefs/base.rb","classes/FakeFS.html"," < ","",1],["Dir","FakeFS","classes/FakeFS/Dir.html"," < Object","",1],["FakeDir","FakeFS","classes/FakeFS/FakeDir.html"," < Hash","",1],["FakeFile","FakeFS","classes/FakeFS/FakeFile.html"," < Object","",1],["Inode","FakeFS::FakeFile","classes/FakeFS/FakeFile/Inode.html"," < Object","",1],["FakeSymlink","FakeFS","classes/FakeFS/FakeSymlink.html"," < Object","",1],["File","FakeFS","classes/FakeFS/File.html"," < StringIO","",1],["Stat","FakeFS::File","classes/FakeFS/File/Stat.html"," < Object","",1],["FileSystem","FakeFS","classes/FakeFS/FileSystem.html"," < ","",1],["FileTest","FakeFS","classes/FakeFS/FileTest.html"," < Object","",1],["FileUtils","FakeFS","classes/FakeFS/FileUtils.html"," < ","",1],["SpecHelpers","FakeFS","classes/FakeFS/SpecHelpers.html"," < ","",1],["Version","FakeFS","classes/FakeFS/Version.html"," < ","",1],["Object","lib/fakefs/base.rb","classes/Object.html"," < Object","",1],["FakeFS","Object","classes/Object.html#M000004","()","",2],["[]","FakeFS::Dir","classes/FakeFS/Dir.html#M000012","(pattern)","",2],["activate!","FakeFS","classes/FakeFS.html#M000000","()","",2],["add","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000059","(path, object=FakeDir.new)","",2],["atime","FakeFS::File","classes/FakeFS/File.html#M000100","()","",2],["autoclose?","FakeFS::File","classes/FakeFS/File.html#M000110","()","",2],["basename","FakeFS::File","classes/FakeFS/File.html#M000071","(*args)","",2],["binmode?","FakeFS::File","classes/FakeFS/File.html#M000106","()","",2],["cd","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000137","(dir)","",2],["chdir","FakeFS::Dir","classes/FakeFS/Dir.html#M000013","(dir, &blk)","",2],["chdir","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000069","(dir, &blk)","",2],["chdir","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000138","(dir)","Alias for #cd",2],["chmod","FakeFS::File","classes/FakeFS/File.html#M000101","(mode_int)","",2],["chown","FakeFS::File","classes/FakeFS/File.html#M000102","(owner_int, group_int)","",2],["chown","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000131","(user, group, list, options={})","",2],["chown_R","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000135","(user, group, list, options={})","",2],["chroot","FakeFS::Dir","classes/FakeFS/Dir.html#M000014","(string)","",2],["clear","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000052","()","",2],["clone","FakeFS::FakeDir","classes/FakeFS/FakeDir.html#M000026","(parent = nil)","",2],["clone","FakeFS::FakeFile","classes/FakeFS/FakeFile.html#M000038","(parent = nil)","",2],["clone","FakeFS::FakeFile::Inode","classes/FakeFS/FakeFile/Inode.html#M000032","()","",2],["clone","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000064","(path)","copies directories and files from the real filesystem into our fake one ",2],["close","FakeFS::Dir","classes/FakeFS/Dir.html#M000003","()","",2],["close_on_exec=","FakeFS::File","classes/FakeFS/File.html#M000107","(bool)","",2],["close_on_exec?","FakeFS::File","classes/FakeFS/File.html#M000108","()","",2],["const_missing","FakeFS::File","classes/FakeFS/File.html#M000062","(name)","",2],["content","FakeFS::FakeFile","classes/FakeFS/FakeFile.html#M000034","()","",2],["content=","FakeFS::FakeFile","classes/FakeFS/FakeFile.html#M000035","(str)","",2],["cp","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000128","(src, dest)","",2],["cp_r","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000129","(src, dest)","",2],["ctime","FakeFS::File","classes/FakeFS/File.html#M000103","()","",2],["ctime","FakeFS::File","classes/FakeFS/File.html#M000058","(path)","",2],["current_dir","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000077","()","",2],["deactivate!","FakeFS","classes/FakeFS.html#M000001","()","",2],["delete","FakeFS::Dir","classes/FakeFS/Dir.html#M000015","(string)","",2],["delete","FakeFS::FakeDir","classes/FakeFS/FakeDir.html#M000028","(node = self)","",2],["delete","FakeFS::FakeFile","classes/FakeFS/FakeFile.html#M000042","()","",2],["delete","FakeFS::FakeSymlink","classes/FakeFS/FakeSymlink.html#M000046","()","",2],["delete","FakeFS::File","classes/FakeFS/File.html#M000080","(file_name, *additional_file_names)","",2],["delete","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000068","(path)","",2],["dir_levels","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000050","()","",2],["directory?","FakeFS::File","classes/FakeFS/File.html#M000063","(path)","",2],["directory?","FakeFS::File::Stat","classes/FakeFS/File/Stat.html#M000087","()","",2],["dirname","FakeFS::File","classes/FakeFS/File.html#M000072","(path)","",2],["each","FakeFS::Dir","classes/FakeFS/Dir.html#M000005","(&block)","",2],["entries","FakeFS::Dir","classes/FakeFS/Dir.html#M000016","(dirname)","",2],["entry","FakeFS::FakeDir","classes/FakeFS/FakeDir.html#M000024","()","",2],["entry","FakeFS::FakeFile","classes/FakeFS/FakeFile.html#M000039","()","",2],["entry","FakeFS::FakeSymlink","classes/FakeFS/FakeSymlink.html#M000045","()","",2],["exist?","FakeFS::File","classes/FakeFS/File.html#M000056","(path)","",2],["exist?","FakeFS::FileTest","classes/FakeFS/FileTest.html#M000118","(file_name)","",2],["exists?","FakeFS::File","classes/FakeFS/File.html#M000091","()","",2],["expand_path","FakeFS::File","classes/FakeFS/File.html#M000067","(*args)","",2],["extended","FakeFS::SpecHelpers","classes/FakeFS/SpecHelpers.html#M000132","(example_group)","",2],["extname","FakeFS::File","classes/FakeFS/File.html#M000049","(path)","",2],["file?","FakeFS::File","classes/FakeFS/File.html#M000066","(path)","",2],["files","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000053","()","",2],["find","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000054","(path)","",2],["flock","FakeFS::File","classes/FakeFS/File.html#M000104","(locking_constant)","",2],["foreach","FakeFS::Dir","classes/FakeFS/Dir.html#M000017","(dirname, &block)","",2],["fs","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000051","()","",2],["glob","FakeFS::Dir","classes/FakeFS/Dir.html#M000018","(pattern)","",2],["included","FakeFS::SpecHelpers","classes/FakeFS/SpecHelpers.html#M000133","(example_group)","",2],["inspect","FakeFS::FakeDir","classes/FakeFS/FakeDir.html#M000025","()","",2],["inspect","FakeFS::FakeFile","classes/FakeFS/FakeFile.html#M000040","()","",2],["inspect","FakeFS::FakeSymlink","classes/FakeFS/FakeSymlink.html#M000044","()","",2],["ioctl","FakeFS::File","classes/FakeFS/File.html#M000092","(integer_cmd, arg)","",2],["join","FakeFS::File","classes/FakeFS/File.html#M000055","(*parts)","",2],["link","FakeFS::FakeFile","classes/FakeFS/FakeFile.html#M000037","(other_file)","",2],["link","FakeFS::FakeFile::Inode","classes/FakeFS/FakeFile/Inode.html#M000030","(file)","",2],["link","FakeFS::File","classes/FakeFS/File.html#M000079","(source, dest)","",2],["links","FakeFS::FakeFile","classes/FakeFS/FakeFile.html#M000036","()","",2],["ln_s","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000126","(target, path, options = {})","",2],["ln_sf","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000127","(target, path)","",2],["lstat","FakeFS::File","classes/FakeFS/File.html#M000083","(file)","",2],["lstat","FakeFS::File","classes/FakeFS/File.html#M000095","()","",2],["mkdir","FakeFS::Dir","classes/FakeFS/Dir.html#M000019","(string, integer = 0)","",2],["mkdir_p","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000119","(path, options = {})","",2],["mkpath","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000120","(path, options = {})","Alias for #mkdir_p",2],["mtime","FakeFS::File","classes/FakeFS/File.html#M000105","()","",2],["mtime","FakeFS::File","classes/FakeFS/File.html#M000057","(path)","",2],["mv","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000130","(src, dest, options={})","",2],["new","FakeFS::Dir","classes/FakeFS/Dir.html#M000002","(string)","",2],["new","FakeFS::FakeDir","classes/FakeFS/FakeDir.html#M000023","(name = nil, parent = nil)","",2],["new","FakeFS::FakeFile","classes/FakeFS/FakeFile.html#M000033","(name = nil, parent = nil)","",2],["new","FakeFS::FakeFile::Inode","classes/FakeFS/FakeFile/Inode.html#M000029","(file_owner)","",2],["new","FakeFS::FakeSymlink","classes/FakeFS/FakeSymlink.html#M000043","(target)","",2],["new","FakeFS::File","classes/FakeFS/File.html#M000090","(path, mode = READ_ONLY, perm = nil)","",2],["new","FakeFS::File::Stat","classes/FakeFS/File/Stat.html#M000084","(file, __lstat = false)","",2],["nlink","FakeFS::File::Stat","classes/FakeFS/File/Stat.html#M000088","()","",2],["normalize_path","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000076","(path)","",2],["open","FakeFS::Dir","classes/FakeFS/Dir.html#M000020","(string, &block)","",2],["path","FakeFS::Dir","classes/FakeFS/Dir.html#M000006","()","",2],["path_parts","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000070","(path)","",2],["pos","FakeFS::Dir","classes/FakeFS/Dir.html#M000007","()","",2],["pos=","FakeFS::Dir","classes/FakeFS/Dir.html#M000008","(integer)","",2],["pwd","FakeFS::Dir","classes/FakeFS/Dir.html#M000022","()","",2],["read","FakeFS::Dir","classes/FakeFS/Dir.html#M000009","()","",2],["read","FakeFS::File","classes/FakeFS/File.html#M000074","(path)","",2],["read_nonblock","FakeFS::File","classes/FakeFS/File.html#M000093","(maxlen, outbuf = nil)","",2],["readlines","FakeFS::File","classes/FakeFS/File.html#M000075","(path)","",2],["readlink","FakeFS::File","classes/FakeFS/File.html#M000073","(path)","",2],["readpartial","FakeFS::File","classes/FakeFS/File.html#M000099","(maxlen, outbuf = nil)","",2],["respond_to?","FakeFS::FakeSymlink","classes/FakeFS/FakeSymlink.html#M000047","(method)","",2],["rewind","FakeFS::Dir","classes/FakeFS/Dir.html#M000010","()","",2],["rm","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000122","(list, options = {})","",2],["rm_f","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000125","(list, options = {})","Alias for #rm",2],["rm_r","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000124","(list, options = {})","Alias for #rm",2],["rm_rf","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000123","(list, options = {})","Alias for #rm",2],["rmdir","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000121","(list, options = {})","",2],["seek","FakeFS::Dir","classes/FakeFS/Dir.html#M000011","(integer)","",2],["size","FakeFS::File","classes/FakeFS/File.html#M000111","()","",2],["size","FakeFS::File","classes/FakeFS/File.html#M000060","(path)","",2],["size","FakeFS::File::Stat","classes/FakeFS/File/Stat.html#M000089","()","",2],["size?","FakeFS::File","classes/FakeFS/File.html#M000061","(path)","",2],["stat","FakeFS::File","classes/FakeFS/File.html#M000082","(file)","",2],["stat","FakeFS::File","classes/FakeFS/File.html#M000094","()","",2],["symlink","FakeFS::File","classes/FakeFS/File.html#M000081","(source, dest)","",2],["symlink?","FakeFS::File","classes/FakeFS/File.html#M000065","(path)","",2],["symlink?","FakeFS::File::Stat","classes/FakeFS/File/Stat.html#M000086","()","",2],["sysseek","FakeFS::File","classes/FakeFS/File.html#M000096","(position, whence = SEEK_SET)","",2],["tmpdir","FakeFS::Dir","classes/FakeFS/Dir.html#M000021","()","",2],["to_io","FakeFS::File","classes/FakeFS/File.html#M000097","()","",2],["to_path","FakeFS::File","classes/FakeFS/File.html#M000109","()","",2],["to_s","FakeFS::FakeDir","classes/FakeFS/FakeDir.html#M000027","()","",2],["to_s","FakeFS::FakeFile","classes/FakeFS/FakeFile.html#M000041","()","",2],["to_s","FakeFS::Version","classes/FakeFS/Version.html#M000139","()","",2],["touch","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000136","(list, options={})","",2],["unlink","FakeFS::FakeFile::Inode","classes/FakeFS/FakeFile/Inode.html#M000031","(file)","",2],["use_fakefs","FakeFS::SpecHelpers","classes/FakeFS/SpecHelpers.html#M000134","(describe_block)","",2],["write_nonblock","FakeFS::File","classes/FakeFS/File.html#M000098","(string)","",2],["CONTRIBUTORS","files/CONTRIBUTORS.html","files/CONTRIBUTORS.html","","* Chris Wanstrath * Scott Taylor * Jeff Hodges * Pat Nakajima * Myles Eftos * Matt Freels * Nick Quaranto",3],["LICENSE","files/LICENSE.html","files/LICENSE.html","","Copyright (c) 2009 Chris Wanstrath Permission is hereby granted, free of charge, to any person obtaining",3],["README.markdown","files/README_markdown.html","files/README_markdown.html","","FakeFS ====== Mocha is great. But when your library is all about manipulating the filesystem, you really",3],["fakefs.rb","files/lib/fakefs_rb.html","files/lib/fakefs_rb.html","","",3],["base.rb","files/lib/fakefs/base_rb.html","files/lib/fakefs/base_rb.html","","",3],["dir.rb","files/lib/fakefs/dir_rb.html","files/lib/fakefs/dir_rb.html","","",3],["dir.rb","files/lib/fakefs/fake/dir_rb.html","files/lib/fakefs/fake/dir_rb.html","","",3],["file.rb","files/lib/fakefs/fake/file_rb.html","files/lib/fakefs/fake/file_rb.html","","",3],["symlink.rb","files/lib/fakefs/fake/symlink_rb.html","files/lib/fakefs/fake/symlink_rb.html","","",3],["file.rb","files/lib/fakefs/file_rb.html","files/lib/fakefs/file_rb.html","","",3],["file_system.rb","files/lib/fakefs/file_system_rb.html","files/lib/fakefs/file_system_rb.html","","",3],["file_test.rb","files/lib/fakefs/file_test_rb.html","files/lib/fakefs/file_test_rb.html","","",3],["fileutils.rb","files/lib/fakefs/fileutils_rb.html","files/lib/fakefs/fileutils_rb.html","","",3],["safe.rb","files/lib/fakefs/safe_rb.html","files/lib/fakefs/safe_rb.html","","",3],["spec_helpers.rb","files/lib/fakefs/spec_helpers_rb.html","files/lib/fakefs/spec_helpers_rb.html","","FakeFS::SpecHelpers provides a simple macro for RSpec example groups to turn FakeFS on and off. To use",3],["version.rb","files/lib/fakefs/version_rb.html","files/lib/fakefs/version_rb.html","","",3]],"longSearchIndex":["lib/fakefs/version.rb","fakefs","fakefs","fakefs","fakefs::fakefile","fakefs","fakefs","fakefs::file","fakefs","fakefs","fakefs","fakefs","fakefs","lib/fakefs/base.rb","object","fakefs::dir","fakefs","fakefs::filesystem","fakefs::file","fakefs::file","fakefs::file","fakefs::file","fakefs::fileutils","fakefs::dir","fakefs::filesystem","fakefs::fileutils","fakefs::file","fakefs::file","fakefs::fileutils","fakefs::fileutils","fakefs::dir","fakefs::filesystem","fakefs::fakedir","fakefs::fakefile","fakefs::fakefile::inode","fakefs::filesystem","fakefs::dir","fakefs::file","fakefs::file","fakefs::file","fakefs::fakefile","fakefs::fakefile","fakefs::fileutils","fakefs::fileutils","fakefs::file","fakefs::file","fakefs::filesystem","fakefs","fakefs::dir","fakefs::fakedir","fakefs::fakefile","fakefs::fakesymlink","fakefs::file","fakefs::filesystem","fakefs::filesystem","fakefs::file","fakefs::file::stat","fakefs::file","fakefs::dir","fakefs::dir","fakefs::fakedir","fakefs::fakefile","fakefs::fakesymlink","fakefs::file","fakefs::filetest","fakefs::file","fakefs::file","fakefs::spechelpers","fakefs::file","fakefs::file","fakefs::filesystem","fakefs::filesystem","fakefs::file","fakefs::dir","fakefs::filesystem","fakefs::dir","fakefs::spechelpers","fakefs::fakedir","fakefs::fakefile","fakefs::fakesymlink","fakefs::file","fakefs::file","fakefs::fakefile","fakefs::fakefile::inode","fakefs::file","fakefs::fakefile","fakefs::fileutils","fakefs::fileutils","fakefs::file","fakefs::file","fakefs::dir","fakefs::fileutils","fakefs::fileutils","fakefs::file","fakefs::file","fakefs::fileutils","fakefs::dir","fakefs::fakedir","fakefs::fakefile","fakefs::fakefile::inode","fakefs::fakesymlink","fakefs::file","fakefs::file::stat","fakefs::file::stat","fakefs::filesystem","fakefs::dir","fakefs::dir","fakefs::filesystem","fakefs::dir","fakefs::dir","fakefs::dir","fakefs::dir","fakefs::file","fakefs::file","fakefs::file","fakefs::file","fakefs::file","fakefs::fakesymlink","fakefs::dir","fakefs::fileutils","fakefs::fileutils","fakefs::fileutils","fakefs::fileutils","fakefs::fileutils","fakefs::dir","fakefs::file","fakefs::file","fakefs::file::stat","fakefs::file","fakefs::file","fakefs::file","fakefs::file","fakefs::file","fakefs::file::stat","fakefs::file","fakefs::dir","fakefs::file","fakefs::file","fakefs::fakedir","fakefs::fakefile","fakefs::version","fakefs::fileutils","fakefs::fakefile::inode","fakefs::spechelpers","fakefs::file","files/contributors.html","files/license.html","files/readme_markdown.html","files/lib/fakefs_rb.html","files/lib/fakefs/base_rb.html","files/lib/fakefs/dir_rb.html","files/lib/fakefs/fake/dir_rb.html","files/lib/fakefs/fake/file_rb.html","files/lib/fakefs/fake/symlink_rb.html","files/lib/fakefs/file_rb.html","files/lib/fakefs/file_system_rb.html","files/lib/fakefs/file_test_rb.html","files/lib/fakefs/fileutils_rb.html","files/lib/fakefs/safe_rb.html","files/lib/fakefs/spec_helpers_rb.html","files/lib/fakefs/version_rb.html"]}} \ No newline at end of file diff --git a/panel/tree.js b/panel/tree.js new file mode 100644 index 0000000..6d936b9 --- /dev/null +++ b/panel/tree.js @@ -0,0 +1 @@ +var tree = [["","","files",[["CONTRIBUTORS","files/CONTRIBUTORS.html","",[]],["LICENSE","files/LICENSE.html","",[]],["README.markdown","files/README_markdown.html","",[]],["","","lib",[["","","fakefs",[["base.rb","files/lib/fakefs/base_rb.html","",[]],["dir.rb","files/lib/fakefs/dir_rb.html","",[]],["","","fake",[["dir.rb","files/lib/fakefs/fake/dir_rb.html","",[]],["file.rb","files/lib/fakefs/fake/file_rb.html","",[]],["symlink.rb","files/lib/fakefs/fake/symlink_rb.html","",[]]]],["file.rb","files/lib/fakefs/file_rb.html","",[]],["file_system.rb","files/lib/fakefs/file_system_rb.html","",[]],["file_test.rb","files/lib/fakefs/file_test_rb.html","",[]],["fileutils.rb","files/lib/fakefs/fileutils_rb.html","",[]],["safe.rb","files/lib/fakefs/safe_rb.html","",[]],["spec_helpers.rb","files/lib/fakefs/spec_helpers_rb.html","",[]],["version.rb","files/lib/fakefs/version_rb.html","",[]]]],["fakefs.rb","files/lib/fakefs_rb.html","",[]]]]]],["FakeFS","classes/FakeFS.html","",[["Dir","classes/FakeFS/Dir.html"," < Object",[]],["FakeDir","classes/FakeFS/FakeDir.html"," < Hash",[]],["FakeFile","classes/FakeFS/FakeFile.html"," < Object",[["Inode","classes/FakeFS/FakeFile/Inode.html"," < Object",[]]]],["FakeSymlink","classes/FakeFS/FakeSymlink.html"," < Object",[]],["File","classes/FakeFS/File.html"," < StringIO",[["Stat","classes/FakeFS/File/Stat.html"," < Object",[]]]],["FileSystem","classes/FakeFS/FileSystem.html","",[]],["FileTest","classes/FakeFS/FileTest.html"," < Object",[]],["FileUtils","classes/FakeFS/FileUtils.html","",[]],["SpecHelpers","classes/FakeFS/SpecHelpers.html","",[]],["Version","classes/FakeFS/Version.html","",[]]]],["Object","classes/Object.html"," < Object",[]]] \ No newline at end of file