commit f3ab9f70b5b6bc8839f0ddf1e614fb3d02fdb39d Author: Chris Wanstrath Date: Tue Oct 6 21:44:05 2009 -0700 create docs 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..9ae4927 --- /dev/null +++ b/classes/FakeFS.html @@ -0,0 +1,184 @@ + + + + + FakeFS + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
A
+
+ +
+ +
D
+
+ +
+ +
+ + + + + + + +
Classes and Modules
+ + + + + + + + +
Class Public methods
+ +
+
+ + activate!() + +
+ + + + +
+ +
+
# File lib/fakefs/base.rb, line 8
+  def self.activate!
+    Object.class_eval do
+      remove_const(:Dir)
+      remove_const(:File)
+      remove_const(:FileUtils)
+      const_set(:Dir, FakeFS::Dir)
+      const_set(:File, FakeFS::File)
+      const_set(:FileUtils, FakeFS::FileUtils)
+    end
+  end
+
+
+ +
+ +
+
+ + deactivate!() + +
+ + + + +
+ +
+
# File lib/fakefs/base.rb, line 19
+  def self.deactivate!
+    Object.class_eval do
+      remove_const(:Dir)
+      remove_const(:File)
+      remove_const(:FileUtils)
+      const_set(:Dir, RealDir)
+      const_set(:File, RealFile)
+      const_set(:FileUtils, RealFileUtils)
+    end
+  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..86fe3b1 --- /dev/null +++ b/classes/FakeFS/Dir.html @@ -0,0 +1,775 @@ + + + + + FakeFS::Dir + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
#
+
+
    + +
  • []
  • + +
+
+ +
C
+
+ +
+ +
D
+
+ +
+ +
E
+
+ +
+ +
F
+
+ +
+ +
G
+
+ +
+ +
M
+
+ +
+ +
N
+
+ +
+ +
O
+
+ +
+ +
P
+
+ +
+ +
R
+
+ +
+ +
S
+
+ +
+ +
T
+
+ +
+ +
+ + + +
Included Modules
+
    + +
  • + + Enumerable + + START:includes +
  • + +
+ + + + + + + + + + + +
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 }
+    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('/'))
+      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 92
+    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 104
+    def self.pwd
+      FileSystem.current_dir.to_s
+    end
+
+
+ +
+ +
+
+ + tmpdir() + +
+ + + + +
+ +
+
# File lib/fakefs/dir.rb, line 100
+    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..697a00c --- /dev/null +++ b/classes/FakeFS/FakeDir.html @@ -0,0 +1,322 @@ + + + + + FakeFS::FakeDir + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
C
+
+ +
+ +
D
+
+ +
+ +
E
+
+ +
+ +
I
+
+ +
+ +
N
+
+ +
+ +
T
+
+ +
+ +
+ + + + + + + + + + + +
Attributes
+ + + + + + + + + + + + + + +
+ [RW] + name
+ [RW] + parent
+ + + +
Class Public methods
+ +
+
+ + new(name = nil, parent = nil) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/dir.rb, line 5
+    def initialize(name = nil, parent = nil)
+      @name = name
+      @parent = parent
+    end
+
+
+ +
+ +
Instance Public methods
+ +
+
+ + clone(parent = nil) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/dir.rb, line 18
+    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 37
+    def delete(node = self)
+      if node == self
+        parent.delete(self)
+      else
+        super(node.name)
+      end
+    end
+
+
+ +
+ +
+
+ + entry() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/dir.rb, line 10
+    def entry
+      self
+    end
+
+
+ +
+ +
+
+ + inspect() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/dir.rb, line 14
+    def inspect
+      "(FakeDir name:#{name.inspect} parent:#{parent.to_s.inspect} size:#{size})"
+    end
+
+
+ +
+ +
+
+ + to_s() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/dir.rb, line 27
+    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..8ed7748 --- /dev/null +++ b/classes/FakeFS/FakeFile.html @@ -0,0 +1,450 @@ + + + + + FakeFS::FakeFile + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
C
+
+ +
+ +
D
+
+ +
+ +
E
+
+ +
+ +
I
+
+ +
+ +
L
+
+ +
+ +
N
+
+ +
+ +
T
+
+ +
+ +
+ + + + + + + +
Classes and Modules
+ + + + + + +
Attributes
+ + + + + + + + + + + + + + + + + + + + +
+ [RW] + name
+ [RW] + parent
+ [RW] + inode
+ + + +
Class Public methods
+ +
+
+ + new(name = nil, parent = nil) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 24
+    def initialize(name = nil, parent = nil)
+      @name   = name
+      @parent = parent
+      @inode  = Inode.new(self)
+    end
+
+
+ +
+ +
Instance Public methods
+ +
+
+ + clone(parent = nil) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 48
+    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 32
+    def content
+      @inode.content
+    end
+
+
+ +
+ +
+
+ + content=(str) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 36
+    def content=(str)
+      @inode.content = str
+    end
+
+
+ +
+ +
+
+ + delete() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 67
+    def delete
+      inode.unlink(self)
+      parent.delete(self)
+    end
+
+
+ +
+ +
+
+ + entry() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 55
+    def entry
+      self
+    end
+
+
+ +
+ +
+
+ + inspect() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 59
+    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 44
+    def link(other_file)
+      @inode.link(other_file)
+    end
+
+
+ +
+ +
+
+ + links() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 40
+    def links
+      @inode.links
+    end
+
+
+ +
+ +
+
+ + to_s() + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 63
+    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..5f412d7 --- /dev/null +++ b/classes/FakeFS/FakeFile/Inode.html @@ -0,0 +1,200 @@ + + + + + FakeFS::FakeFile::Inode + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
L
+
+ +
+ +
N
+
+ +
+ +
U
+
+ +
+ +
+ + + + + + + + + + + +
Attributes
+ + + + + + + + + + + + + + +
+ [RW] + content
+ [RW] + links
+ + + +
Class Public methods
+ +
+
+ + new(file_owner) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 6
+      def initialize(file_owner)
+        @content = ""
+        @links   = [file_owner]
+      end
+
+
+ +
+ +
Instance Public methods
+ +
+
+ + link(file) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 14
+      def link(file)
+        links << file unless links.include?(file)
+        file.inode = self
+      end
+
+
+ +
+ +
+
+ + unlink(file) + +
+ + + + +
+ +
+
# File lib/fakefs/fake/file.rb, line 19
+      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..4a31649 --- /dev/null +++ b/classes/FakeFS/FakeSymlink.html @@ -0,0 +1,270 @@ + + + + + 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..c6f99fd --- /dev/null +++ b/classes/FakeFS/File.html @@ -0,0 +1,1100 @@ + + + + + FakeFS::File + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
#
+
+
    + +
  • <<
  • + +
+
+ +
B
+
+ +
+ +
C
+
+ +
+ +
D
+
+ +
+ +
E
+
+ +
+ +
F
+
+ +
+ +
J
+
+ +
+ +
L
+
+ +
+ +
N
+
+ +
+ +
O
+
+ +
+ +
P
+
+ +
+ +
R
+
+ +
+ +
S
+
+ +
+ +
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]
READ_ONLY_MODES=[ READ_ONLY ]
WRITE_ONLY_MODES=[ WRITE_ONLY, APPEND_WRITE_ONLY ]
TRUNCATION_MODES=[ WRITE_ONLY, READ_WRITE_TRUNCATE ]
+ + + +
Attributes
+ + + + + + + + +
+ [R] + path
+ + + +
Class Public methods
+ +
+
+ + basename(*args) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 84
+    def self.basename(*args)
+      RealFile.basename(*args)
+    end
+
+
+ +
+ +
+
+ + const_missing(name) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 50
+    def self.const_missing(name)
+      RealFile.const_get(name)
+    end
+
+
+ +
+ +
+
+ + delete(file_name, *additional_file_names) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 138
+    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 54
+    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 88
+    def self.dirname(path)
+      RealFile.dirname(path)
+    end
+
+
+ +
+ +
+
+ + exist?(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 38
+    def self.exist?(path)
+      !!FileSystem.find(path)
+    end
+
+
+ +
+ +
+
+ + expand_path(*args) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 80
+    def self.expand_path(*args)
+      RealFile.expand_path(*args)
+    end
+
+
+ +
+ +
+
+ + extname(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 30
+    def self.extname(path)
+      RealFile.extname(path)
+    end
+
+
+ +
+ +
+
+ + file?(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 71
+    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 34
+    def self.join(*parts)
+      parts * PATH_SEPARATOR
+    end
+
+
+ +
+ +
+
+ + link(source, dest) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 118
+    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
+
+
+ +
+ +
+
+ + new(path, mode = READ_ONLY, perm = nil) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 188
+    def initialize(path, mode = READ_ONLY, perm = nil)
+      @path = path
+      @mode = mode
+      @file = FileSystem.find(path)
+      @open = true
+
+      check_valid_mode
+      file_creation_mode? ? create_missing_file : check_file_existence!
+      truncate_file if truncation_mode?
+    end
+
+
+ +
+ +
+
+ + open(path, mode=READ_ONLY, perm = 0644) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 97
+    def self.open(path, mode=READ_ONLY, perm = 0644)
+      if block_given?
+        yield new(path, mode, perm)
+      else
+        new(path, mode, perm)
+      end
+    end
+
+
+ +
+ +
+
+ + read(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 105
+    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 114
+    def self.readlines(path)
+      read(path).split("\n")
+    end
+
+
+ +
+ +
+
+ + readlink(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 92
+    def self.readlink(path)
+      symlink = FileSystem.find(path)
+      FileSystem.find(symlink.target).to_s
+    end
+
+
+ +
+ +
+
+ + size(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 46
+    def self.size(path)
+      read(path).length
+    end
+
+
+ +
+ +
+
+ + stat(file) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 160
+    def self.stat(file)
+      File::Stat.new(file)
+    end
+
+
+ +
+ +
+
+ + symlink(source, dest) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 156
+    def self.symlink(source, dest)
+      FileUtils.ln_s(source, dest)
+    end
+
+
+ +
+ +
+
+ + symlink?(path) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 63
+    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
+ +
+
+ + <<(content) + +
+ +
+

+Alias for write +

+ +
+ + + +
+ +
+
+ + close() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 199
+    def close
+      @open = false
+    end
+
+
+ +
+ +
+
+ + exists?() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 210
+    def exists?
+      @file
+    end
+
+
+ +
+ +
+
+ + flush() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 229
+    def flush; self; end
+
+
+ +
+ +
+
+ + print(content) + +
+ +
+

+Alias for write +

+ +
+ + + +
+ +
+
+ + puts(*content) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 214
+    def puts(*content)
+      content.flatten.each do |obj|
+        write(obj.to_s + "\n")
+      end
+    end
+
+
+ +
+ +
+
+ + read() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 203
+    def read
+      raise IOError, 'closed stream' unless @open
+      raise IOError, 'not opened for reading' if write_only?
+
+      @file.content
+    end
+
+
+ +
+ +
+
+ + write(content) + +
+ + +
+ This method is also aliased as + + print + + << + +
+ + + +
+ +
+
# File lib/fakefs/file.rb, line 220
+    def write(content)
+      raise IOError, 'closed stream' unless @open
+      raise IOError, 'not open for writing' if read_only?
+
+      @file.content += content
+    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..72efcab --- /dev/null +++ b/classes/FakeFS/File/Stat.html @@ -0,0 +1,210 @@ + + + + + FakeFS::File::Stat + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
D
+
+ +
+ +
N
+
+ +
+ +
S
+
+ +
+ +
+ + + + + + + + + + + + + +
Class Public methods
+ +
+
+ + new(file) + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 165
+      def initialize(file)
+        if !File.exists?(file)
+          raise(Errno::ENOENT, "No such file or directory - #{file}")
+        end
+
+        @file = file
+      end
+
+
+ +
+ +
Instance Public methods
+ +
+
+ + directory?() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 177
+      def directory?
+        File.directory?(@file)
+      end
+
+
+ +
+ +
+
+ + nlink() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 181
+      def nlink
+        FileSystem.find(@file).links.size
+      end
+
+
+ +
+ +
+
+ + symlink?() + +
+ + + + +
+ +
+
# File lib/fakefs/file.rb, line 173
+      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..efc3f2b --- /dev/null +++ b/classes/FakeFS/FileSystem.html @@ -0,0 +1,506 @@ + + + + + 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/FileUtils.html b/classes/FakeFS/FileUtils.html new file mode 100644 index 0000000..ebacf32 --- /dev/null +++ b/classes/FakeFS/FileUtils.html @@ -0,0 +1,586 @@ + + + + + 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 117
+    def cd(dir)
+      FileSystem.chdir(dir)
+    end
+
+
+ +
+ +
+
+ + chdir(dir) + +
+ +
+

+Alias for cd +

+ +
+ + + +
+ +
+
+ + chown(user, group, list, options={}) + +
+ + + + +
+ +
+
# File lib/fakefs/fileutils.rb, line 91
+    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 101
+    def chown_R(user, group, list, options={})
+      chown(user, group, list, options={})
+    end
+
+
+ +
+ +
+
+ + cp(src, dest) + +
+ + + + +
+ +
+
# File lib/fakefs/fileutils.rb, line 34
+    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 54
+    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) + +
+ + + + +
+ +
+
# File lib/fakefs/fileutils.rb, line 29
+    def ln_s(target, path)
+      raise Errno::EEXIST, path if FileSystem.find(path)
+      FileSystem.add(path, FakeSymlink.new(target))
+    end
+
+
+ +
+ +
+
+ + mkdir_p(path) + +
+ + +
+ This method is also aliased as + + mkpath + +
+ + + +
+ +
+
# File lib/fakefs/fileutils.rb, line 5
+    def mkdir_p(path)
+      FileSystem.add(path, FakeDir.new)
+    end
+
+
+ +
+ +
+
+ + mkpath(path) + +
+ +
+

+Alias for mkdir_p +

+ +
+ + + +
+ +
+
+ + mv(src, dest) + +
+ + + + +
+ +
+
# File lib/fakefs/fileutils.rb, line 82
+    def mv(src, dest)
+      if target = FileSystem.find(src)
+        FileSystem.add(dest, target.entry.clone)
+        FileSystem.delete(src)
+      else
+        raise Errno::ENOENT, src
+      end
+    end
+
+
+ +
+ +
+
+ + rm(path) + +
+ + +
+ This method is also aliased as + + rm_rf + + rm_r + +
+ + + +
+ +
+
# File lib/fakefs/fileutils.rb, line 22
+    def rm(path)
+      FileSystem.delete(path)
+    end
+
+
+ +
+ +
+
+ + rm_r(path) + +
+ +
+

+Alias for rm +

+ +
+ + + +
+ +
+
+ + rm_rf(path) + +
+ +
+

+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 105
+    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/Version.html b/classes/FakeFS/Version.html new file mode 100644 index 0000000..38cf3ec --- /dev/null +++ b/classes/FakeFS/Version.html @@ -0,0 +1,109 @@ + + + + + FakeFS::Version + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
T
+
+ +
+ +
+ + + + + + + + + +
Constants
+ + + + + + + + + +
VERSION="0.1.1"
+ + + + + +
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..ca22f1e --- /dev/null +++ b/classes/Object.html @@ -0,0 +1,105 @@ + + + + + Object + + + + + + + + + + +
+
+ + + + + + + + + +
Methods
+
+ +
F
+
+ +
+ +
+ + + + + + + + + + + + + +
Instance Public methods
+ +
+
+ + FakeFS() + +
+ + + + +
+ +
+
# File lib/fakefs/base.rb, line 31
+def FakeFS
+  return ::FakeFS unless block_given?
+  ::FakeFS.activate!
+  result = yield
+  ::FakeFS.deactivate!
+  result
+end
+
+
+ +
+ +
+
+ + \ No newline at end of file diff --git a/created.rid b/created.rid new file mode 100644 index 0000000..3fab944 --- /dev/null +++ b/created.rid @@ -0,0 +1 @@ +Tue, 06 Oct 2009 21:44:00 -0700 diff --git a/css/main.css b/css/main.css new file mode 100755 index 0000000..e220938 --- /dev/null +++ b/css/main.css @@ -0,0 +1,263 @@ +body { + font-family: "Helvetica Neue", Arial, sans-serif; + background: #FFF; + color: #000; + margin: 0px; + font-size: 0.82em; + line-height: 1.25em; +} + +a { + color: #00F; + text-decoration: none; +} + +a:hover { + color: #333; + background: #FE8; +} + +p { + margin-bottom: 1em; +} + +h1 { + font-size: 2.1em; + font-weight: normal; + line-height: 1.2em; + margin: 1.4em 0 0.7em 0; +} + +h2 { + font-size: 1.6em; + margin: 1.8em 0 0.8em 0; + font-weight: normal; + line-height: 1.2em; +} + +h3 { + font-size: 1.4em; + color:#555; + margin: 1.4em 0 0.7em 0; + font-weight: normal; +} + +h4 { + margin: 1.4em 0 0.5em 0; + font-size: 1em; +} + +.clear +{ + clear: both; + width: 0; height: 0; +} + +dt +{ + margin-bottom: 0.3em; + font-weight: bold; +} + +dd +{ + margin-left: 2em; + margin-bottom: 1em; +} + +dd p +{ + margin-top: 0.6em; +} + +li +{ + margin: 0 0 0.5em 2em; +} + +ul li +{ + list-style: disc; +} + +ol li +{ + list-style: decimal; +} + +.banner +{ + background: #EDF3FE; + border-bottom: 1px solid #ccc; + padding: 1em 2em 0.5em 2em; +} +.banner h1 +{ + font-size: 1.2em; + margin: 0; +} + +.banner h1 .type +{ + font-size: 0.833em; + display:block; +} + +.banner h1 .type, +.banner h1 .parent +{ + color: #666; +} + +.banner ul +{ + margin-top: 0.3em; + margin-bottom: 0; + font-size: 0.85em; +} + +.banner li +{ + list-style: none; + margin-left: 0; + margin-bottom: 0; +} + +pre +{ + margin-bottom: 1em; +} + +.methods dt +{ + width: 1em; + font-size: 1.5em; + color:#AAA; + position: absolute; + font-weight: normal; + margin: 0; +} + +.methods dd +{ + margin-left: 2.5em; + min-height: 1.8em; + -height: 1.8em; + padding-bottom: 0.8em; +} + + +.methods ul li +{ + margin-right: 0.7em; + margin-left: 0; + list-style: none; + display: inline; +} + +#content { + margin: 2em; + margin-left: 3.5em; + margin-right: 3.5em; +} + + +.sectiontitle { + margin-top: 2em; + margin-bottom: 1.3em; + margin-left: -1.2em; + font-size: 1.2em; + padding: 0 0 0.25em 0; + font-weight: bold; + border-bottom: 1px solid #000; +} + +.attr-rw { + padding-right: 1em; + text-align: center; + color: #055; +} + +.attr-name { + font-weight: bold; + padding-right: 1em; +} + +.attr-desc { +} + +tt { + font-size: 1.15em; +} + +.attr-value { + font-family: monospace; + padding-left: 1em; + font-size: 1.15em; +} + +.dyn-source { + display: none; + background: #fffde8; + color: #000; + border: #ffe0bb dotted 1px; + margin: 0.5em 2em 0.5em 0; + padding: 0.5em; +} + +.dyn-source .cmt { + color: #00F; + font-style: italic; +} + +.dyn-source .kw { + color: #070; + font-weight: bold; +} + +.description pre { + padding: 0.5em; + border: #ffe0bb dotted 1px; + background: #fffde8; +} + +.method { + margin-bottom: 2em; +} +.method .description, +.method .sourcecode +{ + margin-left: 1.2em; +} +.method h4 +{ + border-bottom: 1px dotted #999; + padding: 0 0 0.2em 0; + margin-bottom: 0.8em; + font-size: 1.1em; + color:#333; +} +.method .title { + border-bottom: 1px dotted #666; + padding: 0 0 0.15em 0; + margin: 0 0 0.5em 0; + font-size: 1.2em; + line-height: 1.25em; +} + +.method .sourcecode p.source-link { + text-indent: 0em; + margin-top: 0.5em; +} + +.method .aka { + margin-top: 0.3em; + margin-left: 1em; + font-style: italic; + text-indent: 2em; +} + +.method .source-link +{ + font-size: 0.85em; +} \ No newline at end of file diff --git a/css/panel.css b/css/panel.css new file mode 100755 index 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/LICENSE.html b/files/LICENSE.html new file mode 100644 index 0000000..2e68c8e --- /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..e8c8777 --- /dev/null +++ b/files/README_markdown.html @@ -0,0 +1,158 @@ + + + + + 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
+
+ +

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.

+ +

Speed?

+ +

http://gist.github.com/156091

+ +

Installation

+ +

Gemcutter

+ +
$ gem install fakefs
+
+ +

Rip

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

Contributors

+ +
    +
  • Chris Wanstrath
  • +
  • David Reese
  • +
  • Jeff Hodges
  • +
  • Jon Yurek
  • +
  • Matt Freels
  • +
  • Myles Eftos
  • +
  • Pat Nakajima
  • +
  • Rob Sanheim
  • +
  • Scott Taylor
  • +
  • Tymon Tobolski
  • +
  • msassak
  • +
+ + +

Meta

+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+ + \ 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..82f17f0 --- /dev/null +++ b/files/lib/fakefs/base_rb.html @@ -0,0 +1,101 @@ + + + + + base.rb + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
Classes and Modules
+ + + + +
Constants
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RealFile=File
RealFileUtils=FileUtils
RealDir=Dir
Dir=RealDir
File=RealFile
+ + + + + +
+
+ + \ 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..f3decd9 --- /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..fca0835 --- /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..2eec27a --- /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..2865cff --- /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..28e0f16 --- /dev/null +++ b/files/lib/fakefs/file_rb.html @@ -0,0 +1,59 @@ + + + + + file.rb + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + +
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..fe92e87 --- /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/fileutils_rb.html b/files/lib/fakefs/fileutils_rb.html new file mode 100644 index 0000000..c25f572 --- /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..2cb187c --- /dev/null +++ b/files/lib/fakefs/safe_rb.html @@ -0,0 +1,77 @@ + + + + + safe.rb + + + + + + + + + + + +
+
+ + + +
Required Files
+
    + +
  • fileutils
  • + +
  • pathname
  • + +
  • fakefs/base
  • + +
  • fakefs/fake/file
  • + +
  • fakefs/fake/dir
  • + +
  • fakefs/fake/symlink
  • + +
  • fakefs/file_system
  • + +
  • fakefs/fileutils
  • + +
  • fakefs/file
  • + +
  • fakefs/dir
  • + +
+ + + + + + + + + + + + + + + + + + + +
+
+ + \ 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..a0c2c7e --- /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..b63965a --- /dev/null +++ b/files/lib/fakefs_rb.html @@ -0,0 +1,59 @@ + + + + + fakefs.rb + + + + + + + + + + + +
+
+ + + +
Required Files
+
    + +
  • fakefs/safe
  • + +
+ + + + + + + + + + + + + + + + + + + +
+
+ + \ 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..1a65fe8 --- /dev/null +++ b/panel/search_index.js @@ -0,0 +1 @@ +var search_data = {"index":{"searchIndex":["fakefs","dir","fakedir","fakefile","inode","fakesymlink","file","stat","filesystem","fileutils","version","object","<<()","fakefs()","[]()","activate!()","add()","basename()","cd()","chdir()","chdir()","chdir()","chown()","chown_r()","chroot()","clear()","clone()","clone()","clone()","close()","close()","const_missing()","content()","content=()","cp()","cp_r()","current_dir()","deactivate!()","delete()","delete()","delete()","delete()","delete()","delete()","dir_levels()","directory?()","directory?()","dirname()","each()","entries()","entry()","entry()","entry()","exist?()","exists?()","expand_path()","extname()","file?()","files()","find()","flush()","foreach()","fs()","glob()","inspect()","inspect()","inspect()","join()","link()","link()","link()","links()","ln_s()","mkdir()","mkdir_p()","mkpath()","mv()","new()","new()","new()","new()","new()","new()","new()","nlink()","normalize_path()","open()","open()","path()","path_parts()","pos()","pos=()","print()","puts()","pwd()","read()","read()","read()","readlines()","readlink()","respond_to?()","rewind()","rm()","rm_r()","rm_rf()","rmdir()","seek()","size()","stat()","symlink()","symlink?()","symlink?()","tmpdir()","to_s()","to_s()","to_s()","touch()","unlink()","write()","license","readme.markdown","fakefs.rb","base.rb","dir.rb","dir.rb","file.rb","symlink.rb","file.rb","file_system.rb","fileutils.rb","safe.rb","version.rb"],"longSearchIndex":["lib/fakefs/version.rb","fakefs","fakefs","fakefs","fakefs::fakefile","fakefs","fakefs","fakefs::file","fakefs","fakefs","fakefs","lib/fakefs/base.rb","fakefs::file","object","fakefs::dir","fakefs","fakefs::filesystem","fakefs::file","fakefs::fileutils","fakefs::dir","fakefs::filesystem","fakefs::fileutils","fakefs::fileutils","fakefs::fileutils","fakefs::dir","fakefs::filesystem","fakefs::fakedir","fakefs::fakefile","fakefs::filesystem","fakefs::dir","fakefs::file","fakefs::file","fakefs::fakefile","fakefs::fakefile","fakefs::fileutils","fakefs::fileutils","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::file","fakefs::file","fakefs::file","fakefs::file","fakefs::filesystem","fakefs::filesystem","fakefs::file","fakefs::dir","fakefs::filesystem","fakefs::dir","fakefs::fakedir","fakefs::fakefile","fakefs::fakesymlink","fakefs::file","fakefs::fakefile","fakefs::fakefile::inode","fakefs::file","fakefs::fakefile","fakefs::fileutils","fakefs::dir","fakefs::fileutils","fakefs::fileutils","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::file","fakefs::dir","fakefs::filesystem","fakefs::dir","fakefs::dir","fakefs::file","fakefs::file","fakefs::dir","fakefs::dir","fakefs::file","fakefs::file","fakefs::file","fakefs::file","fakefs::fakesymlink","fakefs::dir","fakefs::fileutils","fakefs::fileutils","fakefs::fileutils","fakefs::fileutils","fakefs::dir","fakefs::file","fakefs::file","fakefs::file","fakefs::file","fakefs::file::stat","fakefs::dir","fakefs::fakedir","fakefs::fakefile","fakefs::version","fakefs::fileutils","fakefs::fakefile::inode","fakefs::file","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/fileutils_rb.html","files/lib/fakefs/safe_rb.html","files/lib/fakefs/version_rb.html"],"info":[["FakeFS","lib/fakefs/version.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"," < Object","",1],["Stat","FakeFS::File","classes/FakeFS/File/Stat.html"," < Object","",1],["FileSystem","FakeFS","classes/FakeFS/FileSystem.html"," < ","",1],["FileUtils","FakeFS","classes/FakeFS/FileUtils.html"," < ","",1],["Version","FakeFS","classes/FakeFS/Version.html"," < ","",1],["Object","lib/fakefs/base.rb","classes/Object.html"," < Object","",1],["<<","FakeFS::File","classes/FakeFS/File.html#M000096","(content)","Alias for #write",2],["FakeFS","Object","classes/Object.html#M000009","()","",2],["[]","FakeFS::Dir","classes/FakeFS/Dir.html#M000012","(pattern)","",2],["activate!","FakeFS","classes/FakeFS.html#M000002","()","",2],["add","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000056","(path, object=FakeDir.new)","",2],["basename","FakeFS::File","classes/FakeFS/File.html#M000064","(*args)","",2],["cd","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000115","(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#M000116","(dir)","Alias for #cd",2],["chown","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000112","(user, group, list, options={})","",2],["chown_R","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000113","(user, group, list, options={})","",2],["chroot","FakeFS::Dir","classes/FakeFS/Dir.html#M000014","(string)","",2],["clear","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000050","()","",2],["clone","FakeFS::FakeDir","classes/FakeFS/FakeDir.html#M000022","(parent = nil)","",2],["clone","FakeFS::FakeFile","classes/FakeFS/FakeFile.html#M000043","(parent = nil)","",2],["clone","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000061","(path)","copies directories and files from the real filesystem into our fake one ",2],["close","FakeFS::Dir","classes/FakeFS/Dir.html#M000001","()","",2],["close","FakeFS::File","classes/FakeFS/File.html#M000088","()","",2],["const_missing","FakeFS::File","classes/FakeFS/File.html#M000058","(name)","",2],["content","FakeFS::FakeFile","classes/FakeFS/FakeFile.html#M000039","()","",2],["content=","FakeFS::FakeFile","classes/FakeFS/FakeFile.html#M000040","(str)","",2],["cp","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000100","(src, dest)","",2],["cp_r","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000102","(src, dest)","",2],["current_dir","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000076","()","",2],["deactivate!","FakeFS","classes/FakeFS.html#M000003","()","",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#M000047","()","",2],["delete","FakeFS::FakeSymlink","classes/FakeFS/FakeSymlink.html#M000036","()","",2],["delete","FakeFS::File","classes/FakeFS/File.html#M000075","(file_name, *additional_file_names)","",2],["delete","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000068","(path)","",2],["dir_levels","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000048","()","",2],["directory?","FakeFS::File","classes/FakeFS/File.html#M000059","(path)","",2],["directory?","FakeFS::File::Stat","classes/FakeFS/File/Stat.html#M000082","()","",2],["dirname","FakeFS::File","classes/FakeFS/File.html#M000065","(path)","",2],["each","FakeFS::Dir","classes/FakeFS/Dir.html#M000004","(&block)","",2],["entries","FakeFS::Dir","classes/FakeFS/Dir.html#M000017","(dirname)","",2],["entry","FakeFS::FakeDir","classes/FakeFS/FakeDir.html#M000018","()","",2],["entry","FakeFS::FakeFile","classes/FakeFS/FakeFile.html#M000044","()","",2],["entry","FakeFS::FakeSymlink","classes/FakeFS/FakeSymlink.html#M000035","()","",2],["exist?","FakeFS::File","classes/FakeFS/File.html#M000053","(path)","",2],["exists?","FakeFS::File","classes/FakeFS/File.html#M000090","()","",2],["expand_path","FakeFS::File","classes/FakeFS/File.html#M000063","(*args)","",2],["extname","FakeFS::File","classes/FakeFS/File.html#M000051","(path)","",2],["file?","FakeFS::File","classes/FakeFS/File.html#M000062","(path)","",2],["files","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000054","()","",2],["find","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000055","(path)","",2],["flush","FakeFS::File","classes/FakeFS/File.html#M000097","()","",2],["foreach","FakeFS::Dir","classes/FakeFS/Dir.html#M000020","(dirname, &block)","",2],["fs","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000049","()","",2],["glob","FakeFS::Dir","classes/FakeFS/Dir.html#M000021","(pattern)","",2],["inspect","FakeFS::FakeDir","classes/FakeFS/FakeDir.html#M000019","()","",2],["inspect","FakeFS::FakeFile","classes/FakeFS/FakeFile.html#M000045","()","",2],["inspect","FakeFS::FakeSymlink","classes/FakeFS/FakeSymlink.html#M000034","()","",2],["join","FakeFS::File","classes/FakeFS/File.html#M000052","(*parts)","",2],["link","FakeFS::FakeFile","classes/FakeFS/FakeFile.html#M000042","(other_file)","",2],["link","FakeFS::FakeFile::Inode","classes/FakeFS/FakeFile/Inode.html#M000030","(file)","",2],["link","FakeFS::File","classes/FakeFS/File.html#M000074","(source, dest)","",2],["links","FakeFS::FakeFile","classes/FakeFS/FakeFile.html#M000041","()","",2],["ln_s","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000099","(target, path)","",2],["mkdir","FakeFS::Dir","classes/FakeFS/Dir.html#M000023","(string, integer = 0)","",2],["mkdir_p","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000084","(path)","",2],["mkpath","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000086","(path)","Alias for #mkdir_p",2],["mv","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000111","(src, dest)","",2],["new","FakeFS::Dir","classes/FakeFS/Dir.html#M000000","(string)","",2],["new","FakeFS::FakeDir","classes/FakeFS/FakeDir.html#M000016","(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#M000031","(target)","",2],["new","FakeFS::File","classes/FakeFS/File.html#M000085","(path, mode = READ_ONLY, perm = nil)","",2],["new","FakeFS::File::Stat","classes/FakeFS/File/Stat.html#M000080","(file)","",2],["nlink","FakeFS::File::Stat","classes/FakeFS/File/Stat.html#M000083","()","",2],["normalize_path","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000073","(path)","",2],["open","FakeFS::Dir","classes/FakeFS/Dir.html#M000024","(string, &block)","",2],["open","FakeFS::File","classes/FakeFS/File.html#M000067","(path, mode=READ_ONLY, perm = 0644)","",2],["path","FakeFS::Dir","classes/FakeFS/Dir.html#M000005","()","",2],["path_parts","FakeFS::FileSystem","classes/FakeFS/FileSystem.html#M000071","(path)","",2],["pos","FakeFS::Dir","classes/FakeFS/Dir.html#M000006","()","",2],["pos=","FakeFS::Dir","classes/FakeFS/Dir.html#M000007","(integer)","",2],["print","FakeFS::File","classes/FakeFS/File.html#M000095","(content)","Alias for #write",2],["puts","FakeFS::File","classes/FakeFS/File.html#M000091","(*content)","",2],["pwd","FakeFS::Dir","classes/FakeFS/Dir.html#M000027","()","",2],["read","FakeFS::Dir","classes/FakeFS/Dir.html#M000008","()","",2],["read","FakeFS::File","classes/FakeFS/File.html#M000070","(path)","",2],["read","FakeFS::File","classes/FakeFS/File.html#M000089","()","",2],["readlines","FakeFS::File","classes/FakeFS/File.html#M000072","(path)","",2],["readlink","FakeFS::File","classes/FakeFS/File.html#M000066","(path)","",2],["respond_to?","FakeFS::FakeSymlink","classes/FakeFS/FakeSymlink.html#M000037","(method)","",2],["rewind","FakeFS::Dir","classes/FakeFS/Dir.html#M000010","()","",2],["rm","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000092","(path)","",2],["rm_r","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000098","(path)","Alias for #rm",2],["rm_rf","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000093","(path)","Alias for #rm",2],["rmdir","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000087","(list, options = {})","",2],["seek","FakeFS::Dir","classes/FakeFS/Dir.html#M000011","(integer)","",2],["size","FakeFS::File","classes/FakeFS/File.html#M000057","(path)","",2],["stat","FakeFS::File","classes/FakeFS/File.html#M000079","(file)","",2],["symlink","FakeFS::File","classes/FakeFS/File.html#M000078","(source, dest)","",2],["symlink?","FakeFS::File","classes/FakeFS/File.html#M000060","(path)","",2],["symlink?","FakeFS::File::Stat","classes/FakeFS/File/Stat.html#M000081","()","",2],["tmpdir","FakeFS::Dir","classes/FakeFS/Dir.html#M000026","()","",2],["to_s","FakeFS::FakeDir","classes/FakeFS/FakeDir.html#M000025","()","",2],["to_s","FakeFS::FakeFile","classes/FakeFS/FakeFile.html#M000046","()","",2],["to_s","FakeFS::Version","classes/FakeFS/Version.html#M000117","()","",2],["touch","FakeFS::FileUtils","classes/FakeFS/FileUtils.html#M000114","(list, options={})","",2],["unlink","FakeFS::FakeFile::Inode","classes/FakeFS/FakeFile/Inode.html#M000032","(file)","",2],["write","FakeFS::File","classes/FakeFS/File.html#M000094","(content)","",2],["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],["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],["version.rb","files/lib/fakefs/version_rb.html","files/lib/fakefs/version_rb.html","","",3]]}} \ No newline at end of file diff --git a/panel/tree.js b/panel/tree.js new file mode 100644 index 0000000..cd7c8d7 --- /dev/null +++ b/panel/tree.js @@ -0,0 +1 @@ +var tree = [["","","files",[["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","",[]],["fileutils.rb","files/lib/fakefs/fileutils_rb.html","",[]],["safe.rb","files/lib/fakefs/safe_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"," < Object",[["Stat","classes/FakeFS/File/Stat.html"," < Object",[]]]],["FileSystem","classes/FakeFS/FileSystem.html","",[]],["FileUtils","classes/FakeFS/FileUtils.html","",[]],["Version","classes/FakeFS/Version.html","",[]]]],["Object","classes/Object.html"," < Object",[]]] \ No newline at end of file