From dd7dddddcfe82b1f5bc2ac689355709a07e0f4d6 Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 6 Oct 2010 13:17:47 -0700 Subject: [PATCH 001/393] Revert "Gollum::Wiki#pages come back sorted by title, not permalink or the default ordering from `git ls-tree`." This reverts commit e37a8b9da473cb0301d40be28b72e15b0bee31d1. --- lib/gollum/wiki.rb | 4 +--- .../30/8fdf72d89351bf53fa6eeb00884273047e07fa | 2 -- .../eb/578ff8ed46c6cc579d1a474fb2b94487f420fd | Bin 259 -> 0 bytes .../ed/d74f8d7f6d025d66eb67411c5db60959ae16fd | Bin 35 -> 0 bytes test/examples/lotr.git/refs/heads/master | 2 +- test/test_wiki.rb | 16 ++++++++-------- 6 files changed, 10 insertions(+), 14 deletions(-) delete mode 100644 test/examples/lotr.git/objects/30/8fdf72d89351bf53fa6eeb00884273047e07fa delete mode 100644 test/examples/lotr.git/objects/eb/578ff8ed46c6cc579d1a474fb2b94487f420fd delete mode 100644 test/examples/lotr.git/objects/ed/d74f8d7f6d025d66eb67411c5db60959ae16fd diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 5704cd1f..172aa9aa 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -221,9 +221,7 @@ module Gollum # # Returns an Array of Gollum::Page instances. def pages(treeish = nil) - tree_list(treeish || 'master').sort! do |x, y| - x.title.downcase <=> y.title.downcase - end + tree_list(treeish || 'master') end # Public: Returns the number of pages accessible from a commit diff --git a/test/examples/lotr.git/objects/30/8fdf72d89351bf53fa6eeb00884273047e07fa b/test/examples/lotr.git/objects/30/8fdf72d89351bf53fa6eeb00884273047e07fa deleted file mode 100644 index c32de7a4..00000000 --- a/test/examples/lotr.git/objects/30/8fdf72d89351bf53fa6eeb00884273047e07fa +++ /dev/null @@ -1,2 +0,0 @@ -x[ -0@QـyD$AH:=pᖾM$(UJ(ǹtqyv.EvVsUo 3Q9悞1!#~Vp*Fe䂟dᬣcOPa!m[@hrH \ No newline at end of file diff --git a/test/examples/lotr.git/objects/eb/578ff8ed46c6cc579d1a474fb2b94487f420fd b/test/examples/lotr.git/objects/eb/578ff8ed46c6cc579d1a474fb2b94487f420fd deleted file mode 100644 index ac381fc686fc02d1b598e779622e31abd3f8eeb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259 zcmV+e0sQ`W0V^p=O;s>5vt%$dFfcPQQEYF!db67`ac%NP!Cv765^Et{jSigD5tv+XNdLiAXnYCQ6DQ}s$x zD@rnRQW<_de;@3kpuNjcbM+lzHr`3oZ%#=yF#rMu-~6JK{2~Sw&qEo~Yya9v%IM|0CTHfCf}OQ$oBWHpVLuXmxEcd*nf$c8^Y&K;RAszdett=6 z5yeJ)dM+Us;jnb>Wdk?X|% J0sy`NYkFF0f7Jj0 diff --git a/test/examples/lotr.git/objects/ed/d74f8d7f6d025d66eb67411c5db60959ae16fd b/test/examples/lotr.git/objects/ed/d74f8d7f6d025d66eb67411c5db60959ae16fd deleted file mode 100644 index b0c2bb523dab58e5913f7865e1b96bb9eb24df07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35 rcmb 2).map { |c| c.id } end - test "list pages, sorted by title" do + test "list pages" do pages = @wiki.pages assert_equal \ - %w(bilbo.md Bilbo-Baggins.md Eye-Of-Sauron.md My-Precious.md Home.textile), - pages.map { |p| p.filename } + %w(Bilbo-Baggins.md Eye-Of-Sauron.md Home.textile My-Precious.md), + pages.map { |p| p.filename }.sort end test "counts pages" do - assert_equal 5, @wiki.size + assert_equal 4, @wiki.size end test "normalizes commit hash" do @@ -64,9 +64,9 @@ context "Wiki" do assert @wiki.ref_map.empty? assert @wiki.tree_map.empty? @wiki.tree_map_for 'master' - assert_equal({"master"=>"308fdf72d89351bf53fa6eeb00884273047e07fa"}, @wiki.ref_map) + assert_equal({"master"=>"60f12f4254f58801b9ee7db7bca5fa8aeefaa56b"}, @wiki.ref_map) - map = @wiki.tree_map['308fdf72d89351bf53fa6eeb00884273047e07fa'] + map = @wiki.tree_map['60f12f4254f58801b9ee7db7bca5fa8aeefaa56b'] assert_equal 'Bilbo-Baggins.md', map[0].path assert_equal '', map[0].dir assert_equal map[0].path, map[0].name @@ -77,10 +77,10 @@ context "Wiki" do test "#tree_map_for only caches tree for commit" do assert @wiki.tree_map.empty? - @wiki.tree_map_for '308fdf72d89351bf53fa6eeb00884273047e07fa' + @wiki.tree_map_for '60f12f4254f58801b9ee7db7bca5fa8aeefaa56b' assert @wiki.ref_map.empty? - entry = @wiki.tree_map['308fdf72d89351bf53fa6eeb00884273047e07fa'][0] + entry = @wiki.tree_map['60f12f4254f58801b9ee7db7bca5fa8aeefaa56b'][0] assert_equal 'Bilbo-Baggins.md', entry.path end end From 33aad801bd559aa58e5aeaf939a515eb04b94e17 Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 6 Oct 2010 13:20:29 -0700 Subject: [PATCH 002/393] update history --- HISTORY.md | 1 - 1 file changed, 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index 49e82830..4c977194 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -10,7 +10,6 @@ * Support a `:gollum_path` Sinatra setting for `Precious::App` * Add Wiki#size to efficiently count pages without loading them. * Add the correct content type when serving files from the frontend. - * Wiki#pages come back sorted by Page#title. * Add --host option and default it to 127.0.0.1. * Allow anchors in page links, such as `[[Abc#header]]`. * All pages retrieved with a SHA add `rel="nofollow"` to all From fcdffc39ff33dad5eb153bb280c4a75fe963dfb6 Mon Sep 17 00:00:00 2001 From: Hiroshi Saito Date: Thu, 7 Oct 2010 17:55:40 +0900 Subject: [PATCH 003/393] Added --page-file-dir option to gollum command --- bin/gollum | 8 +++++++- lib/gollum/frontend/app.rb | 18 +++++++++--------- lib/gollum/wiki.rb | 15 +++++++++++++-- test/test_wiki.rb | 36 ++++++++++++++++++++++++++++++++++++ 4 files changed, 65 insertions(+), 12 deletions(-) diff --git a/bin/gollum b/bin/gollum index 86ac7622..4d1a70d3 100755 --- a/bin/gollum +++ b/bin/gollum @@ -19,6 +19,7 @@ require 'gollum' exec = {} options = { 'port' => 4567, 'bind' => '127.0.0.1' } +wiki_options = {} opts = OptionParser.new do |opts| opts.banner = help @@ -38,6 +39,10 @@ opts = OptionParser.new do |opts| opts.on("--irb", "Start an irb process with gollum loaded for the current wiki.") do options['irb'] = true end + + opts.on("--page-file-dir [PATH]", "Specify the sub directory for all page files (default: repository root).") do |path| + wiki_options[:page_file_dir] = path + end end # Read command line options into `options` hash @@ -77,7 +82,7 @@ if options['irb'] end begin - wiki = Gollum::Wiki.new(gollum_path) + wiki = Gollum::Wiki.new(gollum_path, wiki_options) if !wiki.exist? then raise Grit::InvalidGitRepositoryError end puts "Loaded Gollum wiki at #{File.expand_path(gollum_path).inspect}." puts @@ -99,5 +104,6 @@ if options['irb'] else require 'gollum/frontend/app' Precious::App.set(:gollum_path, gollum_path) + Precious::App.set(:wiki_options, wiki_options) Precious::App.run!(options) end diff --git a/lib/gollum/frontend/app.rb b/lib/gollum/frontend/app.rb index b91e23d0..7f06d8eb 100644 --- a/lib/gollum/frontend/app.rb +++ b/lib/gollum/frontend/app.rb @@ -42,7 +42,7 @@ module Precious get '/edit/*' do @name = params[:splat].first - wiki = Gollum::Wiki.new(settings.gollum_path) + wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options) if page = wiki.page(@name) @page = page @content = page.raw_data @@ -54,7 +54,7 @@ module Precious post '/edit/*' do name = params[:splat].first - wiki = Gollum::Wiki.new(settings.gollum_path) + wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options) page = wiki.page(name) format = params[:format].intern name = params[:rename] if params[:rename] @@ -66,7 +66,7 @@ module Precious post '/create/*' do name = params[:page] - wiki = Gollum::Wiki.new(settings.gollum_path) + wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options) format = params[:format].intern @@ -82,13 +82,13 @@ module Precious post '/preview' do format = params['wiki_format'] data = params['text'] - wiki = Gollum::Wiki.new(settings.gollum_path) + wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options) wiki.preview_page("Preview", data, format).formatted_data end get '/history/:name' do @name = params[:name] - wiki = Gollum::Wiki.new(settings.gollum_path) + wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options) @page = wiki.page(@name) @page_num = [params[:page].to_i, 1].max @versions = @page.versions :page => @page_num @@ -110,7 +110,7 @@ module Precious get '/compare/:name/:version_list' do @name = params[:name] @versions = params[:version_list].split(/\.{2,3}/) - wiki = Gollum::Wiki.new(settings.gollum_path) + wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options) @page = wiki.page(@name) diffs = wiki.repo.diff(@versions.first, @versions.last, @page.path) @diff = diffs.first @@ -119,7 +119,7 @@ module Precious get %r{/(.+?)/([0-9a-f]{40})} do name = params[:captures][0] - wiki = Gollum::Wiki.new(settings.gollum_path) + wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options) if page = wiki.page(name, params[:captures][1]) @page = page @name = name @@ -132,7 +132,7 @@ module Precious get '/search' do @query = params[:q] - wiki = Gollum::Wiki.new(settings.gollum_path) + wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options) @results = wiki.search @query mustache :search end @@ -142,7 +142,7 @@ module Precious end def show_page_or_file(name) - wiki = Gollum::Wiki.new(settings.gollum_path) + wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options) if page = wiki.page(name) @page = page @name = name diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 172aa9aa..11645eff 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -46,6 +46,8 @@ module Gollum # to "/". attr_reader :base_path + attr_reader :page_file_dir + # Public: Initialize a new Gollum Repo. # # repo - The String path to the Git repository that holds the Gollum @@ -55,6 +57,7 @@ module Gollum # Default: "/" # :page_class - The page Class. Default: Gollum::Page # :file_class - The file Class. Default: Gollum::File + # :page_file_dir - String the directory in which all page files reside # # Returns a fresh Gollum::Repo. def initialize(path, options = {}) @@ -63,6 +66,7 @@ module Gollum @base_path = options[:base_path] || "/" @page_class = options[:page_class] || self.class.page_class @file_class = options[:file_class] || self.class.file_class + @page_file_dir = options[:page_file_dir] clear_cache end @@ -339,6 +343,9 @@ module Gollum else ::File.join(dir, page_file_name(name, format)) end + if @page_file_dir + path = ::File.join(@page_file_dir, path) + end Dir.chdir(::File.join(@repo.path, '..')) do if file_path_scheduled_for_deletion?(index.tree, path) @@ -433,7 +440,7 @@ module Gollum dir = '/' if dir.strip.empty? - fullpath = ::File.join(dir, path) + fullpath = ::File.join(*[@page_file_dir, dir, path].compact) fullpath = fullpath[1..-1] if fullpath =~ /^\// if index.current_tree && tree = index.current_tree / dir @@ -507,7 +514,11 @@ module Gollum tree.split("\0").each do |line| items << parse_tree_line(line) end - items + if dir = @page_file_dir + items.select{|i| i.path =~ /^#{dir}\// } + else + items + end end # Parses a line of output from the `ls-tree` command. diff --git a/test/test_wiki.rb b/test/test_wiki.rb index 51cd287b..cf3e6aa7 100644 --- a/test/test_wiki.rb +++ b/test/test_wiki.rb @@ -282,3 +282,39 @@ context "Wiki sync with working directory" do FileUtils.rm_r(@path) end end + +context "page_file_dir option" do + setup do + @path = testpath('examples/pfdtest') + @repo = Grit::Repo.init(@path) + @page_file_dir = 'docs' + Dir.chdir(@path) do + Dir.mkdir(@page_file_dir) + File.open("docs/foo.md", "w"){|f| f.print "Hello foo" } + @repo.add("docs/foo.md") + File.open("bar.md", "w"){|f| f.print "Hello bar" } + @repo.add("bar.md") + @repo.commit_index("Added docs/foo.md and bar.md") + end + + @wiki = Gollum::Wiki.new(@path, :page_file_dir => @page_file_dir) + end + + test "write a page in sub directory" do + @wiki.write_page("New Page", :markdown, "Hi", commit_details) + assert_equal "Hi", File.read(File.join(@path, @page_file_dir, "New-Page.md")) + assert !File.exist?(File.join(@path, "New-Page.md")) + end + + test "a file in page file dir should be found" do + assert @wiki.page("foo") + end + + test "a file out of page file dir should not be found" do + assert !@wiki.page("bar") + end + + teardown do + FileUtils.rm_r(@path) + end +end From f8e7fcf2d29658d1515203ea0a9997b4316d4abf Mon Sep 17 00:00:00 2001 From: Hiroshi Saito Date: Thu, 7 Oct 2010 23:01:27 +0900 Subject: [PATCH 004/393] FIX: results of Wiki#search contains files out of page_file_dir --- lib/gollum/wiki.rb | 6 +++++- test/test_wiki.rb | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 11645eff..8e0b7498 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -246,7 +246,11 @@ module Gollum # Returns an Array with Objects of page name and count of matches def search(query) # See: http://github.com/Sirupsen/gollum/commit/f0a6f52bdaf6bee8253ca33bb3fceaeb27bfb87e - search_output = @repo.git.grep({:c => query}, 'master') + if @page_file_dir + search_output = @repo.git.grep({:c => query}, 'master', '--', @page_file_dir) + else + search_output = @repo.git.grep({:c => query}, 'master') + end search_output.split("\n").collect do |line| result = line.split(':') diff --git a/test/test_wiki.rb b/test/test_wiki.rb index cf3e6aa7..6df4e170 100644 --- a/test/test_wiki.rb +++ b/test/test_wiki.rb @@ -314,6 +314,12 @@ context "page_file_dir option" do assert !@wiki.page("bar") end + test "search results should be restricted in page filer dir" do + results = @wiki.search("Hello") + assert_equal 1, results.size + assert_equal "foo", results[0][:name] + end + teardown do FileUtils.rm_r(@path) end From dc7693dbd026b0df0efd2ea3cbb8cf6461ea1d90 Mon Sep 17 00:00:00 2001 From: Hiroshi Saito Date: Fri, 8 Oct 2010 23:39:18 +0900 Subject: [PATCH 005/393] FIX: Sanitize.clean raise Encoding::CompatibilityError if a page contains non ASCII-7 characters --- lib/gollum/markup.rb | 2 +- lib/gollum/page.rb | 15 +- test/examples/yubiwa.git/HEAD | 1 + test/examples/yubiwa.git/config | 5 + test/examples/yubiwa.git/description | 1 + .../yubiwa.git/hooks/applypatch-msg.sample | 15 ++ .../yubiwa.git/hooks/commit-msg.sample | 24 +++ .../yubiwa.git/hooks/post-commit.sample | 8 + .../yubiwa.git/hooks/post-receive.sample | 15 ++ .../yubiwa.git/hooks/post-update.sample | 8 + .../yubiwa.git/hooks/pre-applypatch.sample | 14 ++ .../yubiwa.git/hooks/pre-commit.sample | 46 +++++ .../yubiwa.git/hooks/pre-rebase.sample | 169 ++++++++++++++++++ .../hooks/prepare-commit-msg.sample | 36 ++++ test/examples/yubiwa.git/hooks/update.sample | 128 +++++++++++++ test/examples/yubiwa.git/info/exclude | 6 + .../10/fa2ddc4e3b4009d8a453aace10bd6148c1ad00 | Bin 0 -> 85 bytes .../52/4b82874327ea7cbf730389964ba7cb3de966de | Bin 0 -> 56 bytes .../58/3fc201cb457fb3f1480f3e1e5999b119633835 | Bin 0 -> 41 bytes .../87/bc1dd46ab3d3874d4e898d45dd512cc20a7cc8 | 1 + .../89/64ed1b4e21aa90e831763bbce9034bfda81b70 | Bin 0 -> 169 bytes .../9f/f6dd0660da5fba2d3374adb2b84fa653bb538b | Bin 0 -> 55 bytes .../ac/e97abf2b177815a1972d7db22f229f58c83309 | Bin 0 -> 205 bytes .../b1/f443863a4816628807fbf86141ebef055dda34 | Bin 0 -> 82 bytes test/examples/yubiwa.git/refs/heads/master | 1 + test/test_markup.rb | 8 + test/test_wiki.rb | 13 ++ 27 files changed, 514 insertions(+), 2 deletions(-) create mode 100644 test/examples/yubiwa.git/HEAD create mode 100644 test/examples/yubiwa.git/config create mode 100644 test/examples/yubiwa.git/description create mode 100755 test/examples/yubiwa.git/hooks/applypatch-msg.sample create mode 100755 test/examples/yubiwa.git/hooks/commit-msg.sample create mode 100755 test/examples/yubiwa.git/hooks/post-commit.sample create mode 100755 test/examples/yubiwa.git/hooks/post-receive.sample create mode 100755 test/examples/yubiwa.git/hooks/post-update.sample create mode 100755 test/examples/yubiwa.git/hooks/pre-applypatch.sample create mode 100755 test/examples/yubiwa.git/hooks/pre-commit.sample create mode 100755 test/examples/yubiwa.git/hooks/pre-rebase.sample create mode 100755 test/examples/yubiwa.git/hooks/prepare-commit-msg.sample create mode 100755 test/examples/yubiwa.git/hooks/update.sample create mode 100644 test/examples/yubiwa.git/info/exclude create mode 100644 test/examples/yubiwa.git/objects/10/fa2ddc4e3b4009d8a453aace10bd6148c1ad00 create mode 100644 test/examples/yubiwa.git/objects/52/4b82874327ea7cbf730389964ba7cb3de966de create mode 100644 test/examples/yubiwa.git/objects/58/3fc201cb457fb3f1480f3e1e5999b119633835 create mode 100644 test/examples/yubiwa.git/objects/87/bc1dd46ab3d3874d4e898d45dd512cc20a7cc8 create mode 100644 test/examples/yubiwa.git/objects/89/64ed1b4e21aa90e831763bbce9034bfda81b70 create mode 100644 test/examples/yubiwa.git/objects/9f/f6dd0660da5fba2d3374adb2b84fa653bb538b create mode 100644 test/examples/yubiwa.git/objects/ac/e97abf2b177815a1972d7db22f229f58c83309 create mode 100644 test/examples/yubiwa.git/objects/b1/f443863a4816628807fbf86141ebef055dda34 create mode 100644 test/examples/yubiwa.git/refs/heads/master diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 1b1505ec..bde9ea32 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -11,7 +11,7 @@ module Gollum def initialize(page) @wiki = page.wiki @name = page.filename - @data = page.raw_data + @data = page.text_data @version = page.version.id @dir = ::File.dirname(page.path) @tagmap = {} diff --git a/lib/gollum/page.rb b/lib/gollum/page.rb index ba091458..6e2e66d7 100644 --- a/lib/gollum/page.rb +++ b/lib/gollum/page.rb @@ -116,6 +116,19 @@ module Gollum @blob && @blob.data end + # Public: A text data encoded in specified encoding. + # + # encoding - An Encoding or nil + # + # Returns a character encoding aware String. + def text_data(encoding=nil) + if raw_data.respond_to?(:encoding) + raw_data.force_encoding(encoding || Encoding::UTF_8) + else + raw_data + end + end + # Public: The formatted contents of the page. # # Returns the String data. @@ -344,4 +357,4 @@ module Gollum end end end -end \ No newline at end of file +end diff --git a/test/examples/yubiwa.git/HEAD b/test/examples/yubiwa.git/HEAD new file mode 100644 index 00000000..cb089cd8 --- /dev/null +++ b/test/examples/yubiwa.git/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/test/examples/yubiwa.git/config b/test/examples/yubiwa.git/config new file mode 100644 index 00000000..c53d818d --- /dev/null +++ b/test/examples/yubiwa.git/config @@ -0,0 +1,5 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = true + ignorecase = true diff --git a/test/examples/yubiwa.git/description b/test/examples/yubiwa.git/description new file mode 100644 index 00000000..498b267a --- /dev/null +++ b/test/examples/yubiwa.git/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/test/examples/yubiwa.git/hooks/applypatch-msg.sample b/test/examples/yubiwa.git/hooks/applypatch-msg.sample new file mode 100755 index 00000000..8b2a2fe8 --- /dev/null +++ b/test/examples/yubiwa.git/hooks/applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +test -x "$GIT_DIR/hooks/commit-msg" && + exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"} +: diff --git a/test/examples/yubiwa.git/hooks/commit-msg.sample b/test/examples/yubiwa.git/hooks/commit-msg.sample new file mode 100755 index 00000000..6ef1d29d --- /dev/null +++ b/test/examples/yubiwa.git/hooks/commit-msg.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by git-commit with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff --git a/test/examples/yubiwa.git/hooks/post-commit.sample b/test/examples/yubiwa.git/hooks/post-commit.sample new file mode 100755 index 00000000..22668216 --- /dev/null +++ b/test/examples/yubiwa.git/hooks/post-commit.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script that is called after a successful +# commit is made. +# +# To enable this hook, rename this file to "post-commit". + +: Nothing diff --git a/test/examples/yubiwa.git/hooks/post-receive.sample b/test/examples/yubiwa.git/hooks/post-receive.sample new file mode 100755 index 00000000..7a83e17a --- /dev/null +++ b/test/examples/yubiwa.git/hooks/post-receive.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script for the "post-receive" event. +# +# The "post-receive" script is run after receive-pack has accepted a pack +# and the repository has been updated. It is passed arguments in through +# stdin in the form +# +# For example: +# aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master +# +# see contrib/hooks/ for a sample, or uncomment the next line and +# rename the file to "post-receive". + +#. /usr/share/doc/git-core/contrib/hooks/post-receive-email diff --git a/test/examples/yubiwa.git/hooks/post-update.sample b/test/examples/yubiwa.git/hooks/post-update.sample new file mode 100755 index 00000000..5323b56b --- /dev/null +++ b/test/examples/yubiwa.git/hooks/post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git-update-server-info diff --git a/test/examples/yubiwa.git/hooks/pre-applypatch.sample b/test/examples/yubiwa.git/hooks/pre-applypatch.sample new file mode 100755 index 00000000..b1f187c2 --- /dev/null +++ b/test/examples/yubiwa.git/hooks/pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} +: diff --git a/test/examples/yubiwa.git/hooks/pre-commit.sample b/test/examples/yubiwa.git/hooks/pre-commit.sample new file mode 100755 index 00000000..439eefda --- /dev/null +++ b/test/examples/yubiwa.git/hooks/pre-commit.sample @@ -0,0 +1,46 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by git-commit with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git-rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 +fi + +# If you want to allow non-ascii filenames set this variable to true. +allownonascii=$(git config hooks.allownonascii) + +# Cross platform projects tend to avoid non-ascii filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test "$(git diff --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0')" +then + echo "Error: Attempt to add a non-ascii file name." + echo + echo "This can cause problems if you want to work" + echo "with people on other platforms." + echo + echo "To be portable it is advisable to rename the file ..." + echo + echo "If you know what you are doing you can disable this" + echo "check using:" + echo + echo " git config hooks.allownonascii true" + echo + exit 1 +fi + +exec git diff-index --check --cached $against -- diff --git a/test/examples/yubiwa.git/hooks/pre-rebase.sample b/test/examples/yubiwa.git/hooks/pre-rebase.sample new file mode 100755 index 00000000..be1b06e2 --- /dev/null +++ b/test/examples/yubiwa.git/hooks/pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git-rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git-rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git-rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git-rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git-rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up-to-date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git-rev-list --pretty=oneline ^${publish} "$topic"` + perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +exit 0 + +################################################################ + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git-rev-list ^master ^topic next + git-rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git-rev-list master..topic + + if this is empty, it is fully merged to "master". diff --git a/test/examples/yubiwa.git/hooks/prepare-commit-msg.sample b/test/examples/yubiwa.git/hooks/prepare-commit-msg.sample new file mode 100755 index 00000000..36524249 --- /dev/null +++ b/test/examples/yubiwa.git/hooks/prepare-commit-msg.sample @@ -0,0 +1,36 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by git-commit with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first comments out the +# "Conflicts:" part of a merge commit. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +case "$2,$3" in + merge,) + perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;; + +# ,|template,) +# perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$1" ;; + + *) ;; +esac + +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" diff --git a/test/examples/yubiwa.git/hooks/update.sample b/test/examples/yubiwa.git/hooks/update.sample new file mode 100755 index 00000000..fd63b2d6 --- /dev/null +++ b/test/examples/yubiwa.git/hooks/update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to blocks unannotated tags from entering. +# Called by git-receive-pack with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "Usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --bool hooks.allowunannotated) +allowdeletebranch=$(git config --bool hooks.allowdeletebranch) +denycreatebranch=$(git config --bool hooks.denycreatebranch) +allowdeletetag=$(git config --bool hooks.allowdeletetag) +allowmodifytag=$(git config --bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero="0000000000000000000000000000000000000000" +if [ "$newrev" = "$zero" ]; then + newrev_type=delete +else + newrev_type=$(git-cat-file -t $newrev) +fi + +case "$refname","$newrev_type" in + refs/tags/*,commit) + # un-annotated tag + short_refname=${refname##refs/tags/} + if [ "$allowunannotated" != "true" ]; then + echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff --git a/test/examples/yubiwa.git/info/exclude b/test/examples/yubiwa.git/info/exclude new file mode 100644 index 00000000..2c87b72d --- /dev/null +++ b/test/examples/yubiwa.git/info/exclude @@ -0,0 +1,6 @@ +# git-ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/test/examples/yubiwa.git/objects/10/fa2ddc4e3b4009d8a453aace10bd6148c1ad00 b/test/examples/yubiwa.git/objects/10/fa2ddc4e3b4009d8a453aace10bd6148c1ad00 new file mode 100644 index 0000000000000000000000000000000000000000..3da500735a96d52f8a0daf71b032e373b79abd3d GIT binary patch literal 85 zcmV-b0IL6Z0V^p=O;s>AVK6i>Ff%bxD9*|()+?zfVTiCl#CY1Ze)C5Ueml9ynHwdO rElgo*N{TX5Qj7F*Qy7B0o7$b#U)Ag{X6~Hkz5KN8%d~p{R$3j}zndpn literal 0 HcmV?d00001 diff --git a/test/examples/yubiwa.git/objects/52/4b82874327ea7cbf730389964ba7cb3de966de b/test/examples/yubiwa.git/objects/52/4b82874327ea7cbf730389964ba7cb3de966de new file mode 100644 index 0000000000000000000000000000000000000000..b81d59a639aa645e550901ab2f158027ab615ef2 GIT binary patch literal 56 zcmV-80LTA$0Rb%l(*I&?Z(<-bHvs3Sf#ZR%>87*gq^skBsO6EopA}~+n;CVbWO=4F!)H!`PXKfm5#j&< literal 0 HcmV?d00001 diff --git a/test/examples/yubiwa.git/objects/87/bc1dd46ab3d3874d4e898d45dd512cc20a7cc8 b/test/examples/yubiwa.git/objects/87/bc1dd46ab3d3874d4e898d45dd512cc20a7cc8 new file mode 100644 index 00000000..12a06cf7 --- /dev/null +++ b/test/examples/yubiwa.git/objects/87/bc1dd46ab3d3874d4e898d45dd512cc20a7cc8 @@ -0,0 +1 @@ +xAj0E)ȒPJC4i${ YA-ދm`jJs{4@;iGO[SJ7Fr{̌g3=cҿ݉91wZFRv-8]ϗሸRش﯏ÄT[N \ No newline at end of file diff --git a/test/examples/yubiwa.git/objects/89/64ed1b4e21aa90e831763bbce9034bfda81b70 b/test/examples/yubiwa.git/objects/89/64ed1b4e21aa90e831763bbce9034bfda81b70 new file mode 100644 index 0000000000000000000000000000000000000000..334d40801bea7930cac1149d4faffc086fca129e GIT binary patch literal 169 zcmV;a09OBa0iBM!Y6CG40A1@VwhsjD>a~IpQl^f-V0E|h$yk=TQ~o~&|3S)`Vwh$0 z-X@UCr@5;_!Ro!^=)^O|NX$0XQaPeWEm~~|>nhHhhwOTvAdBWCrBcC^7=vI=w5GKX zRia!2FYKJnMt-8G_Ckkfzb;+c?R^>j6OcFt3V|%V*=((O+UMrf Xe+SHu-lZ!X*LJ`|E^7V&F}X@IAFZl}NxM4T`>h1mp%O-xM>C z%D$%tW^`|@ihx!t8fJ207pK(70iCyqBw8)pYZpi(E7d)*N^TH_g*3D4aj|T};MhqR z13S;`wIMPJ2cpp7tHn~`JJoW;1T&^q;1>U;)mnXSJEq4wmHh*>3B5O7SqB$2p0$&n zH=F!h(A}AZ0pW?8z?vQcRC2?V56C6Meg2xJ>i`t7BAuZFQieIEwOxOv86;ETl(+5| HawlFsd%|A; literal 0 HcmV?d00001 diff --git a/test/examples/yubiwa.git/objects/b1/f443863a4816628807fbf86141ebef055dda34 b/test/examples/yubiwa.git/objects/b1/f443863a4816628807fbf86141ebef055dda34 new file mode 100644 index 0000000000000000000000000000000000000000..0b94e18cb3312048a0a06be940fdd605175aa209 GIT binary patch literal 82 zcmV-Y0ImOc0V^p=O;s>AW-v4`Ff%bxD9*|(*2_&{h_FAzc-pmo^G6SUJGsc28zqx1 oOkqk&iZWADi$JP^yqnsc)nC=@FJ|tX=Dqy1?aQ=#04^pSN^_|thX4Qo literal 0 HcmV?d00001 diff --git a/test/examples/yubiwa.git/refs/heads/master b/test/examples/yubiwa.git/refs/heads/master new file mode 100644 index 00000000..f4753c0d --- /dev/null +++ b/test/examples/yubiwa.git/refs/heads/master @@ -0,0 +1 @@ +8964ed1b4e21aa90e831763bbce9034bfda81b70 diff --git a/test/test_markup.rb b/test/test_markup.rb index 9fb5f280..ca309d7f 100644 --- a/test/test_markup.rb +++ b/test/test_markup.rb @@ -17,6 +17,14 @@ context "Markup" do assert @wiki.pages[0].formatted_data end + # This test is to assume that Sanitize.clean doesn't raise Encoding::CompatibilityError on ruby 1.9 + test "formats non ASCII-7 character page from Wiki#pages" do + wiki = Gollum::Wiki.new(testpath("examples/yubiwa.git")) + assert_nothing_raised(defined?(Encoding) && Encoding::CompatibilityError) do + assert wiki.page("strider").formatted_data + end + end + ######################################################################### # # Links diff --git a/test/test_wiki.rb b/test/test_wiki.rb index 51cd287b..c4beadea 100644 --- a/test/test_wiki.rb +++ b/test/test_wiki.rb @@ -83,6 +83,19 @@ context "Wiki" do entry = @wiki.tree_map['60f12f4254f58801b9ee7db7bca5fa8aeefaa56b'][0] assert_equal 'Bilbo-Baggins.md', entry.path end + + test "text_data" do + wiki = Gollum::Wiki.new(testpath("examples/yubiwa.git")) + if String.instance_methods.include?(:encoding) + utf8 = wiki.page("strider").text_data + assert_equal Encoding::UTF_8, utf8.encoding + sjis = wiki.page("sjis").text_data(Encoding::SHIFT_JIS) + assert_equal Encoding::SHIFT_JIS, sjis.encoding + else + page = wiki.page("strider") + assert_equal page.raw_data, page.text_data + end + end end context "Wiki page previewing" do From c0f8c897e7fc1534d104de3291e96e627f4eeca9 Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 11 Oct 2010 16:58:22 -0700 Subject: [PATCH 006/393] update gemspec file listing --- gollum.gemspec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gollum.gemspec b/gollum.gemspec index 901e91f6..521f8bbf 100644 --- a/gollum.gemspec +++ b/gollum.gemspec @@ -5,7 +5,7 @@ Gem::Specification.new do |s| s.name = 'gollum' s.version = '1.0.1' - s.date = '2010-08-12' + s.date = '2010-10-11' s.rubyforge_project = 'gollum' s.summary = "A simple, Git-powered wiki." @@ -48,6 +48,7 @@ Gem::Specification.new do |s| gollum.gemspec lib/gollum.rb lib/gollum/albino.rb + lib/gollum/blob_entry.rb lib/gollum/file.rb lib/gollum/frontend/app.rb lib/gollum/frontend/public/css/editbar.css @@ -445,6 +446,7 @@ Gem::Specification.new do |s| lib/gollum/frontend/templates/create.mustache lib/gollum/frontend/templates/edit.mustache lib/gollum/frontend/templates/editbar.mustache + lib/gollum/frontend/templates/error.mustache lib/gollum/frontend/templates/history.mustache lib/gollum/frontend/templates/layout.mustache lib/gollum/frontend/templates/page.mustache @@ -453,6 +455,7 @@ Gem::Specification.new do |s| lib/gollum/frontend/views/create.rb lib/gollum/frontend/views/edit.rb lib/gollum/frontend/views/editable.rb + lib/gollum/frontend/views/error.rb lib/gollum/frontend/views/history.rb lib/gollum/frontend/views/layout.rb lib/gollum/frontend/views/page.rb @@ -460,6 +463,7 @@ Gem::Specification.new do |s| lib/gollum/markup.rb lib/gollum/page.rb lib/gollum/pagination.rb + lib/gollum/ruby1.8.rb lib/gollum/wiki.rb templates/formatting.html test/examples/lotr.git/HEAD From 62c4b795be45bc6c7e3e47deec69af44d8015973 Mon Sep 17 00:00:00 2001 From: rick Date: Fri, 8 Oct 2010 13:36:18 -0700 Subject: [PATCH 007/393] add basic GitAccess class --- lib/gollum.rb | 1 + lib/gollum/git_access.rb | 19 +++++++++++++++++++ lib/gollum/wiki.rb | 7 ++++--- 3 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 lib/gollum/git_access.rb diff --git a/lib/gollum.rb b/lib/gollum.rb index 36bcab92..fd2a4ab1 100644 --- a/lib/gollum.rb +++ b/lib/gollum.rb @@ -11,6 +11,7 @@ require 'sanitize' require 'gollum/ruby1.8' # internal +require 'gollum/git_access' require 'gollum/pagination' require 'gollum/blob_entry' require 'gollum/wiki' diff --git a/lib/gollum/git_access.rb b/lib/gollum/git_access.rb new file mode 100644 index 00000000..7f9c299d --- /dev/null +++ b/lib/gollum/git_access.rb @@ -0,0 +1,19 @@ +module Gollum + class GitAccess + attr_reader :path + attr_reader :repo + attr_reader :ref_map + attr_reader :tree_map + + def initialize(path) + @path = path + @repo = Grit::Repo.new(path) + @ref_map = {} + @tree_map = {} + end + + def exist? + @repo.git.exist? + end + end +end \ No newline at end of file diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 172aa9aa..d7f68556 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -59,7 +59,8 @@ module Gollum # Returns a fresh Gollum::Repo. def initialize(path, options = {}) @path = path - @repo = Grit::Repo.new(path) + @access = options[:access] || GitAccess.new(path) + @repo = @access.repo @base_path = options[:base_path] || "/" @page_class = options[:page_class] || self.class.page_class @file_class = options[:file_class] || self.class.file_class @@ -70,7 +71,7 @@ module Gollum # # Returns true if the repo exists, and false if it does not. def exist? - @repo.git.exist? + @access.exist? end # Public: Get the formatted page for a given page name. @@ -520,7 +521,7 @@ module Gollum data, name = line.split("\t") mode, type, sha = data.split(' ') name = decode_git_path(name) - BlobEntry.new sha, name + BlobEntry.new(sha, name) end # Decode octal sequences (\NNN) in tree path names. From ebf7855c090f26e9a0c0f35c55c792494794a0e1 Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 11 Oct 2010 12:06:35 -0700 Subject: [PATCH 008/393] integrate Gollum::GitAccess --- lib/gollum/blob_entry.rb | 10 ++-- lib/gollum/file.rb | 5 +- lib/gollum/git_access.rb | 98 ++++++++++++++++++++++++++++++++++++++-- lib/gollum/page.rb | 5 +- lib/gollum/wiki.rb | 98 +++++++++------------------------------- test/test_wiki.rb | 49 ++++++++++---------- 6 files changed, 151 insertions(+), 114 deletions(-) diff --git a/lib/gollum/blob_entry.rb b/lib/gollum/blob_entry.rb index b224fc4a..1c3f8f2e 100644 --- a/lib/gollum/blob_entry.rb +++ b/lib/gollum/blob_entry.rb @@ -6,10 +6,13 @@ module Gollum # Gets the String full path for this blob. attr_reader :path - def initialize(sha, path) + attr_reader :size + + def initialize(sha, path, size = nil) @sha = sha @path = path - @dir = @name = @blob = nil + @size = size + @dir = @name = @blob = nil end # Gets the normalized directory path for this blob. @@ -28,7 +31,8 @@ module Gollum # # Returns an unbaked Grit::Blob instance. def blob(repo) - @blob ||= Grit::Blob.create(repo, :id => @sha, :name => @name) + @blob ||= Grit::Blob.create(repo, + :id => @sha, :name => name, :size => @size) end # Gets a Page instance for this blob. diff --git a/lib/gollum/file.rb b/lib/gollum/file.rb index 8e7c33d3..295a5e52 100644 --- a/lib/gollum/file.rb +++ b/lib/gollum/file.rb @@ -53,11 +53,10 @@ module Gollum def find(name, version) checked = name.downcase map = @wiki.tree_map_for(version) - sha = @wiki.ref_map[version] || version if entry = map.detect { |entry| entry.path.downcase == checked } @path = name - @blob = Grit::Blob.create(@wiki.repo, :id => entry.sha, :name => entry.name) - @version = Grit::Commit.create(@wiki.repo, :id => sha) + @blob = entry.blob(@wiki.repo) + @version = @wiki.commit_for(version) self end end diff --git a/lib/gollum/git_access.rb b/lib/gollum/git_access.rb index 7f9c299d..9887f70c 100644 --- a/lib/gollum/git_access.rb +++ b/lib/gollum/git_access.rb @@ -2,18 +2,108 @@ module Gollum class GitAccess attr_reader :path attr_reader :repo + + # Gets a Hash cache of refs to commit SHAs. + # + # {"master" => "abc123", ...} + # + # Returns the Hash cache. attr_reader :ref_map + + # Gets a Hash cache of commit SHAs to a recursive tree of blobs. + # + # {"abc123" => [["lib/foo.rb", "blob-sha"], [file, sha], ...], ...} + # + # Returns the Hash cache. attr_reader :tree_map + attr_reader :commit_map def initialize(path) - @path = path - @repo = Grit::Repo.new(path) - @ref_map = {} - @tree_map = {} + @path = path + @repo = Grit::Repo.new(path) + clear + end + + def clear + @ref_map = {} + @tree_map = {} + @commit_map = {} + end + + def refresh + @ref_map.clear end def exist? @repo.git.exist? end + + def ref_to_sha(ref) + @ref_map[ref] ||= ref_to_sha!(ref) + end + + def tree(ref) + sha = ref_to_sha(ref) + @tree_map[sha] ||= tree!(sha) + end + + def blob(sha) + cat_file!(sha) + end + + def commit(ref) + if sha = @ref_map[ref] + @commit_map[sha] ||= commit!(sha) + else + cm = commit!(ref) + @ref_map[ref] = cm.id + @commit_map[cm.id] = cm + end + end + + def ref_to_sha!(ref) + @repo.git.rev_list({:max_count=>1}, ref) + end + + def tree!(sha) + tree = @repo.git.native(:ls_tree, + {:r => true, :l => true, :z => true}, sha) + tree.split("\0").inject([]) do |items, line| + items << parse_tree_line(line) + end + end + + def cat_file!(sha) + @repo.git.cat_file({:p => true}, sha) + end + + def commit!(sha) + @repo.commit(sha) + end + + # Parses a line of output from the `ls-tree` command. + # + # line - A String line of output: + # "100644 blob 839c2291b30495b9a882c17d08254d3c90d8fb53 Home.md" + # + # Returns an Array of BlobEntry instances. + def parse_tree_line(line) + mode, type, sha, size, *name = line.split(/\s+/) + BlobEntry.new(sha, name.to_s, size.to_i) + end + + # Decode octal sequences (\NNN) in tree path names. + # + # path - String path name. + # + # Returns a decoded String. + def decode_git_path(path) + if path[0] == ?" && path[-1] == ?" + path = path[1...-1] + path.gsub!(/\\\d{3}/) { |m| m[1..-1].to_i(8).chr } + end + path.gsub!(/\\[rn"\\]/) { |m| eval(%("#{m.to_s}")) } + path + end end end \ No newline at end of file diff --git a/lib/gollum/page.rb b/lib/gollum/page.rb index ba091458..21a9cbb4 100644 --- a/lib/gollum/page.rb +++ b/lib/gollum/page.rb @@ -272,9 +272,8 @@ module Gollum def find(name, version) map = @wiki.tree_map_for(version) if page = find_page_in_tree(map, name) - sha = @wiki.ref_map[version] || version - page.version = Grit::Commit.create(@wiki.repo, :id => sha) - page.historical = sha == version + page.version = @wiki.commit_for(version) + page.historical = page.version.id == version page end rescue Grit::GitRuby::Repository::NoSuchShaFound diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index d7f68556..9b13d6a6 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -58,13 +58,16 @@ module Gollum # # Returns a fresh Gollum::Repo. def initialize(path, options = {}) + if path.is_a?(GitAccess) + options[:access] = path + path = path.path + end @path = path - @access = options[:access] || GitAccess.new(path) - @repo = @access.repo + @access = options[:access] || GitAccess.new(path) @base_path = options[:base_path] || "/" @page_class = options[:page_class] || self.class.page_class @file_class = options[:file_class] || self.class.file_class - clear_cache + @repo = @access.repo end # Public: check whether the wiki's git repo exists on the filesystem. @@ -109,7 +112,7 @@ module Gollum path = @page_class.cname(name) + '.' + ext blob = OpenStruct.new(:name => path, :data => data) page.populate(blob, path) - page.version = self.repo.commit("HEAD") + page.version = @access.commit('HEAD') page end @@ -138,7 +141,7 @@ module Gollum actor = Grit::Actor.new(commit[:name], commit[:email]) sha1 = index.commit(commit[:message], parents, actor) - @ref_map.clear + @access.refresh update_working_dir(index, '', name, format) sha1 @@ -181,7 +184,7 @@ module Gollum actor = Grit::Actor.new(commit[:name], commit[:email]) sha1 = index.commit(commit[:message], [pcommit], actor) - @ref_map.clear + @access.refresh update_working_dir(index, dir, page.name, page.format) update_working_dir(index, dir, name, format) @@ -210,7 +213,7 @@ module Gollum actor = Grit::Actor.new(commit[:name], commit[:email]) sha1 = index.commit(commit[:message], [pcommit], actor) - @ref_map.clear + @access.refresh update_working_dir(index, dir, page.name, page.format) sha1 @@ -267,6 +270,10 @@ module Gollum @repo.log('master', nil, log_pagination_options(options)) end + def clear_cache + @access.refresh + end + ######################################################################### # # Internal Methods @@ -283,20 +290,6 @@ module Gollum # Returns the String path. attr_reader :path - # Gets a Hash cache of refs to commit SHAs. - # - # {"master" => "abc123", ...} - # - # Returns the Hash cache. - attr_reader :ref_map - - # Gets a Hash cache of commit SHAs to a recursive tree of blobs. - # - # {"abc123" => [["lib/foo.rb", "blob-sha"], [file, sha], ...], ...} - # - # Returns the Hash cache. - attr_reader :tree_map - # Gets the page class used by all instances of this Wiki. attr_reader :page_class @@ -359,8 +352,7 @@ module Gollum def tree_list(ref) tree_map_for(ref).inject([]) do |list, entry| next list unless @page_class.valid_page_name?(entry.name) - sha = ref_map[ref] - list << entry.page(self, @repo.commit(sha)) + list << entry.page(self, @access.commit(ref)) end end @@ -479,6 +471,11 @@ module Gollum @repo.config['user.email'] || self.class.default_committer_email end + def commit_for(ref) + @access.commit(ref) + rescue Grit::GitRuby::Repository::NoSuchShaFound + end + # Finds a full listing of files and their blob SHA for a given ref. Each # listing is cached based on its actual commit SHA. # @@ -486,62 +483,9 @@ module Gollum # # Returns an Array of BlobEntry instances. def tree_map_for(ref) - sha = @ref_map[ref] || ref - @tree_map[sha] || begin - real_sha = @repo.git.rev_list({:max_count=>1}, ref) - @ref_map[ref] = real_sha if real_sha != ref - @tree_map[real_sha] ||= parse_tree_for(real_sha) - end + @access.tree(ref) rescue Grit::GitRuby::Repository::NoSuchShaFound [] end - - # Finds the full listing of files and their blob SHA for a given commit - # SHA. No caching or ref lookups are performed. - # - # sha - String commit SHA. - # - # Returns an Array of BlobEntry instances. - def parse_tree_for(sha) - tree = @repo.git.native(:ls_tree, {:r => true, :z => true}, sha) - items = [] - tree.split("\0").each do |line| - items << parse_tree_line(line) - end - items - end - - # Parses a line of output from the `ls-tree` command. - # - # line - A String line of output: - # "100644 blob 839c2291b30495b9a882c17d08254d3c90d8fb53 Home.md" - # - # Returns an Array of BlobEntry instances. - def parse_tree_line(line) - data, name = line.split("\t") - mode, type, sha = data.split(' ') - name = decode_git_path(name) - BlobEntry.new(sha, name) - end - - # Decode octal sequences (\NNN) in tree path names. - # - # path - String path name. - # - # Returns a decoded String. - def decode_git_path(path) - if path[0] == ?" && path[-1] == ?" - path = path[1...-1] - path.gsub!(/\\\d{3}/) { |m| m[1..-1].to_i(8).chr } - end - path.gsub!(/\\[rn"\\]/) { |m| eval(%("#{m.to_s}")) } - path - end - - # Resets the ref and tree caches for this wiki. - def clear_cache - @ref_map = {} - @tree_map = {} - end end end diff --git a/test/test_wiki.rb b/test/test_wiki.rb index 51cd287b..36642161 100644 --- a/test/test_wiki.rb +++ b/test/test_wiki.rb @@ -2,7 +2,8 @@ require File.join(File.dirname(__FILE__), *%w[helper]) context "Wiki" do setup do - @wiki = Gollum::Wiki.new(testpath("examples/lotr.git")) + @access = Gollum::GitAccess.new(testpath("examples/lotr.git")) + @wiki = Gollum::Wiki.new(@access) end test "repo path" do @@ -60,29 +61,29 @@ context "Wiki" do @wiki.normalize_commit(commit.dup)) end - test "#tree_map_for caches ref and tree" do - assert @wiki.ref_map.empty? - assert @wiki.tree_map.empty? - @wiki.tree_map_for 'master' - assert_equal({"master"=>"60f12f4254f58801b9ee7db7bca5fa8aeefaa56b"}, @wiki.ref_map) - - map = @wiki.tree_map['60f12f4254f58801b9ee7db7bca5fa8aeefaa56b'] - assert_equal 'Bilbo-Baggins.md', map[0].path - assert_equal '', map[0].dir - assert_equal map[0].path, map[0].name - assert_equal 'Mordor/Eye-Of-Sauron.md', map[3].path - assert_equal '/Mordor', map[3].dir - assert_equal 'Eye-Of-Sauron.md', map[3].name - end - - test "#tree_map_for only caches tree for commit" do - assert @wiki.tree_map.empty? - @wiki.tree_map_for '60f12f4254f58801b9ee7db7bca5fa8aeefaa56b' - assert @wiki.ref_map.empty? - - entry = @wiki.tree_map['60f12f4254f58801b9ee7db7bca5fa8aeefaa56b'][0] - assert_equal 'Bilbo-Baggins.md', entry.path - end + #test "#tree_map_for caches ref and tree" do + # assert @wiki.ref_map.empty? + # assert @wiki.tree_map.empty? + # @wiki.tree_map_for 'master' + # assert_equal({"master"=>"60f12f4254f58801b9ee7db7bca5fa8aeefaa56b"}, @wiki.ref_map) + # + # map = @wiki.tree_map['60f12f4254f58801b9ee7db7bca5fa8aeefaa56b'] + # assert_equal 'Bilbo-Baggins.md', map[0].path + # assert_equal '', map[0].dir + # assert_equal map[0].path, map[0].name + # assert_equal 'Mordor/Eye-Of-Sauron.md', map[3].path + # assert_equal '/Mordor', map[3].dir + # assert_equal 'Eye-Of-Sauron.md', map[3].name + #end + # + #test "#tree_map_for only caches tree for commit" do + # assert @access.tree_map.empty? + # @access.tree '60f12f4254f58801b9ee7db7bca5fa8aeefaa56b' + # assert @access.ref_map.empty? + # + # entry = @access.tree_map['60f12f4254f58801b9ee7db7bca5fa8aeefaa56b'][0] + # assert_equal 'Bilbo-Baggins.md', entry.path + #end end context "Wiki page previewing" do From a92a882021e4b889687f7279cf0f36de5cb3685c Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 11 Oct 2010 13:32:14 -0700 Subject: [PATCH 009/393] restore ref_map and tree_map tests --- lib/gollum/git_access.rb | 6 +++++- test/test_git_access.rb | 31 +++++++++++++++++++++++++++++++ test/test_wiki.rb | 27 +-------------------------- 3 files changed, 37 insertions(+), 27 deletions(-) create mode 100644 test/test_git_access.rb diff --git a/lib/gollum/git_access.rb b/lib/gollum/git_access.rb index 9887f70c..a27225b4 100644 --- a/lib/gollum/git_access.rb +++ b/lib/gollum/git_access.rb @@ -39,7 +39,11 @@ module Gollum end def ref_to_sha(ref) - @ref_map[ref] ||= ref_to_sha!(ref) + if ref =~ /^[0-9a-f]{40}$/ + ref + else + @ref_map[ref] ||= ref_to_sha!(ref) + end end def tree(ref) diff --git a/test/test_git_access.rb b/test/test_git_access.rb new file mode 100644 index 00000000..8d991fea --- /dev/null +++ b/test/test_git_access.rb @@ -0,0 +1,31 @@ +require File.join(File.dirname(__FILE__), *%w[helper]) + +context "GitAccess" do + setup do + @access = Gollum::GitAccess.new(testpath("examples/lotr.git")) + end + + test "#tree_map_for caches ref and tree" do + assert @access.ref_map.empty? + assert @access.tree_map.empty? + @access.tree 'master' + assert_equal({"master"=>"60f12f4254f58801b9ee7db7bca5fa8aeefaa56b"}, @access.ref_map) + + map = @access.tree_map['60f12f4254f58801b9ee7db7bca5fa8aeefaa56b'] + assert_equal 'Bilbo-Baggins.md', map[0].path + assert_equal '', map[0].dir + assert_equal map[0].path, map[0].name + assert_equal 'Mordor/Eye-Of-Sauron.md', map[3].path + assert_equal '/Mordor', map[3].dir + assert_equal 'Eye-Of-Sauron.md', map[3].name + end + + test "#tree_map_for only caches tree for commit" do + assert @access.tree_map.empty? + @access.tree '60f12f4254f58801b9ee7db7bca5fa8aeefaa56b' + assert @access.ref_map.empty? + + entry = @access.tree_map['60f12f4254f58801b9ee7db7bca5fa8aeefaa56b'][0] + assert_equal 'Bilbo-Baggins.md', entry.path + end +end \ No newline at end of file diff --git a/test/test_wiki.rb b/test/test_wiki.rb index 36642161..7d9ac0b3 100644 --- a/test/test_wiki.rb +++ b/test/test_wiki.rb @@ -2,8 +2,7 @@ require File.join(File.dirname(__FILE__), *%w[helper]) context "Wiki" do setup do - @access = Gollum::GitAccess.new(testpath("examples/lotr.git")) - @wiki = Gollum::Wiki.new(@access) + @wiki = Gollum::Wiki.new(testpath("examples/lotr.git")) end test "repo path" do @@ -60,30 +59,6 @@ context "Wiki" do assert_equal({:message => 'abc', :name => 'bob', :email => 'foo@bar.com'}, @wiki.normalize_commit(commit.dup)) end - - #test "#tree_map_for caches ref and tree" do - # assert @wiki.ref_map.empty? - # assert @wiki.tree_map.empty? - # @wiki.tree_map_for 'master' - # assert_equal({"master"=>"60f12f4254f58801b9ee7db7bca5fa8aeefaa56b"}, @wiki.ref_map) - # - # map = @wiki.tree_map['60f12f4254f58801b9ee7db7bca5fa8aeefaa56b'] - # assert_equal 'Bilbo-Baggins.md', map[0].path - # assert_equal '', map[0].dir - # assert_equal map[0].path, map[0].name - # assert_equal 'Mordor/Eye-Of-Sauron.md', map[3].path - # assert_equal '/Mordor', map[3].dir - # assert_equal 'Eye-Of-Sauron.md', map[3].name - #end - # - #test "#tree_map_for only caches tree for commit" do - # assert @access.tree_map.empty? - # @access.tree '60f12f4254f58801b9ee7db7bca5fa8aeefaa56b' - # assert @access.ref_map.empty? - # - # entry = @access.tree_map['60f12f4254f58801b9ee7db7bca5fa8aeefaa56b'][0] - # assert_equal 'Bilbo-Baggins.md', entry.path - #end end context "Wiki page previewing" do From 6552323797bc8c97f69002394a89feb8dce17e0e Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 11 Oct 2010 16:01:06 -0700 Subject: [PATCH 010/393] implement GitAccess#commits using grit head --- lib/gollum/git_access.rb | 37 ++++++++++++++++++++++++++++++++++--- test/test_git_access.rb | 17 +++++++++++++++++ 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/lib/gollum/git_access.rb b/lib/gollum/git_access.rb index a27225b4..9f259bee 100644 --- a/lib/gollum/git_access.rb +++ b/lib/gollum/git_access.rb @@ -39,7 +39,7 @@ module Gollum end def ref_to_sha(ref) - if ref =~ /^[0-9a-f]{40}$/ + if sha?(ref) ref else @ref_map[ref] ||= ref_to_sha!(ref) @@ -56,15 +56,46 @@ module Gollum end def commit(ref) - if sha = @ref_map[ref] + ref_is_sha = sha?(ref) + if sha = (!ref_is_sha && @ref_map[ref]) @commit_map[sha] ||= commit!(sha) else cm = commit!(ref) - @ref_map[ref] = cm.id + @ref_map[ref] = cm.id if !ref_is_sha @commit_map[cm.id] = cm end end + def commits(*shas) + shas.flatten! + cached_commits = multi_get(:commit_map, shas) + missing_shas = shas.select do |sha| + !cached_commits.key?(sha) + end + if !missing_shas.empty? + missing_shas.each_slice(500) do |slice| + @repo.batch(slice).each do |commit| + cached_commits[commit.id] = commit + end + end + end + shas.map { |sha| cached_commits[sha] } + end + + def multi_get(name, keys) + value = instance_variable_get("@#{name}") + keys.inject({}) do |memo, key| + if v = value[key] + memo[key] = v + end + memo + end + end + + def sha?(str) + str =~ /^[0-9a-f]{40}$/ + end + def ref_to_sha!(ref) @repo.git.rev_list({:max_count=>1}, ref) end diff --git a/test/test_git_access.rb b/test/test_git_access.rb index 8d991fea..7e62c689 100644 --- a/test/test_git_access.rb +++ b/test/test_git_access.rb @@ -5,6 +5,23 @@ context "GitAccess" do @access = Gollum::GitAccess.new(testpath("examples/lotr.git")) end + test "#commit fills commit_map cache" do + assert @access.commit_map.empty? + actual = @access.repo.commits.first + expected = @access.commit(actual.id) + assert_equal actual.message, expected.message + assert_equal actual.message, @access.commit_map[actual.id].message + end + + test "#commits uses commit_map" do + actual = @access.repo.commits.first + #@access.commit actual.id + @access.commit_map['abc'] = 1 + commits = @access.commits('abc', actual.id) + assert_equal 1, commits[0] + assert_equal actual.message, commits[1].message + end + test "#tree_map_for caches ref and tree" do assert @access.ref_map.empty? assert @access.tree_map.empty? From 300d8eacc57ed002a9beaf451550c2097ad4020b Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 11 Oct 2010 16:15:18 -0700 Subject: [PATCH 011/393] optimize Gollum::Wiki#tree_list --- lib/gollum/file.rb | 2 +- lib/gollum/git_access.rb | 15 +++++++++------ lib/gollum/page.rb | 7 ++++--- lib/gollum/wiki.rb | 6 ++++-- 4 files changed, 18 insertions(+), 12 deletions(-) diff --git a/lib/gollum/file.rb b/lib/gollum/file.rb index 295a5e52..acea37a6 100644 --- a/lib/gollum/file.rb +++ b/lib/gollum/file.rb @@ -56,7 +56,7 @@ module Gollum if entry = map.detect { |entry| entry.path.downcase == checked } @path = name @blob = entry.blob(@wiki.repo) - @version = @wiki.commit_for(version) + @version = version.is_a?(Grit::Commit) ? version : @wiki.commit_for(version) self end end diff --git a/lib/gollum/git_access.rb b/lib/gollum/git_access.rb index 9f259bee..5fadef6f 100644 --- a/lib/gollum/git_access.rb +++ b/lib/gollum/git_access.rb @@ -56,13 +56,16 @@ module Gollum end def commit(ref) - ref_is_sha = sha?(ref) - if sha = (!ref_is_sha && @ref_map[ref]) - @commit_map[sha] ||= commit!(sha) + if sha?(ref) + @commit_map[ref] ||= commit!(ref) else - cm = commit!(ref) - @ref_map[ref] = cm.id if !ref_is_sha - @commit_map[cm.id] = cm + if sha = @ref_map[ref] + commit(sha) + else + cm = commit!(ref) + @ref_map[ref] = cm.id + @commit_map[cm.id] = cm + end end end diff --git a/lib/gollum/page.rb b/lib/gollum/page.rb index 21a9cbb4..32bdd6ae 100644 --- a/lib/gollum/page.rb +++ b/lib/gollum/page.rb @@ -270,10 +270,11 @@ module Gollum # # Returns a Gollum::Page or nil if the page could not be found. def find(name, version) - map = @wiki.tree_map_for(version) + map = @wiki.tree_map_for(version.to_s) if page = find_page_in_tree(map, name) - page.version = @wiki.commit_for(version) - page.historical = page.version.id == version + page.version = version.is_a?(Grit::Commit) ? + version : @wiki.commit_for(version) + page.historical = page.version.to_s == version.to_s page end rescue Grit::GitRuby::Repository::NoSuchShaFound diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 9b13d6a6..c8a4ee2c 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -350,9 +350,11 @@ module Gollum # # Returns a flat Array of Gollum::Page instances. def tree_list(ref) - tree_map_for(ref).inject([]) do |list, entry| + sha = @access.ref_to_sha(ref) + commit = @access.commit(sha) + tree_map_for(sha).inject([]) do |list, entry| next list unless @page_class.valid_page_name?(entry.name) - list << entry.page(self, @access.commit(ref)) + list << entry.page(self, commit) end end From b8a50c0ccc139433119c5e18bb0bf1e7907e6788 Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 11 Oct 2010 17:03:44 -0700 Subject: [PATCH 012/393] updated experimental gemspec --- gollum.gemspec | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gollum.gemspec b/gollum.gemspec index 521f8bbf..2b13efe3 100644 --- a/gollum.gemspec +++ b/gollum.gemspec @@ -460,6 +460,7 @@ Gem::Specification.new do |s| lib/gollum/frontend/views/layout.rb lib/gollum/frontend/views/page.rb lib/gollum/frontend/views/search.rb + lib/gollum/git_access.rb lib/gollum/markup.rb lib/gollum/page.rb lib/gollum/pagination.rb @@ -504,6 +505,7 @@ Gem::Specification.new do |s| test/examples/lotr.git/refs/heads/master test/helper.rb test/test_file.rb + test/test_git_access.rb test/test_markup.rb test/test_page.rb test/test_wiki.rb From e7b12658737c138e14f5e300de80bdb71f666a74 Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 11 Oct 2010 17:40:09 -0700 Subject: [PATCH 013/393] Gollum::Wiki#size returns 0 if the repo is invalid or empty --- lib/gollum/wiki.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 172aa9aa..30fade8a 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -233,6 +233,8 @@ module Gollum tree_map_for(ref || 'master').inject(0) do |num, entry| num + (@page_class.valid_page_name?(entry.name) ? 1 : 0) end + rescue Grit::GitRuby::Repository::NoSuchShaFound + 0 end # Public: Search all pages for this wiki. From c6dc4acc0298ebaf30fff8a577ae3f0d91716469 Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 11 Oct 2010 18:05:02 -0700 Subject: [PATCH 014/393] add extension points for GitAccess caching --- lib/gollum/git_access.rb | 48 ++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/lib/gollum/git_access.rb b/lib/gollum/git_access.rb index 5fadef6f..ed5a7b59 100644 --- a/lib/gollum/git_access.rb +++ b/lib/gollum/git_access.rb @@ -42,13 +42,13 @@ module Gollum if sha?(ref) ref else - @ref_map[ref] ||= ref_to_sha!(ref) + get_cache(:ref, ref) { ref_to_sha!(ref) } end end def tree(ref) sha = ref_to_sha(ref) - @tree_map[sha] ||= tree!(sha) + get_cache(:tree, sha) { tree!(sha) } end def blob(sha) @@ -57,21 +57,21 @@ module Gollum def commit(ref) if sha?(ref) - @commit_map[ref] ||= commit!(ref) + get_cache(:commit, ref) { commit!(ref) } else - if sha = @ref_map[ref] + if sha = get_cache(:ref, ref) commit(sha) else cm = commit!(ref) - @ref_map[ref] = cm.id - @commit_map[cm.id] = cm + set_cache(:ref, ref, cm.id) + set_cache(:commit, cm.id, cm) end end end def commits(*shas) shas.flatten! - cached_commits = multi_get(:commit_map, shas) + cached_commits = multi_get(:commit, shas) missing_shas = shas.select do |sha| !cached_commits.key?(sha) end @@ -85,16 +85,6 @@ module Gollum shas.map { |sha| cached_commits[sha] } end - def multi_get(name, keys) - value = instance_variable_get("@#{name}") - keys.inject({}) do |memo, key| - if v = value[key] - memo[key] = v - end - memo - end - end - def sha?(str) str =~ /^[0-9a-f]{40}$/ end @@ -119,6 +109,30 @@ module Gollum @repo.commit(sha) end + def get_cache(name, key) + cache = instance_variable_get("@#{name}_map") + value = cache[key] + if value.nil? && block_given? + set_cache(name, key, value = yield) + end + value + end + + def set_cache(name, key, value) + cache = instance_variable_get("@#{name}_map") + cache[key] = value + end + + def multi_get(name, keys) + value = instance_variable_get("@#{name}_map") + keys.inject({}) do |memo, key| + if v = value[key] + memo[key] = v + end + memo + end + end + # Parses a line of output from the `ls-tree` command. # # line - A String line of output: From 16ef85907343d2dc998e116da072850c3c0a1e37 Mon Sep 17 00:00:00 2001 From: Marko Anastasov Date: Tue, 12 Oct 2010 12:03:45 +0200 Subject: [PATCH 015/393] Ignore case when matching image paths. Otherwise images with file extensions in caps don't get rendered. --- lib/gollum/markup.rb | 2 +- test/test_markup.rb | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 1b1505ec..2a78bbbf 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -162,7 +162,7 @@ module Gollum name = parts[0].strip path = if file = find_file(name) ::File.join @wiki.base_path, file.path - elsif name =~ /^https?:\/\/.+(jpg|png|gif|svg|bmp)$/ + elsif name =~ /^https?:\/\/.+(jpg|png|gif|svg|bmp)$/i name end diff --git a/test/test_markup.rb b/test/test_markup.rb index 9fb5f280..4a7b54c3 100644 --- a/test/test_markup.rb +++ b/test/test_markup.rb @@ -145,6 +145,17 @@ context "Markup" do end end + test "image with extension in caps with http url" do + ['http', 'https'].each do |scheme| + name = "Bilbo Baggins #{scheme}" + @wiki.write_page(name, :markdown, "a [[#{scheme}://example.com/bilbo.JPG]] b", commit_details) + + page = @wiki.page(name) + output = page.formatted_data + assert_equal %{

a b

}, output + end + end + test "image with absolute path" do @wiki = Gollum::Wiki.new(@path, :base_path => '/wiki') index = @wiki.repo.index From f2ed24ef8cbdb23153c551b5ec013571352c21e4 Mon Sep 17 00:00:00 2001 From: rick Date: Tue, 12 Oct 2010 10:02:48 -0700 Subject: [PATCH 016/393] extract multi_commit! method from GitAccess --- lib/gollum/git_access.rb | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/gollum/git_access.rb b/lib/gollum/git_access.rb index ed5a7b59..25bace47 100644 --- a/lib/gollum/git_access.rb +++ b/lib/gollum/git_access.rb @@ -75,14 +75,18 @@ module Gollum missing_shas = shas.select do |sha| !cached_commits.key?(sha) end - if !missing_shas.empty? - missing_shas.each_slice(500) do |slice| - @repo.batch(slice).each do |commit| - cached_commits[commit.id] = commit - end + + multi_commit!(missing_shas, cached_commits) if !missing_shas.empty? + + shas.map { |sha| cached_commits[sha] } + end + + def multi_commit!(shas, hash) + shas.each_slice(500) do |slice| + @repo.batch(slice).each do |commit| + hash[commit.id] = commit end end - shas.map { |sha| cached_commits[sha] } end def sha?(str) From e7f2da2d4a5dd42f0174ca03cd69dfc94bec1c44 Mon Sep 17 00:00:00 2001 From: rick Date: Tue, 12 Oct 2010 15:36:36 -0700 Subject: [PATCH 017/393] add caching hooks for Gollum::Markup --- lib/gollum/markup.rb | 39 ++++++++++++++++++++++++++++++++------- lib/gollum/page.rb | 2 +- lib/gollum/wiki.rb | 39 +++++++++++++++++++++++++++++---------- 3 files changed, 62 insertions(+), 18 deletions(-) diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 2a78bbbf..b9a3bef3 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -348,8 +348,11 @@ module Gollum # Returns the placeholder'd String data. def extract_code(data) data.gsub(/^``` ?(.+?)\r?\n(.+?)\r?\n```\r?$/m) do - id = Digest::SHA1.hexdigest($2) - @codemap[id] = { :lang => $1, :code => $2 } + id = Digest::SHA1.hexdigest($2) + cached = check_cache(id) + @codemap[id] = cached ? + { :output => cached } : + { :lang => $1, :code => $2 } id end end @@ -362,14 +365,36 @@ module Gollum # Returns the marked up String data. def process_code(data) @codemap.each do |id, spec| - lang = spec[:lang] - code = spec[:code] - if code.lines.all? { |line| line =~ /\A\r?\n\Z/ || line =~ /^( |\t)/ } - code.gsub!(/^( |\t)/m, '') + formatted = spec[:output] || begin + lang = spec[:lang] + code = spec[:code] + if code.lines.all? { |line| line =~ /\A\r?\n\Z/ || line =~ /^( |\t)/ } + code.gsub!(/^( |\t)/m, '') + end + formatted = Gollum::Albino.new(code, lang).colorize + update_cache(id, formatted) + formatted end - data.gsub!(id, Gollum::Albino.new(code, lang).colorize) + data.gsub!(id, formatted) end data end + + # Hook for getting the formatted value of extracted tag data. + # + # id - String SHA1 hash of original extracted tag data. + # + # Returns the String cached formatted data, or nil. + def check_cache(id) + end + + # Hook for caching the formatted value of extracted tag data. + # + # id - String SHA1 hash of original extracted tag data. + # data - The String formatted value to be cached. + # + # Returns nothing. + def update_cache(id, data) + end end end diff --git a/lib/gollum/page.rb b/lib/gollum/page.rb index 32bdd6ae..32f0ad51 100644 --- a/lib/gollum/page.rb +++ b/lib/gollum/page.rb @@ -120,7 +120,7 @@ module Gollum # # Returns the String data. def formatted_data - @blob && Gollum::Markup.new(self).render(historical?) + @blob && @wiki.markup_class.new(self).render(historical?) end # Public: The format of the page. diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index e1d265cd..9e529e17 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -9,6 +9,9 @@ module Gollum # Sets the file class used by all instances of this Wiki. attr_writer :file_class + # Sets the markup class used by all instances of this Wiki. + attr_writer :markup_class + # Sets the default name for commits. attr_accessor :default_committer_name @@ -36,6 +39,17 @@ module Gollum ::Gollum::File end end + + # Gets the markup class used by all instances of this Wiki. + # Default: Gollum::Markup + def markup_class + @markup_class || + if superclass.respond_to?(:markup_class) + superclass.markup_class + else + ::Gollum::Markup + end + end end self.default_committer_name = 'Anonymous' @@ -51,10 +65,11 @@ module Gollum # repo - The String path to the Git repository that holds the Gollum # site. # options - Optional Hash: - # :base_path - String base path for all Wiki links. - # Default: "/" - # :page_class - The page Class. Default: Gollum::Page - # :file_class - The file Class. Default: Gollum::File + # :base_path - String base path for all Wiki links. + # Default: "/" + # :page_class - The page Class. Default: Gollum::Page + # :file_class - The file Class. Default: Gollum::File + # :markup_class - The markup Class. Default: Gollum::Markup # # Returns a fresh Gollum::Repo. def initialize(path, options = {}) @@ -62,12 +77,13 @@ module Gollum options[:access] = path path = path.path end - @path = path - @access = options[:access] || GitAccess.new(path) - @base_path = options[:base_path] || "/" - @page_class = options[:page_class] || self.class.page_class - @file_class = options[:file_class] || self.class.file_class - @repo = @access.repo + @path = path + @access = options[:access] || GitAccess.new(path) + @base_path = options[:base_path] || "/" + @page_class = options[:page_class] || self.class.page_class + @file_class = options[:file_class] || self.class.file_class + @markup_class = options[:markup_class] || self.class.markup_class + @repo = @access.repo end # Public: check whether the wiki's git repo exists on the filesystem. @@ -298,6 +314,9 @@ module Gollum # Gets the file class used by all instances of this Wiki. attr_reader :file_class + # Gets the markup class used by all instances of this Wiki. + attr_reader :markup_class + # Normalize the data. # # data - The String data to be normalized. From 497b36ad2b49605025f70d3f0075b5fb72c43841 Mon Sep 17 00:00:00 2001 From: rick Date: Tue, 12 Oct 2010 15:46:55 -0700 Subject: [PATCH 018/393] give the markup caching methods a bit more info --- lib/gollum/markup.rb | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index b9a3bef3..bf418b5b 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -349,7 +349,7 @@ module Gollum def extract_code(data) data.gsub(/^``` ?(.+?)\r?\n(.+?)\r?\n```\r?$/m) do id = Digest::SHA1.hexdigest($2) - cached = check_cache(id) + cached = check_cache(:code, id) @codemap[id] = cached ? { :output => cached } : { :lang => $1, :code => $2 } @@ -372,7 +372,7 @@ module Gollum code.gsub!(/^( |\t)/m, '') end formatted = Gollum::Albino.new(code, lang).colorize - update_cache(id, formatted) + update_cache(:code, id, formatted) formatted end data.gsub!(id, formatted) @@ -382,19 +382,21 @@ module Gollum # Hook for getting the formatted value of extracted tag data. # - # id - String SHA1 hash of original extracted tag data. + # type - Symbol value identifying what type of data is being extracted. + # id - String SHA1 hash of original extracted tag data. # # Returns the String cached formatted data, or nil. - def check_cache(id) + def check_cache(type, id) end # Hook for caching the formatted value of extracted tag data. # + # type - Symbol value identifying what type of data is being extracted. # id - String SHA1 hash of original extracted tag data. # data - The String formatted value to be cached. # # Returns nothing. - def update_cache(id, data) + def update_cache(type, id, data) end end end From 54917bbdb9f2df527c6a14f06cb9c2bb8415dd9d Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 13 Oct 2010 09:52:04 -0700 Subject: [PATCH 019/393] recover from bad shas --- lib/gollum/git_access.rb | 17 ++++++++++------- lib/gollum/page.rb | 2 +- test/test_git_access.rb | 15 +++++++++++++-- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/lib/gollum/git_access.rb b/lib/gollum/git_access.rb index 25bace47..00ae88f0 100644 --- a/lib/gollum/git_access.rb +++ b/lib/gollum/git_access.rb @@ -47,8 +47,9 @@ module Gollum end def tree(ref) - sha = ref_to_sha(ref) - get_cache(:tree, sha) { tree!(sha) } + if sha = ref_to_sha(ref) + get_cache(:tree, sha) { tree!(sha) } + end end def blob(sha) @@ -62,9 +63,10 @@ module Gollum if sha = get_cache(:ref, ref) commit(sha) else - cm = commit!(ref) - set_cache(:ref, ref, cm.id) - set_cache(:commit, cm.id, cm) + if cm = commit!(ref) + set_cache(:ref, ref, cm.id) + set_cache(:commit, cm.id, cm) + end end end end @@ -95,6 +97,7 @@ module Gollum def ref_to_sha!(ref) @repo.git.rev_list({:max_count=>1}, ref) + rescue Grit::GitRuby::Repository::NoSuchShaFound end def tree!(sha) @@ -119,12 +122,12 @@ module Gollum if value.nil? && block_given? set_cache(name, key, value = yield) end - value + value == :_nil ? nil : value end def set_cache(name, key, value) cache = instance_variable_get("@#{name}_map") - cache[key] = value + cache[key] = value || :_nil end def multi_get(name, keys) diff --git a/lib/gollum/page.rb b/lib/gollum/page.rb index 32f0ad51..a534371c 100644 --- a/lib/gollum/page.rb +++ b/lib/gollum/page.rb @@ -289,7 +289,7 @@ module Gollum # # Returns a Gollum::Page or nil if the page could not be found. def find_page_in_tree(map, name, checked_dir = nil) - return nil if name.to_s.empty? + return nil if !map || name.to_s.empty? if checked_dir = BlobEntry.normalize_dir(checked_dir) checked_dir.downcase! end diff --git a/test/test_git_access.rb b/test/test_git_access.rb index 7e62c689..2d9ac653 100644 --- a/test/test_git_access.rb +++ b/test/test_git_access.rb @@ -15,7 +15,6 @@ context "GitAccess" do test "#commits uses commit_map" do actual = @access.repo.commits.first - #@access.commit actual.id @access.commit_map['abc'] = 1 commits = @access.commits('abc', actual.id) assert_equal 1, commits[0] @@ -27,7 +26,7 @@ context "GitAccess" do assert @access.tree_map.empty? @access.tree 'master' assert_equal({"master"=>"60f12f4254f58801b9ee7db7bca5fa8aeefaa56b"}, @access.ref_map) - + map = @access.tree_map['60f12f4254f58801b9ee7db7bca5fa8aeefaa56b'] assert_equal 'Bilbo-Baggins.md', map[0].path assert_equal '', map[0].dir @@ -45,4 +44,16 @@ context "GitAccess" do entry = @access.tree_map['60f12f4254f58801b9ee7db7bca5fa8aeefaa56b'][0] assert_equal 'Bilbo-Baggins.md', entry.path end + + test "cannot access commit from invalid ref" do + assert_nil @access.commit('foo') + end + + test "cannot access sha from invalid ref" do + assert_nil @access.ref_to_sha('foo') + end + + test "cannot access tree from invalid ref" do + assert_nil @access.tree('foo') + end end \ No newline at end of file From 1a19278fc71ad0e03965aae8ffdf3b9731ed71ef Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 13 Oct 2010 12:06:23 -0700 Subject: [PATCH 020/393] GitAccess#tree should always return an array --- lib/gollum/git_access.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/gollum/git_access.rb b/lib/gollum/git_access.rb index 00ae88f0..409a0197 100644 --- a/lib/gollum/git_access.rb +++ b/lib/gollum/git_access.rb @@ -49,6 +49,8 @@ module Gollum def tree(ref) if sha = ref_to_sha(ref) get_cache(:tree, sha) { tree!(sha) } + else + [] end end From 738d171f6bd95b7a733297dc966de16be7fd9c7e Mon Sep 17 00:00:00 2001 From: Asher Van Brunt Date: Thu, 14 Oct 2010 19:09:22 -0700 Subject: [PATCH 021/393] Resolve Issue 15: Allow passing configuration option --- bin/gollum | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/bin/gollum b/bin/gollum index 86ac7622..6f4703bb 100755 --- a/bin/gollum +++ b/bin/gollum @@ -35,6 +35,10 @@ opts = OptionParser.new do |opts| exit 0 end + opts.on("--config [CONFIG]", "Path to additional configuration file") do |config| + options['config'] = config + end + opts.on("--irb", "Start an irb process with gollum loaded for the current wiki.") do options['irb'] = true end @@ -99,5 +103,11 @@ if options['irb'] else require 'gollum/frontend/app' Precious::App.set(:gollum_path, gollum_path) + if cfg = options['config'] + # If the path begins with a '/' it will be considered an absolute path, + # otherwise it will be relative to the CWD + cfg = File.join(Dir.getwd, cfg) unless cfg.slice(0) == File::SEPARATOR + require cfg + end Precious::App.run!(options) end From 23ec55cd52b5c2f32bbd9a33030fcae558bb1083 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Fri, 22 Oct 2010 17:03:47 -0700 Subject: [PATCH 022/393] Adding my scratch directory --- scratch/TODO | 5 ++++ scratch/page.html | 74 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 scratch/TODO create mode 100644 scratch/page.html diff --git a/scratch/TODO b/scratch/TODO new file mode 100644 index 00000000..742577df --- /dev/null +++ b/scratch/TODO @@ -0,0 +1,5 @@ +Create Common Layout +Create Basic CSS +Create View Page +Create History Page +Create Edit Page \ No newline at end of file diff --git a/scratch/page.html b/scratch/page.html new file mode 100644 index 00000000..841fccab --- /dev/null +++ b/scratch/page.html @@ -0,0 +1,74 @@ + + + + + Page Name — Site Name + + + +
+
+
+
+ +
+
+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque congue ultrices metus, sit amet blandit nunc pretium ut. Donec ornare, nisl et suscipit tempor, dolor nunc ornare magna, a ullamcorper massa orci ut urna. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque purus erat, posuere aliquam sagittis sed, tincidunt eu magna. Mauris eu justo tellus. Suspendisse urna magna: +

+
    +
  1. Ordered list 1
  2. +
  3. Ordered list 2
  4. +
  5. Ordered list 3
  6. +
+

+ Tempus a consequat ut, accumsan vitae tellus. Nunc aliquet tempus lectus, non accumsan elit gravida faucibus. Proin in imperdiet ligula. Mauris nec posuere felis. Etiam tempus sollicitudin massa, vel vestibulum est lacinia sed. +

+

+ Nam iaculis volutpat dolor, laoreet blandit felis scelerisque sagittis. Suspendisse pretium lorem in nunc interdum vel malesuada ante pretium. Nam consectetur tortor scelerisque mi congue rhoncus. Curabitur vulputate nunc non urna condimentum in consequat elit lobortis. Etiam eu purus mi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi sit amet arcu enim, id iaculis tortor. +

+
+

+ Quisque rhoncus, elit et eleifend laoreet, metus mauris placerat enim, euismod aliquet justo justo gravida augue. Mauris sit amet urna eu lacus luctus porta eu eget tortor. Suspendisse potenti. +

+
+

+ In urna dolor, pulvinar nec porttitor vitae, varius quis sem. Nulla at nisl nisl. In lobortis enim lacinia lectus semper fermentum id sit amet quam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae. +

+
+
+
+

+ Back to Page Name +

+

Directory Name

+ +
+
+ +
+ + + + + \ No newline at end of file From 3260c120c15c2cad7fad777cc6457a32d9229220 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Fri, 22 Oct 2010 17:24:16 -0700 Subject: [PATCH 023/393] Adding boilerplate files --- scratch/css/gollum.css | 0 scratch/css/page.css | 0 scratch/js/gollum.editor.js | 0 scratch/js/gollum.fx.js | 0 scratch/js/jquery.js | 166 ++++++++++++++++++++++++++++++++++++ scratch/page.html | 8 +- 6 files changed, 170 insertions(+), 4 deletions(-) create mode 100644 scratch/css/gollum.css create mode 100644 scratch/css/page.css create mode 100644 scratch/js/gollum.editor.js create mode 100644 scratch/js/gollum.fx.js create mode 100644 scratch/js/jquery.js diff --git a/scratch/css/gollum.css b/scratch/css/gollum.css new file mode 100644 index 00000000..e69de29b diff --git a/scratch/css/page.css b/scratch/css/page.css new file mode 100644 index 00000000..e69de29b diff --git a/scratch/js/gollum.editor.js b/scratch/js/gollum.editor.js new file mode 100644 index 00000000..e69de29b diff --git a/scratch/js/gollum.fx.js b/scratch/js/gollum.fx.js new file mode 100644 index 00000000..e69de29b diff --git a/scratch/js/jquery.js b/scratch/js/jquery.js new file mode 100644 index 00000000..c941a5f7 --- /dev/null +++ b/scratch/js/jquery.js @@ -0,0 +1,166 @@ +/*! + * jQuery JavaScript Library v1.4.3 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Thu Oct 14 23:10:06 2010 -0400 + */ +(function(E,A){function U(){return false}function ba(){return true}function ja(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ga(a){var b,d,e=[],f=[],h,k,l,n,s,v,B,D;k=c.data(this,this.nodeType?"events":"__events__");if(typeof k==="function")k=k.events;if(!(a.liveFired===this||!k||!k.live||a.button&&a.type==="click")){if(a.namespace)D=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var H=k.live.slice(0);for(n=0;nd)break;a.currentTarget=f.elem;a.data=f.handleObj.data; +a.handleObj=f.handleObj;D=f.handleObj.origHandler.apply(f.elem,arguments);if(D===false||a.isPropagationStopped()){d=f.level;if(D===false)b=false}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(Ha,"`").replace(Ia,"&")}function ka(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Ja.test(b))return c.filter(b, +e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function la(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var k in e[h])c.event.add(this,h,e[h][k],e[h][k].data)}}})}function Ka(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)} +function ma(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?La:Ma,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function ca(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Na.test(a)?e(a,h):ca(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)? +e(a,""):c.each(b,function(f,h){ca(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(na.concat.apply([],na.slice(0,b)),function(){d[this]=a});return d}function oa(a){if(!da[a]){var b=c("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";da[a]=d}return da[a]}function ea(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var u=E.document,c=function(){function a(){if(!b.isReady){try{u.documentElement.doScroll("left")}catch(i){setTimeout(a, +1);return}b.ready()}}var b=function(i,r){return new b.fn.init(i,r)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,k=/\S/,l=/^\s+/,n=/\s+$/,s=/\W/,v=/\d/,B=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,D=/^[\],:{}\s]*$/,H=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,G=/(?:^|:|,)(?:\s*\[)+/g,M=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,j=/(msie) ([\w.]+)/,o=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false, +q=[],t,x=Object.prototype.toString,C=Object.prototype.hasOwnProperty,P=Array.prototype.push,N=Array.prototype.slice,R=String.prototype.trim,Q=Array.prototype.indexOf,L={};b.fn=b.prototype={init:function(i,r){var y,z,F;if(!i)return this;if(i.nodeType){this.context=this[0]=i;this.length=1;return this}if(i==="body"&&!r&&u.body){this.context=u;this[0]=u.body;this.selector="body";this.length=1;return this}if(typeof i==="string")if((y=h.exec(i))&&(y[1]||!r))if(y[1]){F=r?r.ownerDocument||r:u;if(z=B.exec(i))if(b.isPlainObject(r)){i= +[u.createElement(z[1])];b.fn.attr.call(i,r,true)}else i=[F.createElement(z[1])];else{z=b.buildFragment([y[1]],[F]);i=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,i)}else{if((z=u.getElementById(y[2]))&&z.parentNode){if(z.id!==y[2])return f.find(i);this.length=1;this[0]=z}this.context=u;this.selector=i;return this}else if(!r&&!s.test(i)){this.selector=i;this.context=u;i=u.getElementsByTagName(i);return b.merge(this,i)}else return!r||r.jquery?(r||f).find(i):b(r).find(i); +else if(b.isFunction(i))return f.ready(i);if(i.selector!==A){this.selector=i.selector;this.context=i.context}return b.makeArray(i,this)},selector:"",jquery:"1.4.3",length:0,size:function(){return this.length},toArray:function(){return N.call(this,0)},get:function(i){return i==null?this.toArray():i<0?this.slice(i)[0]:this[i]},pushStack:function(i,r,y){var z=b();b.isArray(i)?P.apply(z,i):b.merge(z,i);z.prevObject=this;z.context=this.context;if(r==="find")z.selector=this.selector+(this.selector?" ": +"")+y;else if(r)z.selector=this.selector+"."+r+"("+y+")";return z},each:function(i,r){return b.each(this,i,r)},ready:function(i){b.bindReady();if(b.isReady)i.call(u,b);else q&&q.push(i);return this},eq:function(i){return i===-1?this.slice(i):this.slice(i,+i+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(i){return this.pushStack(b.map(this,function(r,y){return i.call(r, +y,r)}))},end:function(){return this.prevObject||b(null)},push:P,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var i=arguments[0]||{},r=1,y=arguments.length,z=false,F,I,K,J,fa;if(typeof i==="boolean"){z=i;i=arguments[1]||{};r=2}if(typeof i!=="object"&&!b.isFunction(i))i={};if(y===r){i=this;--r}for(;r0)){if(q){for(var r=0;i=q[r++];)i.call(u,b);q=null}b.fn.triggerHandler&&b(u).triggerHandler("ready")}}},bindReady:function(){if(!p){p=true;if(u.readyState==="complete")return setTimeout(b.ready, +1);if(u.addEventListener){u.addEventListener("DOMContentLoaded",t,false);E.addEventListener("load",b.ready,false)}else if(u.attachEvent){u.attachEvent("onreadystatechange",t);E.attachEvent("onload",b.ready);var i=false;try{i=E.frameElement==null}catch(r){}u.documentElement.doScroll&&i&&a()}}},isFunction:function(i){return b.type(i)==="function"},isArray:Array.isArray||function(i){return b.type(i)==="array"},isWindow:function(i){return i&&typeof i==="object"&&"setInterval"in i},isNaN:function(i){return i== +null||!v.test(i)||isNaN(i)},type:function(i){return i==null?String(i):L[x.call(i)]||"object"},isPlainObject:function(i){if(!i||b.type(i)!=="object"||i.nodeType||b.isWindow(i))return false;if(i.constructor&&!C.call(i,"constructor")&&!C.call(i.constructor.prototype,"isPrototypeOf"))return false;for(var r in i);return r===A||C.call(i,r)},isEmptyObject:function(i){for(var r in i)return false;return true},error:function(i){throw i;},parseJSON:function(i){if(typeof i!=="string"||!i)return null;i=b.trim(i); +if(D.test(i.replace(H,"@").replace(w,"]").replace(G,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(i):(new Function("return "+i))();else b.error("Invalid JSON: "+i)},noop:function(){},globalEval:function(i){if(i&&k.test(i)){var r=u.getElementsByTagName("head")[0]||u.documentElement,y=u.createElement("script");y.type="text/javascript";if(b.support.scriptEval)y.appendChild(u.createTextNode(i));else y.text=i;r.insertBefore(y,r.firstChild);r.removeChild(y)}},nodeName:function(i,r){return i.nodeName&&i.nodeName.toUpperCase()=== +r.toUpperCase()},each:function(i,r,y){var z,F=0,I=i.length,K=I===A||b.isFunction(i);if(y)if(K)for(z in i){if(r.apply(i[z],y)===false)break}else for(;F";a=u.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var s=u.createElement("div"); +s.style.width=s.style.paddingLeft="1px";u.body.appendChild(s);c.boxModel=c.support.boxModel=s.offsetWidth===2;if("zoom"in s.style){s.style.display="inline";s.style.zoom=1;c.support.inlineBlockNeedsLayout=s.offsetWidth===2;s.style.display="";s.innerHTML="
";c.support.shrinkWrapBlocks=s.offsetWidth!==2}s.innerHTML="
t
";var v=s.getElementsByTagName("td");c.support.reliableHiddenOffsets=v[0].offsetHeight=== +0;v[0].style.display="";v[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&v[0].offsetHeight===0;s.innerHTML="";u.body.removeChild(s).style.display="none"});a=function(s){var v=u.createElement("div");s="on"+s;var B=s in v;if(!B){v.setAttribute(s,"return;");B=typeof v[s]==="function"}return B};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength", +cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var pa={},Oa=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?pa:a;var e=a.nodeType,f=e?a[c.expando]:null,h=c.cache;if(!(e&&!f&&typeof b==="string"&&d===A)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]= +c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==A)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?pa:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);else if(d)delete f[e];else for(var k in a)delete a[k]}},acceptData:function(a){if(a.nodeName){var b= +c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){if(typeof a==="undefined")return this.length?c.data(this[0]):null;else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===A){var e=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(e===A&&this.length){e=c.data(this[0],a);if(e===A&&this[0].nodeType===1){e=this[0].getAttribute("data-"+a);if(typeof e=== +"string")try{e=e==="true"?true:e==="false"?false:e==="null"?null:!c.isNaN(e)?parseFloat(e):Oa.test(e)?c.parseJSON(e):e}catch(f){}else e=A}}return e===A&&d[1]?this.data(d[0]):e}else return this.each(function(){var h=c(this),k=[d[0],b];h.triggerHandler("setData"+d[1]+"!",k);c.data(this,a,b);h.triggerHandler("changeData"+d[1]+"!",k)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var e=c.data(a,b);if(!d)return e|| +[];if(!e||c.isArray(d))e=c.data(a,b,c.makeArray(d));else e.push(d);return e}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.shift();if(e==="inprogress")e=d.shift();if(e){b==="fx"&&d.unshift("inprogress");e.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===A)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this, +a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var qa=/[\n\t]/g,ga=/\s+/,Pa=/\r/g,Qa=/^(?:href|src|style)$/,Ra=/^(?:button|input)$/i,Sa=/^(?:button|input|object|select|textarea)$/i,Ta=/^a(?:rea)?$/i,ra=/^(?:radio|checkbox)$/i;c.fn.extend({attr:function(a,b){return c.access(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this, +a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(s){var v=c(this);v.addClass(a.call(this,s,v.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ga),d=0,e=this.length;d-1)return true;return false}, +val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h=0;else if(c.nodeName(this,"select")){var B=c.makeArray(v);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),B)>=0});if(!B.length)this.selectedIndex=-1}else this.value=v}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return A;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==A;b=e&&c.props[b]||b;if(a.nodeType===1){var h=Qa.test(b);if((b in a||a[b]!==A)&&e&&!h){if(f){b==="type"&&Ra.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:Sa.test(a.nodeName)||Ta.test(a.nodeName)&&a.href?0:A;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return A;a=!c.support.hrefNormalized&&e&& +h?a.getAttribute(b,2):a.getAttribute(b);return a===null?A:a}}});var X=/\.(.*)$/,ha=/^(?:textarea|input|select)$/i,Ha=/\./g,Ia=/ /g,Ua=/[^\w\s.|`]/g,Va=function(a){return a.replace(Ua,"\\$&")},sa={focusin:0,focusout:0};c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var k=a.nodeType?"events":"__events__",l=h[k],n=h.handle;if(typeof l=== +"function"){n=l.handle;l=l.events}else if(!l){a.nodeType||(h[k]=h=function(){});h.events=l={}}if(!n)h.handle=n=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(n.elem,arguments):A};n.elem=a;b=b.split(" ");for(var s=0,v;k=b[s++];){h=f?c.extend({},f):{handler:d,data:e};if(k.indexOf(".")>-1){v=k.split(".");k=v.shift();h.namespace=v.slice(0).sort().join(".")}else{v=[];h.namespace=""}h.type=k;if(!h.guid)h.guid=d.guid;var B=l[k],D=c.event.special[k]||{};if(!B){B=l[k]=[]; +if(!D.setup||D.setup.call(a,e,v,n)===false)if(a.addEventListener)a.addEventListener(k,n,false);else a.attachEvent&&a.attachEvent("on"+k,n)}if(D.add){D.add.call(a,h);if(!h.handler.guid)h.handler.guid=d.guid}B.push(h);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,k=0,l,n,s,v,B,D,H=a.nodeType?"events":"__events__",w=c.data(a),G=w&&w[H];if(w&&G){if(typeof G==="function"){w=G;G=G.events}if(b&&b.type){d=b.handler;b=b.type}if(!b|| +typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in G)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[k++];){v=f;l=f.indexOf(".")<0;n=[];if(!l){n=f.split(".");f=n.shift();s=RegExp("(^|\\.)"+c.map(n.slice(0).sort(),Va).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(B=G[f])if(d){v=c.event.special[f]||{};for(h=e||0;h=0){a.type= +f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return A;a.result=A;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)=== +false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){e=a.target;var k,l=f.replace(X,""),n=c.nodeName(e,"a")&&l==="click",s=c.event.special[l]||{};if((!s._default||s._default.call(d,a)===false)&&!n&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[l]){if(k=e["on"+l])e["on"+l]=null;c.event.triggered=true;e[l]()}}catch(v){}if(k)e["on"+l]=k;c.event.triggered=false}}},handle:function(a){var b,d,e; +d=[];var f,h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var k=d.length;f-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ha.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=va(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===A||f===e))if(e!=null||f){a.type="change";a.liveFired= +A;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",va(a))}},setup:function(){if(this.type=== +"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ha.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ha.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}u.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){sa[b]++===0&&u.addEventListener(a,d,true)},teardown:function(){--sa[b]=== +0&&u.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=A}var k=b==="one"?c.proxy(f,function(n){c(this).unbind(n,k);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var l=this.length;h0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}}); +(function(){function a(g,j,o,m,p,q){p=0;for(var t=m.length;p0){C=x;break}}x=x[g]}m[p]=C}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,k=true;[0,0].sort(function(){k=false;return 0});var l=function(g,j,o,m){o=o||[];var p=j=j||u;if(j.nodeType!==1&&j.nodeType!==9)return[];if(!g||typeof g!=="string")return o;var q=[],t,x,C,P,N=true,R=l.isXML(j),Q=g,L;do{d.exec("");if(t=d.exec(Q)){Q=t[3];q.push(t[1]);if(t[2]){P=t[3]; +break}}}while(t);if(q.length>1&&s.exec(g))if(q.length===2&&n.relative[q[0]])x=M(q[0]+q[1],j);else for(x=n.relative[q[0]]?[j]:l(q.shift(),j);q.length;){g=q.shift();if(n.relative[g])g+=q.shift();x=M(g,x)}else{if(!m&&q.length>1&&j.nodeType===9&&!R&&n.match.ID.test(q[0])&&!n.match.ID.test(q[q.length-1])){t=l.find(q.shift(),j,R);j=t.expr?l.filter(t.expr,t.set)[0]:t.set[0]}if(j){t=m?{expr:q.pop(),set:D(m)}:l.find(q.pop(),q.length===1&&(q[0]==="~"||q[0]==="+")&&j.parentNode?j.parentNode:j,R);x=t.expr?l.filter(t.expr, +t.set):t.set;if(q.length>0)C=D(x);else N=false;for(;q.length;){t=L=q.pop();if(n.relative[L])t=q.pop();else L="";if(t==null)t=j;n.relative[L](C,t,R)}}else C=[]}C||(C=x);C||l.error(L||g);if(f.call(C)==="[object Array]")if(N)if(j&&j.nodeType===1)for(g=0;C[g]!=null;g++){if(C[g]&&(C[g]===true||C[g].nodeType===1&&l.contains(j,C[g])))o.push(x[g])}else for(g=0;C[g]!=null;g++)C[g]&&C[g].nodeType===1&&o.push(x[g]);else o.push.apply(o,C);else D(C,o);if(P){l(P,p,o,m);l.uniqueSort(o)}return o};l.uniqueSort=function(g){if(w){h= +k;g.sort(w);if(h)for(var j=1;j0};l.find=function(g,j,o){var m;if(!g)return[];for(var p=0,q=n.order.length;p":function(g,j){var o=typeof j==="string",m,p=0,q=g.length;if(o&&!/\W/.test(j))for(j=j.toLowerCase();p=0))o||m.push(t);else if(o)j[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var j=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=j[1]+(j[2]||1)-0;g[3]=j[3]-0}g[0]=e++;return g},ATTR:function(g,j,o, +m,p,q){j=g[1].replace(/\\/g,"");if(!q&&n.attrMap[j])g[1]=n.attrMap[j];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,j,o,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=l(g[3],null,null,j);else{g=l.filter(g[3],j,o,true^p);o||m.push.apply(m,g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled=== +true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,j,o){return!!l(o[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"=== +g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,j){return j===0},last:function(g,j,o,m){return j===m.length-1},even:function(g,j){return j%2===0},odd:function(g,j){return j%2===1},lt:function(g,j,o){return jo[3]-0},nth:function(g,j,o){return o[3]- +0===j},eq:function(g,j,o){return o[3]-0===j}},filter:{PSEUDO:function(g,j,o,m){var p=j[1],q=n.filters[p];if(q)return q(g,o,j,m);else if(p==="contains")return(g.textContent||g.innerText||l.getText([g])||"").indexOf(j[3])>=0;else if(p==="not"){j=j[3];o=0;for(m=j.length;o=0}},ID:function(g,j){return g.nodeType===1&&g.getAttribute("id")===j},TAG:function(g,j){return j==="*"&&g.nodeType===1||g.nodeName.toLowerCase()=== +j},CLASS:function(g,j){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(j)>-1},ATTR:function(g,j){var o=j[1];o=n.attrHandle[o]?n.attrHandle[o](g):g[o]!=null?g[o]:g.getAttribute(o);var m=o+"",p=j[2],q=j[4];return o==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&o!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,j,o,m){var p=n.setFilters[j[2]]; +if(p)return p(g,o,j,m)}}},s=n.match.POS,v=function(g,j){return"\\"+(j-0+1)},B;for(B in n.match){n.match[B]=RegExp(n.match[B].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[B]=RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[B].source.replace(/\\(\d+)/g,v))}var D=function(g,j){g=Array.prototype.slice.call(g,0);if(j){j.push.apply(j,g);return j}return g};try{Array.prototype.slice.call(u.documentElement.childNodes,0)}catch(H){D=function(g,j){var o=j||[],m=0;if(f.call(g)==="[object Array]")Array.prototype.push.apply(o, +g);else if(typeof g.length==="number")for(var p=g.length;m";var o=u.documentElement;o.insertBefore(g,o.firstChild);if(u.getElementById(j)){n.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:A:[]};n.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}o.removeChild(g); +o=g=null})();(function(){var g=u.createElement("div");g.appendChild(u.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(j,o){var m=o.getElementsByTagName(j[1]);if(j[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(j){return j.getAttribute("href",2)};g=null})();u.querySelectorAll&& +function(){var g=l,j=u.createElement("div");j.innerHTML="

";if(!(j.querySelectorAll&&j.querySelectorAll(".TEST").length===0)){l=function(m,p,q,t){p=p||u;if(!t&&!l.isXML(p))if(p.nodeType===9)try{return D(p.querySelectorAll(m),q)}catch(x){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var C=p.id,P=p.id="__sizzle__";try{return D(p.querySelectorAll("#"+P+" "+m),q)}catch(N){}finally{if(C)p.id=C;else p.removeAttribute("id")}}return g(m,p,q,t)};for(var o in g)l[o]=g[o]; +j=null}}();(function(){var g=u.documentElement,j=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,o=false;try{j.call(u.documentElement,":sizzle")}catch(m){o=true}if(j)l.matchesSelector=function(p,q){try{if(o||!n.match.PSEUDO.test(q))return j.call(p,q)}catch(t){}return l(q,null,null,[p]).length>0}})();(function(){var g=u.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length=== +0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(j,o,m){if(typeof o.getElementsByClassName!=="undefined"&&!m)return o.getElementsByClassName(j[1])};g=null}}})();l.contains=u.documentElement.contains?function(g,j){return g!==j&&(g.contains?g.contains(j):true)}:function(g,j){return!!(g.compareDocumentPosition(j)&16)};l.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var M=function(g, +j){for(var o=[],m="",p,q=j.nodeType?[j]:j;p=n.match.PSEUDO.exec(g);){m+=p[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;p=0;for(var t=q.length;p0)for(var h=d;h0},closest:function(a, +b){var d=[],e,f,h=this[0];if(c.isArray(a)){var k={},l,n=1;if(h&&a.length){e=0;for(f=a.length;e-1:c(h).is(e))d.push({selector:l,elem:h,level:n})}h=h.parentNode;n++}}return d}k=$a.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h|| +!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}}); +c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling", +d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Wa.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||Ya.test(e))&&Xa.test(a))f=f.reverse();return this.pushStack(f,a,Za.call(arguments).join(","))}}); +c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===A||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var xa=/ jQuery\d+="(?:\d+|null)"/g, +$=/^\s+/,ya=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,za=/<([\w:]+)/,ab=/\s]+\/)>/g,O={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"], +area:[1,"",""],_default:[0,"",""]};O.optgroup=O.option;O.tbody=O.tfoot=O.colgroup=O.caption=O.thead;O.th=O.td;if(!c.support.htmlSerialize)O._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==A)return this.empty().append((this[0]&&this[0].ownerDocument||u).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this, +d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})}, +unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a= +c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*")); +c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(xa,"").replace(cb,'="$1">').replace($, +"")],e)[0]}else return this.cloneNode(true)});if(a===true){la(this,b);la(this.find("*"),b.find("*"))}return b},html:function(a){if(a===A)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(xa,""):null;else if(typeof a==="string"&&!Aa.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!O[(za.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ya,"<$1>");try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?l.cloneNode(true):l)}k.length&&c.each(k,Ka)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:u;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===u&&!Aa.test(a[0])&&(c.support.checkClone|| +!Ba.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h= +d.length;f0?this.clone(true):this).get();c(d[f])[b](k);e=e.concat(k)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||u;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||u;for(var f=[],h=0,k;(k=a[h])!=null;h++){if(typeof k==="number")k+="";if(k){if(typeof k==="string"&&!bb.test(k))k=b.createTextNode(k);else if(typeof k==="string"){k=k.replace(ya,"<$1>");var l=(za.exec(k)||["",""])[1].toLowerCase(),n=O[l]||O._default, +s=n[0],v=b.createElement("div");for(v.innerHTML=n[1]+k+n[2];s--;)v=v.lastChild;if(!c.support.tbody){s=ab.test(k);l=l==="table"&&!s?v.firstChild&&v.firstChild.childNodes:n[1]===""&&!s?v.childNodes:[];for(n=l.length-1;n>=0;--n)c.nodeName(l[n],"tbody")&&!l[n].childNodes.length&&l[n].parentNode.removeChild(l[n])}!c.support.leadingWhitespace&&$.test(k)&&v.insertBefore(b.createTextNode($.exec(k)[0]),v.firstChild);k=v.childNodes}if(k.nodeType)f.push(k);else f=c.merge(f,k)}}if(d)for(h=0;f[h];h++)if(e&& +c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,k=0,l;(l=a[k])!=null;k++)if(!(l.nodeName&&c.noData[l.nodeName.toLowerCase()]))if(d=l[c.expando]){if((b=e[d])&&b.events)for(var n in b.events)f[n]? +c.event.remove(l,n):c.removeEvent(l,n,b.handle);if(h)delete l[c.expando];else l.removeAttribute&&l.removeAttribute(c.expando);delete e[d]}}});var Ca=/alpha\([^)]*\)/i,db=/opacity=([^)]*)/,eb=/-([a-z])/ig,fb=/([A-Z])/g,Da=/^-?\d+(?:px)?$/i,gb=/^-?\d/,hb={position:"absolute",visibility:"hidden",display:"block"},La=["Left","Right"],Ma=["Top","Bottom"],W,ib=u.defaultView&&u.defaultView.getComputedStyle,jb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===A)return this; +return c.access(this,a,b,true,function(d,e,f){return f!==A?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),k=a.style,l=c.cssHooks[h];b=c.cssProps[h]|| +h;if(d!==A){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!l||!("set"in l)||(d=l.set(a,d))!==A)try{k[b]=d}catch(n){}}}else{if(l&&"get"in l&&(f=l.get(a,false,e))!==A)return f;return k[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==A)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]= +e[f]},camelCase:function(a){return a.replace(eb,jb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=ma(d,b,f);else c.swap(d,hb,function(){h=ma(d,b,f)});return h+"px"}},set:function(d,e){if(Da.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return db.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"": +b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=d.filter||"";d.filter=Ca.test(f)?f.replace(Ca,e):d.filter+" "+e}};if(ib)W=function(a,b,d){var e;d=d.replace(fb,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return A;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};else if(u.documentElement.currentStyle)W=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b], +h=a.style;if(!Da.test(f)&&gb.test(f)){d=h.left;e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f};if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var kb=c.now(),lb=/)<[^<]*)*<\/script>/gi, +mb=/^(?:select|textarea)/i,nb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ob=/^(?:GET|HEAD|DELETE)$/,Na=/\[\]$/,T=/\=\?(&|$)/,ia=/\?/,pb=/([?&])_=[^&]*/,qb=/^(\w+:)?\/\/([^\/?#]+)/,rb=/%20/g,sb=/#.*$/,Ea=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ea)return Ea.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d= +b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(k,l){if(l==="success"||l==="notmodified")h.html(f?c("
").append(k.responseText.replace(lb,"")).find(f):k.responseText);d&&h.each(d,[k.responseText,l,k])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&& +!this.disabled&&(this.checked||mb.test(this.nodeName)||nb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})}, +getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html", +script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),k=ob.test(h);b.url=b.url.replace(sb,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ia.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data|| +!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+kb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var l=E[d];E[d]=function(m){f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);if(c.isFunction(l))l(m);else{E[d]=A;try{delete E[d]}catch(p){}}v&&v.removeChild(B)}}if(b.dataType==="script"&&b.cache===null)b.cache= +false;if(b.cache===false&&h==="GET"){var n=c.now(),s=b.url.replace(pb,"$1_="+n);b.url=s+(s===b.url?(ia.test(b.url)?"&":"?")+"_="+n:"")}if(b.data&&h==="GET")b.url+=(ia.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");n=(n=qb.exec(b.url))&&(n[1]&&n[1]!==location.protocol||n[2]!==location.host);if(b.dataType==="script"&&h==="GET"&&n){var v=u.getElementsByTagName("head")[0]||u.documentElement,B=u.createElement("script");if(b.scriptCharset)B.charset=b.scriptCharset;B.src= +b.url;if(!d){var D=false;B.onload=B.onreadystatechange=function(){if(!D&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){D=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);B.onload=B.onreadystatechange=null;v&&B.parentNode&&v.removeChild(B)}}}v.insertBefore(B,v.firstChild);return A}var H=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!k||a&&a.contentType)w.setRequestHeader("Content-Type", +b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}n||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(G){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&& +c.triggerGlobal(b,"ajaxSend",[w,b]);var M=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){H||c.handleComplete(b,w,e,f);H=true;if(w)w.onreadystatechange=c.noop}else if(!H&&w&&(w.readyState===4||m==="timeout")){H=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d|| +c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&g.call&&g.call(w);M("abort")}}catch(j){}b.async&&b.timeout>0&&setTimeout(function(){w&&!H&&M("timeout")},b.timeout);try{w.send(k||b.data==null?null:b.data)}catch(o){c.handleError(b,w,null,o);c.handleComplete(b,w,e,f)}b.async||M();return w}},param:function(a,b){var d=[],e=function(h,k){k=c.isFunction(k)?k():k;d[d.length]=encodeURIComponent(h)+ +"="+encodeURIComponent(k)};if(b===A)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)ca(f,a[f],b,e);return d.join("&").replace(rb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess",[b,a])},handleComplete:function(a, +b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),e=a.getResponseHeader("Etag"); +if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}});if(E.ActiveXObject)c.ajaxSettings.xhr= +function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var da={},tb=/^(?:toggle|show|hide)$/,ub=/^([+\-]=)?([\d+.\-]+)(.*)$/,aa,na=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show",3),a,b,d);else{a= +0;for(b=this.length;a=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b, +d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a* +Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(h){return f.step(h)} +this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;var f=this;a=c.fx;e.elem=this.elem;if(e()&&c.timers.push(e)&&!aa)aa=setInterval(a.tick,a.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true; +this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(l,n){f.style["overflow"+n]=h.overflow[l]})}this.options.hide&&c(this.elem).hide();if(this.options.hide|| +this.options.show)for(var k in this.options.curAnim)c.style(this.elem,k,this.options.orig[k]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a= +c.timers,b=0;b-1;e={};var s={};if(n)s=f.position();k=n?s.top:parseInt(k,10)||0;l=n?s.left:parseInt(l,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+k;if(b.left!=null)e.left=b.left-h.left+l;"using"in b?b.using.call(a, +e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Fa.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||u.body;a&&!Fa.test(a.nodeName)&& +c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==A)return this.each(function(){if(h=ea(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=ea(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase(); +c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(h){var k=c(this);k[d](e.call(this,h,k[d]()))});return c.isWindow(f)?f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b]:f.nodeType===9?Math.max(f.documentElement["client"+ +b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]):e===A?parseFloat(c.css(f,d)):this.css(d,typeof e==="string"?e:e+"px")}})})(window); diff --git a/scratch/page.html b/scratch/page.html index 841fccab..a46e3839 100644 --- a/scratch/page.html +++ b/scratch/page.html @@ -62,13 +62,13 @@
- - + + \ No newline at end of file From 60901ddd75d5c95aef195e91efaf681372a50e8e Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Fri, 22 Oct 2010 17:50:44 -0700 Subject: [PATCH 024/393] Added history, page --- scratch/history.html | 108 +++++++++++++++++++++++++++++++++++++++++++ scratch/page.html | 12 +++-- 2 files changed, 117 insertions(+), 3 deletions(-) create mode 100644 scratch/history.html diff --git a/scratch/history.html b/scratch/history.html new file mode 100644 index 00000000..e777ed80 --- /dev/null +++ b/scratch/history.html @@ -0,0 +1,108 @@ + + + + + Page Name — Site Name + + +
+ +
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + + +
+ + + + avatar: username + username + + + 3 days ago:  + Rewrote home page as Markdown… + [a45719f…] + + Revert to a45719f… +
+ + + + avatar: username + username + + + 3 days ago:  + Rewrote home page as Markdown… + [a45719f…] + + Revert to a45719f… +
+ + + + avatar: username + username + + + 3 days ago:  + Rewrote home page as Markdown… + [a45719f…] + + Revert to a45719f… +
+ + + + + + + + + + \ No newline at end of file diff --git a/scratch/page.html b/scratch/page.html index a46e3839..9a3741f2 100644 --- a/scratch/page.html +++ b/scratch/page.html @@ -5,12 +5,16 @@ Page Name — Site Name +
@@ -68,6 +72,8 @@ +
+ From 3b6b06a5992a7c98236a32191eaaf58efd5f3a02 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 25 Oct 2010 14:46:52 -0700 Subject: [PATCH 025/393] Basic text formatting --- scratch/css/gollum.css | 68 ++++++++++++++++++++++ scratch/css/template.css | 122 +++++++++++++++++++++++++++++++++++++++ scratch/page.html | 36 +++++++++++- 3 files changed, 225 insertions(+), 1 deletion(-) create mode 100644 scratch/css/template.css diff --git a/scratch/css/gollum.css b/scratch/css/gollum.css index e69de29b..c163e95e 100644 --- a/scratch/css/gollum.css +++ b/scratch/css/gollum.css @@ -0,0 +1,68 @@ +/* + gollum.css + A basic stylesheet for Gollum +*/ + +/* @section core */ +body, html { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 10px; /* -> 1em */ + margin: 0; + padding: 0; +} + +#wiki-wrapper { + margin: 0 auto; + overflow: visible; + width: 80%; +} + + +/* @section head */ +#head { + border-bottom: 1px solid #ccc; + margin: 4.5em 0 0.5em; + padding: 0.5em 0; + overflow: hidden; +} + + #head h1 { + font-size: 3.3em; + float: left; + line-height: normal; + margin: 0; + padding: 0; + } + + #head ul.actions { + display: block; + float: right; + list-style-type: none; + overflow: hidden; + padding: 0.6em 0 0; + } + + #head ul.actions li { + float: left; + font-size: 1.2em; + margin-left: 0.6em; + } + + +/* @section content */ +#wiki-content { + height: 1%; + overflow: visible; +} + + /* @section comments */ + #wiki-body #inline-comment { + display: none; /* todo */ + } + + /* @section body */ + #wiki-body { + float: left; + margin-right: 5%; + width: 70%; + } diff --git a/scratch/css/template.css b/scratch/css/template.css new file mode 100644 index 00000000..db1a333e --- /dev/null +++ b/scratch/css/template.css @@ -0,0 +1,122 @@ +/* + template.css + Wiki content formatting +*/ + +#template { + margin-bottom: 4em; /* Give it some breathing room */ +} + +#template p { + font-size: 1.4em; + line-height: 1.6em; +} + + /* See http://webtypography.net/Rhythm_and_Proportion/ */ + #template p + p { + margin: -0.75em 0 0; + text-indent: 1em; + } + + /* Everybody loves type ornaments */ + #template p:last-child:after { + color: #999; + content: " ❈"; + font-size: 0.8em; + } + + +#template ul, #template ol { + margin: 1.0em 0; + padding: 0; +} + +#template p + ul, #template p + ol, +#template ul li > ul, #template ol li > ol { + margin: 0; +} + + #template ul { + list-style-type: square; + } + + #template ol li > ol li { + font-size: 1.0em !important; + list-style-type: lower-roman; + list-style-position: inside; + } + + #template ol li > ol li > ol li { + list-style-type: lower-alpha; + } + + #template ol li > ol li > ol li > ol li { + list-style-type: lower-greek; + } + +#template ul li, #template ol li { + font-size: 1.4em; + line-height: 1.6em; + padding-top: 0.1em; /* Line up ordinals */ +} + +#template blockquote { + margin: 0 4.0em 0 2.0em; + padding: 0; +} + + #template blockquote p { + color: #888; + font-style: italic; + } + + +/* Headings */ +#template h1, #template h2, #template h3, +#template h4, #template h5, #template h6 { + margin: 0; + padding: 0.5em 0 0; +} + +#template h1 { + font-size: 2.6em; + font-weight: bold; +} + +#template h2 { + font-size: 2.2em; + font-weight: bold; +} + +#template h3 { + font-size: 2.0em; + font-weight: bold; +} + +#template h4 { + font-size: 1.8em; + font-weight: bold; +} + +#template h5 { + font-size: 1.6em; + font-weight: bold; + +} + +#template h6 { + font-size: 1.4em; + font-weight: bold; + margin-top: 1.0em; + text-transform: uppercase; /* all caps */ +} + + +/* Code-related */ +#template p code { + background-color: #f7f7f7; + border: 1px solid #ddd; + color: #222; /* This is a little heavy when #000 */ + font-family: Consolas, Monaco, "Courier New", monospace; + padding: 0.15em 0.3em; +} \ No newline at end of file diff --git a/scratch/page.html b/scratch/page.html index 9a3741f2..8eb96cc5 100644 --- a/scratch/page.html +++ b/scratch/page.html @@ -1,7 +1,9 @@ + + Page Name — Site Name @@ -35,10 +37,16 @@
  1. Ordered list 1
  2. Ordered list 2
  3. +
  4. +
      +
    1. Nest 1
    2. +
    3. Nest 2
    4. +
    +
  5. Ordered list 3

- Tempus a consequat ut, accumsan vitae tellus. Nunc aliquet tempus lectus, non accumsan elit gravida faucibus. Proin in imperdiet ligula. Mauris nec posuere felis. Etiam tempus sollicitudin massa, vel vestibulum est lacinia sed. + Tempus a consequat ut, accumsan vitae tellus. Nunc aliquet tempus lectus, non accumsan elit gravida faucibus. Proin in imperdiet ligula. Mauris nec posuere felis. Etiam tempus sollicitudin massa, vel vestibulum est lacinia sed.

Nam iaculis volutpat dolor, laoreet blandit felis scelerisque sagittis. Suspendisse pretium lorem in nunc interdum vel malesuada ante pretium. Nam consectetur tortor scelerisque mi congue rhoncus. Curabitur vulputate nunc non urna condimentum in consequat elit lobortis. Etiam eu purus mi. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi sit amet arcu enim, id iaculis tortor. @@ -51,6 +59,32 @@

In urna dolor, pulvinar nec porttitor vitae, varius quis sem. Nulla at nisl nisl. In lobortis enim lacinia lectus semper fermentum id sit amet quam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae.

+

Heading 3

+

+ Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Praesent leo neque, lacinia vitae posuere sed, adipiscing vitae massa. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi felis sem, dictum ut interdum sit amet, tincidunt at tellus. +

+

+ Duis convallis, mauris in ultrices convallis, ligula arcu laoreet dolor, in elementum justo lorem et magna. Sed posuere est at ante aliquam hendrerit. Ut porta ipsum a neque porta at gravida lacus dictum. Cras at cursus massa. Aliquam dignissim sagittis augue, non pellentesque massa adipiscing sit amet. Donec at faucibus massa. Etiam hendrerit accumsan rutrum. Mauris venenatis justo nec sem tincidunt gravida. Quisque ut lacus mi, at iaculis urna. Sed id libero neque. +

+

Heading 4

+

+ Nulla facilisi. Duis sem risus, malesuada eget tempor eu, elementum sed mi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec commodo libero ac risus hendrerit gravida. Nullam id orci nulla, nec pulvinar dui. Donec elit odio, pulvinar ut cursus id, rhoncus eu urna. Aliquam molestie interdum aliquam. +

+
Heading 5
+

+ Vestibulum sed neque mauris, quis imperdiet lorem. Fusce id sollicitudin est. Vivamus porta blandit nibh, ultricies ultricies tortor scelerisque nec. Aliquam et ipsum ut neque aliquet accumsan at eu ante. Donec velit turpis, feugiat non venenatis at, rutrum cursus neque. Integer nunc purus, porta vel semper et, venenatis a nisi. +

+

+ Nunc malesuada, diam nec euismod tristique, lacus nibh ornare dolor, eleifend rhoncus nunc enim nec nisi. Nulla neque tellus, scelerisque porttitor commodo vitae, euismod vitae est. Sed adipiscing metus vitae nisi sodales porta. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras a urna massa. Vestibulum ac sapien urna. +

+
Heading 6
+
    +
  • Unordered list item 1
  • +
  • Unordered list item 2
  • +
+

+ Sed sit amet arcu lectus, eu hendrerit eros. Pellentesque at neque sed justo luctus mattis. Maecenas egestas, urna sit amet pulvinar dictum, nisl urna consequat purus, at consectetur eros metus eu ligula. Mauris sed magna sed risus commodo faucibus. Etiam sit amet dui id urna mollis pretium. Nam dolor augue, bibendum sit amet congue eget, lacinia at dolor. Vestibulum id quam sed dolor laoreet pellentesque eget ut leo. +

From 21ff30af4ddf21ee66a23706e072c8e810bbd4ab Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 25 Oct 2010 15:54:42 -0700 Subject: [PATCH 026/393] Shadows, minibuttons and more --- scratch/css/gollum.css | 128 ++++++++++++++++++++++++++++++++++++++- scratch/css/template.css | 10 ++- scratch/page.html | 2 + 3 files changed, 136 insertions(+), 4 deletions(-) diff --git a/scratch/css/gollum.css b/scratch/css/gollum.css index c163e95e..0e40f2a7 100644 --- a/scratch/css/gollum.css +++ b/scratch/css/gollum.css @@ -17,6 +17,15 @@ body, html { width: 80%; } +a:link { + color: #4183c4; + text-decoration: none; +} + +a:hover, a:visited { + text-decoration: underline; +} + /* @section head */ #head { @@ -31,7 +40,7 @@ body, html { float: left; line-height: normal; margin: 0; - padding: 0; + padding: 0.08em 0 0 0; } #head ul.actions { @@ -39,7 +48,7 @@ body, html { float: right; list-style-type: none; overflow: hidden; - padding: 0.6em 0 0; + padding: 0; } #head ul.actions li { @@ -48,6 +57,39 @@ body, html { margin-left: 0.6em; } + /* @control minibutton */ + .minibutton a { + background-color: #f7f7f7; + border: 1px solid #d4d4d4; + color: #333; + display: block; + font-weight: bold; + margin: 0; + padding: 0.4em 1em; + + text-shadow: 0 1px 0 #fff; + + filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f4f4f4', endColorstr='#ececec'); + background: -webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#ececec)); + background: -moz-linear-gradient(top, #f4f4f4, #ececec); + + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + } + + .minibutton a:hover { + background: #3072b3; + border-color: #518cc6 #518cc6 #2a65a0; + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + text-decoration: none; + + filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#599bdc', endColorstr='#3072b3'); + background: -webkit-gradient(linear, left top, left bottom, from(#599bdc), to(#3072b3)); + background: -moz-linear-gradient(top, #599bdc, #3072b3); + } + /* @section content */ #wiki-content { @@ -63,6 +105,86 @@ body, html { /* @section body */ #wiki-body { float: left; - margin-right: 5%; + margin-right: 3%; width: 70%; } + + /* @section rightbar */ + #wiki-rightbar { + float: right; + width: 27%; + } + + #wiki-rightbar #nav { + background-color: #f7f7f7; + border: 1px solid #ddd; + margin-top: 1.5em; + padding: 1em; + + border-radius: 0.5em; + -moz-border-radius: 0.5em; + -webkit-border-radius: 0.5em; + } + + #wiki-rightbar #nav { + font-size: 1.2em; + line-height: 1.5em; + } + + #wiki-rightbar #nav p.parent { + border-bottom: 1px solid #bbb; + font-weight: bold; + margin: 0 0 0.5em 0; + padding: 0 0 0.5em 0; + text-shadow: 0 1px 0 #fff; + } + + /* Back arrow */ + #wiki-rightbar #nav p.parent:before { + color: #666; + content: "← "; + } + + #wiki-rightbar #nav h3 { + font-size: 1.2em; + color: #333; + margin: 1.2em 0 0; + padding: 0; + text-shadow: 0 1px 0 #fff; + } + + #wiki-rightbar #nav ul { + margin: 0.5em 0 1em; + padding: 0; + } + + #wiki-rightbar #nav ul li { + list-style-position: inside; + list-style-type: none; + margin: 0; + padding: 0 0 0 1em; + line-height: 1.75em; + } + + #wiki-rightbar #nav ul li a { + font-weight: bold; + text-shadow: 0 1px 0 #fff; + } + + /* @section footer */ + #wiki-footer { + clear: both; + } + + + /* @section page-footer */ + #footer { + border-top: 1px solid #ccc; + font-size: 1.2em; + line-height: 1.6em; + margin: 1em 0 7em; + } + + #footer p#last-edit { + color: #999; + } diff --git a/scratch/css/template.css b/scratch/css/template.css index db1a333e..5d6a6f95 100644 --- a/scratch/css/template.css +++ b/scratch/css/template.css @@ -24,7 +24,15 @@ content: " ❈"; font-size: 0.8em; } - + +#template a:link { + color: #4183c4; + text-decoration: none; +} + +#template a:hover, #template a:visited { + text-decoration: underline; +} #template ul, #template ol { margin: 1.0em 0; diff --git a/scratch/page.html b/scratch/page.html index 8eb96cc5..dfe92551 100644 --- a/scratch/page.html +++ b/scratch/page.html @@ -88,6 +88,7 @@
+
-
+ +
+
+ \ No newline at end of file From 67651afb48e00805c04a980c19e7372ed4e558be Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 25 Oct 2010 16:57:33 -0700 Subject: [PATCH 030/393] This should do --- scratch/css/gollum.css | 9 +++++++-- scratch/js/gollum.js | 12 ++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/scratch/css/gollum.css b/scratch/css/gollum.css index 095fe458..63a64ad7 100644 --- a/scratch/css/gollum.css +++ b/scratch/css/gollum.css @@ -224,7 +224,12 @@ a:hover, a:visited { list-style-position: inside; list-style-type: square; padding: 0; - margin-left: 0.6em; + margin-left: 0.75em; + } + + #wiki-footer #footer-content ul.links li a { + font-weight: bold; + text-shadow: 0 1px 0 #fff; } #wiki-footer #footer-content ul.links li:first-child { @@ -233,7 +238,7 @@ a:hover, a:visited { } .ff #wiki-footer #footer-content ul.links li:first-child { - margin: 0 -0.6em 0 0; + margin: 0 -0.75em 0 0; } /* @section page-footer */ diff --git a/scratch/js/gollum.js b/scratch/js/gollum.js index 6c2ede74..b7dfb2f3 100644 --- a/scratch/js/gollum.js +++ b/scratch/js/gollum.js @@ -1,5 +1,7 @@ // ua $(document).ready(function() { + + // ua detection if ($.browser.mozilla) { $('body').addClass('ff'); } else if ($.browser.webkit) { @@ -12,4 +14,14 @@ $(document).ready(function() { $('body').addClass('ie8'); } } + + // no widows in wiki body + if ($('#wiki-wrapper').hasClass('page')) { + $('#template h1, #template h2, #template h3, #template h4, #template h5, #template h6, #template li, #template p').each( + function(){ + $(this).html($(this).html().replace(/\s([^\s<]+)\s*$/,' $1')); + } + ); + } + }); \ No newline at end of file From e0c1ea0ec1009fa954554d71b2a9d1d749a8b136 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 25 Oct 2010 18:49:24 -0700 Subject: [PATCH 031/393] Adding rudimentary hover anims on history --- scratch/css/gollum.css | 224 +++++++++++++++++++++++++++++-------- scratch/css/template.css | 2 + scratch/history.html | 48 ++++---- scratch/js/gollum.js | 36 +++++- scratch/js/jquery.color.js | 123 ++++++++++++++++++++ 5 files changed, 362 insertions(+), 71 deletions(-) create mode 100644 scratch/js/jquery.color.js diff --git a/scratch/css/gollum.css b/scratch/css/gollum.css index 63a64ad7..c4a8d191 100644 --- a/scratch/css/gollum.css +++ b/scratch/css/gollum.css @@ -42,52 +42,9 @@ a:hover, a:visited { margin: 0; padding: 0.08em 0 0 0; } - + #head ul.actions { - display: block; float: right; - list-style-type: none; - overflow: hidden; - padding: 0; - } - - #head ul.actions li { - float: left; - font-size: 1.2em; - margin-left: 0.6em; - } - - /* @control minibutton */ - .minibutton a { - background-color: #f7f7f7; - border: 1px solid #d4d4d4; - color: #333; - display: block; - font-weight: bold; - margin: 0; - padding: 0.4em 1em; - - text-shadow: 0 1px 0 #fff; - - filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f4f4f4', endColorstr='#ececec'); - background: -webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#ececec)); - background: -moz-linear-gradient(top, #f4f4f4, #ececec); - - border-radius: 3px; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - } - - .minibutton a:hover { - background: #3072b3; - border-color: #518cc6 #518cc6 #2a65a0; - color: #fff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); - text-decoration: none; - - filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#599bdc', endColorstr='#3072b3'); - background: -webkit-gradient(linear, left top, left bottom, from(#599bdc), to(#3072b3)); - background: -moz-linear-gradient(top, #599bdc, #3072b3); } @@ -242,14 +199,14 @@ a:hover, a:visited { } /* @section page-footer */ - #footer { + .page #footer { border-top: 1px solid #ccc; - font-size: 1.2em; - line-height: 1.6em; margin: 1em 0 7em; } #footer p#last-edit { + font-size: 1.2em; + line-height: 1.6em; color: #999; margin: 0.9em 0; } @@ -257,3 +214,176 @@ a:hover, a:visited { #footer p#last-edit span.username { font-weight: bold; } + + +/* @section history */ +.history h1 { + color: #999; + font-weight: normal; +} + + .history h1 strong { + color: #000; + font-weight: bold; + } + +#wiki-history { + margin-top: 3em; +} + + #wiki-history fieldset { + border: 0; + margin: 0; + padding: 0; + } + + #wiki-history table, #wiki-history tbody { + border-collapse: collapse; + padding: 0; + margin: 0; + width: 100%; + } + + #wiki-history table tr { + padding: 0; + margin: 0; + } + + #wiki-history table tr { + background-color: #ebf2f6; + } + + #wiki-history table tr td { + border: 1px solid #c0dce9; + font-size: 1.2em; + line-height: 1.6em; + margin: 0; + padding: 0.6em; + } + + #wiki-history table tr td.checkbox input { + cursor: pointer; + display: block; + padding-right: 0; + padding-top: 0.4em; + margin-right: -0.3em; + } + + #wiki-history table tr:nth-child(2n), + #wiki-history table tr.alt-row { + background-color: #f3f7fa; + } + + #wiki-history table tr.selected { + background-color: #ffffea !important; + z-index: 100; + } + + #wiki-history table tr td.commit-name { + border-right: none; + padding-left: 1.2em; + } + + #wiki-history table tr td.commit-name span.time-elapsed { + color: #999; + } + + #wiki-history table tr td.author { + width: 20%; + } + + #wiki-history table tr td.author a { + color: #000; + font-weight: bold; + } + + #wiki-history table tr td.author a span.username { + display: block; + padding-top: 3px; + } + + #wiki-history table tr td img { + background-color: #fff; + border: 1px solid #999; + display: block; + float: left; + height: 18px; + overflow: hidden; + margin: 0 0.5em 0 0; + width: 18px; + padding: 2px; + } + + #wiki-history table tr td.commit-name a { + font-size: 0.9em; + font-family: 'Monaco', 'Andale Mono', Consolas, 'Courier New', monospace; + padding: 0 0.2em; + } + + #wiki-history table tr td.revert-action { + border-left: 0; + text-align: right; + padding-right: 1.2em; + } + + #wiki-history table tr td.revert-action a { + font-weight: bold; + } + + #wiki-history table tr td.revert-action a span { + font-size: 0.9em; + font-family: 'Monaco', 'Andale Mono', Consolas, 'Courier New', monospace; + } + +.history #wiki-history ul.actions li, +.history #footer ul.actions li { + margin: 0 0.6em 0 0; +} + + + +/* @control minibutton */ +ul.actions { + display: block; + list-style-type: none; + overflow: hidden; + padding: 0; + } + + ul.actions li { + float: left; + font-size: 1.2em; + margin-left: 0.6em; + } + +.minibutton a { + background-color: #f7f7f7; + border: 1px solid #d4d4d4; + color: #333; + display: block; + font-weight: bold; + margin: 0; + padding: 0.4em 1em; + + text-shadow: 0 1px 0 #fff; + + filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f4f4f4', endColorstr='#ececec'); + background: -webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#ececec)); + background: -moz-linear-gradient(top, #f4f4f4, #ececec); + + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} + +.minibutton a:hover { + background: #3072b3; + border-color: #518cc6 #518cc6 #2a65a0; + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + text-decoration: none; + + filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#599bdc', endColorstr='#3072b3'); + background: -webkit-gradient(linear, left top, left bottom, from(#599bdc), to(#3072b3)); + background: -moz-linear-gradient(top, #599bdc, #3072b3); +} \ No newline at end of file diff --git a/scratch/css/template.css b/scratch/css/template.css index 784e12bc..882877ff 100644 --- a/scratch/css/template.css +++ b/scratch/css/template.css @@ -1,6 +1,8 @@ /* template.css Wiki content formatting + Keeping this file separate so it can be easily swapped out if you + want to format your wiki content differently from the default. */ #template { diff --git a/scratch/history.html b/scratch/history.html index e777ed80..9d07a5c0 100644 --- a/scratch/history.html +++ b/scratch/history.html @@ -22,32 +22,31 @@
- - - - - - + + + + + + + +
- - - - avatar: username - username - - - 3 days ago:  - Rewrote home page as Markdown… - [a45719f…] - - Revert to a45719f… -
+ + + + avatar: username + username + + + 3 days ago:  + Rewrote home page as Markdown… + [a45719f…] + + Revert to a45719f… +
@@ -56,7 +55,7 @@ avatar: username - username + username @@ -76,7 +75,7 @@ avatar: username - username + username @@ -88,6 +87,7 @@ Revert to a45719f…
@@ -103,6 +103,8 @@ + + \ No newline at end of file diff --git a/scratch/js/gollum.js b/scratch/js/gollum.js index b7dfb2f3..e4321ce4 100644 --- a/scratch/js/gollum.js +++ b/scratch/js/gollum.js @@ -24,4 +24,38 @@ $(document).ready(function() { ); } -}); \ No newline at end of file + if ($('#wiki-wrapper').hasClass('history')) { + $('#wiki-history td.checkbox input').each(highlightChecked); + $('#wiki-history td.checkbox input').click(highlightChecked); + + $('#wiki-history td.revert-action a').mouseenter(highlightOn); + $('#wiki-history td.revert-action a').mouseleave(highlightOff); + }; + +}); + +function highlightOn() { + $(this).parent().parent().animate({ + backgroundColor: '#ffffea', + duration: 400 + }); +} + +function highlightOff() { + var color = '#ebf2f6'; + if ($(this).parent().parent().hasClass('alt-row')) { + color = '#f3f7fa'; + } + $(this).parent().parent().animate({ + backgroundColor: color, + duration: 400 + }); +} + +function highlightChecked() { + if ($(this).is(':checked')) { + $(this).parent().parent().addClass('selected'); + } else { + $(this).parent().parent().removeClass('selected'); + } +} \ No newline at end of file diff --git a/scratch/js/jquery.color.js b/scratch/js/jquery.color.js new file mode 100644 index 00000000..634719d3 --- /dev/null +++ b/scratch/js/jquery.color.js @@ -0,0 +1,123 @@ +/* + * jQuery Color Animations + * Copyright 2007 John Resig + * Released under the MIT and GPL licenses. + */ + +(function(jQuery){ + + // We override the animation for all of these color styles + jQuery.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i,attr){ + jQuery.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]), 255), 0), + Math.max(Math.min( parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1]), 255), 0), + Math.max(Math.min( parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2]), 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]), parseInt(result[2]), parseInt(result[3])]; + + // 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)]; + + // Otherwise, we're most likely dealing with a named color + return colors[jQuery.trim(color).toLowerCase()]; + } + + function getColor(elem, attr) { + var color; + + do { + color = jQuery.curCSS(elem, attr); + + // Keep going until we find an element that has color, or we hit the body + if ( color != '' && color != 'transparent' || jQuery.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] + }; + +})(jQuery); From 927b012d6c69a3565deb8dae0bca2b54e914b9a1 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 25 Oct 2010 18:52:45 -0700 Subject: [PATCH 032/393] Tightening up table --- scratch/css/gollum.css | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/scratch/css/gollum.css b/scratch/css/gollum.css index c4a8d191..d22f9535 100644 --- a/scratch/css/gollum.css +++ b/scratch/css/gollum.css @@ -233,7 +233,7 @@ a:hover, a:visited { #wiki-history fieldset { border: 0; - margin: 0; + margin: 2em 0; padding: 0; } @@ -258,7 +258,11 @@ a:hover, a:visited { font-size: 1.2em; line-height: 1.6em; margin: 0; - padding: 0.6em; + padding: 0.3em 0.7em; + } + + #wiki-history table tr td.checkbox { + padding: 0.3em; } #wiki-history table tr td.checkbox input { @@ -266,7 +270,7 @@ a:hover, a:visited { display: block; padding-right: 0; padding-top: 0.4em; - margin-right: -0.3em; + margin-right: -0.2em; } #wiki-history table tr:nth-child(2n), @@ -281,7 +285,6 @@ a:hover, a:visited { #wiki-history table tr td.commit-name { border-right: none; - padding-left: 1.2em; } #wiki-history table tr td.commit-name span.time-elapsed { @@ -323,7 +326,6 @@ a:hover, a:visited { #wiki-history table tr td.revert-action { border-left: 0; text-align: right; - padding-right: 1.2em; } #wiki-history table tr td.revert-action a { From 26df05374cded0c46c3ed99b9adbf1b553290ce4 Mon Sep 17 00:00:00 2001 From: 7rans Date: Wed, 27 Oct 2010 14:04:26 -0400 Subject: [PATCH 033/393] provide customizable sanitization --- lib/gollum.rb | 45 +---------- lib/gollum/markup.rb | 6 +- lib/gollum/sanitization.rb | 150 +++++++++++++++++++++++++++++++++++++ lib/gollum/wiki.rb | 44 ++++++++--- 4 files changed, 190 insertions(+), 55 deletions(-) create mode 100644 lib/gollum/sanitization.rb diff --git a/lib/gollum.rb b/lib/gollum.rb index 36bcab92..bc5f5829 100644 --- a/lib/gollum.rb +++ b/lib/gollum.rb @@ -18,54 +18,13 @@ require 'gollum/page' require 'gollum/file' require 'gollum/markup' require 'gollum/albino' +require 'gollum/sanitization' module Gollum VERSION = '1.0.1' - SANITIZATION_OPTIONS = { - :elements => [ - 'a', 'abbr', 'acronym', 'address', 'area', 'b', 'big', - 'blockquote', 'br', 'button', 'caption', 'center', 'cite', - 'code', 'col', 'colgroup', 'dd', 'del', 'dfn', 'dir', - 'div', 'dl', 'dt', 'em', 'fieldset', 'font', 'form', 'h1', - 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'input', - 'ins', 'kbd', 'label', 'legend', 'li', 'map', 'menu', - 'ol', 'optgroup', 'option', 'p', 'pre', 'q', 's', 'samp', - 'select', 'small', 'span', 'strike', 'strong', 'sub', - 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', - 'thead', 'tr', 'tt', 'u', 'ul', 'var' - ], - :attributes => { - :all => ['abbr', 'accept', 'accept-charset', - 'accesskey', 'action', 'align', 'alt', 'axis', - 'border', 'cellpadding', 'cellspacing', 'char', - 'charoff', 'charset', 'checked', 'cite', - 'class', 'clear', 'cols', 'colspan', 'color', - 'compact', 'coords', 'datetime', 'dir', - 'disabled', 'enctype', 'for', 'frame', - 'headers', 'height', 'href', 'hreflang', - 'hspace', 'id', 'ismap', 'label', 'lang', - 'longdesc', 'maxlength', 'media', 'method', - 'multiple', 'name', 'nohref', 'noshade', - 'nowrap', 'prompt', 'readonly', 'rel', 'rev', - 'rows', 'rowspan', 'rules', 'scope', - 'selected', 'shape', 'size', 'span', 'src', - 'start', 'summary', 'tabindex', 'target', - 'title', 'type', 'usemap', 'valign', 'value', - 'vspace', 'width'] - }, - :protocols => { - 'a' => {'href' => ['http', 'https', 'mailto', :relative]}, - 'img' => {'href' => ['http', 'https', :relative]} - } - } - HISTORY_SANITIZATION_OPTIONS = SANITIZATION_OPTIONS.merge( - :add_attributes => { - 'a' => {'rel' => 'nofollow'} - } - ) - class Error < StandardError; end + class DuplicatePageError < Error attr_accessor :dir attr_accessor :existing_path diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 2a78bbbf..40ee86fa 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -27,9 +27,9 @@ module Gollum # # Returns the formatted String content. def render(no_follow = false) - sanitize_options = no_follow ? - HISTORY_SANITIZATION_OPTIONS : - SANITIZATION_OPTIONS + sanitize_options = ( + no_follow ? @wiki.history_sanitization : @wiki.sanitization + ).to_h data = extract_tex(@data) data = extract_code(data) data = extract_tags(data) diff --git a/lib/gollum/sanitization.rb b/lib/gollum/sanitization.rb new file mode 100644 index 00000000..65cdcc8c --- /dev/null +++ b/lib/gollum/sanitization.rb @@ -0,0 +1,150 @@ +module Gollum + + # Encapsulate sanitization options. + # + # This class does not yet support all options of Sanitize library. + # See http://github.com/rgrove/sanitize/. + class Sanitization + + # + ELEMENTS = [ + 'a', 'abbr', 'acronym', 'address', 'area', 'b', 'big', + 'blockquote', 'br', 'button', 'caption', 'center', 'cite', + 'code', 'col', 'colgroup', 'dd', 'del', 'dfn', 'dir', + 'div', 'dl', 'dt', 'em', 'fieldset', 'font', 'form', 'h1', + 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'input', + 'ins', 'kbd', 'label', 'legend', 'li', 'map', 'menu', + 'ol', 'optgroup', 'option', 'p', 'pre', 'q', 's', 'samp', + 'select', 'small', 'span', 'strike', 'strong', 'sub', + 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', + 'thead', 'tr', 'tt', 'u', 'ul', 'var' + ] + + # + ATTRIBUTES = { + :all => [ + 'abbr', 'accept', 'accept-charset', + 'accesskey', 'action', 'align', 'alt', 'axis', + 'border', 'cellpadding', 'cellspacing', 'char', + 'charoff', 'charset', 'checked', 'cite', + 'class', 'clear', 'cols', 'colspan', 'color', + 'compact', 'coords', 'datetime', 'dir', + 'disabled', 'enctype', 'for', 'frame', + 'headers', 'height', 'href', 'hreflang', + 'hspace', 'id', 'ismap', 'label', 'lang', + 'longdesc', 'maxlength', 'media', 'method', + 'multiple', 'name', 'nohref', 'noshade', + 'nowrap', 'prompt', 'readonly', 'rel', 'rev', + 'rows', 'rowspan', 'rules', 'scope', + 'selected', 'shape', 'size', 'span', 'src', + 'start', 'summary', 'tabindex', 'target', + 'title', 'type', 'usemap', 'valign', 'value', + 'vspace', 'width' + ] + } + + # + PROTOCOLS = { + 'a' => {'href' => ['http', 'https', 'mailto', :relative]}, + 'img' => {'href' => ['http', 'https', :relative]} + } + + # + ADD_ATTRIBUTES = { + 'a' => {'rel' => 'nofollow'} + } + + # Additional options specifically for histories. + HISTORY_OPTIONS = { + :add_attributes => { + 'a' => {'rel' => 'nofollow'} + } + } + + # + def initialize(*settings) + if settings.empty? + @elements = ELEMENTS + @attributes = ATTRIBUTES + @protocols = PROTOCOLS + @add_attributes = {} + @allow_comments = false + else + @elements = [] + @attributes = {} + @protocols = {} + @add_attributes = {} + @allow_comments = false + settings.each{ |s| merge!(s) } + end + end + + def elements + @elements + end + + def attributes + @attributes + end + + def protocols + @protocols + end + + def add_attributes + @add_attributes + end + + def allow_comments + !!@allow_comments + end + + # + def to_h + { :elements => elements, + :attributes => attributes, + :protocols => protocols, + :add_attributes => add_attributes, + :allow_comments => allow_comments + } + end + + # + def merge(settings) + self.class.new(self, settings) + end + + # + def merge!(settings) + case settings + when Sanitization + other_elements = settings.elements + other_attributes = settings.attributes + other_protocols = settings.protocols + other_add_attributes = settings.add_attributes + else + other_elements = settings[:elements] || [] + other_attributes = settings[:attributes] || {} + other_protocols = settings[:protocols] || {} + other_add_attributes = settings[:add_attributes] || {} + end + + elements.concat(other_elements) + other_attributes.each do |k,v| + attributes[k] ||= [] + attributes[k].concat(v) + end + other_protocols.each do |k,v| + protocols[k] ||= {} + protocols[k].merge!(v) + end + other_add_attributes.each do |k,v| + add_attributes[k] ||= {} + add_attributes[k].merge!(v) + end + end + + end + +end + diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 30fade8a..f74cfd89 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -15,6 +15,12 @@ module Gollum # Sets the default email for commits. attr_accessor :default_committer_email + # + attr_writer :sanitization_options + + # + attr_writer :history_sanitization_options + # Gets the page class used by all instances of this Wiki. # Default: Gollum::Page. def page_class @@ -36,6 +42,12 @@ module Gollum ::Gollum::File end end + + # + def sanitization + @sanitization ||= Sanitization.new + end + end self.default_committer_name = 'Anonymous' @@ -51,21 +63,35 @@ module Gollum # repo - The String path to the Git repository that holds the Gollum # site. # options - Optional Hash: - # :base_path - String base path for all Wiki links. - # Default: "/" - # :page_class - The page Class. Default: Gollum::Page - # :file_class - The file Class. Default: Gollum::File + # :base_path - String base path for all Wiki links. + # Default: "/" + # :page_class - The page Class. Default: Gollum::Page + # :file_class - The file Class. Default: Gollum::File + # :sanitization - An instance of Santitization. # # Returns a fresh Gollum::Repo. def initialize(path, options = {}) - @path = path - @repo = Grit::Repo.new(path) - @base_path = options[:base_path] || "/" - @page_class = options[:page_class] || self.class.page_class - @file_class = options[:file_class] || self.class.file_class + @path = path + @repo = Grit::Repo.new(path) + @base_path = options[:base_path] || "/" + @page_class = options[:page_class] || self.class.page_class + @file_class = options[:file_class] || self.class.file_class + @sanitization = options[:sanitization] || self.class.sanitization + clear_cache end + # Public: Instance of Sanitization class. + attr :sanitization + + # Public: Return a new sanitization instance combining #sanitiazation + # and additional history sanitization options. + # + # Returns a Sanitization instance. + def history_sanitization + @history_sanitiazation ||= sanitization.merge(Sanitization::HISTORY_OPTIONS) + end + # Public: check whether the wiki's git repo exists on the filesystem. # # Returns true if the repo exists, and false if it does not. From 3e8d2773be2308c8e4362e9fbb2349f7be15ca8d Mon Sep 17 00:00:00 2001 From: 7rans Date: Wed, 27 Oct 2010 14:17:24 -0400 Subject: [PATCH 034/393] allow deactivation of sanitization --- lib/gollum/markup.rb | 4 ++-- lib/gollum/wiki.rb | 20 +++++++++++++------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 40ee86fa..b79e7a19 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -29,7 +29,7 @@ module Gollum def render(no_follow = false) sanitize_options = ( no_follow ? @wiki.history_sanitization : @wiki.sanitization - ).to_h + ) data = extract_tex(@data) data = extract_code(data) data = extract_tags(data) @@ -43,7 +43,7 @@ module Gollum end data = process_tags(data) data = process_code(data) - data = Sanitize.clean(data, sanitize_options) + data = Sanitize.clean(data, sanitize_options.to_h) if sanitize_options data = process_tex(data) data.gsub!(/

<\/p>/, '') data diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index f74cfd89..82de0a89 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -15,11 +15,9 @@ module Gollum # Sets the default email for commits. attr_accessor :default_committer_email - # - attr_writer :sanitization_options - - # - attr_writer :history_sanitization_options + # Sets sanitization options. Set to false to deactivate + # sanitization altogether. + attr_writer :sanitization # Gets the page class used by all instances of this Wiki. # Default: Gollum::Page. @@ -45,7 +43,8 @@ module Gollum # def sanitization - @sanitization ||= Sanitization.new + return @sanitization unless @sanitization.nil? + @sanitization = Sanitization.new end end @@ -89,7 +88,14 @@ module Gollum # # Returns a Sanitization instance. def history_sanitization - @history_sanitiazation ||= sanitization.merge(Sanitization::HISTORY_OPTIONS) + return @history_sanitiazation unless @history_sanitiazation.nil? + @history_sanitiazation = ( + if sanitization + sanitization.merge(Sanitization::HISTORY_OPTIONS) + else + false + end + ) end # Public: check whether the wiki's git repo exists on the filesystem. From ac1d1c47e2ef5b66d5638170a9cd815dcf947e0f Mon Sep 17 00:00:00 2001 From: 7rans Date: Wed, 27 Oct 2010 14:20:33 -0400 Subject: [PATCH 035/393] fix misspelling of sanitization --- lib/gollum/wiki.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 82de0a89..fb1bec04 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -88,8 +88,8 @@ module Gollum # # Returns a Sanitization instance. def history_sanitization - return @history_sanitiazation unless @history_sanitiazation.nil? - @history_sanitiazation = ( + return @history_sanitization unless @history_sanitization.nil? + @history_sanitization = ( if sanitization sanitization.merge(Sanitization::HISTORY_OPTIONS) else From 0b1f1a5338ad2880fddad6ef1bf43f2ad758bca5 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 27 Oct 2010 16:03:16 -0700 Subject: [PATCH 036/393] Beginnings of new editor --- scratch/css/editor.css | 4 + scratch/edit.html | 74 +++++++++ scratch/js/gollum-editor/langs/markdown.js | 1 + scratch/js/gollum.editor.js | 174 +++++++++++++++++++++ 4 files changed, 253 insertions(+) create mode 100644 scratch/css/editor.css create mode 100644 scratch/edit.html create mode 100644 scratch/js/gollum-editor/langs/markdown.js diff --git a/scratch/css/editor.css b/scratch/css/editor.css new file mode 100644 index 00000000..bcf10862 --- /dev/null +++ b/scratch/css/editor.css @@ -0,0 +1,4 @@ +/* + editor.css + Wiki editor formatting +*/ \ No newline at end of file diff --git a/scratch/edit.html b/scratch/edit.html new file mode 100644 index 00000000..7641ad7f --- /dev/null +++ b/scratch/edit.html @@ -0,0 +1,74 @@ + + + + + + + Page Name — Site Name + + +

+ +
+
+
+
+ +
+
+
+ + +
+ +
+ +
+
+
+
+
+
+ +
+ + + + + + \ No newline at end of file diff --git a/scratch/js/gollum-editor/langs/markdown.js b/scratch/js/gollum-editor/langs/markdown.js new file mode 100644 index 00000000..d77af0c7 --- /dev/null +++ b/scratch/js/gollum-editor/langs/markdown.js @@ -0,0 +1 @@ +// meh \ No newline at end of file diff --git a/scratch/js/gollum.editor.js b/scratch/js/gollum.editor.js index e69de29b..34173319 100644 --- a/scratch/js/gollum.editor.js +++ b/scratch/js/gollum.editor.js @@ -0,0 +1,174 @@ +/** + * gollum.editor.js + * A jQuery plugin that creates the Gollum Editor. + * + * Usage: + * $.GollumEditor(); on DOM ready. +**/ +/* (function($) { */ + + var GollumDefaults = { + MarkupType: 'markdown', + EditorMode: 'code', + HasFunctionBar: true, + Debug: true + }; + + var ActiveOptions = {}; + + $.GollumEditor = function(options) { + + ActiveOptions = $.extend(GollumDefaults, options); + debug('GollumEditor loading'); + + if ( EditorHas.baseEditorMarkup() ) { + + // Initialise the function bar by loading proper definitions + if ( EditorHas.functionBar() ) { + var htmlSetMarkupLang = + $('#gollum-editor-body').attr('data-markup-lang'); + + if ( htmlSetMarkupLang ) { + ActiveOptions.MarkupType = htmlSetMarkupLang; + } + + if ( !LanguageDefinition.isLoadedFor(ActiveOptions.MarkupType) ) { + debug('Loading language definition for ' + ActiveOptions.MarkupType); + LanguageDefinition.loadFor(ActiveOptions.MarkupType, + function(data, textStatus) { + if (textStatus != 'success') { + debug('Language definition could not be loaded for markup ' + + 'type ' + ActiveOptions.MarkupType); + return; + } + // activate the function bar + FunctionBar.activate(); + }); + } + } + + } + }; + + + + /** + * debug + * Prints debug information to console.log if debug output is enabled. + * + * @param mixed Whatever you want to dump to console.log + * @return void + **/ + var debug = function(m) { + if ( ActiveOptions.Debug && console + && typeof console.log == 'function' ) { + console.log(m); + } + }; + + + + /** + * LanguageDefinition + * Language definition file handler + * Loads language definition files as necessary. + **/ + var LanguageDefinition = { + + _LOADED_LANGS: [], + + /** + * loadFor + * Asynchronously loads a definition file for the current markup. + * Definition files are necessary to use the code editor. + * + * @param string markup_name The markup name you want to load + * @return void + **/ + loadFor: function( markup_name, on_complete ) { + // attempt to load the definition for this language + var script_uri = 'js/gollum-editor/langs/' + markup_name + '.js'; + $.ajax({ + url: script_uri, + dataType: 'script', + complete: function(xhr, textStatus) { + if (textStatus == 'success') { + LanguageDefinition._LOADED_LANGS.push(markup_name); + } + if (typeof on_complete == 'function') { + on_complete(xhr, textStatus, markup_name); + } + } + }); + }, + + + /** + * isLoadedFor + * Checks to see if a definition file has been loaded for the + * specified markup language. + * + * @param string markup_name The name of the markup. + * @return boolean + **/ + isLoadedFor: function( markup_name ) { + if ( LanguageDefinition._LOADED_LANGS.length == 0 ) return false; + + for (var i=0; i < LanguageDefinition._LOADED_LANGS.length; i++) { + if ( LanguageDefinition._LOADED_LANGS[i] == markup_name ) + return true; + } + return false; + } + + }; + + + /** + * EditorHas + * Various conditionals to check what features of the Gollum Editor are + * active/operational. + **/ + var EditorHas = { + + baseEditorMarkup: function() { + return ( $('#gollum-editor').length && + $('#gollum-editor-body').length ); + }, + + functionBar: function() { + return ( ActiveOptions.HasFunctionBar && + $('#gollum-editor-function-bar').length ); + } + + }; + + + /** + * FunctionBar + * + * Things the function bar does. + **/ + var FunctionBar = { + + isActive: false, + + activate: function() { + $('#gollum-editor-function-bar a.function-button') + .click(FunctionBar.evtFunctionButtonClick); + // show bar as active + $('#gollum-editor-function-bar').addClass('active'); + this.isActive = true; + }, + + evtFunctionButtonClick: function(e) { + alert('eee'); + } + + }; + +/* })(jQuery); */ + +jQuery(document).ready(function() { + $.GollumEditor(); +}); \ No newline at end of file From c9cc0d3d378c7f5bfb9628b7d1201a0573082151 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 27 Oct 2010 16:47:30 -0700 Subject: [PATCH 037/393] Added markdown definition, workin' on the editor --- scratch/js/gollum-editor/langs/markdown.js | 51 +++++++++++++++++++++- scratch/js/gollum.editor.js | 21 ++++++++- 2 files changed, 69 insertions(+), 3 deletions(-) diff --git a/scratch/js/gollum-editor/langs/markdown.js b/scratch/js/gollum-editor/langs/markdown.js index d77af0c7..1e113962 100644 --- a/scratch/js/gollum-editor/langs/markdown.js +++ b/scratch/js/gollum-editor/langs/markdown.js @@ -1 +1,50 @@ -// meh \ No newline at end of file +/** + * Markdown Language Definition + * + * A language definition for string manipulation operations, in this case + * for the Markdown, uh, markup language. Uses regexes for various functions + * by default. If regexes won't do and you need to do some serious + * manipulation, you can declare a function in the object instead. + * + * Code example: + * 'functionbar-id' : { + * exec: function(text, selectedText) { + * functionStuffHere(); + * }, + * search: /somesearchregex/gi, + * replace: 'replace text for RegExp.replace', + * append: "just add this where the cursor is" + * } + * +**/ + +var MarkDown = { + + 'function-bold' : { + search: /([^\n]+)([\n]*)/gi, + replace: "**$1**$2" + }, + + 'function-italic' : { + search: /([^\n]+)([\n]*)/gi, + replace: "_$1_$2" + }, + + 'function-code' : { + search: /([^\n]+)([\n]*)/gi, + replace: "`$1`$2" + }, + + 'function-hr' : { + append: "\n***\n" + }, + + 'function-ul' : { + search: /(.+)([\n]?)/gi, + replace: "* $1$2" + } + +}; + +// this is necessary for GollumEditor to pick this up +jQuery.GollumEditor.defineLanguage('markdown', MarkDown); \ No newline at end of file diff --git a/scratch/js/gollum.editor.js b/scratch/js/gollum.editor.js index 34173319..1844199f 100644 --- a/scratch/js/gollum.editor.js +++ b/scratch/js/gollum.editor.js @@ -50,6 +50,14 @@ } }; + $.GollumEditor.defineLanguage = function( language_name, languageObject ) { + if ( typeof languageObject == 'object' ) + LanguageDefinition.define( language_name, languageObject ); + else + debug('GollumEditor.defineLanguage: definition for ' + language_name + + ' is not an object'); + }; + /** @@ -75,7 +83,15 @@ **/ var LanguageDefinition = { - _LOADED_LANGS: [], + _LOADED_LANGS: [], + _LANG: {}, + + /** + * Defines a language + **/ + define: function( name, definitionObject ) { + LanguageDefinition._LANG[name] = definitionObject; + }, /** * loadFor @@ -162,7 +178,8 @@ }, evtFunctionButtonClick: function(e) { - alert('eee'); + e.preventDefault(); + alert($(this).attr('id')); } }; From 135156cea58dbbf20ec666f0128704e709b36eb7 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 27 Oct 2010 17:29:11 -0700 Subject: [PATCH 038/393] Adding code replacement techniques --- scratch/js/gollum.editor.js | 75 ++++++++++++++++++++++++-- scratch/js/jquery.fieldselection.js | 83 +++++++++++++++++++++++++++++ 2 files changed, 155 insertions(+), 3 deletions(-) create mode 100644 scratch/js/jquery.fieldselection.js diff --git a/scratch/js/gollum.editor.js b/scratch/js/gollum.editor.js index 1844199f..299b05e4 100644 --- a/scratch/js/gollum.editor.js +++ b/scratch/js/gollum.editor.js @@ -83,6 +83,7 @@ **/ var LanguageDefinition = { + _ACTIVE_LANG: '', _LOADED_LANGS: [], _LANG: {}, @@ -91,8 +92,32 @@ **/ define: function( name, definitionObject ) { LanguageDefinition._LANG[name] = definitionObject; + LanguageDefinition._ACTIVE_LANG = name; }, + + /** + * gets a definition object for a specified attribute + * + * @param string attr The specified attribute. + * @param string specified_lang The language to pull a definition for. + * @return object if exists, null otherwise + **/ + getDefinitionFor: function( attr, specified_lang ) { + if ( !specified_lang ) { + specified_lang = LanguageDefinition._ACTIVE_LANG; + } + + if ( LanguageDefinition.isLoadedFor(specified_lang) && + LanguageDefinition._LANG[specified_lang][attr] && + typeof LanguageDefinition_LANG[specified_lang][attr] == 'object' ) { + return LanguageDefinition._LANG[specified_lang][attr]; + } + + return null; + }, + + /** * loadFor * Asynchronously loads a definition file for the current markup. @@ -174,14 +199,58 @@ .click(FunctionBar.evtFunctionButtonClick); // show bar as active $('#gollum-editor-function-bar').addClass('active'); - this.isActive = true; + FunctionBar.isActive = true; }, evtFunctionButtonClick: function(e) { e.preventDefault(); - alert($(this).attr('id')); - } + var def = LanguageDefinition.getDefinitionFor( $(this).attr() ); + if ( def ) { + FunctionBar.executeAction( def ); + } + }, + executeAction: function( definitionObject ) { + // get the selected text from the textarea + var txt = $('#gollum-editor-body').val(); + // hmm, I'm not sure this will work in a textarea + var selText = $('#gollum-editor-body').getSelection(); + var repText = null; + + // exec a function if it exists first + if ( definitionObject.exec && + typeof definitionObject.exec == 'function' ) { + definitionObject(txt, selText, $('#gollum-editor-body')); + } + + // exec search/replace if both exist + if ( definitionObject.replace && + typeof definitionObject.replace == 'string' ) { + + var searchRegex = /(.*)/gi; + if ( definitionObject.search && + ( typeof definitionObject.search == 'string' || + typeof definitionObject.search == 'regexp' )) { + searchRegex = definitionObject.search; + } else { + debug('Invalid search regex, using default'); + } + + repText = selText.replace(searchRegex, definitionObject.replace); + } else { + debug('Invalid replacement string'); + } + + // now, add append if it exists + if ( definitionObject.append && + typeof definitionObject.append == 'string' ) { + repText += definitionObject.append; + } + + if (repText) + $('#gollum-editor-body').replaceSelection(repText); + + } }; /* })(jQuery); */ diff --git a/scratch/js/jquery.fieldselection.js b/scratch/js/jquery.fieldselection.js new file mode 100644 index 00000000..92fb6562 --- /dev/null +++ b/scratch/js/jquery.fieldselection.js @@ -0,0 +1,83 @@ +/* + * jQuery plugin: fieldSelection - v0.1.0 - last change: 2006-12-16 + * (c) 2006 Alex Brem - http://blog.0xab.cd + */ + +(function() { + + var fieldSelection = { + + getSelection: function() { + + var e = this.jquery ? this[0] : this; + + return ( + + /* mozilla / dom 3.0 */ + ('selectionStart' in e && function() { + var l = e.selectionEnd - e.selectionStart; + return { start: e.selectionStart, end: e.selectionEnd, length: l, text: e.value.substr(e.selectionStart, l) }; + }) || + + /* exploder */ + (document.selection && function() { + + e.focus(); + + var r = document.selection.createRange(); + if (r == null) { + return { start: 0, end: e.value.length, length: 0 } + } + + var re = e.createTextRange(); + var rc = re.duplicate(); + re.moveToBookmark(r.getBookmark()); + rc.setEndPoint('EndToStart', re); + + return { start: rc.text.length, end: rc.text.length + r.text.length, length: r.text.length, text: r.text }; + }) || + + /* browser not supported */ + function() { + return { start: 0, end: e.value.length, length: 0 }; + } + + )(); + + }, + + replaceSelection: function() { + + var e = this.jquery ? this[0] : this; + var text = arguments[0] || ''; + + return ( + + /* mozilla / dom 3.0 */ + ('selectionStart' in e && function() { + e.value = e.value.substr(0, e.selectionStart) + text + e.value.substr(e.selectionEnd, e.value.length); + return this; + }) || + + /* exploder */ + (document.selection && function() { + e.focus(); + document.selection.createRange().text = text; + return this; + }) || + + /* browser not supported */ + function() { + e.value += text; + return this; + } + + )(); + + } + + }; + + jQuery.each(fieldSelection, function(i) { jQuery.fn[i] = this; }); + +})(); \ No newline at end of file From 996f81d63d38cf8213df2bec8a51e521e2de93b9 Mon Sep 17 00:00:00 2001 From: Tom Preston-Werner Date: Thu, 28 Oct 2010 12:18:27 -0700 Subject: [PATCH 039/393] Release 1.1.0 --- HISTORY.md | 2 +- gollum.gemspec | 4 ++-- lib/gollum.rb | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index 4c977194..c337234b 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,4 +1,4 @@ -# HEAD +# 1.1.0 / 2010-10-28 * Major Enhancements * Optimize page write/update/delete to use Grit::Index::read_tree instead diff --git a/gollum.gemspec b/gollum.gemspec index 521f8bbf..e2586d7e 100644 --- a/gollum.gemspec +++ b/gollum.gemspec @@ -4,8 +4,8 @@ Gem::Specification.new do |s| s.rubygems_version = '1.3.5' s.name = 'gollum' - s.version = '1.0.1' - s.date = '2010-10-11' + s.version = '1.1.0' + s.date = '2010-10-28' s.rubyforge_project = 'gollum' s.summary = "A simple, Git-powered wiki." diff --git a/lib/gollum.rb b/lib/gollum.rb index 36bcab92..d5a5627e 100644 --- a/lib/gollum.rb +++ b/lib/gollum.rb @@ -20,7 +20,7 @@ require 'gollum/markup' require 'gollum/albino' module Gollum - VERSION = '1.0.1' + VERSION = '1.1.0' SANITIZATION_OPTIONS = { :elements => [ From 74b724833492c8eed593dd622470c48976359f67 Mon Sep 17 00:00:00 2001 From: Tom Preston-Werner Date: Thu, 28 Oct 2010 15:15:34 -0700 Subject: [PATCH 040/393] Use @wiki.page_class in Gollum::Markup where appropriate. Fixes #63. --- HISTORY.md | 5 +++++ lib/gollum/markup.rb | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index c337234b..e0a684de 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,3 +1,8 @@ +# HEAD + +* Bug Fixes + * Use @wiki.page_class in Gollum::Markup where appropriate (#63). + # 1.1.0 / 2010-10-28 * Major Enhancements diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 2a78bbbf..53073ce0 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -284,7 +284,7 @@ module Gollum def process_page_link_tag(tag, no_follow = false) parts = tag.split('|') name = parts[0].strip - cname = Page.cname((parts[1] || parts[0]).strip) + cname = @wiki.page_class.cname((parts[1] || parts[0]).strip) tag = if name =~ %r{^https?://} && parts[1].nil? %{#{name}} else @@ -292,7 +292,7 @@ module Gollum link_name = cname page, extra = find_page_from_name(cname) if page - link_name = Page.cname(page.name) + link_name = @wiki.page_class.cname(page.name) presence = "present" end link = ::File.join(@wiki.base_path, CGI.escape(link_name)) From b4006ec007952f31ed39cc0a79bbb2b5ccf9a6a1 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 1 Nov 2010 15:32:46 -0700 Subject: [PATCH 041/393] Most of the editor css, working editor --- scratch/css/editor.css | 125 ++++++- scratch/css/gollum.css | 12 + scratch/edit.html | 19 +- scratch/js/gollum-editor/gollum.editor.js | 393 ++++++++++++++++++++++ scratch/js/gollum.editor.js | 260 -------------- scratch/page.html | 2 +- 6 files changed, 535 insertions(+), 276 deletions(-) create mode 100644 scratch/js/gollum-editor/gollum.editor.js delete mode 100644 scratch/js/gollum.editor.js diff --git a/scratch/css/editor.css b/scratch/css/editor.css index bcf10862..51777e14 100644 --- a/scratch/css/editor.css +++ b/scratch/css/editor.css @@ -1,4 +1,127 @@ /* editor.css Wiki editor formatting -*/ \ No newline at end of file +*/ + +#gollum-editor { + border: 1px solid #e4e4e4; + background: #f9f9f9; + overflow: hidden; + padding: 1em; + + border-radius: 1em; + -moz-border-radius: 1em; + -webkit-border-radius: 1em; +} + +#gollum-editor form fieldset { + border: 0; + margin: 0; + padding: 0; + width: 100%; +} + +/* @control editor-view-tab */ +#gollum-editor #gollum-editor-type-switcher { + display: none; +} + +/* @control function-bar */ +#gollum-editor #gollum-editor-function-bar { + border-bottom: 1px solid #ddd; + overflow: hidden; + padding: 0 0 0.5em 0; + display: none; +} + +#gollum-editor #gollum-editor-function-bar.active { + display: block; +} + +#gollum-editor #gollum-editor-function-bar a.function-button { + background: #f7f7f7; + border: 1px solid #ddd; + color: #333; + display: block; + float: left; + height: 25px; + overflow: hidden; + margin: 0 0.5em 0 0; + /* text-indent: -5000px; */ + text-shadow: 0 1px 0 #fff; + width: 25px; + + border-radius: 0.3em; + -moz-border-radius: 0.3em; + -webkit-border-radius: 0.3em; + + filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f4f4f4', endColorstr='#ececec'); + background: -webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#ececec)); + background: -moz-linear-gradient(top, #f4f4f4, #ececec); +} + +#gollum-editor #gollum-editor-function-bar a.function-button:hover { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + text-decoration: none; + + filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#599bdc', endColorstr='#3072b3'); + background: -webkit-gradient(linear, left top, left bottom, from(#599bdc), to(#3072b3)); + background: -moz-linear-gradient(top, #599bdc, #3072b3); +} + +#gollum-editor #gollum-editor-function-bar span.function-divider { + display: block; + float: left; + width: 0.5em; +} + + +/* @section form-fields */ + +#gollum-editor textarea#gollum-editor-body { + background: #fff; + border: 1px solid #ddd; + font-size: 1.3em; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + line-height: 1.8em; + margin: 0.5em 0; + padding: 0.5em; /* I don't really like mixing pct & em here… */ + width: 98%; + height: 20em; +} + +#gollum-editor input#gollum-editor-submit { + background-color: #f7f7f7; + border: 1px solid #d4d4d4; + color: #333; + cursor: pointer; + display: block; + font-size: 1.2em; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-weight: bold; + margin: 0; + padding: 0.4em 1em; + + text-shadow: 0 1px 0 #fff; + + filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f4f4f4', endColorstr='#ececec'); + background: -webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#ececec)); + background: -moz-linear-gradient(top, #f4f4f4, #ececec); + + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} + +#gollum-editor input#gollum-editor-submit:hover { + background: #3072b3; + border-color: #518cc6 #518cc6 #2a65a0; + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + text-decoration: none; + + filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#599bdc', endColorstr='#3072b3'); + background: -webkit-gradient(linear, left top, left bottom, from(#599bdc), to(#3072b3)); + background: -moz-linear-gradient(top, #599bdc, #3072b3); +} \ No newline at end of file diff --git a/scratch/css/gollum.css b/scratch/css/gollum.css index d22f9535..b8b14894 100644 --- a/scratch/css/gollum.css +++ b/scratch/css/gollum.css @@ -343,6 +343,18 @@ a:hover, a:visited { } +/* @section edit */ +.edit h1 { + color: #999; + font-weight: normal; +} + + .edit h1 strong { + color: #000; + font-weight: bold; + } + + /* @control minibutton */ ul.actions { diff --git a/scratch/edit.html b/scratch/edit.html index 7641ad7f..a22342ef 100644 --- a/scratch/edit.html +++ b/scratch/edit.html @@ -21,15 +21,6 @@
-
-
- -

- +
diff --git a/scratch/js/gollum-editor/gollum.editor.js b/scratch/js/gollum-editor/gollum.editor.js index 3cf77c3e..b2201342 100644 --- a/scratch/js/gollum-editor/gollum.editor.js +++ b/scratch/js/gollum-editor/gollum.editor.js @@ -60,7 +60,6 @@ // EditorHas.functionBar } // EditorHas.baseEditorMarkup - }; @@ -88,7 +87,8 @@ * @return void */ var debug = function(m) { - if ( ActiveOptions.Debug && console + if ( ActiveOptions.Debug + && typeof console != 'undefined' && typeof console.log == 'function' ) { console.log( m ); } diff --git a/scratch/js/gollum-editor/langs/markdown.js b/scratch/js/gollum-editor/langs/markdown.js index 1e113962..0f734997 100644 --- a/scratch/js/gollum-editor/langs/markdown.js +++ b/scratch/js/gollum-editor/langs/markdown.js @@ -39,12 +39,58 @@ var MarkDown = { append: "\n***\n" }, - 'function-ul' : { + 'function-ul' : { search: /(.+)([\n]?)/gi, replace: "* $1$2" + }, + + /* This looks silly but is completely valid Markdown */ + 'function-ol' : { + search: /(.+)([\n]?)/gi, + replace: "1. $1$2" + }, + + 'function-blockquote' : { + search: /(.+)([\n]?)/gi, + replace: "> $1$2" + }, + + 'function-link' : { + exec: function( txt, selText, $field ) { + var results = null; + res = $.GollumEditor.Dialog({ + title: '', + fields: [ + { + id: 'text', + name: 'Link Text', + type: 'text', + help: 'The text to display to the user.' + }, + { + id: 'href', + name: 'URL', + type: 'text', + help: 'The URL to link to.' + } + ] + }); + + if ( res['text'] && res['href'] ) { + return '[' + res['text'] + '](' + + res['href'] + ')'; + } + else + return ''; + } + }, + + 'function-image' : { + /* Stub */ } - + }; + // this is necessary for GollumEditor to pick this up jQuery.GollumEditor.defineLanguage('markdown', MarkDown); \ No newline at end of file From 6c76ba20a2fe7aacc11d563ca9a7c8836fa7ce19 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 1 Nov 2010 18:52:28 -0700 Subject: [PATCH 044/393] keep things event-driven --- scratch/js/gollum-editor/gollum.editor.js | 25 +++++++++++++++++++++- scratch/js/gollum-editor/langs/markdown.js | 19 +++++++++------- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/scratch/js/gollum-editor/gollum.editor.js b/scratch/js/gollum-editor/gollum.editor.js index b2201342..e3ee688a 100644 --- a/scratch/js/gollum-editor/gollum.editor.js +++ b/scratch/js/gollum-editor/gollum.editor.js @@ -79,6 +79,17 @@ + /** + * $.GollumEditor.Dialog + * Used in exec() to display dialogs with dynamic fields. + * + */ + $.GollumEditor.Dialog = function( argObject ) { + return Dialog.init( argObject ); + }; + + + /** * debug * Prints debug information to console.log if debug output is enabled. @@ -385,14 +396,26 @@ $field.val( fullStr.substring(0, selPos.start) + replaceText + fullStr.substring(selPos.end)); + $field[0].focus(); if ( selectNew && $field[0].setSelectionRange ) { - $field[0].focus(); $field[0].setSelectionRange( selPos.start, selPos.start + replaceText.length ); } } }; + + + + /** + * Dialog + * Used by FunctionBar & internally to display editor-specific messages, + * inputs and more. + * + */ + var Dialog = { + //TODO + }; })(jQuery); diff --git a/scratch/js/gollum-editor/langs/markdown.js b/scratch/js/gollum-editor/langs/markdown.js index 0f734997..9cc460f0 100644 --- a/scratch/js/gollum-editor/langs/markdown.js +++ b/scratch/js/gollum-editor/langs/markdown.js @@ -58,7 +58,7 @@ var MarkDown = { 'function-link' : { exec: function( txt, selText, $field ) { var results = null; - res = $.GollumEditor.Dialog({ + $.GollumEditor.Dialog({ title: '', fields: [ { @@ -73,15 +73,18 @@ var MarkDown = { type: 'text', help: 'The URL to link to.' } - ] + ], + OK: function( res ) { + if ( res['text'] && res['href'] ) { + return '[' + res['text'] + '](' + + res['href'] + ')'; + } + else + return ''; + } }); - if ( res['text'] && res['href'] ) { - return '[' + res['text'] + '](' - + res['href'] + ')'; - } - else - return ''; + } }, From 9ffa79e44e24959652cbcd3c587bd35d4576ec31 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Tue, 2 Nov 2010 16:37:46 -0700 Subject: [PATCH 045/393] Adding this before my battery dies --- scratch/js/gollum-editor/gollum.editor.js | 49 ++++++++++++++++++++++- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/scratch/js/gollum-editor/gollum.editor.js b/scratch/js/gollum-editor/gollum.editor.js index e3ee688a..9caab8b3 100644 --- a/scratch/js/gollum-editor/gollum.editor.js +++ b/scratch/js/gollum-editor/gollum.editor.js @@ -85,7 +85,7 @@ * */ $.GollumEditor.Dialog = function( argObject ) { - return Dialog.init( argObject ); + Dialog.init( argObject ); }; @@ -414,7 +414,52 @@ * */ var Dialog = { - //TODO + + markupCreated = false, + + createMarkup: function( title, body ) { + return '
' + + '

' + title + '

' + + '
' + body + '
' + '
' + + 'OK' + + '' + + 'Cancel' + + '
'; + }, + + hide: function() { + $('#gollum-editor-dialog') + }, + + init: function( argObject ) { + + }, + + show: function( title, body ) { + if ( Dialog.markupCreated ) { + $('#gollum-editor-dialog').remove(); + } + var $dialog = $( Dialog.createMarkup( title, body ) ); + $('body').append( $dialog ); + Dialog.position(); // position this thing + Dialog.attachEvents(); + $('#gollum-editor-dialog').animate({ opacity: 0 }, { + duration: 1, + complete: function() { + $('#gollum-editor-dialog').addClass('active'); + $('#gollum-editor-dialog').animate({ opacity: 100 }, { + duration: 700 + }); + } + }); + + }, + + position: function() { + + } + }; })(jQuery); From 742ca5e6dce3ce67325ff976fe25ba57b56dd02e Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 3 Nov 2010 14:51:33 -0700 Subject: [PATCH 046/393] Adding creole & asciidoc --- scratch/js/gollum-editor/gollum.editor.js | 90 ++++++++++++----- scratch/js/gollum-editor/langs/asciidoc.js | 108 +++++++++++++++++++++ scratch/js/gollum-editor/langs/creole.js | 107 ++++++++++++++++++++ scratch/js/gollum-editor/langs/markdown.js | 33 ++++++- 4 files changed, 312 insertions(+), 26 deletions(-) create mode 100644 scratch/js/gollum-editor/langs/asciidoc.js create mode 100644 scratch/js/gollum-editor/langs/creole.js diff --git a/scratch/js/gollum-editor/gollum.editor.js b/scratch/js/gollum-editor/gollum.editor.js index 9caab8b3..c1a78335 100644 --- a/scratch/js/gollum-editor/gollum.editor.js +++ b/scratch/js/gollum-editor/gollum.editor.js @@ -84,9 +84,7 @@ * Used in exec() to display dialogs with dynamic fields. * */ - $.GollumEditor.Dialog = function( argObject ) { - Dialog.init( argObject ); - }; + $.GollumEditor.Dialog = Dialog; @@ -329,7 +327,6 @@ reselect = false; } repText += definitionObject.append; - } if (repText) @@ -394,6 +391,11 @@ var selectNew = false; } + var scrollTop = null; + if ( $field[0].scrollTop ) { + scrollTop = $field[0].scrollTop; + } + $field.val( fullStr.substring(0, selPos.start) + replaceText + fullStr.substring(selPos.end)); $field[0].focus(); @@ -402,6 +404,11 @@ $field[0].setSelectionRange( selPos.start, selPos.start + replaceText.length ); } + + if ( scrollTop ) { + // this jumps sometimes in FF + $field[0].scrollTop = scrollTop; + } } }; @@ -417,7 +424,13 @@ markupCreated = false, + attachEvents: function( evtOK ) { + $('#gollum-editor-action-ok').click( Dialog.eventOK( evtOK ) ); + $('#gollum-editor-action-cancel').click( Dialog.eventCancel ); + }, + createMarkup: function( title, body ) { + Dialog.markupCreated = true; return '
' + '

' + title + '

' + '
' + body + '
' @@ -428,32 +441,63 @@ '
'; }, + eventCancel: function() { + Dialog.hide(); + }, + + eventOK: function( evtOK ) { + var results = {}; + + // pass them to evtOK if it exists (which it should) + if ( evtOK && + typeof evtOK == 'function' ) { + evtOK( results ); + } + }, + hide: function() { - $('#gollum-editor-dialog') + $('#gollum-editor-dialog').animate({ opacity: 0 }, { + duration: 700 + complete: function() { + $('#gollum-editor-dialog').removeClass('active'); + } + }); }, init: function( argObject ) { + var title = ''; + var body = ''; + // bail out if necessary + if ( !argObject || + typeof argObject != 'object' ) { + debug('Editor Dialog: Cannot init; invalid init object'); + return; + } + + if ( Dialog.markupCreated ) { + $('#gollum-editor-dialog').remove(); + } + var $dialog = $( Dialog.createMarkup( title, body ) ); + $('body').append( $dialog ); + Dialog.attachEvents( evtOK ); }, - show: function( title, body ) { - if ( Dialog.markupCreated ) { - $('#gollum-editor-dialog').remove(); - } - var $dialog = $( Dialog.createMarkup( title, body ) ); - $('body').append( $dialog ); - Dialog.position(); // position this thing - Dialog.attachEvents(); - $('#gollum-editor-dialog').animate({ opacity: 0 }, { - duration: 1, - complete: function() { - $('#gollum-editor-dialog').addClass('active'); - $('#gollum-editor-dialog').animate({ opacity: 100 }, { - duration: 700 - }); - } - }); - + show: function() { + if ( !Dialog.markupCreated ) { + debug('Dialog: No markup to show. Please use init first.') + } else { + Dialog.position(); // position this thing + $('#gollum-editor-dialog').animate({ opacity: 0 }, { + duration: 1, + complete: function() { + $('#gollum-editor-dialog').addClass('active'); + $('#gollum-editor-dialog').animate({ opacity: 100 }, { + duration: 700 + }); + } + }); + } }, position: function() { diff --git a/scratch/js/gollum-editor/langs/asciidoc.js b/scratch/js/gollum-editor/langs/asciidoc.js new file mode 100644 index 00000000..03a9c729 --- /dev/null +++ b/scratch/js/gollum-editor/langs/asciidoc.js @@ -0,0 +1,108 @@ +/** + * ASCIIDoc Language Definition + * + */ + +(function() { + +var ASCIIDoc = { + + 'function-bold' : { + search: /([^\n]+)([\n]*)/gi, + replace: "*$1*$2" + }, + + 'function-italic' : { + search: /([^\n]+)([\n]*)/gi, + replace: "_$1_$2" + }, + + 'function-code' : { + search: /([^\n]+)([\n]*)/gi, + replace: "+$1+$2" + }, + + 'function-ul' : { + search: /(.+)([\n]?)/gi, + replace: "* $1$2" + }, + + /* This looks silly but is completely valid Markdown */ + 'function-ol' : { + search: /(.+)([\n]?)/gi, + replace: ". $1$2" + }, + + 'function-blockquote' : { + search: /(.+)([\n]?)/gi, + replace: "----\n$1$2\n----\n" + }, + + 'function-link' : { + exec: function( txt, selText, $field ) { + var results = null; + $.GollumEditor.Dialog({ + title: 'Insert Link', + fields: [ + { + id: 'text', + name: 'Link Text', + type: 'text', + help: 'The text to display to the user.' + }, + { + id: 'href', + name: 'URL', + type: 'text', + help: 'The URL to link to.' + } + ], + OK: function( res ) { + if ( res['text'] && res['href'] ) { + return res['href'] + '[' + + res['text'] + ']'; + } + else + return ''; + } + }); + + + } + }, + + 'function-image' : { + exec: function( txt, selText, $field ) { + var results = null; + $.GollumEditor.Dialog.init({ + title: 'Insert Image', + fields: [ + { + id: 'url', + name: 'Image URL', + type: 'text' + }, + { + id: 'alt', + name: 'Alt Text', + type: 'text' + } + ], + OK: function( res ) { + if ( res['url'] && res['alt'] ) { + return 'image::' + res['url'] + + '[' + res['alt'] + ']'; + } else + return ''; + } + }); + } + } + +}; + + +// this is necessary for GollumEditor to pick this up +jQuery.GollumEditor.defineLanguage('markdown', ASCIIDoc); + +})(); diff --git a/scratch/js/gollum-editor/langs/creole.js b/scratch/js/gollum-editor/langs/creole.js new file mode 100644 index 00000000..3f0e7c57 --- /dev/null +++ b/scratch/js/gollum-editor/langs/creole.js @@ -0,0 +1,107 @@ +/** + * Creole Language Definition + * + */ +(function() { + +var Creole = { + + 'function-bold' : { + search: /([^\n]+)([\n]*)/gi, + replace: "**$1**$2" + }, + + 'function-italic' : { + search: /([^\n]+)([\n]*)/gi, + replace: "//$1//$2" + }, + + 'function-code' : { + search: /([^\n]+)([\n]*)/gi, + replace: "{{{$1}}}$2" + }, + + 'function-hr' : { + append: "\n\n----\n\n"; + }, + + 'function-ul' : { + search: /(.+)([\n]?)/gi, + replace: "* $1$2" + }, + + /* This looks silly but is completely valid Markdown */ + 'function-ol' : { + search: /(.+)([\n]?)/gi, + replace: "# $1$2" + }, + + 'function-link' : { + exec: function( txt, selText, $field ) { + var results = null; + $.GollumEditor.Dialog({ + title: 'Insert Link', + fields: [ + { + id: 'text', + name: 'Link Text', + type: 'text', + help: 'The text to display to the user.' + }, + { + id: 'href', + name: 'URL', + type: 'text', + help: 'The URL to link to.' + } + ], + OK: function( res ) { + if ( res['text'] && res['href'] ) { + return '[[' + res['href'] + '|' + + res['text'] + ']]'; + } + else + return ''; + } + }); + + + } + }, + + 'function-image' : { + exec: function( txt, selText, $field ) { + var results = null; + $.GollumEditor.Dialog.init({ + title: 'Insert Image', + fields: [ + { + id: 'url', + name: 'Image URL', + type: 'text' + }, + { + id: 'alt', + name: 'Alt Text', + type: 'text' + } + ], + OK: function( res ) { + if ( res['url'] && res['alt'] ) { + var h = '{{' + res['url']; + if ( res['alt'] != '' ) { + h += '|' + res['alt'] + '}}'; + } + return h; + } else + return ''; + } + }); + } + } + +}; + +jQuery.GollumEditor.defineLanguage('creole', Creole); + +})(); \ No newline at end of file diff --git a/scratch/js/gollum-editor/langs/markdown.js b/scratch/js/gollum-editor/langs/markdown.js index 9cc460f0..d2500db9 100644 --- a/scratch/js/gollum-editor/langs/markdown.js +++ b/scratch/js/gollum-editor/langs/markdown.js @@ -17,6 +17,7 @@ * } * **/ +(function() { var MarkDown = { @@ -59,7 +60,7 @@ var MarkDown = { exec: function( txt, selText, $field ) { var results = null; $.GollumEditor.Dialog({ - title: '', + title: 'Insert Link', fields: [ { id: 'text', @@ -89,11 +90,37 @@ var MarkDown = { }, 'function-image' : { - /* Stub */ + exec: function( txt, selText, $field ) { + var results = null; + $.GollumEditor.Dialog.init({ + title: 'Insert Image', + fields: [ + { + id: 'url', + name: 'Image URL', + type: 'text' + }, + { + id: 'alt', + name: 'Alt Text', + type: 'text' + } + ], + OK: function( res ) { + if ( res['url'] && res['alt'] ) { + return '![' + res['alt'] + ']' + + '(' + res['url'] + ')'; + } else + return ''; + } + }); + } } }; // this is necessary for GollumEditor to pick this up -jQuery.GollumEditor.defineLanguage('markdown', MarkDown); \ No newline at end of file +jQuery.GollumEditor.defineLanguage('markdown', MarkDown); + +})(); From 649393eb6e2ab7d6b125c9a72ec15fc1cecf0ea9 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 3 Nov 2010 14:52:02 -0700 Subject: [PATCH 047/393] Don't need this plugin anymore --- scratch/js/jquery.fieldselection.js | 83 ----------------------------- 1 file changed, 83 deletions(-) delete mode 100644 scratch/js/jquery.fieldselection.js diff --git a/scratch/js/jquery.fieldselection.js b/scratch/js/jquery.fieldselection.js deleted file mode 100644 index 92fb6562..00000000 --- a/scratch/js/jquery.fieldselection.js +++ /dev/null @@ -1,83 +0,0 @@ -/* - * jQuery plugin: fieldSelection - v0.1.0 - last change: 2006-12-16 - * (c) 2006 Alex Brem - http://blog.0xab.cd - */ - -(function() { - - var fieldSelection = { - - getSelection: function() { - - var e = this.jquery ? this[0] : this; - - return ( - - /* mozilla / dom 3.0 */ - ('selectionStart' in e && function() { - var l = e.selectionEnd - e.selectionStart; - return { start: e.selectionStart, end: e.selectionEnd, length: l, text: e.value.substr(e.selectionStart, l) }; - }) || - - /* exploder */ - (document.selection && function() { - - e.focus(); - - var r = document.selection.createRange(); - if (r == null) { - return { start: 0, end: e.value.length, length: 0 } - } - - var re = e.createTextRange(); - var rc = re.duplicate(); - re.moveToBookmark(r.getBookmark()); - rc.setEndPoint('EndToStart', re); - - return { start: rc.text.length, end: rc.text.length + r.text.length, length: r.text.length, text: r.text }; - }) || - - /* browser not supported */ - function() { - return { start: 0, end: e.value.length, length: 0 }; - } - - )(); - - }, - - replaceSelection: function() { - - var e = this.jquery ? this[0] : this; - var text = arguments[0] || ''; - - return ( - - /* mozilla / dom 3.0 */ - ('selectionStart' in e && function() { - e.value = e.value.substr(0, e.selectionStart) + text + e.value.substr(e.selectionEnd, e.value.length); - return this; - }) || - - /* exploder */ - (document.selection && function() { - e.focus(); - document.selection.createRange().text = text; - return this; - }) || - - /* browser not supported */ - function() { - e.value += text; - return this; - } - - )(); - - } - - }; - - jQuery.each(fieldSelection, function(i) { jQuery.fn[i] = this; }); - -})(); \ No newline at end of file From 8645927cbcf2e8119ffd93c57f9fa266896ca476 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 3 Nov 2010 15:00:20 -0700 Subject: [PATCH 048/393] Adding textile definition --- scratch/TODO | 15 ++- scratch/js/gollum-editor/langs/textile.js | 111 ++++++++++++++++++++++ 2 files changed, 121 insertions(+), 5 deletions(-) create mode 100644 scratch/js/gollum-editor/langs/textile.js diff --git a/scratch/TODO b/scratch/TODO index 742577df..553a390e 100644 --- a/scratch/TODO +++ b/scratch/TODO @@ -1,5 +1,10 @@ -Create Common Layout -Create Basic CSS -Create View Page -Create History Page -Create Edit Page \ No newline at end of file +Gollum Editor + - Style / Generate dialogs + - Dynamically show/hide different function bar buttons based on active language capabilities + - Def: Org + - Def: Pod + - Def: RDoc + - Def: Restructured Text + +Make function bar button sprite +Roll scratch/ design into Mustache \ No newline at end of file diff --git a/scratch/js/gollum-editor/langs/textile.js b/scratch/js/gollum-editor/langs/textile.js new file mode 100644 index 00000000..961ad247 --- /dev/null +++ b/scratch/js/gollum-editor/langs/textile.js @@ -0,0 +1,111 @@ +/** + * Textile Language Definition + */ +(function() { + +var Textile = { + + 'function-bold' : { + search: /([^\n]+)([\n]*)/gi, + replace: "*$1*$2" + }, + + 'function-italic' : { + search: /([^\n]+)([\n]*)/gi, + replace: "_$1_$2" + }, + + 'function-hr' : { + append: "\n***\n" + }, + + 'function-code' : { + search: /([^\n]+)([\n]*)/gi, + replace: "
$1
$2" + }, + + 'function-ul' : { + search: /(.+)([\n]?)/gi, + replace: "* $1$2" + }, + + /* This looks silly but is completely valid Markdown */ + 'function-ol' : { + search: /(.+)([\n]?)/gi, + replace: "# $1$2" + }, + + 'function-blockquote' : { + search: /(.+)([\n]?)/gi, + replace: "bq. $1$2" + }, + + 'function-link' : { + exec: function( txt, selText, $field ) { + var results = null; + $.GollumEditor.Dialog({ + title: 'Insert Link', + fields: [ + { + id: 'text', + name: 'Link Text', + type: 'text', + help: 'The text to display to the user.' + }, + { + id: 'href', + name: 'URL', + type: 'text', + help: 'The URL to link to.' + } + ], + OK: function( res ) { + if ( res['text'] && res['href'] ) { + return '"' + res['text'] + '":' + + res['href']; + } + else + return ''; + } + }); + + + } + }, + + 'function-image' : { + exec: function( txt, selText, $field ) { + var results = null; + $.GollumEditor.Dialog.init({ + title: 'Insert Image', + fields: [ + { + id: 'url', + name: 'Image URL', + type: 'text' + }, + { + id: 'alt', + name: 'Alt Text', + type: 'text' + } + ], + OK: function( res ) { + if ( res['url'] ) { + var h = '!' + res['url']; + if ( res['alt'] != '' ) { + h += '(' + res['alt'] + ')'; + } + h += '!'; + return h; + } + } + }); + } + } + +}; + +jQuery.GollumEditor.defineLanguage('markdown', Textile); + +})(); From 338c51e0194a32d9e1cfd385ab96ea2f8d531325 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 3 Nov 2010 15:18:52 -0700 Subject: [PATCH 049/393] Egregious bugs --- scratch/TODO | 1 - scratch/css/editor.css | 4 ++++ scratch/edit.html | 8 -------- scratch/js/gollum-editor/gollum.editor.js | 18 ++++++++++++------ scratch/js/gollum-editor/langs/asciidoc.js | 2 +- scratch/js/gollum-editor/langs/markdown.js | 2 +- scratch/js/gollum-editor/langs/textile.js | 2 +- 7 files changed, 19 insertions(+), 18 deletions(-) diff --git a/scratch/TODO b/scratch/TODO index 553a390e..4c9a20ad 100644 --- a/scratch/TODO +++ b/scratch/TODO @@ -1,6 +1,5 @@ Gollum Editor - Style / Generate dialogs - - Dynamically show/hide different function bar buttons based on active language capabilities - Def: Org - Def: Pod - Def: RDoc diff --git a/scratch/css/editor.css b/scratch/css/editor.css index 1dfeb239..b5f0d329 100644 --- a/scratch/css/editor.css +++ b/scratch/css/editor.css @@ -71,6 +71,10 @@ background: -moz-linear-gradient(top, #599bdc, #3072b3); } +#gollum-editor #gollum-editor-function-bar a.disabled { + display: none; +} + #gollum-editor #gollum-editor-function-bar span.function-divider { display: block; float: left; diff --git a/scratch/edit.html b/scratch/edit.html index 0bc8f0ed..870e1307 100644 --- a/scratch/edit.html +++ b/scratch/edit.html @@ -41,14 +41,6 @@   Link Image - -
- -
-
-
-
-

Loading content...

-
- - - - -
- -
- - +
+ +
+
+ {{>editor}} +
+
\ No newline at end of file diff --git a/lib/gollum/frontend/templates/edit.mustache b/lib/gollum/frontend/templates/edit.mustache index 0c855c62..d447aeaf 100644 --- a/lib/gollum/frontend/templates/edit.mustache +++ b/lib/gollum/frontend/templates/edit.mustache @@ -1,38 +1,16 @@ -
- « Back -

{{title}}

- -
-
- -
- -
- -
- {{>editbar}} -
- -
-
-
-

Loading content...

-
-
- - -
- -
-
-
+
+ +
+
+ {{>editor}} +
+
\ No newline at end of file diff --git a/lib/gollum/frontend/templates/editbar.mustache b/lib/gollum/frontend/templates/editbar.mustache deleted file mode 100644 index 94fd61d0..00000000 --- a/lib/gollum/frontend/templates/editbar.mustache +++ /dev/null @@ -1,1196 +0,0 @@ -
- -
-
-
Headers
- -
Images
-
Code
-
Formatting
-
Lists
-
Math
-
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Basic internal image -
[[/images/example.png]]
-
- -
Basic external image -
[[http://example.com/example.png]]
-
- -
Image with alt text -
[[/example.png|alt=Shapes]]
-
- Shapes -
Image with frame and caption -
[[/example.png|frame|alt=Shapes]]
-
-
ShapesShapes
-
Image with specific width -
[[/example.png|width=40px]]
-
- -
Image with specific height -
[[/example.png|height=40px]]
-
- -
Image aligned left -
The quick brown fox jumps.
-
 
-
[[/example.png|align=left]]
-
-
-

The quick brown fox jumps.

-

Shapes

-
-
Image aligned center -
The quick brown fox jumps.
-
 
-
[[/example.png|align=center]]
-
-
-

The quick brown fox jumps.

-

Shapes

-
-
Image aligned right -
The quick brown fox jumps.
-
 
-
[[/example.png|align=right]]
-
-
-

The quick brown fox jumps.

-

Shapes

-
-
Image floated left -
The quick brown fox jumps
-[[/example.png|float|align=left]]
-over the lazy dog and feels as
-if he were in seventh heaven.
-
-
-

The quick brown fox jumps Shapes over the lazy dog and feels as if he were in seventh heaven.

-
-
Image floated left -
The quick brown fox jumps
-[[/example.png|float|align=right]]
-over the lazy dog and feels as
-if he were in seventh heaven.
-
-
-

The quick brown fox jumps Shapes over the lazy dog and feels as if he were in seventh heaven.

-
-
-
- - - -
- - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Hilighted Code block
```ruby
-def foo
-puts 'bar'
-end
-```
def foo
-  puts 'bar'
-end
-
-
- - - - - - - - -
Language Identifiers for use in Hilighted Code Blocks
-
    -
  • ABAP: abap
  • -
  • ActionScript: as, actionscript
  • -
  • ActionScript 3: as3, actionscript3
  • -
  • Ada: ada, ada95ada2005
  • -
  • ANTLR: antlr
  • -
  • ANTLR With ActionScript Target: antlr-as, antlr-actionscript
  • -
  • ANTLR With C# Target: antlr-csharp, antlr-c#
  • -
  • ANTLR With CPP Target: antlr-cpp
  • -
  • ANTLR With Java Target: antlr-java
  • -
  • ANTLR With ObjectiveC Target: antlr-objc
  • -
  • ANTLR With Perl Target: antlr-perl
  • -
  • ANTLR With Python Target: antlr-python
  • -
  • ANTLR With Ruby Target: antlr-ruby, antlr-rb
  • -
  • ApacheConf: apacheconf, aconf, apache
  • -
  • AppleScript: applescript
  • -
  • aspx-cs: aspx-cs
  • -
  • aspx-vb: aspx-vb
  • -
  • Asymptote: asy, asymptote
  • -
  • Bash: bash, sh, ksh
  • -
  • Bash Session: console
  • -
  • Batchfile: bat
  • -
  • BBCode: bbcode
  • -
  • Befunge: befunge
  • -
  • Boo: boo
  • -
  • Brainfuck: brainfuck, bf
  • -
  • C: c
  • -
  • C#: csharp, c#
  • -
  • C++: cpp, c++
  • -
  • c-objdump: c-objdump
  • -
  • cfstatement: cfs
  • -
  • Cheetah: cheetah, spitfire
  • -
  • Clojure: clojure, clj
  • -
  • CMake: cmake
  • -
  • CoffeeScript: coffee-script, coffeescript
  • -
  • Coldufsion HTML: cfm
  • -
  • Common Lisp: common-lisp, cl
  • -
  • cpp-objdump: cpp-objdump, c++-objdumb, cxx-objdump
  • -
  • CSS: css
  • -
  • CSS+Django/Jinja: css+django, css+jinja
  • -
  • CSS+Genshi Text: css+genshitext, css+genshi
  • -
  • CSS+Mako: css+mako
  • -
  • CSS+Myghty: css+myghty
  • -
  • CSS+PHP: css+php
  • -
  • CSS+Ruby: css+erb, css+ruby
  • -
  • CSS+Smarty: css+smarty
  • -
  • Cython: cython, pyx
  • -
  • D: d
  • -
  • d-objdump: d-objdump
  • -
  • Darcs Patch: dpatch
  • -
  • Debian Control file: control
  • -
  • Debian Sourcelist: sourceslist, sources.list
  • -
  • Delphi: delphi, pas, pascal, objectpascal
  • -
  • Diff: diff, udiff
  • -
  • Django/Jinja: django, jinja
  • -
  • Dylan: dylan
  • -
  • Embedded Ragel: ragel-em
  • -
  • ERB: erb
  • -
  • Erlang: erlang
  • -
  • Erlang erl session: erl
  • -
  • Evoque: evoque
  • -
  • Felix: felix, flx
  • -
  • Fortran: fortran
  • -
  • GAS: gas
  • -
  • Genshi: genshi, kid, xml+genshi, xml+kid
  • -
  • Genshi Text: genshitext
  • -
  • Gettext Catalog: pot, po
  • -
  • Gherkin: Cucumber, cucumber, Gherkin, gherkin
  • -
  • GLSL: glsl
  • -
  • Gnuplot: gnuplot
  • -
  • Go: go
  • -
  • Groff: groff, nroff, man
  • -
  • Haml: haml, HAML
  • -
  • Haskell: haskell, hs
  • -
  • haXe: hx, haXe
  • -
  • HTML: html
  • -
  • HTML+Cheetah: html+cheetah, html+spitfire
  • -
  • HTML+Django/Jinja: html+django, html+jinja
  • -
  • HTML+Evoque: html+evoque
  • -
  • HTML+Genshi: html+genshi, html+kid
  • -
  • HTML+Mako: html+mako
  • -
  • HTML+Myghty: html+myghty
  • -
  • HTML+PHP: html+php
  • -
  • HTML+Smarty: html+smarty
  • -
  • INI: ini, cfg
  • -
-
-
    -
  • Io: io
  • -
  • IRC logs: irc
  • -
  • Java: java
  • -
  • Java Server Page: jsp
  • -
  • JavaScript: js, javascript
  • -
  • Lighttpd configuration file: lighty, lighttpd
  • -
  • Literate Haskell: lhs, literate-haskell
  • -
  • LLVM: llvm
  • -
  • Logtalk: logtalk
  • -
  • Lua: lua
  • -
  • Makefile: make, makefile, mf, bsdmake
  • -
  • Makefile: basemake
  • -
  • Mako: mako
  • -
  • Matlab: matlab, octave
  • -
  • Matlab session: matlabsession
  • -
  • MiniD: minid
  • -
  • Modelica: modelica
  • -
  • Modula-2: modula2, m2
  • -
  • MoinMoin/Trac Wiki markup: trac-wiki, moin
  • -
  • MOOCode: moocode
  • -
  • MuPAD: mupad
  • -
  • MXML: mxml
  • -
  • Myghty: myghty
  • -
  • MySQL: mysql
  • -
  • NASM: nasm
  • -
  • Newspeak: newspeak
  • -
  • Nginx configuration file: nginx
  • -
  • NumPy: numpy
  • -
  • objdump: objdump
  • -
  • Objective-C: objective-c, objectivec, obj-c, objc
  • -
  • Objective-J: objective-j, objectivej, obj-j, objj
  • -
  • OCaml: ocaml
  • -
  • Ooc: ooc
  • -
  • Perl: perl, pl
  • -
  • PHP: php, php3, php4, php5
  • -
  • POVRay: pov
  • -
  • Prolog: prolog
  • -
  • Python: python, py
  • -
  • Python 3: python3, py3
  • -
  • Python 3.0 Traceback: py3tb
  • -
  • Python console session: pycon
  • -
  • Python Traceback: pytb
  • -
  • Ragel: ragel
  • -
  • Ragel in C Host: ragel-c
  • -
  • Ragel in CPP Host: ragel-cpp
  • -
  • Ragel in D Host: ragel-d
  • -
  • Ragel in Java Host: ragel-java
  • -
  • Ragel in Objective C Host: ragel-objc
  • -
  • Ragel in Ruby Host: ragel-ruby, ragel-rb
  • -
  • Raw token data: raw
  • -
  • RConsole: rconsole, rout
  • -
  • REBOL: rebol
  • -
  • Redcode: redcode
  • -
  • reStructuredText: rst, rest, restructuredtext
  • -
  • RHTML: rhtml, html+erb, html+ruby
  • -
  • Ruby: rb, ruby
  • -
  • Ruby irb session: rbcon, irb
  • -
  • S: splus, s, r
  • -
  • Sass: sass, SASS
  • -
  • Scala: scala
  • -
  • Scheme: scheme, scm
  • -
  • Smalltalk: smalltalk, squeak
  • -
  • Smarty: smarty
  • -
  • SQL: sql
  • -
  • sqlite3con: sqlite3
  • -
  • SquidConf: squidconf, squid.conf, squid
  • -
  • Tcl: tcl
  • -
  • Tcsh: tcsh, csh
  • -
  • TeX: tex, latex
  • -
  • Text only: text
  • -
  • Vala: vala, vapi
  • -
  • VB.net: vb.net, vbnet
  • -
  • VimL: vim
  • -
  • XML: xml
  • -
  • XML+Cheetah: xml+cheetah, xml+spitfire
  • -
  • XML+Django/Jinja: xml+django, xml+jinja
  • -
  • XML+Evoque: xml+evoque
  • -
  • XML+Mako: xml+mako
  • -
  • XML+Myghty: xml+myghty
  • -
  • XML+PHP: xml+php
  • -
  • XML+Ruby: xml+erb, xml+ruby
  • -
  • XML+Smarty: xml+smarty
  • -
  • XSLT: xslt
  • -
  • YAML: yaml
  • -
-
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Bold
*bold text*
bold text
Italic
_italic text_
italic text
Monospace
+monospace text+
monospace text
Single quoted
`single quoted text'
‘single quoted text’
Double quoted
``double quoted text''
“double quoted text”
Superscript
x^2^
x2
Subscript
H~2~O
H2O
-
- - - -
- - - - - - - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Bold
**bold text**
bold text
Italic
//italic text//
italic text
Monospace
{{{monospace text}}}
monospace text
-
- - - -
- - - - - - - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Bold
**bold text**
bold text
Italic
*italic text*
italic text
Inline code
`inline code`
inline code
-
- - - -
- - - - - - - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Bold
*bold text*
bold text
Italic
/italic text/
italic text
Inline code
=inline code=
inline code
-
- - - -
- - - - - - - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Bold
B<bold text>
bold text
Italic
I<italic text>
italic text
Inline code
C<inline code>
inline code
-
- - - -
- - - - - - - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Bold
*bold text*
bold text
Italic
_italic text_
italic text
Monospace
+monospace text+
monospace text
-
- - - -
- - - - - - - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Bold
**bold text**
bold text
Italic
*italic text*
italic text
Monospace
``monospace text``
monospace text
-
- - - -
- - - - - - - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Bold
*bold text*
bold text
Italic
_italic text_
italic text
Inline code
@inline code@
inline code
-
- - - - - - - -
- - - - - - - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
First level heading
= Heading Text

Heading Text

Second level heading
== Heading Text

Heading Text

Third level heading
=== Heading Text

Heading Text

-
- - - -
- - - - - - - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
First level heading
* Heading Text

Heading Text

Second level heading
** Heading Text

Heading Text

Third level heading
*** Heading Text

Heading Text

-
- - - -
- - - - - - - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
First level heading
# Heading Text

Heading Text

Second level heading
## Heading Text

Heading Text

Third level heading
### Heading Text

Heading Text

-
- - - -
- - - - - - - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
First level heading
=head1 Heading Text

Heading Text

Second level heading
=head2 Heading Text

Heading Text

Third level heading
=head3 Heading Text

Heading Text

-
- - - -
- - - - - - - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
First level heading
Heading Text
============

Heading Text

Second level heading
Heading Text
------------

Heading Text

Third level heading
Heading Text
~~~~~~~~~~~~

Heading Text

-
- - - -
- - - - - - - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
First level heading
h1. Heading Text

Heading Text

Second level heading
h2. Heading Text

Heading Text

Third level heading
h3. Heading Text

Heading Text

-
- - - -
- - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Unordered list
* Item 1
-** Item 1.1
-* Item 2
-* Item 3
-
-
  • Item 1

    -
    • Item 1.1

  • Item 2

    -
  • Item 3

-
-
Ordered list
. Item 1
-.. Item 1.1
-. Item 2
-. Item 3
-
-
  1. Item 1

    -
    1. - Item 1.1

  2. Item 2

  3. -

    Item 3

-
-
-
- - - -
- - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Unordered list
* Item 1
-** Item 1.1
-* Item 2
-* Item 3
-
-
  • Item 1
    • Item 1.1
  • Item 2
  • -
  • Item 3
-
-
Ordered list
# Item 1
-## Item 1.1
-# Item 2
-# Item 3
-
-
  1. Item 1
    1. Item 1.1
  2. Item 2
  3. -
  4. Item 3
-
-
-
- - - -
- - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Unordered list
* Item 1
-* Item 1.1
-* Item 2
-* Item 3
-
-
  • Item 1
    • Item 1.1
  • Item 2
  • -
  • Item 3
-
-
Ordered list
1. Item 1
-1. Item 1.1
-2. Item 2
-3. Item 3
-
-
  1. Item 1
    1. Item 1.1
  2. Item 2
  3. -
  4. Item 3
-
-
-
- - - -
- - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Unordered list
- Item 1
-- Item 1.1
-- Item 2
-- Item 3
-
-
  • Item 1
    1. Item 1.1
  • Item 2
  • -
  • Item 3
-
-
Ordered list
1. Item 1
-1. Item 1.1
-2. Item 2
-3. Item 3
-
-
  1. Item 1
    1. Item 1.1
  2. Item 2
  3. -
  4. Item 3
-
-
-
- - - -
- - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Unordered list
=over 4
-
-=item * Item 1
-
-=item * Item 2
-
-=item * Item 3
-
-=back
-
-
  • Item 1
  • Item 2
  • -
  • Item 3
-
-
Ordered list
=over 4
-
-=item 1. Item 1
-
-=item 2. Item 2
-
-=item 3. Item 3
-
-=back
-
-
  1. Item 1
  2. Item 2
  3. -
  4. Item 3
-
-
-
- - - -
- - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Unordered list
* Item 1
-* Item 1.1
-* Item 2
-* Item 3
-
-
  • Item 1
    • Item 1.1
  • Item 2
  • -
  • Item 3
-
-
Ordered list
1. Item 1
-1. Item 1.1
-2. Item 2
-3. Item 3
-
-
  1. Item 1
    1. Item 1.1
  2. Item 2
  3. -
  4. Item 3
-
-
-
- - - -
- - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Unordered list
* Item 1
-
-* Item 1.1
-
-* Item 2
-
-* Item 3
-
-
  • Item 1
    • Item 1.1
  • Item 2
  • -
  • Item 3
-
-
Ordered list
1. Item 1
-
-1. Item 1.1
-
-2. Item 2
-
-3. Item 3
-
-
  1. Item 1
    1. Item 1.1
  2. Item 2
  3. -
  4. Item 3
-
-
-
- - - -
- - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Unordered list
* Item 1
-* Item 1.1
-* Item 2
-* Item 3
-
-
  • Item 1
    • Item 1.1
  • Item 2
  • -
  • Item 3
-
-
Ordered list
1. Item 1
-1. Item 1.1
-2. Item 2
-3. Item 3
-
-
  1. Item 1
    1. Item 1.1
  2. Item 2
  3. -
  4. Item 3
-
-
-
- - - - - -
- - - - - - - - - - - - - - - - -
DescriptionWhat you typeWhat you get
Block
\[ \left( \sum_{k=1}^n a_k b_k \right)^2 \]
Inline
Consider \( x^2 + y^2 \).
Consider .
-
- -
-
-
\ No newline at end of file diff --git a/lib/gollum/frontend/templates/editor.mustache b/lib/gollum/frontend/templates/editor.mustache new file mode 100644 index 00000000..8fb90183 --- /dev/null +++ b/lib/gollum/frontend/templates/editor.mustache @@ -0,0 +1,40 @@ + \ No newline at end of file diff --git a/lib/gollum/frontend/templates/history.mustache b/lib/gollum/frontend/templates/history.mustache index 678e2854..cf99c254 100644 --- a/lib/gollum/frontend/templates/history.mustache +++ b/lib/gollum/frontend/templates/history.mustache @@ -1,37 +1,62 @@ -
-
-
- « Back -
-

{{title}}

-
- - - - - {{#versions}} - - - - - - - - {{/versions}} -
- Select any two versions to -
- - - {{id7}} - - Gravatar - {{author}} - {{message}}{{date}}
- -
-
+
+ +
+ + + +
+
+ + + + {{#versions}} + + + + + + + {{/versions}} + + +
+ + + + avatar: {{author}} + {{author}} + + + {{date}}:  + {{message}} + [{{id7}}…] + + Revert to {{id7}}… +
+
+
+
+
\ No newline at end of file diff --git a/lib/gollum/frontend/templates/layout.mustache b/lib/gollum/frontend/templates/layout.mustache index b08ac18c..94c78020 100644 --- a/lib/gollum/frontend/templates/layout.mustache +++ b/lib/gollum/frontend/templates/layout.mustache @@ -1,33 +1,23 @@ - - - - {{title}} - - - - - - - - - - - + + + + + + {{title}} + + - -
-
-
- {{{yield}}} -
-
-
- +{{{yield}}} + + + + + + + + diff --git a/lib/gollum/frontend/templates/page.mustache b/lib/gollum/frontend/templates/page.mustache index c5217be0..cd0d42d9 100644 --- a/lib/gollum/frontend/templates/page.mustache +++ b/lib/gollum/frontend/templates/page.mustache @@ -1,33 +1,49 @@ -
-
-
-
-
- Home | - Edit | - -
-
-
-

{{title}}

-
+
+ +
+
+
+
{{{content}}}
- {{#has_footer}} - + {{#has_sidebar}} +
+ + {{{sidebar_content}}} +
+ {{/has_sidebar}} + {{#has_footer}} + + {{/has_footer}} +
+ +
+ -
-
- Last edited by {{author}}, {{date}} -
- Home | Edit -
-
-
diff --git a/scratch/history.html b/scratch/history.html index 9d07a5c0..d2467db0 100644 --- a/scratch/history.html +++ b/scratch/history.html @@ -28,6 +28,7 @@
+ - - - - - - - - - - - -
@@ -48,45 +49,7 @@
- - - - avatar: username - username - - - 3 days ago:  - Rewrote home page as Markdown… - [a45719f…] - - Revert to a45719f… -
- - - - avatar: username - username - - - 3 days ago:  - Rewrote home page as Markdown… - [a45719f…] - - Revert to a45719f… -
diff --git a/scratch/js/gollum.js b/scratch/js/gollum.js index e4321ce4..73b104d8 100644 --- a/scratch/js/gollum.js +++ b/scratch/js/gollum.js @@ -30,6 +30,15 @@ $(document).ready(function() { $('#wiki-history td.revert-action a').mouseenter(highlightOn); $('#wiki-history td.revert-action a').mouseleave(highlightOff); + + $('li.minibutton a.action-compare-revision').click(function( e ) { + e.preventDefault(); + $('#version-form').submit(); + }); + $('li.minibutton a.action-back-to-top').click(function( e ) { + e.preventDefault(); + $('body').scrollTop = 0; + }); }; }); From a1c6829cfc225696c0d2f68f0b57ad8639098e1b Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Thu, 4 Nov 2010 16:27:53 -0700 Subject: [PATCH 056/393] Added title field for create page --- lib/gollum/frontend/public/css/editor.css | 40 +++++++++++++++++++ .../javascript/gollum-editor/gollum.editor.js | 24 +++++++---- lib/gollum/frontend/templates/create.mustache | 7 +++- lib/gollum/frontend/templates/edit.mustache | 7 +++- lib/gollum/frontend/templates/editor.mustache | 10 +++-- lib/gollum/frontend/templates/layout.mustache | 18 +++++---- scratch/TODO | 18 ++++----- 7 files changed, 95 insertions(+), 29 deletions(-) diff --git a/lib/gollum/frontend/public/css/editor.css b/lib/gollum/frontend/public/css/editor.css index 6d99045b..df072eef 100644 --- a/lib/gollum/frontend/public/css/editor.css +++ b/lib/gollum/frontend/public/css/editor.css @@ -22,6 +22,46 @@ width: 100%; } +/* @control title */ +#gollum-editor-title-field { + display: none; +} + +#gollum-editor-title-field.active { + border-bottom: 1px solid #ddd; + display: block; + margin: 0 0 0.3em 0; + padding: 0 0 0.5em 0; +} + +#gollum-editor-title-field label { + /* JAWS should see it, but you can't */ + display: block; + height: 1px; + left: -5000px; + overflow: hidden; + position: absolute; + top: -5000px; + width: 1px; +} + +#gollum-editor-title-field input { + background: #fff; + border: 1px solid #ddd; + color: #000; + font-size: 1.3em; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-weight: bold; + line-height: 1.8em; + margin: 0; + padding: 0.5em; + width: 40%; +} + +#gollum-editor-title-field input.ph { + color: #999; +} + /* @control editor-view-tab */ #gollum-editor #gollum-editor-type-switcher { display: none; diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js index 8cfbed60..7b0906db 100644 --- a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js @@ -11,6 +11,7 @@ var DefaultOptions = { MarkupType: 'markdown', EditorMode: 'code', + NewFile: false, HasFunctionBar: true, Debug: true }; @@ -24,12 +25,21 @@ */ $.GollumEditor = function( IncomingOptions ) { - ActiveOptions = $.extend( DefaultOptions, IncomingOptions ); + ActiveOptions = $.extend( DefaultOptions, IncomingOptions ); + debug('GollumEditor loading'); - if ( EditorHas.baseEditorMarkup() ) { - // Initialise the function bar by loading proper definitions + if ( EditorHas.baseEditorMarkup() ) { + + if ( ActiveOptions.NewFile ) { + $('#gollum-editor-title-field').addClass('active'); + $('#gollum-editor-title-field input').focus(function() { + $(this)[0].select(); + }); + } + + // Initialize the function bar by loading proper definitions if ( EditorHas.functionBar() ) { var htmlSetMarkupLang = $('#gollum-editor-body').attr('data-markup-lang'); @@ -226,6 +236,10 @@ ff4Environment: function() { var ua = new RegExp(/Firefox\/4.0b/); return ( ua.test( navigator.userAgent ) ); + }, + + titleDisplayed: function() { + return ( ActiveOptions.NewFile ); } }; @@ -597,7 +611,3 @@ } // })(jQuery); - -jQuery(document).ready(function() { - $.GollumEditor(); -}); \ No newline at end of file diff --git a/lib/gollum/frontend/templates/create.mustache b/lib/gollum/frontend/templates/create.mustache index 2f88edfa..4dc7457a 100644 --- a/lib/gollum/frontend/templates/create.mustache +++ b/lib/gollum/frontend/templates/create.mustache @@ -7,4 +7,9 @@ {{>editor}}
-
\ No newline at end of file +
+ \ No newline at end of file diff --git a/lib/gollum/frontend/templates/edit.mustache b/lib/gollum/frontend/templates/edit.mustache index d447aeaf..b86a71cd 100644 --- a/lib/gollum/frontend/templates/edit.mustache +++ b/lib/gollum/frontend/templates/edit.mustache @@ -13,4 +13,9 @@ {{>editor}}
-
\ No newline at end of file + + \ No newline at end of file diff --git a/lib/gollum/frontend/templates/editor.mustache b/lib/gollum/frontend/templates/editor.mustache index 8fb90183..d4fa5321 100644 --- a/lib/gollum/frontend/templates/editor.mustache +++ b/lib/gollum/frontend/templates/editor.mustache @@ -1,5 +1,9 @@
-
+ +
+ + +
Bold @@ -32,8 +36,8 @@
-
+ data-markup-lang="markdown" name="content">{{content}} +
diff --git a/lib/gollum/frontend/templates/layout.mustache b/lib/gollum/frontend/templates/layout.mustache index 94c78020..724cc036 100644 --- a/lib/gollum/frontend/templates/layout.mustache +++ b/lib/gollum/frontend/templates/layout.mustache @@ -5,19 +5,21 @@ + + + + + + + + {{title}} {{{yield}}} - - - - - - diff --git a/scratch/TODO b/scratch/TODO index 4c9a20ad..3ca791b6 100644 --- a/scratch/TODO +++ b/scratch/TODO @@ -1,9 +1,9 @@ -Gollum Editor - - Style / Generate dialogs - - Def: Org - - Def: Pod - - Def: RDoc - - Def: Restructured Text - -Make function bar button sprite -Roll scratch/ design into Mustache \ No newline at end of file +* Editor + * Add sidebar field + * Add footer field + * Add edit summary field + * Create rest of markup lang definitions +* Create Error Page +* Create Compare Revisions Page +* Create Search Results Page +* Write Editor/Sidebar implementation notes for Rick \ No newline at end of file From a24d1ca78ec4a720b29c387e379ebad8c4a7ad8f Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Thu, 4 Nov 2010 16:47:20 -0700 Subject: [PATCH 057/393] Adding history field --- lib/gollum/frontend/public/css/editor.css | 32 +++++++++++-------- lib/gollum/frontend/templates/editor.mustache | 12 +++++-- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/lib/gollum/frontend/public/css/editor.css b/lib/gollum/frontend/public/css/editor.css index df072eef..a6833e9d 100644 --- a/lib/gollum/frontend/public/css/editor.css +++ b/lib/gollum/frontend/public/css/editor.css @@ -3,6 +3,17 @@ Wiki editor formatting */ +.jaws { + /* JAWS should see it, but you can't */ + display: block; + height: 1px; + left: -5000px; + overflow: hidden; + position: absolute; + top: -5000px; + width: 1px; +} + #gollum-editor { border: 1px solid #e4e4e4; background: #f9f9f9; @@ -22,9 +33,8 @@ width: 100%; } -/* @control title */ -#gollum-editor-title-field { - display: none; +#gollum-editor-title-field input { + font-weight: bold; } #gollum-editor-title-field.active { @@ -34,31 +44,25 @@ padding: 0 0 0.5em 0; } -#gollum-editor-title-field label { - /* JAWS should see it, but you can't */ +#gollum-editor .singleline { display: block; - height: 1px; - left: -5000px; + margin: 0 0 0.7em 0; overflow: hidden; - position: absolute; - top: -5000px; - width: 1px; } -#gollum-editor-title-field input { +#gollum-editor .singleline input { background: #fff; border: 1px solid #ddd; color: #000; font-size: 1.3em; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; - font-weight: bold; line-height: 1.8em; margin: 0; padding: 0.5em; - width: 40%; + width: 98%; } -#gollum-editor-title-field input.ph { +#gollum-editor .singleline input.ph { color: #999; } diff --git a/lib/gollum/frontend/templates/editor.mustache b/lib/gollum/frontend/templates/editor.mustache index d4fa5321..aac9180a 100644 --- a/lib/gollum/frontend/templates/editor.mustache +++ b/lib/gollum/frontend/templates/editor.mustache @@ -1,7 +1,7 @@
-
- +
+
@@ -37,7 +37,13 @@
-
+ +
+ + +
+ +
From 055e80bbee52ef7b0b0f9bfa626a42eddfd925f4 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Thu, 4 Nov 2010 17:06:46 -0700 Subject: [PATCH 058/393] Build a rudimentary placeholder engine into the editor --- lib/gollum/frontend/public/css/editor.css | 26 ++++---- .../javascript/gollum-editor/gollum.editor.js | 66 +++++++++++++++++-- 2 files changed, 75 insertions(+), 17 deletions(-) diff --git a/lib/gollum/frontend/public/css/editor.css b/lib/gollum/frontend/public/css/editor.css index a6833e9d..525f1fe0 100644 --- a/lib/gollum/frontend/public/css/editor.css +++ b/lib/gollum/frontend/public/css/editor.css @@ -33,17 +33,6 @@ width: 100%; } -#gollum-editor-title-field input { - font-weight: bold; -} - -#gollum-editor-title-field.active { - border-bottom: 1px solid #ddd; - display: block; - margin: 0 0 0.3em 0; - padding: 0 0 0.5em 0; -} - #gollum-editor .singleline { display: block; margin: 0 0 0.7em 0; @@ -66,6 +55,21 @@ color: #999; } +#gollum-editor-title-field input { + font-weight: bold; +} + +#gollum-editor-title-field.active { + border-bottom: 1px solid #ddd; + display: block; + margin: 0 0 0.3em 0; + padding: 0 0 0.5em 0; +} + +#gollum-editor-title-field input#gollum-editor-page-title.ph { + color: #000; +} + /* @control editor-view-tab */ #gollum-editor #gollum-editor-type-switcher { display: none; diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js index 7b0906db..1e027bf9 100644 --- a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js @@ -25,18 +25,18 @@ */ $.GollumEditor = function( IncomingOptions ) { - ActiveOptions = $.extend( DefaultOptions, IncomingOptions ); - + ActiveOptions = $.extend( DefaultOptions, IncomingOptions ); debug('GollumEditor loading'); if ( EditorHas.baseEditorMarkup() ) { - if ( ActiveOptions.NewFile ) { + if ( EditorHas.titleDisplayed() ) { $('#gollum-editor-title-field').addClass('active'); - $('#gollum-editor-title-field input').focus(function() { - $(this)[0].select(); - }); + } + + if ( EditorHas.editSummaryMarkup() ) { + Placeholder.add( $('#gollum-editor-edit-summary input') ) } // Initialize the function bar by loading proper definitions @@ -238,6 +238,10 @@ return ( ua.test( navigator.userAgent ) ); }, + editSummaryMarkup: function() { + return ( $('input#gollum-editor-message-field').length > 0 ); + }, + titleDisplayed: function() { return ( ActiveOptions.NewFile ); } @@ -609,5 +613,55 @@ $.GollumEditor.replaceSelection = function( repText ) { FunctionBar.replaceFieldSelection( $('#gollum-editor-body'), repText ); } + + + var Placeholder = { + + _PLACEHOLDERS : [], + + _p : function( $field ) { + + this.fieldObject = $field; + this.placeholderText = $field.val(); + var placeholderText = $field.val(); + + $field.addClass('ph'); + + $field.blur(function() { + if ( $(this).val() == '' ) { + $(this).val( placeholderText ); + $(this).addClass('ph'); + } + }); + + $field.focus(function() { + $(this).removeClass('ph'); + if ( $(this).val() == placeholderText ) { + $(this).val(''); + } else { + $(this)[0].select(); + } + }); + + }, + + add : function( $field ) { + Placeholder._PLACEHOLDERS.push( new Placeholder._p( $field ) ); + }, + + clearAll: function() { + for ( var i=0; i < Placeholder._PLACEHOLDERS.length; i++ ) { + if ( Placeholder._PLACEHOLDERS[i].fieldObject.val() == + Placeholder._PLACEHOLDERS[i].placeholderText ) { + Placeholder._PLACEHOLDERS[i].fieldObject.val(''); + } + } + }, + + exists : function() { + return ( _PLACEHOLDERS.length ); + } + + } // })(jQuery); From 740ed4362b86197562e60a32a87e96d685572ef8 Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 3 Nov 2010 16:43:39 -0700 Subject: [PATCH 059/393] only allow to have href and to have src --- lib/gollum.rb | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/gollum.rb b/lib/gollum.rb index d5a5627e..412fcbb8 100644 --- a/lib/gollum.rb +++ b/lib/gollum.rb @@ -36,29 +36,32 @@ module Gollum 'thead', 'tr', 'tt', 'u', 'ul', 'var' ], :attributes => { + 'a' => ['href'], + 'img' => ['src'], :all => ['abbr', 'accept', 'accept-charset', 'accesskey', 'action', 'align', 'alt', 'axis', 'border', 'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', - 'class', 'clear', 'cols', 'colspan', 'color', + 'clear', 'cols', 'colspan', 'color', 'compact', 'coords', 'datetime', 'dir', 'disabled', 'enctype', 'for', 'frame', - 'headers', 'height', 'href', 'hreflang', - 'hspace', 'id', 'ismap', 'label', 'lang', + 'headers', 'height', 'hreflang', + 'hspace', 'ismap', 'label', 'lang', 'longdesc', 'maxlength', 'media', 'method', 'multiple', 'name', 'nohref', 'noshade', 'nowrap', 'prompt', 'readonly', 'rel', 'rev', 'rows', 'rowspan', 'rules', 'scope', - 'selected', 'shape', 'size', 'span', 'src', + 'selected', 'shape', 'size', 'span', 'start', 'summary', 'tabindex', 'target', 'title', 'type', 'usemap', 'valign', 'value', 'vspace', 'width'] }, :protocols => { - 'a' => {'href' => ['http', 'https', 'mailto', :relative]}, - 'img' => {'href' => ['http', 'https', :relative]} + 'a' => {'href' => ['http', 'https', 'mailto', :relative]}, + 'img' => {'src' => ['http', 'https', :relative]} } } + HISTORY_SANITIZATION_OPTIONS = SANITIZATION_OPTIONS.merge( :add_attributes => { 'a' => {'rel' => 'nofollow'} From bc00c0f2ae19bc58b4974c0284eb04be9cd1d242 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 8 Nov 2010 13:57:48 -0800 Subject: [PATCH 060/393] Adding footer and sidebar fields to editor --- lib/gollum/frontend/public/css/editor.css | 106 +++++++++++++++++- .../frontend/public/images/icon-sprite.png | Bin 7876 -> 9668 bytes .../javascript/gollum-editor/gollum.editor.js | 15 ++- lib/gollum/frontend/templates/editor.mustache | 14 +++ scratch/TODO | 6 +- 5 files changed, 133 insertions(+), 8 deletions(-) diff --git a/lib/gollum/frontend/public/css/editor.css b/lib/gollum/frontend/public/css/editor.css index 525f1fe0..31a1e9ee 100644 --- a/lib/gollum/frontend/public/css/editor.css +++ b/lib/gollum/frontend/public/css/editor.css @@ -46,7 +46,7 @@ font-size: 1.3em; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 1.8em; - margin: 0; + margin: 1em 0 0.4em; padding: 0.5em; width: 98%; } @@ -55,8 +55,9 @@ color: #999; } -#gollum-editor-title-field input { +#gollum-editor-title-field input#gollum-editor-page-title { font-weight: bold; + margin-top: 0; } #gollum-editor-title-field.active { @@ -79,7 +80,7 @@ #gollum-editor #gollum-editor-function-bar { border-bottom: 1px solid #ddd; overflow: hidden; - padding: 0 0 0.5em 0; + padding: 0.6em 0 1.1em 0; display: none; } @@ -204,7 +205,7 @@ a#function-image:hover span { background-position: -324px -28px; } font-size: 1.3em; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 1.8em; - margin: 0.5em 0; + margin: 1em 0 0.4em; padding: 0.5em; /* I don't really like mixing pct & em here… */ width: 98%; height: 20em; @@ -248,6 +249,103 @@ a#function-image:hover span { background-position: -324px -28px; } background: -moz-linear-gradient(top, #599bdc, #3072b3); } +#gollum-editor .collapsed, +#gollum-editor .expanded { + border-bottom: 1px solid #ddd; + display: block; + overflow: hidden; + padding: 1em 0 0.5em; +} + +#gollum-editor #gollum-editor-body + .collapsed, +#gollum-editor #gollum-editor-body + .expanded { + border-top: 1px solid #ddd; + margin-top: 0.7em; +} + +#gollum-editor .collapsed a.button, +#gollum-editor .expanded a.button { + background: #f7f7f7; + border: 1px solid #ddd; + color: #333; + display: block; + float: left; + height: 25px; + overflow: hidden; + margin: 0.2em 0.5em 0.75em 0; + text-shadow: 0 1px 0 #fff; + width: 25px; + + border-radius: 0.3em; + -moz-border-radius: 0.3em; + -webkit-border-radius: 0.3em; + + filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f4f4f4', endColorstr='#ececec'); + background: -webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#ececec)); + background: -moz-linear-gradient(top, #f4f4f4, #ececec); +} + +#gollum-editor .collapsed h4, +#gollum-editor .expanded h4 { + font-size: 1.6em; + float: left; + margin: 0; + padding: 0.4em 0 0 0.3em; + text-shadow: 0 -1px 0 #fff; +} + +#gollum-editor .collapsed a.button:hover, +#gollum-editor .expanded h4 a.button:hover { + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + text-decoration: none; + + filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#599bdc', endColorstr='#3072b3'); + background: -webkit-gradient(linear, left top, left bottom, from(#599bdc), to(#3072b3)); + background: -moz-linear-gradient(top, #599bdc, #3072b3); +} + +#gollum-editor .collapsed a span, +#gollum-editor .expanded a span { + background-image: url(../images/icon-sprite.png); + background-position: -351px -1px; + background-repeat: no-repeat; + display: block; + height: 25px; + overflow: hidden; + text-indent: -5000px; + width: 25px; +} + +#gollum-editor .collapsed a:hover span { + background-position: -351px -28px; +} + +#gollum-editor .expanded a span { + background-position: -378px 0; +} + +#gollum-editor .expanded a:hover span { + background-position: -378px -28px; +} + +#gollum-editor .collapsed textarea { + display: none; +} + +#gollum-editor .expanded textarea { + border: 1px solid #ddd; + clear: both; + display: block; + font-size: 1.3em; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + height: 7em; + line-height: 1.8em; + margin: 0.7em 0; + padding: 0.5em; + width: 98%; +} + /* @control dialog */ diff --git a/lib/gollum/frontend/public/images/icon-sprite.png b/lib/gollum/frontend/public/images/icon-sprite.png index 6ed7ee6c0de6266ce0e5148c150ef155407b5e48..20dac3b2ff954818538d15034418ee33e42d2b1d 100644 GIT binary patch delta 8915 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 delta 7107 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 diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js index 1e027bf9..34485953 100644 --- a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js @@ -39,6 +39,15 @@ Placeholder.add( $('#gollum-editor-edit-summary input') ) } + if ( EditorHas.collapsibleInputs() ) { + $('#gollum-editor .collapsed a.button, ' + + '#gollum-editor .expanded a.button').click(function( e ) { + e.preventDefault(); + $(this).parent().toggleClass('expanded'); + $(this).parent().toggleClass('collapsed'); + }); + } + // Initialize the function bar by loading proper definitions if ( EditorHas.functionBar() ) { var htmlSetMarkupLang = @@ -214,6 +223,10 @@ $('#gollum-editor-body').length ); }, + collapsibleInputs: function() { + return $('#gollum-editor .collapsed, #gollum-editor .expanded').length; + }, + /** * EditorHas.functionBar @@ -662,6 +675,6 @@ return ( _PLACEHOLDERS.length ); } - } + }; // })(jQuery); diff --git a/lib/gollum/frontend/templates/editor.mustache b/lib/gollum/frontend/templates/editor.mustache index aac9180a..c2baa6d3 100644 --- a/lib/gollum/frontend/templates/editor.mustache +++ b/lib/gollum/frontend/templates/editor.mustache @@ -37,12 +37,26 @@ diff --git a/scratch/TODO b/scratch/TODO index 3ca791b6..c4986b97 100644 --- a/scratch/TODO +++ b/scratch/TODO @@ -1,9 +1,9 @@ * Editor * Add sidebar field * Add footer field - * Add edit summary field * Create rest of markup lang definitions * Create Error Page -* Create Compare Revisions Page +* Create Compare Revisions Page (like, when comparing the two) * Create Search Results Page -* Write Editor/Sidebar implementation notes for Rick \ No newline at end of file +* Write Editor/Sidebar implementation notes for Rick +* Write print.css \ No newline at end of file From 83e5c7fe5daf05f28f8d23a5776565cd4a6880c0 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 8 Nov 2010 14:03:39 -0800 Subject: [PATCH 061/393] Fixing sprite BG --- .../frontend/public/images/icon-sprite.png | Bin 9668 -> 8352 bytes scratch/TODO | 2 -- 2 files changed, 2 deletions(-) diff --git a/lib/gollum/frontend/public/images/icon-sprite.png b/lib/gollum/frontend/public/images/icon-sprite.png index 20dac3b2ff954818538d15034418ee33e42d2b1d..bc00ae8e73d4f79c77e20269b0cfaf35726e538d 100644 GIT binary patch delta 7524 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 CBCIF? delta 8824 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 diff --git a/scratch/TODO b/scratch/TODO index c4986b97..e58ee544 100644 --- a/scratch/TODO +++ b/scratch/TODO @@ -1,6 +1,4 @@ * Editor - * Add sidebar field - * Add footer field * Create rest of markup lang definitions * Create Error Page * Create Compare Revisions Page (like, when comparing the two) From 92aa7f2cd714b40df0aae23a7cc72816be8ad4bd Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 8 Nov 2010 15:26:58 -0700 Subject: [PATCH 062/393] Write a small message here explaining this change. (Optional) --- Home.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 Home.md diff --git a/Home.md b/Home.md new file mode 100644 index 00000000..cbf11fc4 --- /dev/null +++ b/Home.md @@ -0,0 +1 @@ +Something \ No newline at end of file From 46104dcb834b1d5f0fabb0a60d40bc8053e76207 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 8 Nov 2010 14:34:52 -0800 Subject: [PATCH 063/393] Fixing some CSS bugs --- lib/gollum/frontend/public/css/editor.css | 2 +- lib/gollum/frontend/public/css/gollum.css | 5 +++++ lib/gollum/frontend/templates/editor.mustache | 12 +++++++++++- lib/gollum/frontend/templates/page.mustache | 2 +- scratch/TODO | 1 + 5 files changed, 19 insertions(+), 3 deletions(-) diff --git a/lib/gollum/frontend/public/css/editor.css b/lib/gollum/frontend/public/css/editor.css index 31a1e9ee..b87816f7 100644 --- a/lib/gollum/frontend/public/css/editor.css +++ b/lib/gollum/frontend/public/css/editor.css @@ -171,7 +171,7 @@ a#function-image:hover span { background-position: -324px -28px; } #gollum-editor #gollum-editor-function-bar #gollum-editor-format-selector select { - background-color: #f7f7f7; + background-color: #f9f9f9; border: 1px solid transparent; float: right; diff --git a/lib/gollum/frontend/public/css/gollum.css b/lib/gollum/frontend/public/css/gollum.css index b8b14894..627d98ef 100644 --- a/lib/gollum/frontend/public/css/gollum.css +++ b/lib/gollum/frontend/public/css/gollum.css @@ -54,6 +54,11 @@ a:hover, a:visited { overflow: visible; } + #wiki-content .wrap { + height: 1%; + overflow: auto; + } + /* @section comments */ #wiki-body #inline-comment { display: none; /* todo */ diff --git a/lib/gollum/frontend/templates/editor.mustache b/lib/gollum/frontend/templates/editor.mustache index c2baa6d3..80c3599f 100644 --- a/lib/gollum/frontend/templates/editor.mustache +++ b/lib/gollum/frontend/templates/editor.mustache @@ -1,5 +1,6 @@
+
@@ -33,8 +34,17 @@ Link Image + +
+ +
-
diff --git a/lib/gollum/frontend/templates/page.mustache b/lib/gollum/frontend/templates/page.mustache index cd0d42d9..4cafd2bf 100644 --- a/lib/gollum/frontend/templates/page.mustache +++ b/lib/gollum/frontend/templates/page.mustache @@ -9,7 +9,7 @@
-
+
{{{content}}} diff --git a/scratch/TODO b/scratch/TODO index e58ee544..4fd99a9a 100644 --- a/scratch/TODO +++ b/scratch/TODO @@ -1,5 +1,6 @@ * Editor * Create rest of markup lang definitions + * Hook up format selector * Create Error Page * Create Compare Revisions Page (like, when comparing the two) * Create Search Results Page From 34b75c2a60abf073cfe97d17f5ab38e7eb9b8acc Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 8 Nov 2010 14:48:04 -0800 Subject: [PATCH 064/393] Changing display of page title depending on edit/create state --- lib/gollum/frontend/public/css/editor.css | 8 ++++++-- .../javascript/gollum-editor/gollum.editor.js | 5 +++++ lib/gollum/frontend/templates/editor.mustache | 5 +++++ lib/gollum/frontend/templates/history.mustache | 2 +- lib/gollum/frontend/views/create.rb | 8 ++++++++ lib/gollum/frontend/views/edit.rb | 17 +++++++++++++++-- lib/gollum/frontend/views/history.rb | 2 +- 7 files changed, 41 insertions(+), 6 deletions(-) diff --git a/lib/gollum/frontend/public/css/editor.css b/lib/gollum/frontend/public/css/editor.css index b87816f7..ad1862e4 100644 --- a/lib/gollum/frontend/public/css/editor.css +++ b/lib/gollum/frontend/public/css/editor.css @@ -77,13 +77,17 @@ } /* @control function-bar */ -#gollum-editor #gollum-editor-function-bar { +#gollum-editor #gollum-editor-function-bar { border-bottom: 1px solid #ddd; overflow: hidden; - padding: 0.6em 0 1.1em 0; + padding: 0 0 1.1em 0; display: none; } +#gollum-editor-title-field + #gollum-editor-function-bar { + margin-top: 0.6em; +} + #gollum-editor #gollum-editor-function-bar.active { display: block; } diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js index 34485953..613c706e 100644 --- a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js @@ -37,6 +37,11 @@ if ( EditorHas.editSummaryMarkup() ) { Placeholder.add( $('#gollum-editor-edit-summary input') ) + $('#gollum-editor form[name="gollum-editor"]').submit(function( e ) { + e.preventDefault(); + Placeholder.clearAll(); + $(this).submit(); + }); } if ( EditorHas.collapsibleInputs() ) { diff --git a/lib/gollum/frontend/templates/editor.mustache b/lib/gollum/frontend/templates/editor.mustache index 80c3599f..436a957b 100644 --- a/lib/gollum/frontend/templates/editor.mustache +++ b/lib/gollum/frontend/templates/editor.mustache @@ -1,10 +1,15 @@
+ {{#show_title}}
+ {{/show_title}} + {{#hidden_title}} + + {{/hidden_title}}
Bold diff --git a/lib/gollum/frontend/templates/history.mustache b/lib/gollum/frontend/templates/history.mustache index cf99c254..a2ef1e88 100644 --- a/lib/gollum/frontend/templates/history.mustache +++ b/lib/gollum/frontend/templates/history.mustache @@ -4,7 +4,7 @@
diff --git a/lib/gollum/frontend/views/create.rb b/lib/gollum/frontend/views/create.rb index 515d3e1d..a4cce0cf 100644 --- a/lib/gollum/frontend/views/create.rb +++ b/lib/gollum/frontend/views/create.rb @@ -8,6 +8,14 @@ module Precious def title "Create a new page" end + + def show_title + true + end + + def hidden_title + false + end def page_name @name.gsub('-', ' ') diff --git a/lib/gollum/frontend/views/edit.rb b/lib/gollum/frontend/views/edit.rb index 7165b801..15bc5727 100644 --- a/lib/gollum/frontend/views/edit.rb +++ b/lib/gollum/frontend/views/edit.rb @@ -5,9 +5,22 @@ module Precious attr_reader :page, :content - def title - "Editing #{@page.title}" + def page_name + @name.gsub('-', ' ') end + + def edit_title + false + end + + def hidden_title + true + end + + def title + "#{@page.title}" + end + end end end diff --git a/lib/gollum/frontend/views/history.rb b/lib/gollum/frontend/views/history.rb index d7628d56..d3cb143f 100644 --- a/lib/gollum/frontend/views/history.rb +++ b/lib/gollum/frontend/views/history.rb @@ -4,7 +4,7 @@ module Precious attr_reader :page, :page_num def title - "History of #{@page.title}" + @page.title end def versions From 648aade4d6122a3cd72fc0ffeec31925479c6ecb Mon Sep 17 00:00:00 2001 From: rick Date: Tue, 9 Nov 2010 12:09:13 -0800 Subject: [PATCH 065/393] update history --- HISTORY.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/HISTORY.md b/HISTORY.md index e0a684de..84605488 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -1,7 +1,10 @@ # HEAD +* Minor Enhancements + * Add `:sanitization` and `:history_sanitization` options for customizing + how `Sanitize.clean` modifies formatted wiki content. * Bug Fixes - * Use @wiki.page_class in Gollum::Markup where appropriate (#63). + * Use `@wiki.page_class` in Gollum::Markup where appropriate (#63). # 1.1.0 / 2010-10-28 From 38a5c296d7d58ddbc7ab7c4d44eeeb5ff0f5fd1d Mon Sep 17 00:00:00 2001 From: rick Date: Tue, 9 Nov 2010 12:14:00 -0800 Subject: [PATCH 066/393] update history --- HISTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/HISTORY.md b/HISTORY.md index 84605488..e2620f58 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -3,6 +3,8 @@ * Minor Enhancements * Add `:sanitization` and `:history_sanitization` options for customizing how `Sanitize.clean` modifies formatted wiki content. + * Add `--config` option for the command line, to specify a ruby file that is + run during startup. * Bug Fixes * Use `@wiki.page_class` in Gollum::Markup where appropriate (#63). From f276dd0fb645d4bf6058bd25e1b3d6c41517b8ff Mon Sep 17 00:00:00 2001 From: rick Date: Tue, 9 Nov 2010 12:17:34 -0800 Subject: [PATCH 067/393] bundler support, using gemspec --- .gitignore | 1 + Gemfile | 3 +++ Gemfile.lock | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 Gemfile create mode 100644 Gemfile.lock diff --git a/.gitignore b/.gitignore index 3253ba6e..1beac75b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ coverage pkg .DS_Store +.bundle diff --git a/Gemfile b/Gemfile new file mode 100644 index 00000000..c80ee369 --- /dev/null +++ b/Gemfile @@ -0,0 +1,3 @@ +source "http://rubygems.org" + +gemspec diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 00000000..50e67278 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,58 @@ +PATH + remote: . + specs: + gollum (1.1.0) + albino (~> 1.0) + github-markup (>= 0.4.0, < 1.0.0) + grit (~> 2.3) + mustache (>= 0.11.2, < 1.0.0) + nokogiri (~> 1.4) + sanitize (~> 1.1) + sinatra (~> 1.0) + +GEM + remote: http://rubygems.org/ + specs: + RedCloth (4.2.3) + albino (1.0) + diff-lcs (1.1.2) + github-markup (0.5.0) + grit (2.3.0) + diff-lcs (~> 1.1) + mime-types (~> 1.15) + mime-types (1.16) + mocha (0.9.9) + rake + mustache (0.11.2) + nokogiri (1.4.3.1) + org-ruby (0.5.3) + rubypants (>= 0.2.0) + rack (1.2.1) + rake (0.8.7) + rdiscount (1.6.5) + rubypants (0.2.0) + sanitize (1.2.1) + nokogiri (~> 1.4.1) + shoulda (2.11.3) + sinatra (1.1.0) + rack (~> 1.1) + tilt (~> 1.1) + tilt (1.1) + +PLATFORMS + ruby + +DEPENDENCIES + RedCloth + albino (~> 1.0) + github-markup (>= 0.4.0, < 1.0.0) + gollum! + grit (~> 2.3) + mocha + mustache (>= 0.11.2, < 1.0.0) + nokogiri (~> 1.4) + org-ruby + rdiscount + sanitize (~> 1.1) + shoulda + sinatra (~> 1.0) From ec4b93be95f0c3a695802d7f539d445afa0e786b Mon Sep 17 00:00:00 2001 From: rick Date: Tue, 9 Nov 2010 14:53:21 -0800 Subject: [PATCH 068/393] update todos --- scratch/TODO | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/scratch/TODO b/scratch/TODO index 4fd99a9a..10aef396 100644 --- a/scratch/TODO +++ b/scratch/TODO @@ -4,5 +4,26 @@ * Create Error Page * Create Compare Revisions Page (like, when comparing the two) * Create Search Results Page +* Create Revert page * Write Editor/Sidebar implementation notes for Rick -* Write print.css \ No newline at end of file +* Write print.css +* Re-add inline help for more obscure syntax rules. +* Find some clever way to represent page hierarchy. +* Inline preview? + +BUGS +* You should only be able to compare 2 revisions at once. All revisions + between them should be highlighted though. See http://img.skitch.com/20101109-jqaeqd4gef83cq2sbeseexhaa2.png + +HIERARCHY + _Footer.md + _Sidebar.md + Page1.md + projects/ + Page2.md (uses root sidebar) + _Footer.md + experiments/ + _Sidebar.md + Page3.md (uses footer.md) + +Images work the same way. You can keep similar pages in a directory with their own images. \ No newline at end of file From 404ec5935e580fc41df48f68a59fef916eac09d6 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Tue, 9 Nov 2010 18:45:42 -0800 Subject: [PATCH 069/393] Adding error page --- lib/gollum/frontend/templates/error.mustache | 13 +++---- scratch/css/gollum.css | 39 ++++++++++++++++++++ 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/lib/gollum/frontend/templates/error.mustache b/lib/gollum/frontend/templates/error.mustache index 326cd9f8..9172198b 100644 --- a/lib/gollum/frontend/templates/error.mustache +++ b/lib/gollum/frontend/templates/error.mustache @@ -1,11 +1,8 @@ -
-
-
- Home -
+
+

Error

-
+

{{message}} -

+

-
+
\ No newline at end of file diff --git a/scratch/css/gollum.css b/scratch/css/gollum.css index b8b14894..6282cf3b 100644 --- a/scratch/css/gollum.css +++ b/scratch/css/gollum.css @@ -400,4 +400,43 @@ ul.actions { filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#599bdc', endColorstr='#3072b3'); background: -webkit-gradient(linear, left top, left bottom, from(#599bdc), to(#3072b3)); background: -moz-linear-gradient(top, #599bdc, #3072b3); +} + + +/* @special error */ +#wiki-wrapper.error { + height: 1px; + position: absolute; + overflow: visible; + top: 50%; + width: 100%; +} + +#error { + background-color: #f9f9f9; + border: 1px solid #e4e4e4; + left: 50%; + overflow: hidden; + padding: 2%; + margin: -10% 0 0 -35%; + position: absolute; + width: 70%; + + border-radius: 0.5em; + -moz-border-radius: 0.5em; + -webkit-border-radius: 0.5em; +} + +#error h1 { + font-size: 3em; + line-height: normal; + margin: 0; + padding: 0; +} + +#error p { + font-size: 1.2em; + line-height: 1.6em; + margin: 1em 0 0.5em; + padding: 0; } \ No newline at end of file From fcbb54772b45a444180bdb9314ab758783f8c469 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Tue, 9 Nov 2010 19:26:50 -0800 Subject: [PATCH 070/393] Recursion problem fixed --- .../frontend/public/javascript/gollum-editor/gollum.editor.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js index 613c706e..f34e9fa0 100644 --- a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js @@ -17,7 +17,6 @@ }; var ActiveOptions = {}; - /** * $.GollumEditor * @@ -40,6 +39,8 @@ $('#gollum-editor form[name="gollum-editor"]').submit(function( e ) { e.preventDefault(); Placeholder.clearAll(); + debug('submitting'); + $(this).unbind('submit'); $(this).submit(); }); } From dff6121a5b19bd31bca1617ded7d185391e9bde1 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Tue, 9 Nov 2010 19:28:01 -0800 Subject: [PATCH 071/393] updating TODO --- scratch/TODO | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scratch/TODO b/scratch/TODO index 10aef396..147d55b4 100644 --- a/scratch/TODO +++ b/scratch/TODO @@ -1,7 +1,7 @@ * Editor * Create rest of markup lang definitions * Hook up format selector -* Create Error Page + * Get edit to work and not give me a duplicate page error * Create Compare Revisions Page (like, when comparing the two) * Create Search Results Page * Create Revert page From 6a3522c0be7caa82b46147d01415f3401cb2b57f Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Tue, 9 Nov 2010 19:28:16 -0800 Subject: [PATCH 072/393] Add error page CSS --- lib/gollum/frontend/public/css/gollum.css | 41 ++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/lib/gollum/frontend/public/css/gollum.css b/lib/gollum/frontend/public/css/gollum.css index 627d98ef..69685fa4 100644 --- a/lib/gollum/frontend/public/css/gollum.css +++ b/lib/gollum/frontend/public/css/gollum.css @@ -405,4 +405,43 @@ ul.actions { filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#599bdc', endColorstr='#3072b3'); background: -webkit-gradient(linear, left top, left bottom, from(#599bdc), to(#3072b3)); background: -moz-linear-gradient(top, #599bdc, #3072b3); -} \ No newline at end of file +} + + +/* @special error */ +#wiki-wrapper.error { + height: 1px; + position: absolute; + overflow: visible; + top: 50%; + width: 100%; +} + +#error { + background-color: #f9f9f9; + border: 1px solid #e4e4e4; + left: 50%; + overflow: hidden; + padding: 2%; + margin: -10% 0 0 -35%; + position: absolute; + width: 70%; + + border-radius: 0.5em; + -moz-border-radius: 0.5em; + -webkit-border-radius: 0.5em; +} + +#error h1 { + font-size: 3em; + line-height: normal; + margin: 0; + padding: 0; +} + +#error p { + font-size: 1.2em; + line-height: 1.6em; + margin: 1em 0 0.5em; + padding: 0; +} From d6d4e8b26aaaa3bb09601e2fcc154ed3eb8c3e94 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Tue, 9 Nov 2010 19:33:50 -0800 Subject: [PATCH 073/393] Getting edit/create flows working, changing flag names --- lib/gollum/frontend/templates/editor.mustache | 13 +++++++++---- lib/gollum/frontend/views/create.rb | 4 ++-- lib/gollum/frontend/views/edit.rb | 4 ++-- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/lib/gollum/frontend/templates/editor.mustache b/lib/gollum/frontend/templates/editor.mustache index 436a957b..ffb85119 100644 --- a/lib/gollum/frontend/templates/editor.mustache +++ b/lib/gollum/frontend/templates/editor.mustache @@ -1,15 +1,20 @@
+{{#is_create_page}} +{{/is_create_page}} +{{#is_edit_page}} + +{{/is_edit_page}}
- {{#show_title}} + {{#is_create_page}}
- {{/show_title}} - {{#hidden_title}} + {{/is_create_page}} + {{#is_edit_page}} - {{/hidden_title}} + {{/is_edit_page}}
Bold diff --git a/lib/gollum/frontend/views/create.rb b/lib/gollum/frontend/views/create.rb index a4cce0cf..073cc5af 100644 --- a/lib/gollum/frontend/views/create.rb +++ b/lib/gollum/frontend/views/create.rb @@ -9,11 +9,11 @@ module Precious "Create a new page" end - def show_title + def is_create_page true end - def hidden_title + def is_edit_page false end diff --git a/lib/gollum/frontend/views/edit.rb b/lib/gollum/frontend/views/edit.rb index 15bc5727..bf789ed0 100644 --- a/lib/gollum/frontend/views/edit.rb +++ b/lib/gollum/frontend/views/edit.rb @@ -9,11 +9,11 @@ module Precious @name.gsub('-', ' ') end - def edit_title + def is_create_page false end - def hidden_title + def is_edit_page true end From e019a3862134d81944997541f453754ab2abe145 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Tue, 9 Nov 2010 19:36:30 -0800 Subject: [PATCH 074/393] Fix CSS bug where long commit messages break checkbox padding --- lib/gollum/frontend/public/css/gollum.css | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/gollum/frontend/public/css/gollum.css b/lib/gollum/frontend/public/css/gollum.css index 69685fa4..6555013b 100644 --- a/lib/gollum/frontend/public/css/gollum.css +++ b/lib/gollum/frontend/public/css/gollum.css @@ -267,6 +267,7 @@ a:hover, a:visited { } #wiki-history table tr td.checkbox { + min-width: 2em; padding: 0.3em; } From a37272d4e5c33dbc7ee8f91829c2cc900097997e Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 10 Nov 2010 15:00:08 -0800 Subject: [PATCH 075/393] Select revision ranges instead of individual revisions --- .../frontend/public/javascript/gollum.js | 91 +++++++++++++++++-- 1 file changed, 84 insertions(+), 7 deletions(-) diff --git a/lib/gollum/frontend/public/javascript/gollum.js b/lib/gollum/frontend/public/javascript/gollum.js index e4321ce4..20f6ad06 100644 --- a/lib/gollum/frontend/public/javascript/gollum.js +++ b/lib/gollum/frontend/public/javascript/gollum.js @@ -25,7 +25,6 @@ $(document).ready(function() { } if ($('#wiki-wrapper').hasClass('history')) { - $('#wiki-history td.checkbox input').each(highlightChecked); $('#wiki-history td.checkbox input').click(highlightChecked); $('#wiki-history td.revert-action a').mouseenter(highlightOn); @@ -34,6 +33,88 @@ $(document).ready(function() { }); +var nodeSelector = { + + node1: null, + node2: null, + + selectNodeRange: function( n1, n2 ) { + if ( nodeSelector.node1 && nodeSelector.node2 ) { + $('#wiki-history td.selected').removeClass('selected'); + nodeSelector.node1.addClass('selected'); + nodeSelector.node2.addClass('selected'); + + // swap the nodes around if they went in reverse + if ( nodeSelector.nodeComesAfter( nodeSelector.node1, + nodeSelector.node2 ) ) { + var n = nodeSelector.node1; + nodeSelector.node1 = nodeSelector.node2; + nodeSelector.node2 = n; + } + + var s = true; + var $nextNode = nodeSelector.node1.next(); + while ( $nextNode ) { + $nextNode.addClass('selected'); + if ( $nextNode[0] == nodeSelector.node2[0] ) { + break; + } + $nextNode = $nextNode.next(); + } + } + }, + + nodeComesAfter: function ( n1, n2 ) { + var s = false; + $(n1).prevAll().each(function() { + if ( $(this)[0] == $(n2)[0] ) { + s = true; + } + }); + return s; + }, + + checkNode: function( nodeCheckbox ) { + var $nodeCheckbox = nodeCheckbox; + var $node = $(nodeCheckbox).parent().parent(); + // if we're unchecking + if ( !$nodeCheckbox.is(':checked') ) { + + // remove the range, since we're breaking it + $('#wiki-history tr.selected').each(function() { + if ( $(this).find('td.checkbox input').is(':checked') ) { + return; + } + $(this).removeClass('selected'); + }); + + // no longer track this + if ( $node[0] == nodeSelector.node1[0] ) { + nodeSelector.node1 = null; + if ( nodeSelector.node2 ) { + nodeSelector.node1 = nodeSelector.node2; + nodeSelector.node2 = null; + } + } else if ( $node[0] == nodeSelector.node2[0] ) { + nodeSelector.node2 = null; + } + + } else { + // not checked, get a range set up + $node.addClass('selected'); + if ( !nodeSelector.node1 ) { + nodeSelector.node1 = $node; + } else if ( !nodeSelector.node2 ) { + // okay, we don't have a node 2 but have a node1 + nodeSelector.node2 = $node; + nodeSelector.selectNodeRange( nodeSelector.node1, + nodeSelector.node2 ); + } + } + } + +}; + function highlightOn() { $(this).parent().parent().animate({ backgroundColor: '#ffffea', @@ -53,9 +134,5 @@ function highlightOff() { } function highlightChecked() { - if ($(this).is(':checked')) { - $(this).parent().parent().addClass('selected'); - } else { - $(this).parent().parent().removeClass('selected'); - } -} \ No newline at end of file + nodeSelector.checkNode($(this)); +} From c04d22675befac86e6c9045f1d438ab648c4bfd9 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 10 Nov 2010 15:06:07 -0800 Subject: [PATCH 076/393] Don't select checkboxes between ranges --- lib/gollum/frontend/public/javascript/gollum.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/gollum/frontend/public/javascript/gollum.js b/lib/gollum/frontend/public/javascript/gollum.js index 20f6ad06..ddaddcb2 100644 --- a/lib/gollum/frontend/public/javascript/gollum.js +++ b/lib/gollum/frontend/public/javascript/gollum.js @@ -109,6 +109,9 @@ var nodeSelector = { nodeSelector.node2 = $node; nodeSelector.selectNodeRange( nodeSelector.node1, nodeSelector.node2 ); + } else { + // we have two selected already + $nodeCheckbox[0].checked = false; } } } From 91313962edaa2531d6228e1163a4a82a77a72da3 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 10 Nov 2010 15:06:50 -0800 Subject: [PATCH 077/393] Updating TODO --- scratch/TODO | 5 ----- 1 file changed, 5 deletions(-) diff --git a/scratch/TODO b/scratch/TODO index 147d55b4..e35a2e2a 100644 --- a/scratch/TODO +++ b/scratch/TODO @@ -1,7 +1,6 @@ * Editor * Create rest of markup lang definitions * Hook up format selector - * Get edit to work and not give me a duplicate page error * Create Compare Revisions Page (like, when comparing the two) * Create Search Results Page * Create Revert page @@ -11,10 +10,6 @@ * Find some clever way to represent page hierarchy. * Inline preview? -BUGS -* You should only be able to compare 2 revisions at once. All revisions - between them should be highlighted though. See http://img.skitch.com/20101109-jqaeqd4gef83cq2sbeseexhaa2.png - HIERARCHY _Footer.md _Sidebar.md From 6d11f1bc85b49ce292dee518620a1d05b3c647b9 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 10 Nov 2010 17:00:17 -0800 Subject: [PATCH 078/393] Adding basic rdoc editor definition --- .../javascript/gollum-editor/langs/rdoc.js | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 lib/gollum/frontend/public/javascript/gollum-editor/langs/rdoc.js diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/langs/rdoc.js b/lib/gollum/frontend/public/javascript/gollum-editor/langs/rdoc.js new file mode 100644 index 00000000..592af965 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/gollum-editor/langs/rdoc.js @@ -0,0 +1,75 @@ +/** + * Markdown Language Definition + * + * A language definition for string manipulation operations, in this case + * for the Markdown, uh, markup language. Uses regexes for various functions + * by default. If regexes won't do and you need to do some serious + * manipulation, you can declare a function in the object instead. + * + * Code example: + * 'functionbar-id' : { + * exec: function(text, selectedText) { + * functionStuffHere(); + * }, + * search: /somesearchregex/gi, + * replace: 'replace text for RegExp.replace', + * append: "just add this where the cursor is" + * } + * +**/ +(function() { + +var RDoc = { + + 'function-bold' : { + search: /([^\n]+)([\n]*)/gi, + replace: "((*$1*))$2" + } + 'function-code' : { + search: /([^\n]+)([\n]*)/gi, + replace: "(({$1}))$2" + }, + + 'function-ul' : { + search: /(.+)([\n]?)/gi, + replace: "* $1$2" + }, + + /* This looks silly but is completely valid Markdown */ + 'function-ol' : { + exec: function( txt, selText, $field ) { + var count = 1; + // split into lines + var repText = ''; + var lines = selText.split("\n"); + var hasContent = /[\w]+/; + for ( var i = 0; i < lines.length; i++ ) { + if ( hasContent.test(lines[i]) ) { + repText += '(' + (i + 1).toString() + ') ' + + lines[i]; + } + } + $.GollumEditor.replaceSelection( repText ); + } + }, + + 'function-h1' : { + search: /(.+)([\n]?)/gi, + replace: "= $1$2" + }, + + 'function-h2' : { + search: /(.+)([\n]?)/gi, + replace: "== $1$2" + }, + + 'function-h3' : { + search: /(.+)([\n]?)/gi, + replace: "=== $1$2" + } + +}; + +jQuery.GollumEditor.defineLanguage('rdoc', RDoc); + +})(); From 24e1305fe4184d7020ccc116c276b587362b4201 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 10 Nov 2010 17:09:30 -0800 Subject: [PATCH 079/393] Basic Pod definition file --- .../javascript/gollum-editor/langs/pod.js | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js b/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js new file mode 100644 index 00000000..6db4b61a --- /dev/null +++ b/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js @@ -0,0 +1,87 @@ +/** + * Markdown Language Definition + * + * A language definition for string manipulation operations, in this case + * for the Markdown, uh, markup language. Uses regexes for various functions + * by default. If regexes won't do and you need to do some serious + * manipulation, you can declare a function in the object instead. + * + * Code example: + * 'functionbar-id' : { + * exec: function(text, selectedText) { + * functionStuffHere(); + * }, + * search: /somesearchregex/gi, + * replace: 'replace text for RegExp.replace', + * append: "just add this where the cursor is" + * } + * +**/ +(function() { + +var Pod = { + + 'function-bold' : { + search: /([^\n]+)([\n]*)/gi, + replace: "B<$1>$2" + }, + + 'function-italic' : { + search: /([^\n]+)([\n]*)/gi, + replace: "I<$1>$2" + }, + + 'function-code' : { + search: /([^\n]+)([\n]*)/gi, + replace: "C<$1>$2" + }, + + 'function-h1' : { + search: /(.+)([\n]?)/gi, + replace: "=head1 $1$2" + }, + + 'function-h2' : { + search: /(.+)([\n]?)/gi, + replace: "=head2 $1$2" + }, + + 'function-h3' : { + search: /(.+)([\n]?)/gi, + replace: "=head3 $1$2" + }, + + 'function-link' : { + exec: function( txt, selText, $field ) { + var results = null; + $.GollumEditor.Dialog.init({ + title: 'Insert Link', + fields: [ + { + id: 'text', + name: 'Link Text', + type: 'text' + }, + { + id: 'href', + name: 'URL', + type: 'text' + } + ], + OK: function( res ) { + var rep = ''; + if ( res['text'] && res['href'] ) { + rep = 'L<' + res['text'] + '|' + + res['href'] + '>'; + } + $.GollumEditor.replaceSelection( rep ); + } + }); + } + } + +}; + +jQuery.GollumEditor.defineLanguage('pod', Pod); + +})(); From a9ea80f4301164f938fbc0c0d2970c93a364efe7 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 10 Nov 2010 17:10:02 -0800 Subject: [PATCH 080/393] Commenting is wrong --- .../public/javascript/gollum-editor/langs/pod.js | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js b/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js index 6db4b61a..f4f503af 100644 --- a/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js @@ -1,20 +1,6 @@ /** - * Markdown Language Definition + * Pod Language Definition * - * A language definition for string manipulation operations, in this case - * for the Markdown, uh, markup language. Uses regexes for various functions - * by default. If regexes won't do and you need to do some serious - * manipulation, you can declare a function in the object instead. - * - * Code example: - * 'functionbar-id' : { - * exec: function(text, selectedText) { - * functionStuffHere(); - * }, - * search: /somesearchregex/gi, - * replace: 'replace text for RegExp.replace', - * append: "just add this where the cursor is" - * } * **/ (function() { From 8b0590ff8e934c22d50bfb9c6538ded6226c02ab Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 10 Nov 2010 17:26:12 -0800 Subject: [PATCH 081/393] Reintegrate MathJax --- .../public/javascript/MathJax/MathJax.js | 43 + .../javascript/MathJax/config/MMLorHTML.js | 18 + .../javascript/MathJax/config/MathJax.js | 590 +++++++++ .../javascript/MathJax/config/local/local.js | 37 + .../javascript/MathJax/docs/html/.buildinfo | 4 + .../docs/html/.doctrees/CSS-styles.doctree | Bin 0 -> 16226 bytes .../docs/html/.doctrees/HTML-snippets.doctree | Bin 0 -> 12180 bytes .../docs/html/.doctrees/api/ajax.doctree | Bin 0 -> 57048 bytes .../docs/html/.doctrees/api/callback.doctree | Bin 0 -> 70340 bytes .../html/.doctrees/api/elementjax.doctree | Bin 0 -> 35492 bytes .../docs/html/.doctrees/api/html.doctree | Bin 0 -> 39108 bytes .../docs/html/.doctrees/api/hub.doctree | Bin 0 -> 119658 bytes .../docs/html/.doctrees/api/index.doctree | Bin 0 -> 8245 bytes .../docs/html/.doctrees/api/inputjax.doctree | Bin 0 -> 27930 bytes .../docs/html/.doctrees/api/jax.doctree | Bin 0 -> 48210 bytes .../docs/html/.doctrees/api/message.doctree | Bin 0 -> 23093 bytes .../docs/html/.doctrees/api/object.doctree | Bin 0 -> 49195 bytes .../docs/html/.doctrees/api/outputjax.doctree | Bin 0 -> 30901 bytes .../docs/html/.doctrees/api/queue.doctree | Bin 0 -> 29531 bytes .../docs/html/.doctrees/api/signal.doctree | Bin 0 -> 51074 bytes .../docs/html/.doctrees/api/variable.doctree | Bin 0 -> 20553 bytes .../docs/html/.doctrees/callbacks.doctree | Bin 0 -> 45245 bytes .../docs/html/.doctrees/community.doctree | Bin 0 -> 15725 bytes .../docs/html/.doctrees/configuration.doctree | Bin 0 -> 75240 bytes .../docs/html/.doctrees/dynamic.doctree | Bin 0 -> 34944 bytes .../docs/html/.doctrees/environment.pickle | Bin 0 -> 109476 bytes .../docs/html/.doctrees/glossary.doctree | Bin 0 -> 23948 bytes .../MathJax/docs/html/.doctrees/index.doctree | Bin 0 -> 8864 bytes .../docs/html/.doctrees/installation.doctree | Bin 0 -> 36590 bytes .../docs/html/.doctrees/jsMath.doctree | Bin 0 -> 10964 bytes .../docs/html/.doctrees/mathjax.doctree | Bin 0 -> 8235 bytes .../docs/html/.doctrees/mathml.doctree | Bin 0 -> 24400 bytes .../MathJax/docs/html/.doctrees/model.doctree | Bin 0 -> 41473 bytes .../.doctrees/options/FontWarnings.doctree | Bin 0 -> 33488 bytes .../html/.doctrees/options/HTML-CSS.doctree | Bin 0 -> 32886 bytes .../html/.doctrees/options/MMLorHTML.doctree | Bin 0 -> 11434 bytes .../html/.doctrees/options/MathML.doctree | Bin 0 -> 8018 bytes .../html/.doctrees/options/MathMenu.doctree | Bin 0 -> 20894 bytes .../html/.doctrees/options/MathZoom.doctree | Bin 0 -> 11292 bytes .../html/.doctrees/options/NativeMML.doctree | Bin 0 -> 15786 bytes .../docs/html/.doctrees/options/TeX.doctree | Bin 0 -> 16981 bytes .../docs/html/.doctrees/options/hub.doctree | Bin 0 -> 55150 bytes .../html/.doctrees/options/jsMath2jax.doctree | Bin 0 -> 13213 bytes .../html/.doctrees/options/mml2jax.doctree | Bin 0 -> 13591 bytes .../html/.doctrees/options/tex2jax.doctree | Bin 0 -> 33731 bytes .../docs/html/.doctrees/output.doctree | Bin 0 -> 28591 bytes .../html/.doctrees/platforms/index.doctree | Bin 0 -> 19490 bytes .../.doctrees/platforms/movable-type.doctree | Bin 0 -> 11163 bytes .../.doctrees/platforms/wordpress.doctree | Bin 0 -> 13097 bytes .../docs/html/.doctrees/queues.doctree | Bin 0 -> 48460 bytes .../docs/html/.doctrees/signals.doctree | Bin 0 -> 33982 bytes .../MathJax/docs/html/.doctrees/start.doctree | Bin 0 -> 63120 bytes .../docs/html/.doctrees/startup.doctree | Bin 0 -> 50199 bytes .../docs/html/.doctrees/synchronize.doctree | Bin 0 -> 15236 bytes .../MathJax/docs/html/.doctrees/tex.doctree | Bin 0 -> 74743 bytes .../docs/html/.doctrees/typeset.doctree | Bin 0 -> 40258 bytes .../MathJax/docs/html/CSS-styles.html | 173 +++ .../MathJax/docs/html/HTML-snippets.html | 170 +++ .../MathJax/docs/html/_images/badge.gif | Bin 0 -> 3723 bytes .../MathJax/docs/html/_images/mt_head.png | Bin 0 -> 29053 bytes .../MathJax/docs/html/_images/mt_menu.png | Bin 0 -> 15145 bytes .../docs/html/_images/mt_templates.png | Bin 0 -> 15548 bytes .../MathJax/docs/html/_images/wp_menu.png | Bin 0 -> 7278 bytes .../docs/html/_images/wp_templates.png | Bin 0 -> 7053 bytes .../MathJax/docs/html/_sources/CSS-styles.txt | 79 ++ .../docs/html/_sources/HTML-snippets.txt | 83 ++ .../MathJax/docs/html/_sources/api/ajax.txt | 196 +++ .../docs/html/_sources/api/callback.txt | 259 ++++ .../docs/html/_sources/api/elementjax.txt | 122 ++ .../MathJax/docs/html/_sources/api/html.txt | 122 ++ .../MathJax/docs/html/_sources/api/hub.txt | 330 +++++ .../MathJax/docs/html/_sources/api/index.txt | 44 + .../docs/html/_sources/api/inputjax.txt | 86 ++ .../MathJax/docs/html/_sources/api/jax.txt | 148 +++ .../docs/html/_sources/api/message.txt | 86 ++ .../MathJax/docs/html/_sources/api/object.txt | 210 +++ .../docs/html/_sources/api/outputjax.txt | 100 ++ .../MathJax/docs/html/_sources/api/queue.txt | 99 ++ .../MathJax/docs/html/_sources/api/signal.txt | 154 +++ .../docs/html/_sources/api/variable.txt | 83 ++ .../MathJax/docs/html/_sources/callbacks.txt | 228 ++++ .../MathJax/docs/html/_sources/community.txt | 60 + .../docs/html/_sources/configuration.txt | 375 ++++++ .../MathJax/docs/html/_sources/dynamic.txt | 181 +++ .../MathJax/docs/html/_sources/glossary.txt | 75 ++ .../MathJax/docs/html/_sources/index.txt | 71 + .../docs/html/_sources/installation.txt | 184 +++ .../MathJax/docs/html/_sources/jsMath.txt | 31 + .../MathJax/docs/html/_sources/mathjax.txt | 36 + .../MathJax/docs/html/_sources/mathml.txt | 97 ++ .../MathJax/docs/html/_sources/model.txt | 224 ++++ .../html/_sources/options/FontWarnings.txt | 140 ++ .../docs/html/_sources/options/HTML-CSS.txt | 119 ++ .../docs/html/_sources/options/MMLorHTML.txt | 42 + .../docs/html/_sources/options/MathML.txt | 27 + .../docs/html/_sources/options/MathMenu.txt | 79 ++ .../docs/html/_sources/options/MathZoom.txt | 42 + .../docs/html/_sources/options/NativeMML.txt | 61 + .../docs/html/_sources/options/TeX.txt | 67 + .../docs/html/_sources/options/hub.txt | 209 +++ .../docs/html/_sources/options/jsMath2jax.txt | 53 + .../docs/html/_sources/options/mml2jax.txt | 53 + .../docs/html/_sources/options/tex2jax.txt | 137 ++ .../MathJax/docs/html/_sources/output.txt | 126 ++ .../docs/html/_sources/platforms/index.txt | 65 + .../html/_sources/platforms/movable-type.txt | 41 + .../html/_sources/platforms/wordpress.txt | 42 + .../MathJax/docs/html/_sources/queues.txt | 254 ++++ .../MathJax/docs/html/_sources/signals.txt | 161 +++ .../MathJax/docs/html/_sources/start.txt | 314 +++++ .../MathJax/docs/html/_sources/startup.txt | 152 +++ .../docs/html/_sources/synchronize.txt | 65 + .../MathJax/docs/html/_sources/tex.txt | 1090 ++++++++++++++++ .../MathJax/docs/html/_sources/typeset.txt | 229 ++++ .../MathJax/docs/html/_static/basic.css | 509 ++++++++ .../MathJax/docs/html/_static/doctools.js | 247 ++++ .../MathJax/docs/html/_static/file.png | Bin 0 -> 392 bytes .../MathJax/docs/html/_static/jquery.js | 154 +++ .../docs/html/_static/mathjax_mathml.user.js | 22 + .../html/_static/mathjax_wikipedia.user.js | 35 + .../MathJax/docs/html/_static/minus.png | Bin 0 -> 199 bytes .../MathJax/docs/html/_static/mj.css | 223 ++++ .../MathJax/docs/html/_static/plus.png | Bin 0 -> 199 bytes .../MathJax/docs/html/_static/pygments.css | 61 + .../MathJax/docs/html/_static/searchtools.js | 505 ++++++++ .../MathJax/docs/html/_static/underscore.js | 16 + .../MathJax/docs/html/api/ajax.html | 406 ++++++ .../MathJax/docs/html/api/callback.html | 435 +++++++ .../MathJax/docs/html/api/elementjax.html | 283 ++++ .../MathJax/docs/html/api/html.html | 292 +++++ .../javascript/MathJax/docs/html/api/hub.html | 674 ++++++++++ .../MathJax/docs/html/api/index.html | 144 +++ .../MathJax/docs/html/api/inputjax.html | 221 ++++ .../javascript/MathJax/docs/html/api/jax.html | 319 +++++ .../MathJax/docs/html/api/message.html | 224 ++++ .../MathJax/docs/html/api/object.html | 356 +++++ .../MathJax/docs/html/api/outputjax.html | 246 ++++ .../MathJax/docs/html/api/queue.html | 247 ++++ .../MathJax/docs/html/api/signal.html | 334 +++++ .../MathJax/docs/html/api/variable.html | 220 ++++ .../MathJax/docs/html/callbacks.html | 305 +++++ .../MathJax/docs/html/community.html | 155 +++ .../MathJax/docs/html/configuration.html | 434 +++++++ .../javascript/MathJax/docs/html/dynamic.html | 274 ++++ .../MathJax/docs/html/genindex.html | 295 +++++ .../MathJax/docs/html/glossary.html | 160 +++ .../javascript/MathJax/docs/html/index.html | 177 +++ .../MathJax/docs/html/installation.html | 262 ++++ .../javascript/MathJax/docs/html/jsMath.html | 128 ++ .../javascript/MathJax/docs/html/mathjax.html | 137 ++ .../javascript/MathJax/docs/html/mathml.html | 194 +++ .../javascript/MathJax/docs/html/model.html | 305 +++++ .../javascript/MathJax/docs/html/objects.inv | Bin 0 -> 1820 bytes .../docs/html/options/FontWarnings.html | 264 ++++ .../MathJax/docs/html/options/HTML-CSS.html | 241 ++++ .../MathJax/docs/html/options/MMLorHTML.html | 143 ++ .../MathJax/docs/html/options/MathML.html | 132 ++ .../MathJax/docs/html/options/MathMenu.html | 194 +++ .../MathJax/docs/html/options/MathZoom.html | 147 +++ .../MathJax/docs/html/options/NativeMML.html | 171 +++ .../MathJax/docs/html/options/TeX.html | 175 +++ .../MathJax/docs/html/options/hub.html | 342 +++++ .../MathJax/docs/html/options/jsMath2jax.html | 154 +++ .../MathJax/docs/html/options/mml2jax.html | 154 +++ .../MathJax/docs/html/options/tex2jax.html | 249 ++++ .../javascript/MathJax/docs/html/output.html | 218 ++++ .../MathJax/docs/html/platforms/index.html | 168 +++ .../docs/html/platforms/movable-type.html | 145 +++ .../docs/html/platforms/wordpress.html | 146 +++ .../javascript/MathJax/docs/html/queues.html | 334 +++++ .../javascript/MathJax/docs/html/search.html | 95 ++ .../MathJax/docs/html/searchindex.js | 1 + .../javascript/MathJax/docs/html/signals.html | 257 ++++ .../javascript/MathJax/docs/html/start.html | 374 ++++++ .../javascript/MathJax/docs/html/startup.html | 239 ++++ .../MathJax/docs/html/synchronize.html | 161 +++ .../javascript/MathJax/docs/html/tex.html | 1152 +++++++++++++++++ .../javascript/MathJax/docs/html/typeset.html | 318 +++++ .../MathJax/docs/rst/CSS-styles.rst | 79 ++ .../MathJax/docs/rst/HTML-snippets.rst | 83 ++ .../docs/rst/_static/mathjax_mathml.user.js | 22 + .../rst/_static/mathjax_wikipedia.user.js | 35 + .../javascript/MathJax/docs/rst/api/ajax.rst | 196 +++ .../MathJax/docs/rst/api/callback.rst | 259 ++++ .../MathJax/docs/rst/api/elementjax.rst | 122 ++ .../javascript/MathJax/docs/rst/api/html.rst | 122 ++ .../javascript/MathJax/docs/rst/api/hub.rst | 330 +++++ .../javascript/MathJax/docs/rst/api/index.rst | 44 + .../MathJax/docs/rst/api/inputjax.rst | 86 ++ .../javascript/MathJax/docs/rst/api/jax.rst | 148 +++ .../MathJax/docs/rst/api/message.rst | 86 ++ .../MathJax/docs/rst/api/object.rst | 210 +++ .../MathJax/docs/rst/api/outputjax.rst | 100 ++ .../javascript/MathJax/docs/rst/api/queue.rst | 99 ++ .../MathJax/docs/rst/api/signal.rst | 154 +++ .../MathJax/docs/rst/api/variable.rst | 83 ++ .../javascript/MathJax/docs/rst/callbacks.rst | 228 ++++ .../javascript/MathJax/docs/rst/community.rst | 60 + .../javascript/MathJax/docs/rst/conf.py | 198 +++ .../MathJax/docs/rst/configuration.rst | 375 ++++++ .../javascript/MathJax/docs/rst/dynamic.rst | 181 +++ .../javascript/MathJax/docs/rst/glossary.rst | 75 ++ .../MathJax/docs/rst/images/mt_head.png | Bin 0 -> 29053 bytes .../MathJax/docs/rst/images/mt_menu.png | Bin 0 -> 15145 bytes .../MathJax/docs/rst/images/mt_templates.png | Bin 0 -> 15548 bytes .../MathJax/docs/rst/images/wp_menu.png | Bin 0 -> 7278 bytes .../MathJax/docs/rst/images/wp_templates.png | Bin 0 -> 7053 bytes .../javascript/MathJax/docs/rst/index.rst | 71 + .../MathJax/docs/rst/installation.rst | 184 +++ .../javascript/MathJax/docs/rst/jsMath.rst | 31 + .../javascript/MathJax/docs/rst/mathjax.rst | 36 + .../javascript/MathJax/docs/rst/mathml.rst | 97 ++ .../MathJax/docs/rst/mjtheme/static/mj.css_t | 256 ++++ .../MathJax/docs/rst/mjtheme/theme.conf | 30 + .../javascript/MathJax/docs/rst/model.rst | 224 ++++ .../MathJax/docs/rst/options/FontWarnings.rst | 140 ++ .../MathJax/docs/rst/options/HTML-CSS.rst | 119 ++ .../MathJax/docs/rst/options/MMLorHTML.rst | 42 + .../MathJax/docs/rst/options/MathML.rst | 27 + .../MathJax/docs/rst/options/MathMenu.rst | 79 ++ .../MathJax/docs/rst/options/MathZoom.rst | 42 + .../MathJax/docs/rst/options/NativeMML.rst | 61 + .../MathJax/docs/rst/options/TeX.rst | 67 + .../MathJax/docs/rst/options/hub.rst | 209 +++ .../MathJax/docs/rst/options/jsMath2jax.rst | 53 + .../MathJax/docs/rst/options/mml2jax.rst | 53 + .../MathJax/docs/rst/options/tex2jax.rst | 137 ++ .../javascript/MathJax/docs/rst/output.rst | 126 ++ .../MathJax/docs/rst/platforms/index.rst | 65 + .../docs/rst/platforms/movable-type.rst | 41 + .../MathJax/docs/rst/platforms/wordpress.rst | 42 + .../javascript/MathJax/docs/rst/queues.rst | 254 ++++ .../javascript/MathJax/docs/rst/signals.rst | 161 +++ .../javascript/MathJax/docs/rst/start.rst | 314 +++++ .../javascript/MathJax/docs/rst/startup.rst | 152 +++ .../MathJax/docs/rst/synchronize.rst | 65 + .../javascript/MathJax/docs/rst/tex.rst | 1090 ++++++++++++++++ .../javascript/MathJax/docs/rst/typeset.rst | 229 ++++ .../MathJax/extensions/FontWarnings.js | 18 + .../javascript/MathJax/extensions/MathMenu.js | 18 + .../javascript/MathJax/extensions/MathZoom.js | 18 + .../MathJax/extensions/TeX/AMSmath.js | 18 + .../MathJax/extensions/TeX/AMSsymbols.js | 18 + .../MathJax/extensions/TeX/autobold.js | 18 + .../MathJax/extensions/TeX/boldsymbol.js | 18 + .../MathJax/extensions/TeX/mathchoice.js | 18 + .../MathJax/extensions/TeX/newcommand.js | 18 + .../MathJax/extensions/TeX/noErrors.js | 18 + .../MathJax/extensions/TeX/noUndefined.js | 18 + .../MathJax/extensions/TeX/unicode.js | 18 + .../javascript/MathJax/extensions/TeX/verb.js | 18 + .../MathJax/extensions/jsMath2jax.js | 18 + .../javascript/MathJax/extensions/mml2jax.js | 18 + .../javascript/MathJax/extensions/tex2jax.js | 18 + .../javascript/MathJax/extensions/toMathML.js | 18 + .../javascript/MathJax/jax/element/mml/jax.js | 19 + .../MathJax/jax/element/mml/optable/Arrows.js | 18 + .../jax/element/mml/optable/BasicLatin.js | 18 + .../element/mml/optable/CombDiacritMarks.js | 18 + .../mml/optable/CombDiactForSymbols.js | 18 + .../jax/element/mml/optable/Dingbats.js | 18 + .../element/mml/optable/GeneralPunctuation.js | 18 + .../element/mml/optable/GeometricShapes.js | 18 + .../jax/element/mml/optable/GreekAndCoptic.js | 18 + .../element/mml/optable/Latin1Supplement.js | 18 + .../element/mml/optable/LetterlikeSymbols.js | 18 + .../jax/element/mml/optable/MathOperators.js | 18 + .../element/mml/optable/MiscMathSymbolsA.js | 18 + .../element/mml/optable/MiscMathSymbolsB.js | 18 + .../jax/element/mml/optable/MiscTechnical.js | 18 + .../element/mml/optable/SpacingModLetters.js | 18 + .../element/mml/optable/SuppMathOperators.js | 18 + .../mml/optable/SupplementalArrowsB.js | 18 + .../MathJax/jax/input/MathML/config.js | 18 + .../MathJax/jax/input/MathML/entities/a.js | 18 + .../MathJax/jax/input/MathML/entities/b.js | 18 + .../MathJax/jax/input/MathML/entities/c.js | 18 + .../MathJax/jax/input/MathML/entities/d.js | 18 + .../MathJax/jax/input/MathML/entities/e.js | 18 + .../MathJax/jax/input/MathML/entities/f.js | 18 + .../MathJax/jax/input/MathML/entities/fr.js | 18 + .../MathJax/jax/input/MathML/entities/g.js | 18 + .../MathJax/jax/input/MathML/entities/h.js | 18 + .../MathJax/jax/input/MathML/entities/i.js | 18 + .../MathJax/jax/input/MathML/entities/j.js | 18 + .../MathJax/jax/input/MathML/entities/k.js | 18 + .../MathJax/jax/input/MathML/entities/l.js | 18 + .../MathJax/jax/input/MathML/entities/m.js | 18 + .../MathJax/jax/input/MathML/entities/n.js | 18 + .../MathJax/jax/input/MathML/entities/o.js | 18 + .../MathJax/jax/input/MathML/entities/opf.js | 18 + .../MathJax/jax/input/MathML/entities/p.js | 18 + .../MathJax/jax/input/MathML/entities/q.js | 18 + .../MathJax/jax/input/MathML/entities/r.js | 18 + .../MathJax/jax/input/MathML/entities/s.js | 18 + .../MathJax/jax/input/MathML/entities/scr.js | 18 + .../MathJax/jax/input/MathML/entities/t.js | 18 + .../MathJax/jax/input/MathML/entities/u.js | 18 + .../MathJax/jax/input/MathML/entities/v.js | 18 + .../MathJax/jax/input/MathML/entities/w.js | 18 + .../MathJax/jax/input/MathML/entities/x.js | 18 + .../MathJax/jax/input/MathML/entities/y.js | 18 + .../MathJax/jax/input/MathML/entities/z.js | 18 + .../MathJax/jax/input/MathML/jax.js | 18 + .../MathJax/jax/input/TeX/config.js | 18 + .../javascript/MathJax/jax/input/TeX/jax.js | 19 + .../jax/output/HTML-CSS/autoload/maction.js | 18 + .../jax/output/HTML-CSS/autoload/menclose.js | 18 + .../jax/output/HTML-CSS/autoload/mglyph.js | 18 + .../output/HTML-CSS/autoload/mmultiscripts.js | 18 + .../jax/output/HTML-CSS/autoload/ms.js | 18 + .../jax/output/HTML-CSS/autoload/mtable.js | 18 + .../jax/output/HTML-CSS/autoload/multiline.js | 18 + .../MathJax/jax/output/HTML-CSS/config.js | 18 + .../STIX/General/Bold/AlphaPresentForms.js | 18 + .../fonts/STIX/General/Bold/Arrows.js | 18 + .../fonts/STIX/General/Bold/BoldFraktur.js | 18 + .../fonts/STIX/General/Bold/BoxDrawing.js | 18 + .../STIX/General/Bold/CombDiacritMarks.js | 18 + .../STIX/General/Bold/CombDiactForSymbols.js | 18 + .../STIX/General/Bold/ControlPictures.js | 18 + .../STIX/General/Bold/CurrencySymbols.js | 18 + .../fonts/STIX/General/Bold/Cyrillic.js | 18 + .../STIX/General/Bold/EnclosedAlphanum.js | 18 + .../STIX/General/Bold/GeneralPunctuation.js | 18 + .../STIX/General/Bold/GeometricShapes.js | 18 + .../fonts/STIX/General/Bold/GreekAndCoptic.js | 18 + .../fonts/STIX/General/Bold/GreekBold.js | 18 + .../fonts/STIX/General/Bold/GreekSSBold.js | 18 + .../fonts/STIX/General/Bold/IPAExtensions.js | 18 + .../STIX/General/Bold/Latin1Supplement.js | 18 + .../fonts/STIX/General/Bold/LatinExtendedA.js | 18 + .../General/Bold/LatinExtendedAdditional.js | 18 + .../fonts/STIX/General/Bold/LatinExtendedB.js | 18 + .../STIX/General/Bold/LetterlikeSymbols.js | 18 + .../HTML-CSS/fonts/STIX/General/Bold/Main.js | 18 + .../fonts/STIX/General/Bold/MathBold.js | 18 + .../fonts/STIX/General/Bold/MathOperators.js | 18 + .../fonts/STIX/General/Bold/MathSSBold.js | 18 + .../STIX/General/Bold/MiscMathSymbolsA.js | 18 + .../STIX/General/Bold/MiscMathSymbolsB.js | 18 + .../fonts/STIX/General/Bold/MiscSymbols.js | 18 + .../fonts/STIX/General/Bold/MiscTechnical.js | 18 + .../fonts/STIX/General/Bold/NumberForms.js | 18 + .../STIX/General/Bold/PhoneticExtensions.js | 18 + .../STIX/General/Bold/SpacingModLetters.js | 18 + .../STIX/General/Bold/SuperAndSubscripts.js | 18 + .../STIX/General/Bold/SuppMathOperators.js | 18 + .../General/BoldItalic/AlphaPresentForms.js | 18 + .../STIX/General/BoldItalic/BasicLatin.js | 18 + .../STIX/General/BoldItalic/BoxDrawing.js | 18 + .../General/BoldItalic/CombDiactForSymbols.js | 18 + .../General/BoldItalic/ControlPictures.js | 18 + .../General/BoldItalic/CurrencySymbols.js | 18 + .../fonts/STIX/General/BoldItalic/Cyrillic.js | 18 + .../General/BoldItalic/EnclosedAlphanum.js | 18 + .../General/BoldItalic/GeneralPunctuation.js | 18 + .../STIX/General/BoldItalic/GreekAndCoptic.js | 18 + .../General/BoldItalic/GreekBoldItalic.js | 18 + .../General/BoldItalic/GreekSSBoldItalic.js | 18 + .../STIX/General/BoldItalic/IPAExtensions.js | 18 + .../General/BoldItalic/Latin1Supplement.js | 18 + .../STIX/General/BoldItalic/LatinExtendedA.js | 18 + .../BoldItalic/LatinExtendedAdditional.js | 18 + .../STIX/General/BoldItalic/LatinExtendedB.js | 18 + .../General/BoldItalic/LetterlikeSymbols.js | 18 + .../fonts/STIX/General/BoldItalic/Main.js | 18 + .../STIX/General/BoldItalic/MathBoldItalic.js | 18 + .../STIX/General/BoldItalic/MathBoldScript.js | 18 + .../STIX/General/BoldItalic/MathOperators.js | 18 + .../General/BoldItalic/MathSSItalicBold.js | 18 + .../General/BoldItalic/SpacingModLetters.js | 18 + .../STIX/General/Italic/AlphaPresentForms.js | 18 + .../fonts/STIX/General/Italic/BoxDrawing.js | 18 + .../General/Italic/CombDiactForSymbols.js | 18 + .../STIX/General/Italic/ControlPictures.js | 18 + .../STIX/General/Italic/CurrencySymbols.js | 18 + .../fonts/STIX/General/Italic/Cyrillic.js | 18 + .../STIX/General/Italic/EnclosedAlphanum.js | 18 + .../STIX/General/Italic/GeneralPunctuation.js | 18 + .../STIX/General/Italic/GreekAndCoptic.js | 18 + .../fonts/STIX/General/Italic/GreekItalic.js | 18 + .../STIX/General/Italic/IPAExtensions.js | 18 + .../STIX/General/Italic/Latin1Supplement.js | 18 + .../STIX/General/Italic/LatinExtendedA.js | 18 + .../General/Italic/LatinExtendedAdditional.js | 18 + .../STIX/General/Italic/LatinExtendedB.js | 18 + .../STIX/General/Italic/LetterlikeSymbols.js | 18 + .../fonts/STIX/General/Italic/Main.js | 18 + .../fonts/STIX/General/Italic/MathItalic.js | 18 + .../STIX/General/Italic/MathOperators.js | 18 + .../fonts/STIX/General/Italic/MathSSItalic.js | 18 + .../fonts/STIX/General/Italic/MathScript.js | 18 + .../STIX/General/Italic/SpacingModLetters.js | 18 + .../HTML-CSS/fonts/STIX/General/Italic/ij.js | 18 + .../STIX/General/Regular/AlphaPresentForms.js | 18 + .../fonts/STIX/General/Regular/Arrows.js | 18 + .../fonts/STIX/General/Regular/BBBold.js | 18 + .../STIX/General/Regular/BlockElements.js | 18 + .../fonts/STIX/General/Regular/BoldFraktur.js | 18 + .../fonts/STIX/General/Regular/BoxDrawing.js | 18 + .../fonts/STIX/General/Regular/CJK.js | 18 + .../STIX/General/Regular/CombDiacritMarks.js | 18 + .../General/Regular/CombDiactForSymbols.js | 18 + .../STIX/General/Regular/ControlPictures.js | 18 + .../STIX/General/Regular/CurrencySymbols.js | 18 + .../fonts/STIX/General/Regular/Cyrillic.js | 18 + .../fonts/STIX/General/Regular/Dingbats.js | 18 + .../STIX/General/Regular/EnclosedAlphanum.js | 18 + .../fonts/STIX/General/Regular/Fraktur.js | 18 + .../General/Regular/GeneralPunctuation.js | 18 + .../STIX/General/Regular/GeometricShapes.js | 18 + .../STIX/General/Regular/GreekAndCoptic.js | 18 + .../fonts/STIX/General/Regular/GreekBold.js | 18 + .../STIX/General/Regular/GreekBoldItalic.js | 18 + .../fonts/STIX/General/Regular/GreekItalic.js | 18 + .../fonts/STIX/General/Regular/GreekSSBold.js | 18 + .../STIX/General/Regular/GreekSSBoldItalic.js | 18 + .../STIX/General/Regular/IPAExtensions.js | 18 + .../STIX/General/Regular/Latin1Supplement.js | 18 + .../STIX/General/Regular/LatinExtendedA.js | 18 + .../Regular/LatinExtendedAdditional.js | 18 + .../STIX/General/Regular/LatinExtendedB.js | 18 + .../STIX/General/Regular/LatinExtendedD.js | 18 + .../STIX/General/Regular/LetterlikeSymbols.js | 18 + .../fonts/STIX/General/Regular/Main.js | 18 + .../fonts/STIX/General/Regular/MathBold.js | 18 + .../STIX/General/Regular/MathBoldItalic.js | 18 + .../STIX/General/Regular/MathBoldScript.js | 18 + .../fonts/STIX/General/Regular/MathItalic.js | 18 + .../STIX/General/Regular/MathOperators.js | 18 + .../fonts/STIX/General/Regular/MathSS.js | 18 + .../fonts/STIX/General/Regular/MathSSBold.js | 18 + .../STIX/General/Regular/MathSSItalic.js | 18 + .../STIX/General/Regular/MathSSItalicBold.js | 18 + .../fonts/STIX/General/Regular/MathScript.js | 18 + .../fonts/STIX/General/Regular/MathTT.js | 18 + .../STIX/General/Regular/MiscMathSymbolsA.js | 18 + .../STIX/General/Regular/MiscMathSymbolsB.js | 18 + .../fonts/STIX/General/Regular/MiscSymbols.js | 18 + .../General/Regular/MiscSymbolsAndArrows.js | 18 + .../STIX/General/Regular/MiscTechnical.js | 18 + .../fonts/STIX/General/Regular/NumberForms.js | 18 + .../General/Regular/PhoneticExtensions.js | 18 + .../STIX/General/Regular/SpacingModLetters.js | 18 + .../General/Regular/SuperAndSubscripts.js | 18 + .../STIX/General/Regular/SuppMathOperators.js | 18 + .../General/Regular/SupplementalArrowsA.js | 18 + .../General/Regular/SupplementalArrowsB.js | 18 + .../HTML-CSS/fonts/STIX/General/Regular/ij.js | 18 + .../fonts/STIX/IntegralsD/Bold/All.js | 18 + .../fonts/STIX/IntegralsD/Regular/All.js | 18 + .../fonts/STIX/IntegralsD/Regular/Main.js | 18 + .../fonts/STIX/IntegralsSm/Bold/All.js | 18 + .../fonts/STIX/IntegralsSm/Regular/All.js | 18 + .../fonts/STIX/IntegralsSm/Regular/Main.js | 18 + .../fonts/STIX/IntegralsUp/Bold/All.js | 18 + .../fonts/STIX/IntegralsUp/Regular/All.js | 18 + .../fonts/STIX/IntegralsUp/Regular/Main.js | 18 + .../fonts/STIX/IntegralsUpD/Bold/All.js | 18 + .../fonts/STIX/IntegralsUpD/Regular/All.js | 18 + .../fonts/STIX/IntegralsUpD/Regular/Main.js | 18 + .../fonts/STIX/IntegralsUpSm/Bold/All.js | 18 + .../fonts/STIX/IntegralsUpSm/Regular/All.js | 18 + .../fonts/STIX/IntegralsUpSm/Regular/Main.js | 18 + .../fonts/STIX/NonUnicode/Bold/All.js | 18 + .../fonts/STIX/NonUnicode/Bold/Main.js | 18 + .../fonts/STIX/NonUnicode/Bold/PrivateUse.js | 18 + .../fonts/STIX/NonUnicode/BoldItalic/All.js | 18 + .../fonts/STIX/NonUnicode/BoldItalic/Main.js | 18 + .../STIX/NonUnicode/BoldItalic/PrivateUse.js | 18 + .../fonts/STIX/NonUnicode/Italic/All.js | 18 + .../fonts/STIX/NonUnicode/Italic/Main.js | 18 + .../STIX/NonUnicode/Italic/PrivateUse.js | 18 + .../fonts/STIX/NonUnicode/Regular/All.js | 18 + .../fonts/STIX/NonUnicode/Regular/Main.js | 18 + .../STIX/NonUnicode/Regular/PrivateUse.js | 18 + .../fonts/STIX/SizeFiveSym/Regular/All.js | 18 + .../fonts/STIX/SizeFiveSym/Regular/Main.js | 18 + .../fonts/STIX/SizeFourSym/Bold/Main.js | 18 + .../fonts/STIX/SizeFourSym/Regular/All.js | 18 + .../fonts/STIX/SizeFourSym/Regular/Main.js | 18 + .../fonts/STIX/SizeOneSym/Bold/All.js | 18 + .../fonts/STIX/SizeOneSym/Bold/Main.js | 18 + .../fonts/STIX/SizeOneSym/Regular/All.js | 18 + .../fonts/STIX/SizeOneSym/Regular/Main.js | 18 + .../fonts/STIX/SizeThreeSym/Bold/Main.js | 18 + .../fonts/STIX/SizeThreeSym/Regular/All.js | 18 + .../fonts/STIX/SizeThreeSym/Regular/Main.js | 18 + .../fonts/STIX/SizeTwoSym/Bold/Main.js | 18 + .../fonts/STIX/SizeTwoSym/Regular/All.js | 18 + .../fonts/STIX/SizeTwoSym/Regular/Main.js | 18 + .../HTML-CSS/fonts/STIX/Variants/Bold/All.js | 18 + .../HTML-CSS/fonts/STIX/Variants/Bold/Main.js | 18 + .../fonts/STIX/Variants/Regular/All.js | 18 + .../fonts/STIX/Variants/Regular/Main.js | 18 + .../HTML-CSS/fonts/STIX/fontdata-beta.js | 18 + .../output/HTML-CSS/fonts/STIX/fontdata.js | 19 + .../HTML-CSS/fonts/TeX/AMS/Regular/Arrows.js | 18 + .../HTML-CSS/fonts/TeX/AMS/Regular/BBBold.js | 18 + .../fonts/TeX/AMS/Regular/BoxDrawing.js | 18 + .../fonts/TeX/AMS/Regular/CombDiacritMarks.js | 18 + .../fonts/TeX/AMS/Regular/Dingbats.js | 18 + .../fonts/TeX/AMS/Regular/EnclosedAlphanum.js | 18 + .../TeX/AMS/Regular/GeneralPunctuation.js | 18 + .../fonts/TeX/AMS/Regular/GeometricShapes.js | 18 + .../fonts/TeX/AMS/Regular/GreekAndCoptic.js | 18 + .../fonts/TeX/AMS/Regular/Latin1Supplement.js | 18 + .../fonts/TeX/AMS/Regular/LatinExtendedA.js | 18 + .../TeX/AMS/Regular/LetterlikeSymbols.js | 18 + .../HTML-CSS/fonts/TeX/AMS/Regular/Main.js | 18 + .../fonts/TeX/AMS/Regular/MathOperators.js | 18 + .../fonts/TeX/AMS/Regular/MiscTechnical.js | 18 + .../HTML-CSS/fonts/TeX/AMS/Regular/PUA.js | 18 + .../TeX/AMS/Regular/SpacingModLetters.js | 18 + .../TeX/AMS/Regular/SuppMathOperators.js | 18 + .../fonts/TeX/Caligraphic/Bold/Main.js | 18 + .../fonts/TeX/Caligraphic/Regular/Main.js | 18 + .../fonts/TeX/Fraktur/Bold/BasicLatin.js | 18 + .../HTML-CSS/fonts/TeX/Fraktur/Bold/Main.js | 18 + .../HTML-CSS/fonts/TeX/Fraktur/Bold/Other.js | 18 + .../HTML-CSS/fonts/TeX/Fraktur/Bold/PUA.js | 18 + .../fonts/TeX/Fraktur/Regular/BasicLatin.js | 18 + .../fonts/TeX/Fraktur/Regular/Main.js | 18 + .../fonts/TeX/Fraktur/Regular/Other.js | 18 + .../HTML-CSS/fonts/TeX/Fraktur/Regular/PUA.js | 18 + .../HTML-CSS/fonts/TeX/Greek/Bold/Main.js | 18 + .../fonts/TeX/Greek/BoldItalic/Main.js | 18 + .../HTML-CSS/fonts/TeX/Greek/Italic/Main.js | 18 + .../HTML-CSS/fonts/TeX/Greek/Regular/Main.js | 18 + .../HTML-CSS/fonts/TeX/Main/Bold/Arrows.js | 18 + .../fonts/TeX/Main/Bold/CombDiacritMarks.js | 18 + .../TeX/Main/Bold/CombDiactForSymbols.js | 18 + .../fonts/TeX/Main/Bold/GeneralPunctuation.js | 18 + .../fonts/TeX/Main/Bold/GeometricShapes.js | 18 + .../fonts/TeX/Main/Bold/GreekAndCoptic.js | 18 + .../fonts/TeX/Main/Bold/Latin1Supplement.js | 18 + .../fonts/TeX/Main/Bold/LatinExtendedA.js | 18 + .../fonts/TeX/Main/Bold/LatinExtendedB.js | 18 + .../fonts/TeX/Main/Bold/LetterlikeSymbols.js | 18 + .../HTML-CSS/fonts/TeX/Main/Bold/Main.js | 18 + .../fonts/TeX/Main/Bold/MathOperators.js | 18 + .../fonts/TeX/Main/Bold/MiscMathSymbolsA.js | 18 + .../fonts/TeX/Main/Bold/MiscSymbols.js | 18 + .../fonts/TeX/Main/Bold/MiscTechnical.js | 18 + .../fonts/TeX/Main/Bold/SpacingModLetters.js | 18 + .../fonts/TeX/Main/Bold/SuppMathOperators.js | 18 + .../TeX/Main/Bold/SupplementalArrowsA.js | 18 + .../fonts/TeX/Main/Italic/CombDiacritMarks.js | 18 + .../TeX/Main/Italic/GeneralPunctuation.js | 18 + .../fonts/TeX/Main/Italic/GreekAndCoptic.js | 18 + .../fonts/TeX/Main/Italic/Latin1Supplement.js | 18 + .../fonts/TeX/Main/Italic/LatinExtendedA.js | 18 + .../fonts/TeX/Main/Italic/LatinExtendedB.js | 18 + .../TeX/Main/Italic/LetterlikeSymbols.js | 18 + .../HTML-CSS/fonts/TeX/Main/Italic/Main.js | 18 + .../HTML-CSS/fonts/TeX/Main/Regular/Arrows.js | 18 + .../TeX/Main/Regular/CombDiacritMarks.js | 18 + .../TeX/Main/Regular/CombDiactForSymbols.js | 18 + .../TeX/Main/Regular/GeneralPunctuation.js | 18 + .../fonts/TeX/Main/Regular/GeometricShapes.js | 18 + .../fonts/TeX/Main/Regular/GreekAndCoptic.js | 18 + .../TeX/Main/Regular/Latin1Supplement.js | 18 + .../fonts/TeX/Main/Regular/LatinExtendedA.js | 18 + .../fonts/TeX/Main/Regular/LatinExtendedB.js | 18 + .../TeX/Main/Regular/LetterlikeSymbols.js | 18 + .../HTML-CSS/fonts/TeX/Main/Regular/Main.js | 18 + .../fonts/TeX/Main/Regular/MathOperators.js | 18 + .../TeX/Main/Regular/MiscMathSymbolsA.js | 18 + .../fonts/TeX/Main/Regular/MiscSymbols.js | 18 + .../fonts/TeX/Main/Regular/MiscTechnical.js | 18 + .../TeX/Main/Regular/SuppMathOperators.js | 18 + .../TeX/Main/Regular/SupplementalArrowsA.js | 18 + .../fonts/TeX/Math/BoldItalic/Main.js | 18 + .../HTML-CSS/fonts/TeX/Math/Italic/Main.js | 18 + .../fonts/TeX/SansSerif/Bold/BasicLatin.js | 18 + .../TeX/SansSerif/Bold/CombDiacritMarks.js | 18 + .../HTML-CSS/fonts/TeX/SansSerif/Bold/Main.js | 18 + .../fonts/TeX/SansSerif/Bold/Other.js | 18 + .../fonts/TeX/SansSerif/Italic/BasicLatin.js | 18 + .../TeX/SansSerif/Italic/CombDiacritMarks.js | 18 + .../fonts/TeX/SansSerif/Italic/Main.js | 18 + .../fonts/TeX/SansSerif/Italic/Other.js | 18 + .../fonts/TeX/SansSerif/Regular/BasicLatin.js | 18 + .../TeX/SansSerif/Regular/CombDiacritMarks.js | 18 + .../fonts/TeX/SansSerif/Regular/Main.js | 18 + .../fonts/TeX/SansSerif/Regular/Other.js | 18 + .../fonts/TeX/Script/Regular/BasicLatin.js | 18 + .../HTML-CSS/fonts/TeX/Script/Regular/Main.js | 18 + .../HTML-CSS/fonts/TeX/Size1/Regular/Main.js | 18 + .../HTML-CSS/fonts/TeX/Size2/Regular/Main.js | 18 + .../HTML-CSS/fonts/TeX/Size3/Regular/Main.js | 18 + .../HTML-CSS/fonts/TeX/Size4/Regular/Main.js | 18 + .../TeX/Typewriter/Regular/BasicLatin.js | 18 + .../Typewriter/Regular/CombDiacritMarks.js | 18 + .../fonts/TeX/Typewriter/Regular/Main.js | 18 + .../fonts/TeX/Typewriter/Regular/Other.js | 18 + .../fonts/TeX/WinChrome/Regular/Main.js | 18 + .../HTML-CSS/fonts/TeX/WinIE6/Regular/AMS.js | 18 + .../HTML-CSS/fonts/TeX/WinIE6/Regular/Bold.js | 18 + .../HTML-CSS/fonts/TeX/WinIE6/Regular/Main.js | 18 + .../jax/output/HTML-CSS/fonts/TeX/fontdata.js | 19 + .../MathJax/jax/output/HTML-CSS/imageFonts.js | 18 + .../MathJax/jax/output/HTML-CSS/jax.js | 19 + .../MathJax/jax/output/NativeMML/config.js | 18 + .../MathJax/jax/output/NativeMML/jax.js | 18 + .../javascript/MathJax/test/index-images.html | 127 ++ .../public/javascript/MathJax/test/index.html | 177 +++ .../MathJax/test/sample-dynamic.html | 54 + .../javascript/MathJax/test/sample-mml.html | 44 + .../MathJax/test/sample-signals.html | 121 ++ .../javascript/MathJax/test/sample-tex.html | 22 + .../MathJax/test/sample-tex2mml.html | 23 + .../javascript/MathJax/test/sample.html | 99 ++ lib/gollum/frontend/templates/page.mustache | 2 + 615 files changed, 38509 insertions(+) create mode 100644 lib/gollum/frontend/public/javascript/MathJax/MathJax.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/config/MMLorHTML.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/config/MathJax.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/config/local/local.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.buildinfo create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/CSS-styles.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/HTML-snippets.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/ajax.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/callback.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/elementjax.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/html.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/hub.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/index.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/inputjax.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/jax.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/message.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/object.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/outputjax.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/queue.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/signal.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/variable.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/callbacks.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/community.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/configuration.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/dynamic.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/environment.pickle create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/glossary.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/index.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/installation.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/jsMath.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/mathjax.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/mathml.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/model.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/FontWarnings.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/HTML-CSS.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/MMLorHTML.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/MathML.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/MathMenu.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/MathZoom.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/NativeMML.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/TeX.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/hub.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/jsMath2jax.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/mml2jax.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/tex2jax.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/output.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/platforms/index.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/platforms/movable-type.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/platforms/wordpress.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/queues.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/signals.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/start.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/startup.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/synchronize.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/tex.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/typeset.doctree create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/CSS-styles.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/HTML-snippets.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_images/badge.gif create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_images/mt_head.png create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_images/mt_menu.png create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_images/mt_templates.png create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_images/wp_menu.png create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_images/wp_templates.png create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/CSS-styles.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/HTML-snippets.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/ajax.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/callback.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/elementjax.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/html.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/hub.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/index.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/inputjax.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/jax.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/message.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/object.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/outputjax.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/queue.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/signal.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/variable.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/callbacks.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/community.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/configuration.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/dynamic.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/glossary.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/index.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/installation.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/jsMath.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/mathjax.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/mathml.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/model.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/FontWarnings.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/HTML-CSS.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/MMLorHTML.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/MathML.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/MathMenu.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/MathZoom.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/NativeMML.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/TeX.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/hub.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/jsMath2jax.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/mml2jax.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/tex2jax.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/output.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/platforms/index.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/platforms/movable-type.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/platforms/wordpress.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/queues.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/signals.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/start.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/startup.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/synchronize.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/tex.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/typeset.txt create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/basic.css create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/doctools.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/file.png create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/jquery.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/mathjax_mathml.user.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/mathjax_wikipedia.user.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/minus.png create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/mj.css create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/plus.png create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/pygments.css create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/searchtools.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/underscore.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/api/ajax.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/api/callback.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/api/elementjax.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/api/html.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/api/hub.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/api/index.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/api/inputjax.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/api/jax.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/api/message.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/api/object.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/api/outputjax.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/api/queue.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/api/signal.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/api/variable.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/callbacks.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/community.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/configuration.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/dynamic.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/genindex.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/glossary.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/index.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/installation.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/jsMath.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/mathjax.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/mathml.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/model.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/objects.inv create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/options/FontWarnings.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/options/HTML-CSS.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/options/MMLorHTML.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/options/MathML.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/options/MathMenu.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/options/MathZoom.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/options/NativeMML.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/options/TeX.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/options/hub.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/options/jsMath2jax.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/options/mml2jax.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/options/tex2jax.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/output.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/platforms/index.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/platforms/movable-type.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/platforms/wordpress.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/queues.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/search.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/searchindex.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/signals.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/start.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/startup.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/synchronize.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/tex.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/html/typeset.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/CSS-styles.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/HTML-snippets.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/_static/mathjax_mathml.user.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/_static/mathjax_wikipedia.user.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/api/ajax.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/api/callback.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/api/elementjax.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/api/html.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/api/hub.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/api/index.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/api/inputjax.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/api/jax.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/api/message.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/api/object.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/api/outputjax.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/api/queue.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/api/signal.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/api/variable.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/callbacks.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/community.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/conf.py create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/configuration.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/dynamic.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/glossary.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/images/mt_head.png create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/images/mt_menu.png create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/images/mt_templates.png create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/images/wp_menu.png create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/images/wp_templates.png create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/index.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/installation.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/jsMath.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/mathjax.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/mathml.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/mjtheme/static/mj.css_t create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/mjtheme/theme.conf create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/model.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/options/FontWarnings.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/options/HTML-CSS.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/options/MMLorHTML.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/options/MathML.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/options/MathMenu.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/options/MathZoom.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/options/NativeMML.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/options/TeX.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/options/hub.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/options/jsMath2jax.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/options/mml2jax.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/options/tex2jax.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/output.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/platforms/index.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/platforms/movable-type.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/platforms/wordpress.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/queues.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/signals.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/start.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/startup.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/synchronize.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/tex.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/docs/rst/typeset.rst create mode 100644 lib/gollum/frontend/public/javascript/MathJax/extensions/FontWarnings.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/extensions/MathMenu.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/extensions/MathZoom.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/extensions/TeX/AMSmath.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/extensions/TeX/AMSsymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/extensions/TeX/autobold.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/extensions/TeX/boldsymbol.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/extensions/TeX/mathchoice.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/extensions/TeX/newcommand.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/extensions/TeX/noErrors.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/extensions/TeX/noUndefined.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/extensions/TeX/unicode.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/extensions/TeX/verb.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/extensions/jsMath2jax.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/extensions/mml2jax.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/extensions/tex2jax.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/extensions/toMathML.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/element/mml/jax.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/element/mml/optable/Arrows.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/element/mml/optable/BasicLatin.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/element/mml/optable/CombDiacritMarks.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/element/mml/optable/CombDiactForSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/element/mml/optable/Dingbats.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/element/mml/optable/GeneralPunctuation.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/element/mml/optable/GeometricShapes.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/element/mml/optable/GreekAndCoptic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/element/mml/optable/Latin1Supplement.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/element/mml/optable/LetterlikeSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/element/mml/optable/MathOperators.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/element/mml/optable/MiscMathSymbolsA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/element/mml/optable/MiscMathSymbolsB.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/element/mml/optable/MiscTechnical.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/element/mml/optable/SpacingModLetters.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/element/mml/optable/SuppMathOperators.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/element/mml/optable/SupplementalArrowsB.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/config.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/a.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/b.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/c.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/d.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/e.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/f.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/fr.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/g.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/h.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/i.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/j.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/k.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/l.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/m.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/n.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/o.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/opf.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/p.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/q.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/r.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/s.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/scr.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/t.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/u.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/v.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/w.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/x.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/y.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/entities/z.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/MathML/jax.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/TeX/config.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/input/TeX/jax.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/autoload/maction.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/autoload/menclose.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/autoload/mglyph.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/autoload/mmultiscripts.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/autoload/ms.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/autoload/mtable.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/autoload/multiline.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/config.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/AlphaPresentForms.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/Arrows.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/BoldFraktur.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/BoxDrawing.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/CombDiacritMarks.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/CombDiactForSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/ControlPictures.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/CurrencySymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/Cyrillic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/EnclosedAlphanum.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/GeneralPunctuation.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/GeometricShapes.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/GreekAndCoptic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/GreekBold.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/GreekSSBold.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/IPAExtensions.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/Latin1Supplement.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/LatinExtendedA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/LatinExtendedAdditional.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/LatinExtendedB.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/LetterlikeSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/MathBold.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/MathOperators.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/MathSSBold.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/MiscMathSymbolsA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/MiscMathSymbolsB.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/MiscSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/MiscTechnical.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/NumberForms.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/PhoneticExtensions.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/SpacingModLetters.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/SuperAndSubscripts.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Bold/SuppMathOperators.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/AlphaPresentForms.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/BasicLatin.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/BoxDrawing.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/CombDiactForSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/ControlPictures.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/CurrencySymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/Cyrillic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/EnclosedAlphanum.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/GeneralPunctuation.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/GreekAndCoptic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/GreekBoldItalic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/GreekSSBoldItalic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/IPAExtensions.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/Latin1Supplement.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/LatinExtendedA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/LatinExtendedAdditional.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/LatinExtendedB.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/LetterlikeSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/MathBoldItalic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/MathBoldScript.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/MathOperators.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/MathSSItalicBold.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/BoldItalic/SpacingModLetters.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/AlphaPresentForms.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/BoxDrawing.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/CombDiactForSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/ControlPictures.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/CurrencySymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/Cyrillic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/EnclosedAlphanum.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/GeneralPunctuation.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/GreekAndCoptic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/GreekItalic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/IPAExtensions.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/Latin1Supplement.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/LatinExtendedA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/LatinExtendedAdditional.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/LatinExtendedB.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/LetterlikeSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/MathItalic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/MathOperators.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/MathSSItalic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/MathScript.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/SpacingModLetters.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Italic/ij.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/AlphaPresentForms.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/Arrows.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/BBBold.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/BlockElements.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/BoldFraktur.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/BoxDrawing.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/CJK.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/CombDiacritMarks.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/CombDiactForSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/ControlPictures.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/CurrencySymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/Cyrillic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/Dingbats.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/EnclosedAlphanum.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/Fraktur.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/GeneralPunctuation.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/GeometricShapes.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/GreekAndCoptic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/GreekBold.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/GreekBoldItalic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/GreekItalic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/GreekSSBold.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/GreekSSBoldItalic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/IPAExtensions.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/Latin1Supplement.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/LatinExtendedA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/LatinExtendedAdditional.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/LatinExtendedB.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/LatinExtendedD.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/LetterlikeSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathBold.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathBoldItalic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathBoldScript.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathItalic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathOperators.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathSS.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathSSBold.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathSSItalic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathSSItalicBold.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathScript.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MathTT.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MiscMathSymbolsA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MiscMathSymbolsB.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MiscSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MiscSymbolsAndArrows.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/MiscTechnical.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/NumberForms.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/PhoneticExtensions.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/SpacingModLetters.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/SuperAndSubscripts.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/SuppMathOperators.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/SupplementalArrowsA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/SupplementalArrowsB.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/General/Regular/ij.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsD/Bold/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsD/Regular/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsD/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsSm/Bold/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsSm/Regular/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsSm/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsUp/Bold/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsUp/Regular/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsUp/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsUpD/Bold/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsUpD/Regular/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsUpD/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsUpSm/Bold/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsUpSm/Regular/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/IntegralsUpSm/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/Bold/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/Bold/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/Bold/PrivateUse.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/BoldItalic/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/BoldItalic/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/BoldItalic/PrivateUse.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/Italic/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/Italic/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/Italic/PrivateUse.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/Regular/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/NonUnicode/Regular/PrivateUse.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeFiveSym/Regular/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeFiveSym/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeFourSym/Bold/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeFourSym/Regular/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeFourSym/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeOneSym/Bold/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeOneSym/Bold/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeOneSym/Regular/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeOneSym/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeThreeSym/Bold/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeThreeSym/Regular/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeThreeSym/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeTwoSym/Bold/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeTwoSym/Regular/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/SizeTwoSym/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/Variants/Bold/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/Variants/Bold/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/Variants/Regular/All.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/Variants/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/fontdata-beta.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/STIX/fontdata.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/Arrows.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/BBBold.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/BoxDrawing.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/CombDiacritMarks.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/Dingbats.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/EnclosedAlphanum.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/GeneralPunctuation.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/GeometricShapes.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/GreekAndCoptic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/Latin1Supplement.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/LatinExtendedA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/LetterlikeSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/MathOperators.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/MiscTechnical.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/PUA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/SpacingModLetters.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/AMS/Regular/SuppMathOperators.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Caligraphic/Bold/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Caligraphic/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Fraktur/Bold/BasicLatin.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Fraktur/Bold/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Fraktur/Bold/Other.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Fraktur/Bold/PUA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Fraktur/Regular/BasicLatin.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Fraktur/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Fraktur/Regular/Other.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Fraktur/Regular/PUA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Greek/Bold/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Greek/BoldItalic/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Greek/Italic/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Greek/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/Arrows.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/CombDiacritMarks.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/CombDiactForSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/GeneralPunctuation.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/GeometricShapes.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/GreekAndCoptic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/Latin1Supplement.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/LatinExtendedA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/LatinExtendedB.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/LetterlikeSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/MathOperators.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/MiscMathSymbolsA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/MiscSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/MiscTechnical.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/SpacingModLetters.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/SuppMathOperators.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Bold/SupplementalArrowsA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Italic/CombDiacritMarks.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Italic/GeneralPunctuation.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Italic/GreekAndCoptic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Italic/Latin1Supplement.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Italic/LatinExtendedA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Italic/LatinExtendedB.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Italic/LetterlikeSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Italic/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/Arrows.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/CombDiacritMarks.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/CombDiactForSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/GeneralPunctuation.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/GeometricShapes.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/GreekAndCoptic.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/Latin1Supplement.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/LatinExtendedA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/LatinExtendedB.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/LetterlikeSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/MathOperators.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/MiscMathSymbolsA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/MiscSymbols.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/MiscTechnical.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/SuppMathOperators.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Main/Regular/SupplementalArrowsA.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Math/BoldItalic/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Math/Italic/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Bold/BasicLatin.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Bold/CombDiacritMarks.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Bold/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Bold/Other.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Italic/BasicLatin.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Italic/CombDiacritMarks.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Italic/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Italic/Other.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Regular/BasicLatin.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Regular/CombDiacritMarks.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/SansSerif/Regular/Other.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Script/Regular/BasicLatin.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Script/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Size1/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Size2/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Size3/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Size4/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Typewriter/Regular/BasicLatin.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Typewriter/Regular/CombDiacritMarks.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Typewriter/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/Typewriter/Regular/Other.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/WinChrome/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/WinIE6/Regular/AMS.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/WinIE6/Regular/Bold.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/WinIE6/Regular/Main.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/fonts/TeX/fontdata.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/imageFonts.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/HTML-CSS/jax.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/NativeMML/config.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/jax/output/NativeMML/jax.js create mode 100644 lib/gollum/frontend/public/javascript/MathJax/test/index-images.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/test/index.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/test/sample-dynamic.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/test/sample-mml.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/test/sample-signals.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/test/sample-tex.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/test/sample-tex2mml.html create mode 100644 lib/gollum/frontend/public/javascript/MathJax/test/sample.html diff --git a/lib/gollum/frontend/public/javascript/MathJax/MathJax.js b/lib/gollum/frontend/public/javascript/MathJax/MathJax.js new file mode 100644 index 00000000..87c3e9ed --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/MathJax.js @@ -0,0 +1,43 @@ +/************************************************************* + * + * MathJax.js + * + * The main code for the MathJax math-typesetting library. See + * http://www.mathjax.org/ for details. + * + * --------------------------------------------------------------------- + * + * Copyright (c) 2009-2010 Design Science, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +if (!window.MathJax) {window.MathJax = {}} + +MathJax.Unpack = function (data) { + var k, d, n, m, i; + for (k = 0, m = data.length; k < m; k++) { + d = data[k]; + for (i = 0, n = d.length; i < n; i++) + {if (typeof(d[i]) == 'number') {d[i] = d[d[i]]}} + data[k] = d.join(''); + } + eval(data.join('')); +}; +MathJax.isPacked = true; + +MathJax.Unpack([ + ['if(','document.','getElementById','&&',1,'childNodes&&',1,'createElement','){','if(!','window.MathJax','){',10,'={}}',9,'MathJax.Hub','){MathJax.version="1.0.1";(','function(','d){','var b=','window[d];if(!','b){b','=window[d]={}}var ','f','=[];','var c=',17,'g','){var h=','g.','constructor',';if(!','h){h=','new Function','("")}','for(var ','i in g){if(i!=="',30,'"&&g','.hasOwnProperty','(i)){h[i]=g[i]}}','return ','h};var a=','function(){',41,33,'("',41,'arguments','.callee','.Init','.call(this,',48,')")};var e=a();e','.prototype','={bug_test:1};',9,'e',54,'.bug_test){a=',43,41,43,41,48,49,50,51,48,')}}}b.','Object','=c({',30,':a(),Subclass:',17,'g,i',28,'a();h.SUPER=this;h',50,'=this',50,';h','.Subclass','=this',82,';h.Augment=this.Augment;h.','protoFunction','=this.',86,';h.can=this.can;h.has=this.has;h.isa=this.isa;h',54,'=new this(f);h',54,'.',30,'=h;h.Augment(g,i);',41,'h},Init:',17,'g',28,'this;if(g','.length===','1&&g[0]===f','){return ','h}if(!(h ','instanceof ','g',49,')){h=new g',49,'(f)}',41,'h',50,'.apply(','h,g)||h},Augment:',17,'g,h){var i;if(g','!=null){for(i in ','g){if(g',39,'(i)){this','.',86,'(i,g[i','])}}if(g.toString!==this.prototype.toString&&g.toString!=={}.toString){this.protoFunction("toString",g.toString)}}','if(h',119,'h){if(','h',39,122,'[i]=h[i]}}}',41,'this},',86,':',17,'h,g){this',54,'[h]=g;','if(typeof',' g','==="function"){','g.SUPER=this.SUPER',54,'}},prototype:{Init',':function(){},','SUPER:',17,'g',104,'g',49,'.SUPER},can:',17,'g',104,'typeof(this[g','])==="function"},has:',17,'g',104,159,'])!=="undefined','"},isa:',17,'g){return(g ',106,70,')&&(this ',106,'g)}},can:',17,'g',104,'this',54,'.can',51,'g)},has:',17,'g',104,'this',54,'.has',51,'g)},isa:',17,'h){var g=this;while(',120,'===h',104,'true}else{g=g.SUPER}}',41,'false},SimpleSUPER:c({',30,':',17,'g',104,'this.SimpleSUPER.define(g)},define:',17,'g){var i={};if(g!=null){',35,'h in ',120,39,'(h)){this.',86,'(h,g[h',126,41,'i},wrap:',17,'i,h){',142,'(h',')==="function"&&','h','.toString','().match(/\\.\\s*SUPER\\s*\\(/)){var g=',33,'(this.wrapper);g.label=i;g','.original','=h;h=g;g',222,'=this.stringify}',41,'h},wrapper:',43,'var h=',48,49,';this.SUPER=h.SUPER[h.label];try{var g=h',226,'.apply(this',',',48,')}catch(i){','delete this.','SUPER;','throw i}',242,243,41,'g}.','toString().replace','(/^\\s*function \\(\\)\\s*\\{\\s*/i,"").replace(/\\s*\\}\\s*$/i,""),toString:',43,41,'this',226,222,238,226,',',48,')}})})})("MathJax");(',17,'BASENAME){var ','BASE=window[BASENAME','];',9,'BASE){',263,']={}}var ','CALLBACK','=',17,'data){var cb=',33,'("',41,48,49,'.execute',115,48,49,',',48,')");',35,'id in ','CALLBACK.prototype','){if(',287,39,'(id)){',142,'(data[id',165,'"){cb[id]=data[id]}else{cb[id]=',287,'[id]}}}cb',222,'=',287,222,';',41,'cb};',287,'={isCallback:true,hook',148,'data:[],object:window,execute:',43,9,'this.called||this.autoReset){this.called=!this.autoReset;',41,'this.hook',238,'.object,this','.data.concat([].slice.call(',48,',0)))}},reset:',43,242,'called},toString:',43,41,313,222,238,'.hook,',48,')}};var ISCALLBACK=',17,'f){return(typeof(f',220,'f.isCallback)};var EVAL=',17,'code',104,'eval.call(window,code)};EVAL("var __TeSt_VaR__ = 1','");if(','window.__TeSt_VaR__','){delete ',339,'}else{if(','window.execScript','){EVAL=',17,'code){BASE.__code=code;code="try {"+BASENAME+".__result = eval("+BASENAME+".__code)} catch(err) {"+BASENAME+".__result = err}";',343,'(code',');var result=BASE.__result;delete BASE.__result;delete BASE.__code;if(result instanceof Error){throw result}return result','}}else{EVAL=',17,346,'var head=(',1,'getElementsByTagName("head"))[0];if(!','head){head=',1,'body}var script=',1,7,'("script");','script','.appendChild(',1,'createTextNode','(code));head',363,'script);','head.removeChild(','script',349,'}}}var USING=',17,'args,i','){if(',48,'.length','>1){if(',48,102,'2&&!(typeof ',48,'[0]==="function")&&',48,'[0] ',106,'Object&&typeof ',48,'[1]==="number"){','args=[].slice.call(',374,')}else{',390,48,',0)}}if(args ',106,'Array&&args',102,'1){args=args[0]}',142,' args',144,'if(args',278,'===',287,278,104,'args}',41,269,'({hook:args})}else{if(args ',106,'Array){',142,'(args[0])==="string"&&args[1] ',106,387,'args[1][args[0]]==="','function"){return CALLBACK({hook:args[','1][args[0]],object:args[1','],data:args.slice(','2)})}else{',142,' args[0]==="',420,'0',422,'1)})}else{',142,' args[1]==="',420,'1],object:args[0',422,'2)})}}}}else{',142,'(args)==="','string"){',41,269,'({hook:EVAL,data:[args]})}else{if(args ',106,70,104,269,'(args',392,142,437,'undefined"){',41,269,'({})}}}}}','throw Error("Can\'t ','make ','callback',' from given data")};var DELAY=',17,'time,',456,'){callback=USING(callback);',456,'.timeout=','setTimeout(',456,',time);','return callback','};var WAITFOR=',17,456,',signal',461,9,456,'.called){','WAITSIGNAL(',456,471,');signal.pending++}};var WAITEXECUTE=',43,'var ','signals','=this','.signal',';',242,'signal;this',278,'=this.','oldExecute;',242,490,'var result=','this',278,238,',',48,');','if(ISCALLBACK(result)&&!result.called){',476,'result,',482,392,'for(var i=0,m=',482,'.length;if){f=',1,927,377,'}',9,'h){h=(',1,355,32,1,'body}}',41,'h};var e',24,19,43,35,'j=0,h=e',377,';j=',1030,'){h(','this.STATUS.ERROR',');',41,'1}',41,'0},file:',17,'i,',129,'h<0){',953,1020,'(i',392,953,'loadComplete','(i)}},execute:',43,313,737,315,',this.data[0],this.data[1])},',1074,':',17,'h,i,j){if(h.time(j)){return}if(',1,927,377,'>i&&',1,927,'[i].cssRules','&&',1,927,1133,377,'){j(h',1067,464,'h,h.delay',')}},checkLength:',17,'h,k,m){if(h.time(m)){return}var l=0;var i=(k.sheet||k.styleSheet);try{if((i.cssRules||i.rules||[]).length>0){l=1}}catch(j){','if(j.message.match(/','protected variable|restricted URI/)){l=1}else{',1146,'Security error/)){l=1}}}if(l){',464,1018,'([m,h.STATUS.OK]),0',392,464,1142,708,1116,':',17,32,999,'h);var i=',976,'[h];if(','i){a.Message.Clear(i.',775,'clearTimeout(',1093,');if(i.script){if(e',102,'0){',464,'b,0)}e',549,'i.script)}this.loaded[h]=i.status;delete ',976,1164,1003,'h]){',1018,'.Queue([a',913,',',1003,'h],i.status],[a',913,',i.',600,',i.status',552,'a',913,'(i.',600,1189,708,1020,':',17,129,976,'[h].timeout','){',1167,976,1202,')}',976,'[h].status=',1101,';this.loadError(h);this.',1116,'(h)},loadError:',17,'h){a.Message.Set("File failed to load: "+h,null,2000)},Styles:',17,'j,k',28,'this.StyleString(','j);if(h===""){k',962,'k);k()}else{var i=',1,7,'("style");',1041,982,1033,363,1060,'i',1063,'i',1065,'.styleSheet.cssText=h}else{i',363,1,365,'(h))}k=this.timer.create',51,'k,i)}',41,'k},StyleString:',17,'m){',142,'(m)==="',438,41,'m}var j="",n,l;for(n in m){if(m',39,'(n)){',142,' m[n]==="',438,'j+=n+" {"+','m[n]+"}\\n"}else{if(m[n] ',106,414,35,'k=0;k1?d[1]:""));g=null}if(f&&(!b.',190,'||d)){c',54,'=c',54,552,533,',(f',14,'>1?f[1]:""))}if(g&&!g',54,'.match(/\\S/)){','g=g',515,'}}if(b.',195,'&&g&&g.className==b.',195,'){try{g.innerHTML=""}catch(e){}g.style.display="none"}',310,'a.',152,512,'=1}},',435,3,'(h,b,d){if(',386,'){',1,354,'q,o=',152,327,';var p=',224,205,',c=',224,207,';try{if(!b){b=','new Date().getTime','()}var j=0,l,f;while(jthis.',213,'&&j=0;g--){if(f[g].src.match(e)){n.script=f[g].innerHTML;m.root=f[g].src',552,'(/(^|\\/)[^\\/]*$/,"");break}}b.Ajax.config=m;var j={isMac',':(navigator.platform.substr(0,3)==="','Mac"),isPC',1353,'Win"),isMSIE:(',709,'all!=null&&!','window.opera','),isFirefox:(',709,'ATTRIBUTE_NODE!=null&&window.directories!=null),isSafari',':(navigator.vendor!=null&&navigator.vendor.match(/','Apple/)!=null&&!navigator.omniWebString),isOpera:(',1359,'!=null&&',1359,'.version!=null),isChrome',1363,'Google/)!=null),isKonqueror:(window',734,'&&window',734,'("konqueror")),versionAtLeast',3,'(r){var q=(this','.version).split','(".");r=(','new String','(r)).split(".");',168,'s=0,p=r',14,';s=parseInt(r[s])}}',1,'true},Select',3,'(p',1029,'p[d.Browser];if(i){',1,'i(d.Browser)}',1,'null}};var a=navigator.userAgent',552,'(/^Mozilla\\/(\\d+\\.)+\\d+ /,"").replace(/[a-z][-a-z0-9._: ]+\\/\\d+[^ ]*-[^ ]*\\.([a-z][a-z])?\\d+ /i,"").replace(/Gentoo |Ubuntu\\/(\\d+\\.)*\\d+ (\\([^)]*\\) )?/,"");d.Browser=d',221,'d',221,1379,'("Unknown"),{version:"0.0"}),j);',168,'h in j){if(j',734,'(h)){if(j[h]&&h',158,'2)==="is"){h=h.slice(2);if(h==="Mac"||h==="PC"){continue}d.Browser=d',221,1379,'(h),j);var o',526,'(".*(Version',')/((?:\\\\d+\\\\.)+\\\\d','+)|.*("+h+")"+(h=="MSIE"?" ":"/")+"((?:\\\\d+\\\\.)*\\\\d+)|(?:^|\\\\(| )([a-z][-a-z0-9._: ]+|WebKit',1415,'+)");var c=o.exec(a)||["","","","unknown","0.0"];d.Browser.name=(c[1]=="Version"?h:(c[3]||c[5]));d.Browser.version=c[2]||c[4]||c[6];break}}}','d.Browser.Select','({Safari',3,'(p',1029,'parseInt((String(p',1377,'("."))[0]);if(i>=526){','p.version="','4.0','"}else{if(i','>=525){',1427,'3.1',1429,'>500){',1427,'3.0',1429,'>400){',1427,'2.0',1429,'>85){',1427,'1.0"}}}}}},Firefox',3,'(p){if(p.version==="0.0"&&navigator.product==="Gecko"&&','navigator.productSub',1029,1447,158,'8);if(i>="20090630"){',1427,'3.5',1429,'>="20080617"){',1427,'3.0',1429,'>="20061024"){',1427,'2.0"}}}}},Opera',3,'(i){i.version=opera.version()}});',1419,'(',152,678,'browsers);d.queue=b.Callback.Queue();d.queue.Push(["','Post",n.signal,"','Begin',382,218,'",n],["',846,1473,877,1473,'Jax',1473,913,'",n],n.onLoad(),',938,152,'isReady=true},["',347,1473,1469,'End"])})("MathJax")}};'] +]); + diff --git a/lib/gollum/frontend/public/javascript/MathJax/config/MMLorHTML.js b/lib/gollum/frontend/public/javascript/MathJax/config/MMLorHTML.js new file mode 100644 index 00000000..90dcb4d2 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/config/MMLorHTML.js @@ -0,0 +1,18 @@ +/* + * ../SourceForge/trunk/mathjax/config/MMLorHTML.js + * + * Copyright (c) 2010 Design Science, Inc. + * + * Part of the MathJax library. + * See http://www.mathjax.org for details. + * + * Licensed under the Apache License, Version 2.0; + * you may not use this file except in compliance with the License. + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ + +MathJax.Unpack([ + ['(function(c){var i="1.0";var g=','MathJax.Hub','.Insert({prefer:{MSIE:"MML",Firefox:"MML",Opera:"HTML",other:"HTML"}},(',1,'.config.MMLorHTML||{}));var e={Firefox:3,Opera:9.52,MSIE:6,Chrome:0.3,Safari:2,Konqueror:4};var h=(c','.Browser','.version==="0.0"||','c.Browser.versionAtLeast','(e[c',5,']||0));var b;try{new ActiveXObject("MathPlayer.Factory.1");b=true}catch(d){b=false}var f=(c',5,'.isFirefox&&',7,'("1.5"))||(c',5,'.isMSIE&&b)||(c',5,'.isOpera&&',7,'("9.52"));var a=(g.prefer&&typeof(g.prefer)==="object"?g.prefer[',1,5,']||g.prefer.other||"HTML":g.prefer);if(h||f){if(f&&(a==="MML"||!h)){','c.config.jax.unshift("output/','NativeMML")}else{',24,'HTML-CSS")}}else{c.PreProcess','.disabled=true;','c.prepareScripts',28,'MathJax.Message.Set("Your browser does not support MathJax",null,4000);c.Startup.signal.Post("MathJax not supported")}})(',1,');MathJax.Ajax.loadComplete("[MathJax]/config/MMLorHTML.js");'] +]); + diff --git a/lib/gollum/frontend/public/javascript/MathJax/config/MathJax.js b/lib/gollum/frontend/public/javascript/MathJax/config/MathJax.js new file mode 100644 index 00000000..f3327a61 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/config/MathJax.js @@ -0,0 +1,590 @@ +/************************************************************* + * + * MathJax/config/MathJax.js + * + * This configuration file is loaded when there is no explicit + * configuration script in the + // + // would display "[math]" in place of the math until MathJax is able to typeset it. + // + preRemoveClass: "MathJax_Preview", + + // + // This value controls whether the "Processing Math: nn%" message are displayed + // in the lower left-hand corner. Set to "false" to prevent those messages (though + // file loading and other messages will still be shown). + // + showProcessingMessages: true, + + // + // This value controls the verbosity of the messages in the lower left-hand corner. + // Set it to "none" to eliminate all messages, or set it to "simple" to show + // "Loading..." and "Processing..." rather than showing the full file name and the + // percentage of the mathematics processed. + // + messageStyle: "normal", + + // + // These two parameters control the alignment and shifting of displayed equations. + // The first can be "left", "center", or "right", and determines the alignment of + // displayed equations. When the alignment is not "center", the second determines + // an indentation from the left or right side for the displayed equations. + // + displayAlign: "center", + displayIndent: "0em", + + // + // Normally MathJax will perform its starup commands (loading of + // configuration, styles, jax, and so on) as soon as it can. If you + // expect to be doing additional configuration on the page, however, you + // may want to have it wait until the page's onload hander is called. If so, + // set this to "onload". + // + delayStartupUntil: "none", + + // + // Normally MathJax will typeset the mathematics on the page as soon as + // the page is loaded. If you want to delay that process, in which case + // you will need to call MathJax.Hub.Typeset() yourself by hand, set + // this value to true. + // + skipStartupTypeset: false, + + //============================================================================ + // + // These parameters control the tex2jax preprocessor (when you have included + // "tex2jax.js" in the extensions list above). + // + tex2jax: { + + // + // The Id of the element to be processed (defaults to full document) + // + element: null, + + // + // The delimiters that surround in-line math expressions. The first in each + // pair is the initial delimiter and the second is the terminal delimiter. + // Comment out any that you don't want, but be sure there is no extra + // comma at the end of the last item in the list -- some browsers won't + // be able to handle that. + // + inlineMath: [ +// ['$','$'], // uncomment this for standard TeX math delimiters + ['\\(','\\)'] + ], + + // + // The delimiters that surround displayed math expressions. The first in each + // pair is the initial delimiter and the second is the terminal delimiter. + // Comment out any that you don't want, but be sure there is no extra + // comma at the end of the last item in the list -- some browsers won't + // be able to handle that. + // + displayMath: [ + ['$$','$$'], + ['\\[','\\]'] + ], + + // + // This array lists the names of the tags whose contents should not be + // processed by tex2jax (other than to look for ignore/process classes + // as listed below). You can add to (or remove from) this list to prevent + // MathJax from processing mathematics in specific contexts. + // + skipTags: ["script","noscript","style","textarea","pre","code"], + + // + // This is the class name used to mark elements whose contents should + // not be processed by tex2jax (other than to look for the + // processClass pattern below). Note that this is a regular + // expression, and so you need to be sure to quote any regexp special + // characters. The pattern is automatically preceeded by '(^| )(' and + // followed by ')( |$)', so your pattern will have to match full words + // in the class name. Assigning an element this class name will + // prevent `tex2jax` from processing its contents. + // + ignoreClass: "tex2jax_ignore", + + // + // This is the class name used to mark elements whose contents SHOULD + // be processed by tex2jax. This is used to turn on processing within + // tags that have been marked as ignored or skipped above. Note that + // this is a regular expression, and so you need to be sure to quote + // any regexp special characters. The pattern is automatically + // preceeded by '(^| )(' and followed by ')( |$)', so your pattern + // will have to match full words in the class name. Use this to + // restart processing within an element that has been marked as + // ignored above. + // + processClass: "tex2jax_process", + + // + // Set to "true" to allow \$ to produce a dollar without starting in-line + // math mode. If you uncomment the ['$','$'] line above, you should change + // this to true so that you can insert plain dollar signs into your documents + // + processEscapes: false, + + // + // Controls whether tex2jax processes LaTeX environments outside of math + // mode. Set to "false" to prevent processing of environments except within + // math mode. + // + processEnvironments: true, + + // + // Controls whether tex2jax inserts MathJax_Preview spans to make a + // preview available, and what preview to use, when it locates in-line + // and display mathetics on the page. The default is "TeX", which + // means use the TeX code as the preview (until it is processed by + // MathJax). Set to "none" to prevent the previews from being + // inserted (the math will simply disappear until it is typeset). Set + // to an array containing the description of an HTML snippet in order + // to use the same preview for all equations on the page (e.g., you + // could have it say "[math]" or load an image). + // + // E.g., preview: ["[math]"], + // or preview: [["img",{src: "http://myserver.com/images/mypic.jpg"}]] + // + preview: "TeX" + + }, + + //============================================================================ + // + // These parameters control the mml2jax preprocessor (when you have included + // "mml2jax.js" in the extensions list above). + // + mml2jax: { + + // + // The Id of the element to be processed (defaults to full document) + // + element: null, + + // + // Controls whether mml2jax inserts MathJax_Preview spans to make a + // preview available, and what preview to use, whrn it locates + // mathematics on the page. The default is "alttext", which means use + // the tag's alttext attribute as the preview (until it is + // processed by MathJax), if the tag has one. Set to "none" to + // prevent the previews from being inserted (the math will simply + // disappear until it is typeset). Set to an array containing the + // description of an HTML snippet in order to use the same preview for + // all equations on the page (e.g., you could have it say "[math]" or + // load an image). + // + // E.g., preview: ["[math]"], + // or preview: [["img",{src: "http://myserver.com/images/mypic.jpg"}]] + // + preview: "alttext" + + }, + + //============================================================================ + // + // These parameters control the jsMath2jax preprocessor (when you have included + // "jsMath2jax.js" in the extensions list above). + // + jsMath2jax: { + + // + // The Id of the element to be processed (defaults to full document) + // + element: null, + + // + // Controls whether jsMath2jax inserts MathJax_Preview spans to make a + // preview available, and what preview to use, when it locates + // mathematics on the page. The default is "TeX", which means use the + // TeX code as the preview (until it is processed by MathJax). Set to + // "none" to prevent the previews from being inserted (the math will + // simply disappear until it is typeset). Set to an array containing + // the description of an HTML snippet in order to use the same preview + // for all equations on the page (e.g., you could have it say "[math]" + // or load an image). + // + // E.g., preview: ["[math]"], + // or preview: [["img",{src: "http://myserver.com/images/mypic.jpg"}]] + // + preview: "TeX" + + }, + + //============================================================================ + // + // These parameters control the TeX input jax. + // + TeX: { + + // + // This specifies the side on which \tag{} macros will place the tags. + // Set to "left" to place on the left-hand side. + // + TagSide: "right", + + // + // This is the amound of indentation (from right or left) for the tags. + // + TagIndent: ".8em", + + // + // This is the width to use for the multline environment + // + MultLineWidth: "85%", + + // + // List of macros to define. These are of the form + // name: value + // where 'value' is the replacement text for the macro \name. + // The 'value' can also be [value,n] where 'value' is the replacement + // text and 'n' is the number of parameters for the macro. + // Note that backslashes must be doubled in the replacement string. + // + // E.g., + // + // Macros: { + // RR: '{\\bf R}', + // bold: ['{\\bf #1}', 1] + // } + // + Macros: {} + + }, + + //============================================================================ + // + // These parameters control the MathML inupt jax. + // + MathML: { + // + // This specifies whether to use TeX spacing or MathML spacing when the + // HTML-CSS output jax is used. + // + useMathMLspacing: false + }, + + //============================================================================ + // + // These parameters control the HTML-CSS output jax. + // + "HTML-CSS": { + + // + // This controls the global scaling of mathematics as compared to the + // surrounding text. Values between 100 and 133 are usually good choices. + // + scale: 100, + + // + // This is a list of the fonts to look for on a user's computer in + // preference to using MathJax's web-based fonts. These must + // correspond to directories available in the jax/output/HTML-CSS/fonts + // directory, where MathJax stores data about the characters available + // in the fonts. Set this to ["TeX"], for example, to prevent the + // use of the STIX fonts, or set it to an empty list, [], if + // you want to force MathJax to use web-based or image fonts. + // + availableFonts: ["STIX","TeX"], + + // + // This is the preferred font to use when more than one of those + // listed above is available. + // + preferredFont: "TeX", + + // + // This is the web-based font to use when none of the fonts listed + // above are available on the user's computer. Note that currently + // only the TeX font is available in a web-based form. Set this to + // + // webFont: null, + // + // if you want to prevent the use of web-based fonts. + // + webFont: "TeX", + + // + // This is the font to use for image fallback mode (when none of the + // fonts listed above are available and the browser doesn't support + // web-fonts via the @font-face CSS directive). Note that currently + // only the TeX font is available as an image font. Set this to + // + // imageFont: null, + // + // if you want to prevent the use of image fonts (e.g., you have not + // installed the image fonts on your server). In this case, only + // browsers that support web-based fonts will be able to view your pages + // without having the fonts installed on the client computer. The browsers + // that support web-based fonts include: IE6 and later, Chrome, Safari3.1 + // and above, Firefox3.5 and later, and Opera10 and later. Note that + // Firefox3.0 is NOT on this list, so without image fonts, FF3.0 users + // will be required to to download and install either the STIX fonts or the + // MathJax TeX fonts. + // + imageFont: "TeX", + + // + // This controls whether the MathJax contextual menu will be available + // on the mathematics in the page. If true, then right-clicking (on + // the PC) or control-clicking (on the Mac) will produce a MathJax + // menu that allows you to get the source of the mathematics in + // various formats, change the size of the mathematics relative to the + // surrounding text, and get information about MathJax. + // + // Set this to false to disable the menu. When true, the MathMenu + // items below configure the actions of the menu. + // + showMathMenu: true, + + // + // This allows you to define or modify the styles used to display + // various math elements created by MathJax. + // + // Example: + // styles: { + // ".MathJax_Preview": { + // "font-size": "80%", // preview uses a smaller font + // color: "red" // and is in red + // } + // } + // + styles: {}, + + // + // Configuration for tooltips + // (see also the #MathJax_Tooltip CSS in MathJax/jax/output/HTML-CSS/config.js, + // which can be overriden using the styles values above). + // + tooltip: { + delayPost: 600, // milliseconds delay before tooltip is posted after mouseover + delayClear: 600, // milliseconds delay before tooltip is cleared after mouseout + offsetX: 10, offsetY: 5 // pixels to offset tooltip from mouse position + } + }, + + //============================================================================ + // + // These parameters control the NativeMML output jax. + // + NativeMML: { + + // + // This controls the global scaling of mathematics as compared to the + // surrounding text. Values between 100 and 133 are usually good choices. + // + scale: 100, + + // + // This controls whether the MathJax contextual menu will be available + // on the mathematics in the page. If true, then right-clicking (on + // the PC) or control-clicking (on the Mac) will produce a MathJax + // menu that allows you to get the source of the mathematics in + // various formats, change the size of the mathematics relative to the + // surrounding text, and get information about MathJax. + // + // Set this to false to disable the menu. When true, the MathMenu + // items below configure the actions of the menu. + // + // There is a separate setting for MSIE, since the code to handle that + // is a bit delicate; if it turns out to have unexpected consequences, + // you can turn it off without turing off other browser support. + // + showMathMenu: true, + showMathMenuMSIE: true, + + // + // This allows you to define or modify the styles used to display + // various math elements created by MathJax. + // + // Example: + // styles: { + // ".MathJax_MathML": { + // color: "red" // MathML is in red + // } + // } + // + styles: {} + }, + + //============================================================================ + // + // These parameters control the contextual menus that are available on the + // mathematics within the page (provided the showMathMenu value is true above). + // + MathMenu: { + // + // This is the hover delay for the display of submenus in the + // contextual menu. When the mouse is still over a submenu label for + // this long, the menu will appear. (The menu also will appear if you + // click on the label.) It is in milliseconds. + // + delay: 400, + + // + // This is the URL for the MathJax Help menu item. + // + helpURL: "http://www.mathjax.org/help/user/", + + // + // These control whether the "Math Renderer", "Font Preferences", + // and "Contextual Menu" submenus will be displayed or not. + // + showRenderer: true, + showFontMenu: false, + showContext: false, + + // + // These are the settings for the Show Source window. The initial + // width and height will be reset after the source is shown in an + // attempt to make the window fit the output better. + // + windowSettings: { + status: "no", toolbar: "no", locationbar: "no", menubar: "no", + directories: "no", personalbar: "no", resizable: "yes", scrollbars: "yes", + width: 100, height: 50 + }, + + // + // This allows you to change the CSS that controls the menu + // appearance. See the extensions/MathMenu.js file for details + // of the default settings. + // + styles: {} + + }, + + //============================================================================ + // + // These parameters control the MMLorHTML configuration file. + // NOTE: if you add MMLorHTML.js to the config array above, + // you must REMOVE the output jax from the jax array. + // + MMLorHTML: { + // + // The output jax that is to be preferred when both are possible + // (set to "MML" for native MathML, "HTML" for MathJax's HTML-CSS output jax). + // + prefer: { + MSIE: "MML", + Firefox: "MML", + Opera: "HTML", + other: "HTML" + } + } +}); + +MathJax.Ajax.loadComplete("[MathJax]/config/MathJax.js"); diff --git a/lib/gollum/frontend/public/javascript/MathJax/config/local/local.js b/lib/gollum/frontend/public/javascript/MathJax/config/local/local.js new file mode 100644 index 00000000..7bf733cb --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/config/local/local.js @@ -0,0 +1,37 @@ +/************************************************************* + * + * MathJax/config/local/local.js + * + * Include changes and configuration local to your installation + * in this file. For example, common macros can be defined here + * (see below). To use this file, add "local/local.js" to the + * config array in MathJax.js or your MathJax.Hub.Config() call. + * + * --------------------------------------------------------------------- + * + * Copyright (c) 2009 Design Science, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +MathJax.Hub.Register.StartupHook("TeX Jax Ready",function () { + var TEX = MathJax.InputJax.TeX; + + // place macros here. E.g.: + // TEX.Macro("R","{\\bf R}"); + // TEX.Macro("op","\\mathop{\\rm #1}",1); // a macro with 1 parameter + +}); + +MathJax.Ajax.loadComplete("[MathJax]/config/local/local.js"); diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.buildinfo b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.buildinfo new file mode 100644 index 00000000..16fe5e99 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: fedf9ba9a5b2ef65b82b1fa1eea24e52 +tags: fbb0d17656682115ca4d033fb2f83ba1 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/CSS-styles.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/CSS-styles.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e75e38e46b6e78b9bf6d244d6df3331a4e592164 GIT binary patch literal 16226 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 literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/ajax.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/ajax.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a0742da6caf419767fdb2c874ff675648781a950 GIT binary patch literal 57048 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 literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/elementjax.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/elementjax.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d0e18200ea297bd61404adc6bbd908f79bb7dad1 GIT binary patch literal 35492 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%0AvWfP*w`V& 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 literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/html.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/html.doctree new file mode 100644 index 0000000000000000000000000000000000000000..ad0c7791576e437868979f83b10306eb8d88b559 GIT binary patch literal 39108 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 F{{YCjv-$u4 literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/hub.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/hub.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a21a592c4ff629ebb54728614b9fb0f6a6c75cae GIT binary patch literal 119658 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

+xjQsZs? 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 literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/index.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5c247f75240669513a1b0e799d752f40e01c87d7 GIT binary patch literal 8245 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 KyTt}ql|KST8PpU2 literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/inputjax.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/inputjax.doctree new file mode 100644 index 0000000000000000000000000000000000000000..cea696443151740c0047e8ad5a156d4f52fc4cb4 GIT binary patch literal 27930 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 bFSzhyRBl@?SSR3En8;tr2-nZTs{Q`}VcRdl literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/jax.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/jax.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d380eda8161c635c0c31160de8bb118d31fdc880 GIT binary patch literal 48210 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 C6J@*r literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/message.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/message.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3c35445bd35c7869176b5dd9e38ab3e40a62af51 GIT binary patch literal 23093 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 literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/object.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/object.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8da7a6c3ecc36b09e4ccf6ceba271c43e3bb3cd5 GIT binary patch literal 49195 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 XFT}d%39vfAu{e!q;KEJvuxk2WiRNNY literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/queue.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/queue.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0e18b82e4da6d5ff02d61037eeb619fea17cceeb GIT binary patch literal 29531 zcmeI52Yeev+W(V~Vk?OgdIyD297t?>2{pjc0;VJirWi-I){zuh@{Xh=2KMMBz|ni} z9R29M9vr>02&hwk+nYOc|-F*jjrV5?q zQYKey$`?{jF{WU*lP|^Gf#ddb2YK#%jfwhvvfC;3_Bcg%u;&hGY^@(KU_i1bGr=u8 zWyc*ld0^`>B&10fQbl)IOY2aAJ2^#ia_fTFDdl31lTW$zga;Gdnat(fSP4ZN ziMq~oCYOS-yHuOIbYou^!fu9x1DC;p%X)4c2b$#UploAW8!%l{Q@p*xbfUXlVkmaO z0`A!Kpv2H1>GFLuHcpQz=QEvDl$g6h>l89--aJ`KHgATcd7I>{OR!$7gW%7=@F5ayR8-u%EdQci$Pb_!zwMo(G zR3(YI>tpQ=Ja@y!^q9neGh5J=wdWrO6P8z;jG^R(ShdSl-x|4^bp_W*5 zo?0l-mY%y+dNJvM{nq_!N~V;q@$^MR^LMLaKWKTNg?n?P~^W5E4zRLy;7@+b^pFZyrPM;nxbYyW^JX4Gp@=mGa0Coz8SJpDA`1W96cgig)yeW{Q^z@nUbjGi?g_%$`m>Q!2)jwqg|HvoobM zSrm#6$7Cs9=%l-eCBx)}axvFCKAy|WbmF-}GL^~Ch<9aj4jJTA@nWf$)3oE1icRtO zr1*5}261$2^{v zl{48@att~P#GCPPXO@$X&rWl&k+v-Hbh4zAMs#5M@sk=fI-+Gx5hV0QsKrJPcd0dl-` zh@VrUs2r>>im?sK3i%y(kqapSm9LcPEa#HOX5-9B${JLtu6VjI+twDkg-jQYz{$8U z77&RzSe3BYieP*B>M#~_Ju1YnJ$E0KO0&P9XL9$I_xH2j-(TK8K;A!4-akm*Ke*!k zLvY>@F0`%4JrpC&_1wckXaCxF_NYF3-NUWZR~=}b{@*_EALs+!BQWuAJoiX>?7s&5 z#|IJjsGw;Sd(xTwoTg+d<=->uzJ?K?eGa2c%srZhag664D>JV_{r)G$9``ugMUG31 zh-U2`ucmcEV`3P3bUWsr*g78y2)QRQ$46*q{_e@GqY(EQ(cDvPl2oBPnaR7S+AE8t zlzW<*=ILsrXC#J`2UE#hrjz@qGY{1)^enaEv(<9XNem^LDY1L5z0L7w?CyE~NJDpi ze&1Q0)7`_2AybUG7hsbMJ@+DPl0HtQ_^s_AE>`B3G$sbia_*(+(`-)ys|gBU=7`nh z;&+7zT&b?(7!4f1qwCNh^wR^ndli-aYR|nU>`yNA`;)qmlY6b5HImVyWb_k*y?Y(G zT<^Iz$d~`GbT|4nBQ4+Gfn59@+Q z8q=4i@2YXmqt-c(N!#Pf?vHZLO>)i?*i>wzb0qgk4EdDjJ{`K_0qc%*#R(h93IEc> z$$bVD&wB22vi-jyyXOO!YMgt)b6-@p(Q)o2+2~K!MlZ`ougK=F${w%D9dL?iW(2C6*nkODtca^8^2$ zFKuu3zOtErt<1ks=6_Y@-zw+tYO?*F^7qN>2TJy%X9h5eqbaSdKex@Xvv1d$$)}t- zF*A^qEw%7lC4OTicKQSV< zfKsq*RPgyONN{dqsNX4@g$Pk9XfLef&|X9c?L~#qUQ7t>#lgfdZd5f4m?a3c*5NLz zD%0VZB^6(%piQt8!K`G_Vl7R$ah|1WFJ@SFDV4b|Gs}>Q@+}K^Caz0@b`XqAW(>0Q z*sKf?tOztnZ#56IoT4cESbH_4TV4W6w}Oz;ttg~)D+wuGBbXS{m0>Z+jN^Q+>eJGp zJ61+AZ`xW`iJ4W1hw*s8GZQ$%I2*83F#?wLmZdH+O_D;e*(QdNW=A5lnh>I^3n9LS z5Q1xhHJsK`#5CJKgmzgQ(Lwu}bpX$-%Q2`JSrN09U5gfd>$@e@S>Q&QC0Mf_Nh!)i zo5%W*JR;T}5xvB0Kq3`oLz|eQY$O3i*;q(XHW5;kNkWRUDOgjK%@o0kiP@YJ&-{v` zT>d`Q%ihRyFP|^uC+z7M76PA0NXH_6RJzRU59`l!ExR!}lCpYL^VOJ5Vx{K*TIhU$Vhi$aK z^bu7b?{J{T+K0bVp^TWu!MTu6=0Z-zCbNaCFg7d82YsGyxXqT<8klt}MPSygg_w04 zA!eN{#H`zbGV9`Dt=$fR?!pWI`*t)f=%y-e4|rw=OJvN?LS#pDV^!5GhAu`{vy!bW5DX%b-dorPGvRfyGh5n}aSLB?IHfT@VtP4a2BYYgj>*&P|i zXahX62gk5oib`}ab|Le>U-8;~debevq))H)=b_Sp_KLTdYtUbD%nn41=Q=IJl+Q3a z7H0?RI^5>iINZ}E0q&Y1#EoeoZp;XATNbPi!ZQiAnH)zNP-PJAR=6V@47Yhgo+)q) zycbSQvf)76qqwXcU$fP5)kP{MMhKIl5GExdOv+%k|8P1>VmpZHEJ|xO;l^w*NX{YP znO=#4L6XNEdHNW$Co)Va+J1ME4F|=&Y-)_Ox8k7Y38D6DA=LH}LTz6#TNw?P3;UJ* zBo2nW{WpW-jL#ZA4cnTxr`^67tON zI0iMTU)#P)asAr%)kwwU8X-)s6~g2?Axy3Z=h3!rkl40uokeNgNVw9rZzABCn!o^#LK z!%@x)bc#}+mVK{HfsQ{Y4juOi(S5%VE)NLN`5>tJSJC#6BK!qezhDm|pxQhFc;-=# zfj6?^64sfpT|Z`1JswFFF-X|1|7fEj_XH;*_oNVVPYEISv=DO7fHmZvRfO90bDVhQ zd5-eJukga8JkO6zvX{AAp2sxmZL2fVRAolzPZ#yntJf*%`AbLS`B#&9K?=rZRg7qJ ze$gs|@k@$;@t=e+epv|PSA;Nr6%^wYLg&4vh-v>uhOd($?sx<6%$pol5dzw>O6U<< zG5@qIVBWH6-}ckmRvcX%Fz?t13imE2D%^WQ3irN{!hIlITx$j9&pI7umkY*)Mf?z% zT`@2papsx7*s#AyvYo#b#C)vl#%9GNu&b61%qKP}sy|f(sy`E=`g0+wzYwDLOHg*L zDE&$i{s0u}_!<$G`3CUJUpdM$fnqVUmI-Gq-`Z5)`Ke@+fLlv?TxH(!y^V#%51feA zk3!fE;MuX*4iv&}5LoTo<|EW*26Jp=3kCHs=a?ac>}D8kaA_Q;jUOd56roI6ncECQ zQ0@Qf2zjQSW7y(+^NHg8VuAr^DLP^N~WBHwa-qN(l4Opx+m2 zr;fi##mq0^QfSEPEJ|7F z3*oq^;)W*^L%R#9GPYWbaEnMUt_VmkA%ygjLP#$qYI4R0XZ* zYE*>(uvKO;;|NnbR|Y(@3dhi?;$f@iyw?Eqq!+(9CYLF)5-^_BH0cR8o2E!MRq}}i z>`Fk*g{GOLsxYhCODNE45>TMkg%oHFAq84fNP*S@YYMbBf}dC>s;G*Ybw~xjbpg+; zr%R|CT9OK@g_(#DW2*$du@n9}Q6&?zzM|l|fxR5A8%hAzjf8OBSP0imgm9e%)^Oca z5&r#NMekMO)<7a{C+1#8&thM>_7x4U!ZnKm09)2iA#DU~Wl232h-30Hr#(8EoE z_IEhl@y3k5Z>F*`#KsbKdDsVKZ0k@;J5~o9PQpCLHO1pwchyY5gAGW`z>BdYqkU(o z%u-EtnIL@l&vp`au4teqQ9Sg2oLz@(w6Lp2h5UHU;r%76aBa#GOlj?k>oP37naE0z zW(t+vE?gR$k_L5@ z<*2p>gTGxvYq!;jiaA{oRLrE1irFEgVs;9tm?=;db3)jUI|#IfHkW?o7gG^U7p!Q# zGXT$|EyXdvFp3#i;R!Y8VBIZi+0G2u_E~q!DLEZ+w~fYAc?s}TL5Qb%gm}so;wb}a z-AxL#?p74`S$8WT!%StsGqX5`ot&u9$)(4o{fA(m;@$syZQ9KC?K8*Pr`NYn>;F+( z>`C#f^_7R}W-n`&y#upo3v+EJXuRqr)FeGjH@{Zu%4P|(4?(-%P5q_WSLsi-VLMOT zk8tFPy4hc;`L9{^0ZL1CKTt^ZKM1UOxNZ(cGFNlfLzIM;a;T7&F;~cg_C#Gz??iu^ zdKjXXL_OhP;(NFRen&^!IYL*k+s^!k6VDvUk(QFR<)ctX*)W=pRys5tV+EIHMbdu& z)jPqK@K^+TNNn7dNSadQ#gigRh;~`%H})P zgSqTvHP>J25Ok_vkkf2IPWKD)%VvBABr8>)Xkks6yupsVEl+sVEl;sVEnL)XU0!>Te16+e2;@ z#LUIS!Q~RbGnXo%ziTrqcEN<7N4k(Vmq`MT%WW!nTp?VZpwyJ1uKr9+J+GuFpBmp#T7DD3|AvA6k zLgO}2?M7u(ySZIBt#vpJV24V!adQV^8qb}8XYS${T0(4W;|aZD?_uw@(s{eNqmb&2 znctIw!rTLR=3b5}%$8`K5MO!aaE`e0%JB&kCfMnCD5{RrNltm$`v(``Ircm^Ano@0-s6%fzN~x_*@8qFN6^I5>z==EOGcs*yk?&Yh*N< zZvYnYIQkW2Y*u9aMl;l>X}+}*GFT60|9qwYj%?8QJ>Z!iII6J!T9!YOOHfX`3aj1f z^_2=}2Fw>0Wq71&{?b1n?Y8}0FVuO*7*>4W-!OlG}WFp8+NHfY&1R@%87h3 zOo&hFg!rUhh)-gmD#dzXmpU9lV>akFM-cGLNQp3tcD?Q7@5(R@$mIM{HV#FjB|y>q zLKH0^MA3pm6fFeG`Jyl9FD&$(ALJP~iy*@livpfmjAK|r@vzR%`n_Z}=n5CNDVOk5 zwypxd{x`kBuXyIs-7U#=D#KFtddjf01e9SJA!S%rNEzZn$}k3umSH)`)lkQB;+f?+ z!Z>U59h()oXhU7WMx$m$MWALSA!-_hs2L|j&B~zf6YR8#gwy`vvW@35OgRDYOcTcl zF|oC?HtJ=zQosDAB~`S6bi5R**Vrl+a; zhR9{pjfBwJSO~36gwUEKgx02DzXkBkB(w|QI*T&goN#3U{8t1#vxP*o4(-fjo1}jC z)Hu#;iIm!|GWd0%@}Pe!n;vRgbCO*QzIL&D8>NKcWFZ8%6+&=3rCOR)w)q7LOpBz; zAdReZSIoFQk(Fic9SC@4M~SGKx(-@m9?)tEo+RvKQ$S#f;vg_ph~*MO=uQ(tXlF2L z60KfRLDe~g>~=v!<=YkT%x)Y*2a1fXdD-!Br;hDzle9&WM5r~BM(uMC8x6H~PDE|G z5Nb&w)H;Mv>jb0JQVQF>D(m@G+Cku%E{-9ih=alf(-}4zb!kqdE+a%;R*1TpLe%BJ zsJd>#eWx8AxkBg6cDKyWg<~d90t#IKJk!H5WFcO@KN714uQb`D< zvJgtMgix9dMk&paTs>4TC!X1pBRX5JtUAk|Df;{Kw7J2C?aJMFZH}9ju`7j@WkP=q zGgh;`&;O}lxN@r%&2W<+i@0{LU~pT=#adI0g{!N%-u2_Xg>pRDvqwJhyyGuSYVOKP zsiOIvcCM?*?4_cN&B}PuUUhF*UAoC37^fHP1SaK~U}Mk0s=pt<6-9s$mQu1g|I$J2r=sgef?bweNT?n^UEjBhpS*QAO}mhE zl|KF=0-pJ;L_Er@hl}X;>EJK6(Wtycaj3jhh`BBk!trt;6s`c(P%65vRD|Ed2Zc7j zLqsLK3h>O;97DH>N=*-cjZJcGBuRu@*u!6Eqv3WvC*pR45N}rLB;UH`=}0`dxakaO%IFqj4O+ zS1!iX?K&wve49tVU3n_@)BU#1ptj$>PZk@Sm0zO$_Wjm!xZnXr;DQH*xZoinE_hgo z3myUGg3ZIK|0n`I{n2mR`qaeyTSn{doL6Fxy4tmMVuNywA-nx}$m)P+?% zXr5MT#^GmdETo^60MgG1A^p4%(k}=h{UWG41?8{t<|Se6e#t)}g6hkFXI|kL)>jds z39)+ZKL@c3tH01XWM1`4@tQ5g>wYQxh1Fjw<2N8#^}L=bylKh56_6i|=leDd^LF(j z{9>OfyrcBhrwZ>9tUgtEPw7vNy#B_#k0knB;RB_olh@74pOu>0^P!O1^pVm=e}ifM zg2X;o_*hA(c%KNVXrBssu8=*9yjrrAM+lp%)_tZ(Jwo`L6VH6XkxG`eg`qZoX~Wd! zuau5VzqW!)v*J_p2;mz9_7TEgl@g}k3Q_+ZsCq6FO5^v!@UC93{oz*V2V_+A9|3;q z#ft{QiY``uMXx+Wn1(_AL;cV|G(%$$z)#0~8m<39eS=X^sb|c@YIn^Ku{4JIG=6G6 zHq1t2?mFc~#i$qJu$T~s4Hx2u5ny#bHj)rqy*LK*G3~zzyLr8TsANVFSu-6Qji5Rm zo1YNBQBw{-Jsn$6(es#&EreWkWMLts7ZE~wQ6Z!k6GD1%u-|lS2?_0VOlS1_mAl#{ z30J0LOA+wQ(h@QHM$2cGL5ST|gg&#eWo>ep#T8c_3NRkM(a5A>0jfUDCc8w9)9>h!g4CSctw&gy@?jMBk=hjlRtkp~=|h zoUo~jqpE{8M{e%??a5e|CMw*M_7sZz@N1S{QM0pl1zBlKKWrOcot<_1dtw;Xw89ha z)Ui8if_*(Hek~Bw`@y>TVVWjVy>?MrH@LIyZ_;Y+ZNtab;fm38-8Xk9XFBXmV#`lD z*~2EOe{LQY(;axf`{ylWtg%_SBsve<(i#oxZ>0#VzqJtSZzII|lZ9A+TTs^DHmvm9 zAqeMTeavlIh@(nw5AaJfo6w(!^-Z`Vaj=pDgL&9a_L?cdHMR4wsY=brm9Vjpo+bgL zcNRigBd|#CB82p=pvEWVukmR&VeLF@cSKNa16XR}7*V% z(=F|!PuuP``sGmUfK}DEnrU@fwyA*a{1~)fGcZo|s&J~+r3a)tAlYi+BVWfZBoR*@6W zlsHn6vbHqT*s={%V`nKHna;L?OS9rrGuN7fz|OULl@g|V3Q@losJbj8O5@(bX?@n6 zJ%rTeUjv@mhhtcqMXS$bt6dfPKiuo=>+{*q^4Z_#)B3-m_yBZODqp|p*MXMLK|Y_z z^eejk|6m)70}fGERFy-8xNxoz7ak_WF^7ZI+1C+-SRvyW%)YdQG6B1QfM+h0hzVE&T*SH01neRkjmqCD z4wV-RvDqa;I9@7*!eyYwy^5~O72)sfSINy4glTeD0{mQ!W9T>WsF{9UWs_VTNfIFz zPQR|P(Ga_q6A`;k2(jyh5W7JLu^Yh}VmBeku0uaZFLX2Kp1Fmiyi~IR|5k+9L}UV+ ztj{$XR&TS(QGL7OP<@9G)prU}eU}i`cY`&mf3Ju>kMi$9hF$IjSSaHd+C|)~U4mPp z;Ni@DHsSq|gpn!~P8J`q(NKJl6H$Cf2*rnmP<%uP#Ye#!ijN`ice6jv8LLA!Jf>AY z2TbTKj@73U{`(A~yPB)}q?zm``)@jr{XLt`naxeA?&YTAEv3n=tDN`W9NO5!J8ku| zHRhkvSK!r$yvLEZ5rj=klht5pFOx5poFx0jwc9>ZiWM`wSg^Nd?{|2a@?+CC?;_N^ zwJAO&qZdL}OEf!^%h?Ay;maBVb#Zp?`x9iP^S-`3e%WUFN|0%vZQ8FYInDPq8%?=imwo__bG>0P)n_Y)gSL;h5m(2ze9 z(vUwF(vZIp(vZId>A)%zwXX;_h8xAcCg7QGBnl>y(j5%>;YP8)+GtdLt2k7BCq&iv zLR9@AMAeU=`pVtIzH$J+eXnd38%V%2gCt_Q(PxA0e2CRQ4Ytwf8X^I@h6>R&Oo*;J zA-d{8^-n5+`lp!W{WsVSM@$zr0$`IG$FQ7YW4ow6+r=7e%29sG)~)H9e`4osI3`E; zGK6mo@&`iu^YX~A-ppunRUzlMxl_mmB%qKB3Mu45LJGOCkU}m3Mhm$p;cT!!b}`O9 zvp7e;NaVYO0@>Pqu}dOT)=LRdxwH_K%Lq}iEGQK!x9k`Pv%&7yF`Rp5Igav}b`eK6 zcUHDj{u7oMD{U}d-sTOh6(oSxibCkFB*YSpLTHWyMN_2~&6R~()?0-W&y42?$E?kF zY*xghqx}RMjhZG!pr%=fnpK6USxtzV)j`$ZHtAS{Kw~!8=(;8W&#Wa8w&=Ifb!{S4 zpml5lG_5NEn${DdX`&EK>kHAe0jL6rzm#n#>@z#w2pN@kW56?;aP&PrHY+lI<*jUR zT_5lKD;}BT>)O=n+RWG0`mbiXIr#)-3^%!E2ZT>_vI8q;gY21lz+eOGuPlu%d>Xa~ zoJYU3rH#hcTS*PJ-dc#Qw-I9N$wF+sEhw+<5%x>lA*l3AEd)HXy+n96x`A~EWOC|` zHV#EQNr0j$LKICEq9`Fm(KJv_6@58%XJPoL%YRjw(fdGf>Mnq1cI6m4RXpa^Bkg8W z?(U~-T?#*IuIJJHaUFl;mn!4kzq{ z;|Rs9&39~8Y@$tThK)u|S`nzp2vL(2qGqNLH963C0*2|9aN6H4OrCTYs{pVYj$?$0 z=wUD4WR)63CG!7;TU1?pt?{poEaTK{Q7zhN*p@gE`?8Qy%@R_o*+NP&2du8+^b%t6 zjbmgTNB2~$nsuDL5meW4JVN~TOxM?}<5+It`y2LA^gI@F_C+oO?XRVu%9<}gH5bQK_& zEiA_zU-j;An;2e4C@vOR!1;{?5Ij-{!J~u_JUU2d7jRBM=QX%>-6Qb{OA^NTWYxG^I2=xZPM^uG`HIv@8FoIL!h6I z70sPic$b8ui@n_)gHm@iV z3SJeW|1}|eUKgV94Nya|N~BER6i#bxrm=0Mm-k}1nQ{Nc?eXO*-(*@&Ykt}ojW2=^ z2Q`_uxRlEEHsG0eIQneHX2s8rndv<&BpPbXYToq|sOt0-3_AnOdq`Rmb(xg^H7oNz zVT{2mp{pOdDw+?F@}n`1iIHI?@TUf=vBaV?1vrmK?+_{vw=!CJ~Efg^8uV04j1x4n;#?_uYBz1SneE=;1iiTRxTEVGEs%rAIP(J7}WWp~ajYQ>}Z z7z5vpY7ZY#6wP8*zJRR97w-IzqxdFV+~zsl|8^TcyUouuOW4E>Y7doeq-d73(ouap zW|l&n7*Z~EO<30~t@Burm0Hm*;BFV3C<)mQyk{xnxKC>`aQ6F^okrxh~OATS?9GN;o7jbqgr1pz~qD7y8VK3QhSB ze0GuFm z&fk-cg-hx7;KO%jRg%!20@v7fQZ%a}WSK-+E@E2_51I5`MLwM9u}Di(K$Bqjk*oei~H~5tMm8G z)%!nYi23&bOAtTYe^c9%ybrX&KH4oO7O45mqdzHH&t^N3Bl}3!)9uUpRt01A1`;wh zZzyD}-UzJB6*iX8&J{M%8AJCZu$-t5N1>wG6hWKWjHCS)3ZES`n-gFQ8prfvZDtGM JvPoDq{SSoc`d0t| literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/signal.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/api/signal.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1ab8dbeaf667e889c125edfb8c266653b77e0f29 GIT binary patch literal 51074 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 c3RQur|e3WdGL(Cy!YjOpET$8d(MB) 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 literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/configuration.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/configuration.doctree new file mode 100644 index 0000000000000000000000000000000000000000..deadf3242b5f5d7821a6e9a6ef1d1e97278a6686 GIT binary patch literal 75240 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 literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/dynamic.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/dynamic.doctree new file mode 100644 index 0000000000000000000000000000000000000000..feeaa3b7dfd2e0e45bffaff390d87dc0589f94aa GIT binary patch literal 34944 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%0A? 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 H4fgyGJiaL= literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/index.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d0f36ad4b18737bfedcc30d55cc9cbb0224fdde7 GIT binary patch literal 8864 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 I2Uhj}2SQ)pP5=M^ literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/installation.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/installation.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a1b8b330ba5550aaec3c21907a3ecd834c74f094 GIT binary patch literal 36590 zcmeI52b>$l`S(q66K)vOn=r*^@ZEti%@9J1u`$>ITObn5o$j=!)mbOq&Pui~VG~F~ z2`FTOY(ql+$(#5-_CC8)pZU!*&&)hibp77L<;HNU zS*^u=^+q{}bNU<$>djoV*U}rJy_0C4p2F;UX)I_?j0bVFZxT)KDegaQ+O*PmX*dk> zTZ5r|9Jnoki)O6dt9S%HaiisigOP@-1o?8XC8#yVm12IpR0*P)1j-Yr-e?AKzBJTm zHS=*;azQy?t;fw$tyXGQ8}&GvwXS#o;VMD1S*=%k$4bp`w6v}Fe%0}4HfbERT}C6- z8tGXUIlOc7ZVka!Olr}7I8BvWyrmw^!S7Il!;f;xPr&{pUZT0{jOE5qvsA4sNXkrp zOSP0Q)$=7c99Fjk(Y$rVIV99wj%YrqABbZXrQFzBuQf_#&+39S@2Qg(cl)m^9@R-x znV0J2e8y{Y}+tt|?TO_5oRPW6s<%Dp4VNN&K(UNdM z;lNDDGa>P;^@RHu4xKtlF|;&XSU4(8i~1&;a&N|8CLbq;2NV`fDIF(;iwX-e(P+!e zvQ}XhGF>ZE+fnbPsIO;xJweR^aW3jdOPriUr=TTVX=^GM%S}V{_2mb;%eXQ+wJ-y* zLV%(b;ogNAY3S3oPum6Ku2ruNqmXjZ>BTD%-u{b9%~Jn`xb$CA+EUsu?5g9<{>xAb zmz1`7_YJ0YR!QyjH;KQwKP`PfIxX&ZakIahn?4+(Gj6;gIx~sR8Y;|emMW6bXk}rB zFI#kWAy;ZPU3I7hoY6T+bdR3GK9b>cH%0d>%o-{UZ+2=g=WUA4FU%^p#uYz~F4z=Z zSeQ9nE5$Ki7j25}RhaI5R&9zdE=(s*wH&Pum$VA|(iDSe4eeuArgx)D!o5QfU)vhm z9+o&5RwKWm=y^_YUWW zC&%H+!pt<8=<<*vUC|T5?}iXIH-;3X5K_1+d%_dLB|!+kSM`Jo!}&ogT(fq12y2Cd zr_6-{6_e=daEbDO`}^!DFV$v^+Pp8UUz0?eVBPfE8n5#+y|yvc!D+=t*HXI6R5}=+ zj+Uwg(SX<YzLSVGg3(6l7qGbP^=nk_wHrT7b!PKN0JN(Dw+5&3ONG$9H8p9J83h)-?DMqaBn z16Qi$qWjatuS=pt0L?@~Qn`yBAo+Tr$=CIguNx#^50ZR6Sn~CdmeQ4M-H2%ILqv7l z4+ZU;lIUS1W@`L86pR#fnp<>pYlzTILjOCORP=DzdqfgFQf2+OG4Uv0A)$bObP_#g zd*B}{;2&qeKVHB;LBKyzz&}aAKe-M3EnUDrg_1oriJq1L|7Zg~^mwDVr}Yuw=}Ghq zU5tcexENc zUl6VikCO_TpQ)f1l9PJ*7bVe)GcJ8%bmcDz=Y+S?m50`Yztjr~2Y4Z(Nu8Uqr zkzV9`b?+`cD38{+!{7F5Sbs6*{t#Rw2)JM>z5Kw(2-A!(=Gs@4O6E>UU zEBpI9PJMn}(#J5e|J=cWeBKXI=`8C_*Qn*=iMSbzEz4y+PCj4o=@MdWj4m{e-qi(@ zbv*AjnBF6p-Yb~iCz#$Zm_8tw7G<^mL3KPA-A%=eJ_Mv6PNI(pySpvXk5abVcT|w= zF=sCN7*+Q1B>IH1?WHVt3GV2VYAK)UDePt!Tu$wh1(_nUk35*Yz1Edx34DA*C>Fg<&S%{JiA@S=Kd+#or3f--)~5w^{oG zOlAGqAIbhtN%ZFoxSw~cRasvcOzzNF{z9a`Ceh!-!Op_`-E)ij-F`Tqc9jD|jEFbq z+%%N+(i_}fki_lHQ>l)UGa8xpnNP)K%-fRsaP9NW+l*Cx^`P00o5Ot3o;yyONoIzh z+;F-5+NxucvN3bq$D7-SY~eT6lZCmHSakc!_ngE{7jx?B>p{H{yBU1mT$oiW)hjJV z-EJn|#l6LN=w|U=n7wVRwlZcg9k|*0p2gVOn@w_jQZa5n(epOBIieSAa&tv5+T`Ym zuG-}0L#1twOtp<$AdkxbH9Y&1>y0AOYdf1vj-J{=^`;NAve z2Cx{dkA~l25`&2KsFN7%vIcY;A#<`Lb=s<#3_6uR?i!;^q2qS#rxqx61f^Qsz*5=R z8s~Ue-{NOKeM{Xz@Y$*JP)gq&Y`jwuhscwPI8>AhI!u%bJ6x2CIRdJRIV!7|BXLkq z(07+h?T#WU=pGG8T;9@I{*R<{3{k@sqpAh;4l3O(wj_^Dle`?(?skaXamp3wj#nD%G)6l>QreZGl=f`Vnd*Yt1wKbkSw|#0|1O)vJqS&)&xIuJ zo;;9$oZ-;sI#!(WEx-`h)rALyKyrJq=Qy7e3HmgdWk$L#ebNawZsRX zOCgE7j3@YvdKO1jU{i&o(|7}cbrx#94`s^ji_%{rUQ6>-%1 zn9=T@LW)??C6qG8E#DzR1 z4W92&K{H7jsupV0hbo3ULhoBb?%2GrlQqvqCYlC$pYk$qxs&OwR%>iE>uZcHvQ}G} zb7T2lmqyENKe*XUrX48T0#*|*QwZ1??vn+qt^|O&AqxECqQD=C0=I(-?o%_kWk?0? z|I<=7$&=b>K@zuxXC|{kz9X|+&3~KsFG`}Mh05caa>{hOgMk%qBsrfhqG1KCVd)I= z=^~{UWSgN5wkvILFt0_be28&$C@oyQ>~ST zYC)fy0OOAM`IdY?!yi$)zdRA8>qHT;M3k2N08vEifl!IoicGYw$3f$)i@mnFJ8I6| zK$?iogCL1}uw}6PZq48!q)87c*`s^JEaq;sydIk7HJ8E+cFT{uNii4@Jj_A>)Xj1L zsE3OJ)FVUz>XD)V^(d%1e&wN&&Z9*u#o46XmP_{-94Y8yA&Gk&&#aAz9oh&Z1#eH= zkMBJ)+>znOg9pGp0g|{U@&vfz9*`zC^e2H!TgtO>;FArqTT;k0R@x}Vg8?wMfnc|8 z?bV>wDEAQRc5(vGQadm45qxU&GhWjWi~8+ia|YjSo~DO z7*+8!d7>(wE{dvnhA67yR#8;NGojL{XJuF~kXU75aKK-Qh^ zxjj03p*Wgiboe6NCyx$atOO9Vmxv;MFBL`nUM7mTy&NiWTa}61E96o6ca-&&$C5tDTCosLH314h^IJc+t;V4#06(`y6_hkq%B4a5 zBzMy4zMnH`SDl62UimRPYmy>4cO{drx5kD7*XLdfpPdTy{`>3MBBA?;1thDF%9E@}-~FpH*TjMpclm zB}Ml+O9M_nFAq5Vf+(DRQ4~(UBnppTh6*6h9o&3H9u-@R*=^=uB`kIRHAv#V&Qo=s za-_0!8t^wP$TxkE;&kX0lc#O*q%AZuQ)FX3O^wnGe>MPSXN~s$sMjCNW>MKrKQm*t zt$ka!ZtWXO7b&z5nT4_yNw(Km65R&T&hFP-dr5P522hKm6g41{eMQqWwz{wdINhQu zHIWuTQ?gRig2=?u=e`9JldI3H-rqK$sJ`#WpX&RrDAo5pQL69zqEz1xpsK#hGx`1@ z4%zzW-2t)t5eZVqKZYdkCziTj2)$cU|0xMleu+nFA^(|W^z$^Mvo#O<$7|XBLg}M4 zeyQ|QTllYdH&fe`>AGJl${p4KQX}|I<;eX;VX2Paic&ql6Q$aIFG{ujL6mCxBUE!i zl~Z%UKZ$yK-_%U}nE;^v7f9m%$}{U11rN=Nd0}Sm{+osQyAM-57QpUA18~z=785Xg zK|A*Cz4;o=3bl`d^q75nU%gVU>7tZthA8ElDZ0Sy+gZ_O$tkmM&k{FjOLMdFp-eeQ z;`ZZ7nTnG_%u(D)(lFNo&r1VeB5AnW8mybI?7(1wl23(Wf8K3Z{M6aFg^F{BEe74$ zB@(Y8+yRP-tSk~mRt^*e(}P68^k7jiJp|e@7mCOXIJm0}(zN->WYrI;s(<|c{G z5;60?6ewUfkCCX(3{dYPr&o2IRC$JHo(RyA8SHko$o z{lQFm^=@Hos+H|QZ;G@@Eh`Syv2pgPnt?c1ZT98Yv*XwXmTkSzHa*JlY?j9W%d>i! zG()pjvQ@|1ML9_j6QyjsTeZ;{`=mm<^n6LahxTaSeoJgM-n=Z2fm;c(JC(^SlXzJ1 zyJO*vQwiEE%R^Ib*JxEj2F0BND@z$^ug3&hm)(*5wAxi``Br0XFCAwLO=|Rd>Ia*R zaVGE_W>I%0wI%>NxAZ(FY2 zMfg#UdqEPnif5*U#GKbc-jsO_?ZrlNd)mOiqz$->eNC*knpop&qPPe3f34FgHNE8|Fs2S8VIo z6gjv8-n7jtA&I++XVx~wVt3m-9wzUcvedpRlDyiIypK<^c;}d9L#qAYMZXR);s`cK=A=+P!xblq5w1`dVEP34eNC-BaAg`OPNM4<7RtxUBFx7 zM(o?~^UF@nShv)@isvdyX~n2`>z-tX78z!$@_?C9QJC2*3NtlPI2nUZVxuk(zYlTe zxi$y{!sC#{MLemr(UcW&Praf3wY9@pkk|()UP~Qj8w6KxyzJ6+)@&<`Z0Q=*!XaH^ zXHAn{Iu6+1>$Op?yXZ3SZ*4f8faDxXV?1!RiIpo|ldL8KVm)QcH~^3>@&}Nuq5!f@ z6hJ0K0pxyA0WzG`%l&asPkGobd3V|95O&Vji=FaHQ0#HMJl#Qmrstw3B!WW3hUxV>%_9Mb2WGt3Px* z!itPe41!cVUMo#lj&X@Wbdbf$a@=69exzsS+FAn+7 z6J*IkM-@HO{Ga9hi=Tq7AGe8vR`9%i4Mk)scF3^{)UV7*{g`EpfjxUH#>az_t=O^L zmujC}rhS+huu+Kw{9cGuSux+qrUH!WOX*z4mga2U!7L+JDsv8(wL?~GaBH;rX-{x4 ztD@oTXgYk1Wiudh%vKU|TdHia(ClMyup{T~DV?}VCuJ&8Pice$PjE9rq%k&Ou!U%8 zzLZN(gZmO^Z2LmnmaI;xePLOVoHXIH#fe;oSBk3b46(f}O;@VNEO}}Y=;wsl)Q^oI zG!&hT)XJ~^2M^O!=o!YUv2F>lRbFlF zC6eD;EiOvK!@}M&v^xeAn|)Jdt`_jTX!6NX!={?3f@Q#T`l+7wc9@1%e5xayTIxUG!Q%25F|$>k?k=& zqW61_2|X&|x$;LPJWmu=@qAJGj2DQaB3=lUirAc~h!^3Y-tTiL(*Mrp;$BP~{vi$0I4o~%RMD;0&Y$Ez#|a`b9BAV;qeMUHM0 zMUGx8iX6QTs)AS;0p3@ge2}wJTt{DhPp=}vc;$K@;!>|e?pPH z*^9O-`s|6kfxTN4#r7Ui6x(}6QDpBET^*jJPH|h-DZU@aj$Pmb zd?oIKJX7`6S*ib!VjnOnhTALkAGUyG^$~fJ)kj5P;bWq(^l=N24^Og{`cK%`tndI^ zslUImz)Jlm75JnyWfZK2v)+2}Y2Fg|8TUW#@R|rcd@Ks3SzQz+2M^lbemd*hF>lWl2 zK1gvrbmPQ$m5VYoXjH$D9Tc$vXEsRd48s|I+xUu0T(aR`Dc0U)XKMyJIF_!0bEqI2 zBlH^CVWs zxJ!(qkQ6AZ7u~tRVMp!0tWD&!d$Rlb6ebp0+VLe^#%6L`q+uM6)knM90h&vxI2Sa` zwsTfvdV70wt5{qbX>4Pd&9pn{ZMbTM83MQAaGaP~^>~B(Sh#ovK)ZECKDMidC`h0C zCNed-A(-*#TPAWegm25AhVUIx8p3x)X$apFr6GJDs)mqcn&JmIX!tyv0n8p@Wo9HP zcRvIbn*5I-iTklZw0sXl-R;@^1XPejsl0TM{!>HiXDM1bXt%3I?|!ZX7_$GuA|SiJ zlmoK+D^X_U~!3ei39!#pkB&LtMbz3#v2oZf`jN z=02i;xvwZ-P8S8t8PIMpXUg3#f=rQvn}s(x&W0o|$1}rGEOz7gO{%@K?2QKfuT;bP zc{t`69CJM!#s7_>&!e<$Db;{iizxFAhy^JS?}w&c-M6lPDpzXNG3Ci}?DsaLHmdF} zFzxy1I>#Dxq1gVbn9CTq)N^*=!1uMO(Ua2+GJt7g1Va(d%ImO0+Z5OCrZWRnZty&r z>3T=FxnMAV;f4+AN&(lIb#?X(do;9ygO1INv530-obDzZ;+UMjaUso#LTM|s9p+C* zS=slzE%{j19|{;@m@0me-Js7aR%Q?_GSlr1Gnyhca> z`!E16YmdEbL-}|~gHevka9U++scKiFdIPk#yfRqq>=fJsNtF!}#fmTY%7h-59Y*Gs>+_r~EFwLM2zS-7;xw_#f z5W{pUl>us__EimEpC%ZxiE<`Jw-=JGP%Sa?tyA+Fh{u#AU{wat;6qzzT&(m*u0)Z&bwaD>rdRK;hj29qQ-vo71o&|GG!_SNI| zrzz9gyCz;X-du>Ybu$OZpKfN6DBa9~qI5F{iPFs+4Apq^rfj@<2o4%=K7xMYKS)Qo zL*a`K?l4H=4mT#3|Hm}cy-g0`Lq{bAj>%kQ~mqOS{ z$TJ%-h#ea+6y|Tou{+7UNUNWhJ(_xtrdAJctAKknwa%{ZQd2LZ&CuX_A&Kkbsn))y zAz?q;Gvv`xygd!6GbrC>LsFY*ce2?8=VWVEr=-p53>nMJ=E}&74HJ!;-Cgf@3{<;M zU#G)rZe`S^Uy{VsB+8hb>x{FJHp!&(pnI!3n^9;@S3!{NVZAqT%}oMz8wm zgGuLBCSM?#4YGCV@feo&l!YZRM%k2sejD!fYsXtJGo=2FL9xHl9MR?s+ZeD6gCs^w zjaY5BxJ=qXnfPoR@?a9w_-!9oS6MrEyXclVE@@`_+j20RVnlhWLCf%Ch5Q+QoF>Zf z<8)DmA7_X%{5TV;5#=q}i1I8PG@?uxQT|&i#jS)BRPfo5#GPYoE&mT->mG0d;u2w| z>$*wpT;uSbDTj7N=3Nmecb-yY%y_<1NDu#9z`NbK-$^MIGo-5Tztn zic*rRL}%C$o~$ss#j<^bN1Hi!-f-R3gr#ivfpDi4Pxbb@iF1w8Z_9!1ZP{eeuT7&b zCd=Jx1UH~$DF2{Eqi7{LP_!XYDsNbn$}Edg)BxIDX(Mv?_uubY{kRGtDP;&rT$N{5 zgJQhf>Zso**|n;2qdu+8mR8NDWq0uJCf*o9C!K-|)G))%J=GY39$j4RE~|GP~pg;En*WKXx?AR~b+fyGT9w%>4eXs&kKMxV5-fk47-X1DSJ>3LV*K=#u z^*l@-zUTS(7V~Bpp)MZ|N!%lNX2PNRKsZt}?IX?qQQp6JHKQ2WlEzA`yQWuV?SAtH z;{chT7?5Zr(3k6>&$U-pHFaaME{Acl7Ha<=_EBtI4UAUaI%lRR`;7&Rr?L*#bBn9> zE!DWnroqL2Y=LQ%UtZakT3oel9wQiwxc=Jf7^S#D2F~cmyiC}hB#+9TTKkvQ+LHm9hI9)gaZlk%LmEx1Qmv=cmY!-sp5}uTPqZ09+93j*nJsj|Y>0rvuv*jpG@HCXM4(`O`R_DN5sbmMD$m*`hR# z=RnmsUYa$I=i;DAz^~|WHfGA{f2JPX^C&)I`+P{^USL=(|6j%8g%lszQu|CdCcMaC zd2tHM(TK=y1lPSpX)uI)sl`DcUnU0x^5vok?o{jVmHRh)%JU{7Q46jEIa*SdnEQ&WjA>w_BI6u=C_Li|2ss1|8`N} zekWAz|J7Ohf0sNe#k-Z`catWS^Bzdz-pezq9HG?d2;OJ@@Av+;Nr*9oX=q!hZR`78 zZHC#k5;w)0t>~&x@Eh+o*uftb4|PaLVbHEaTmfL~fWs|2P@)4NgX#oQfBQYg_O%s? zDUURs{o=^h>gH5ol_~W62MsLh^+WQfUOy~KeSbuhX7y1~>iJ_()$?sxJ%1br>3RR# zn^VE;K0y$w?UNAhi?Z;`cNPBA1c66YW2!GcV^Qx&qwaPi(`S_c%Hnetfl_^54wUK( zqLk{3qLk`OqLk{(P$>&#DP{2$(cNrh`YK^4)z=_g7sWFZMlsv1DK^n)|E1#OzTsK< zrm^xZ&r0!MpY6BFsZ&ofV|~Xs_-@KUNWuTFMBRN)%uwgwSLUe&><7G0`7@{PhYEd1 z@d`Lh_2k{y^4yPYRn*e@8|3cfx?jG|nco$&M#@6n7GKZ@k-rO6QvX z({K3{_VWh}?dJyFJ_KA>nA`rXS~dsAZePn{I?uu^95kio$63sArW_Z<6JtY-+CUa7 zcC&EaSQoV&a+0X83 zNbeTl%n$9h%hLXhUbnwRTgY>VpWpNo_AF@59Y7!&@ghj#4pa>LwIgcyAp4;54(6pW z-R`_`hw#33FUk3#yh+XvlW+P9uI_L-o~fEXLT}Xck@B{mH+4tx$}gPms~?bdN1OYa zb*t99Jg+Tj;A42Pjcki~N!+nK+uR&yA8>QL0+GQ9qU66s6n=U{$#5xD?Mo$6q9=-0 zY&Ym?Wvsq5?|;}ekJY2Iv3{{O_^_Yc-_c{go7(42A~q7Y43fBBo>>bNi@pUmj1=Zg zM%MLNfYB7+eoNrwb^_pgihWR`<-BD0p31w&cLi@M-)ZvA@I76QhVL1Aqqt|v+v9r{ zuWRS0_^#w*w2kc93au@I=kUVqIXv6Qo@*cQaZd#T+4Drn`Fv53y+D+#E`$nMl|{&2 zBw8t+MO)nw*(rVsZ%TmgMIr#a3X-^sd1e5M({6xACj+|LBCKgg0MJY9gMzH(B?I(Q z-aVj~@up&}lWzv-dN~@P_tqPwyjNu6ob3K zv1Ad3+7ZBU*goLD%u9x2z`MtBgg2F@BHs+hP>zOURc{n-RNfxP&AhHXD#fwJM+e6- zg%*x=UJ}>f*~W3)KHwu#AaHb|`L5;ws!Lsl&B0@?dng!{K6fb4blL5UJxGGrgXyGQncys3QG%Qr*z200qC z57HaOeXzVevJc^P?WHNQH}cUz_Mr+bWN+eyOaFPck-gbI;N#&61hS71CFe(qg6yM2 z$?DNiA*-?o*~f_9*(T3baZ>{NSP}uy$3YVJc%B)c;&c~)KEWb9u^jnBkM=<^ z{=`cL=bw4^aQ=li73#0@&EWi-91YID>y0u_o8E?VFJ9N)mcqF=A00UN;mhFMmlu8j zlV=;w8TJ7mGZhFpXNi*YY*FCMiIUZRP{FCP2+lcjuM|(863*@C)l;H5mlQyA9wc$| zd1h#e%_-0fG%@6GDa(&;0YTOkW>w1rw(RQm=bM=hH@7t#of+anTsOG`coybnQ#?QU zTZ9|4FZnFs-V07E3^xb-93^%KS+s-YIg4d@t-{9c5I%c4KZ43i73-k&a_-7ftrf&M zcPRc1cNkCh(JO3WVaCXSZl6*!jolIWz~=$v*Kp+lPU4aVGat@dxFhjfSD52QhKUdd z11(o`N8wgDJT;y)8x4$$)u1_I7E4{1)$fj0h}ld@hXZBf@;--ovBc+T z(QAA_>$$pE$SpS4xy^>M%y>LjDNe`VO}OLqJ~#VuR3frV;dr_29n{?kdYP>ss-hA& zU%iBH6~HQKz)xR$a9hhfnxe)4X(yrFQVW<1OEoO5y4ls8s9^gR=BE7BN-^h>+(`-- z4y-F2L6tY$06;bLdoct4lLfhQjn`!aD=bg}Vj^-bgE(dmyK;R>sjwj6 z#}*_q6RdfMLC|#lxZhkjlEX2aMA}*UCo7>De!bA0qK~;8ooVvZ4FlU4){eR5xKXR~ z%dN5TfwpxZcBkTwp`+Xwu3~Ra1F!Ib=WQ)H?Q4V^wib-J(=6=f%KLu5I-BwhZT-QO2*ojmW~(=_@BW&hd?(M_6h1++&wHYU-0ob zXq74DSk0Yl&I>s5!?C9U+c8k*S6tma&3&QJV|L}wL3jwyvo!Zhjq7SG?tBY8PwfGN z4ckUJIuyGL%ys^DHRdkFxiG!e9O*sNU8MJ1nv`16y?jd5dUqweRSGuSqV&eqio00f z^9MLgq{Caty6&5Et1a$qG>v`~sJhLqQ7|>R($D~h^f?E02`+1A73NJAQnywCrx!M^ zf~8CKK6AkHXIJ={PBxHG-|P8aSD0tA*{O+po9i5jTU*&&u9!!6t!Rx;aOYXw zlnuY?)K6gYyh5Rln2hCi4RQlPMy;XDlR_TofVWYR_pX**K`-+tMYj-KiQ~8fM-vb_gh|;@^em0xM$=< z{vYFiVq@8;OvT}`;WxsbQQf>B9!H?#{nen0M~~zrad_0|I)ypG$2fX)xq_W!Nwx|L zX)7qtrfs$!@Rrd*%eur96YeFl4-Xj|^yI^Gq~|V+(vt_!_84MBjy8s<=#7p>iK^ zv(74ZRUEJ;@HA_)3c8t(#MOBAgvW3Fs82t*Js!Z{n`fQ=)zalqNeHqII69B|G72b{zA^~~(;odibw{O|cazqfB|rlz{O>g%fR znx4LTVY%X!!@#Zj*}7M;{S0qwc0I_b1)KJ&g^^m+Z+6$MnjOqEY+o&oRC|B^sJ6DY zvR9w9C2;HGM&KDWD{v;PX=6;hnla(?R&@;LJ0O_cbq+1a_cm__{jkySBv4&L3qo^+ zAC~;U4Pb~@FIMa^Uv)<+WA-*I@$F*G_I+y{y)P-KrDktA6oG|B-wUN|tDa#qQ?bjQ zSZu9&hs~8%7>*s41yCGrSEo1O9>d5@%(3aa_1y=5S zaB`Pelh&@XxQ!r3?Uz{7F@KkaZl?#!ask@!$tAw$F#di{{2&+Glf|XlaLrz2MCz!L z*%?^l1X1;w9kE~PXftC4fw-kGzz7`^sbl-iMFjb{g4$?ym8|j};ehrR)F!j55;oZ0 zSH~CB31(-xYWY6y1`2A>Y>%I03o2)}qm5fpCpy4)an-Hc>Ld(cR~nsav$N0v+9!vl z`GEL#nQ@R&rvUFQkvg^CIl^pn0HU+rG0em5=>{Z<&~F3XvRx^bW{TRU(;{`c)8!oI zJAGznqDGzJz@@GI4(vVCftlMJIC7Q)=eGAdE1lK01AEU#Fgaaz=$tgv?!Ywj&;#}Y zht7%Axz1|#0qf7(KUUnJig7$2rtgT<1u$Lb+WB*GEg8u)*LbUT!oe+c5Vp4?ld875 zkd|MhEx(wSUqZ`=X!)hI`Ld?9G-Y@`jJxe=#O%oZ?EZ2@$U`FaP#EmclpSHo+J9&e z&(^qD4JV^^!Nc8=GU?$33)|XKpIqMv9NX~2av4eQ3Fj6v8eSu;T4IdGVVT+H1VLkK zE;ltbm1XE=kpo^mYgfWt)hkH=8hjTx9Z$K3IdNTvv7tOh!1hzt0uGk|fIZO5Y-rzE^Lwj%Ggjv}7- zYrHMhsHgGmqk6O|c3@#`GOUsp1{y5(N2^llmj1Kqik2+sZbqBBl9`a#neZ@X!o!&f zS1}VF!AvMH6FQl<%!EhwJ0tmiOrr@V^q)g`uOX?52>#JXS&Zd_YFL7~yZ29%=G2r? zWu!?ZQZ`ke0-GL4_^UCxKi+RH*0Y?GEXs6Gxn>7?!zii=ZTkJqDz%5`Rf%JbQ)8X5 zdIYl((kTL|fMdM=>#hVS`H>3Xik^-um?AJ)bvM0LVOVmwNKQs-iVmLuhYupr)inK_ z>2JF9C`ViQXlIp0Lmxv!BO3Zx8u~b=(`wp!wbSPujqXSC_n_1N%?U&8#Rxq~s~2UtM0N1u9<6a_j2lx}6_X)XfZ^S1^!X zX)fV(Io+tbWj9c-x{g!Ys~KmnVRXG#PkpG7)h&Ey(bMkh;>8W~@$2W8cy_IUI>hxe z>J32Q)=0e(C^$FLfj8+0els<{1q%nUQnxub=R09DOd90KXl>b5>ssYi{56 zY&N?sNA`A9W~^l(RdFYc{e{4#3|_iWgLtS|Wsj~!sHdfL)x}}@YLt|BEDn=u4uxb| zqHXjuqe%_18L#W}Dnnz6g`sY#i$fOQ3?fv&sOENiMuo+=>kpt_Emy;e4a@uDIHR`g zgx?2^Ni92y7YMuVqbm2|rHD1dvXQ1{=0yEKT(Yvn8l_2ztZxVGzNI6#-Ux%-Zaa@o zvg$(^q2z_f(e>Sjb;y2%A^TAV=EoSAA7@~Gf+?^ft?xd``fd=hbx;GTK82|IbfiAR zFgW}slElVZ%67ov~!mG-4-wIiq!Y`bVKaL zeZ{Z(K7IIs_Th*0;Yal0$MoSR^x>yXAASZO*3yT2SEqgs(|!@DU#1@1)#|}8J$O*l zMg0o>{W?;=p|k%F>VMmU>D`g~9lPN++1xZ$zbAx$&=CHS5Z*%w|3nD?ObGwdgz&F` zFoX89X{r7O5B?shf24@r-HO=RM6C7o@Zcu_^-py0uSnW3JJS3IL8UB!u32PcA#NjC zlytzgFePSCDaG+EK56QC@MTP@eER>ZAz&DWGz31;l&{Iywc;mmGQWn>jZ zH|>?xTG^UJnJzzD=2KgK?(%ck^+HspiKnUlNpE4tWr4= zTsXf0BoYJvsq?f&J8v$VXRaKjA3@hf0&@Rmf9XRbbaXUGB*);N!E`VRjzyao&WQxB z~`H#N&`zJm#%%a&oNZ6s=}UtR{aS@~1+iB}Got?M_eHF^Z8Qt!t*7 z!3J=8tCoS&XOaP@w~@l>vq<6ec2YQfHfYo7bI2UYFM;9~wQ?@laQ-}yNY2N9>OAdf zO%2?(Wg)pkOI{F5<~29=0>#$+EJ)sciY08h?a9baNFxU>)EX{IG@J^(v(dWMxN2VV z76vjHB=Tp$7%)(S735;5K;P-UY0sSQ0#CurXu6w>*iral=SJkSIhuG4S z%WxmhxY%p=^2MKL3|Cz6%ER^ZtK#SR+X3-zl)JXx zZnTUsd#btrrr%r)ufaWcUzh81S1y!yj$3wE_+`pg-57JZr5M-HqoZ*pn0}i;0g3u? z%&po32DWMwsrZ#FUeD&1j?HeHdxthY+puC~If^aBWD`FtkANq$BdrTYDQNEi`y=@f zuop=&9HXQd9*Y#iPy*#JtWSrb3|#z}^OlWK8RbUpfy$$2gif>n1op zaXBfDR_7+__Aeb|f=v*|d$b7rt&#zMYozeEP6~fLQux~dMcV65P+5v1e|}XV0xrDq zK_Ut8pGFc5YEArgK;Jh zmINRX835$5qyXe`qyXeyH{|IQzbU`E2}&r;M!u>t8|4{z-mt05RE?*AHcp%*D@n+Hy9kTZ|P01@DhtPN>NF=Yqe;OLJ zG!BjC?ngJHqd9-QI&S$I-SV|@%lurCTfl8b1J+Xh_>yNX3B;=V`1Vz^MP3J~VY8?C zaU2^tzPw(meFOf@E->_GSh-a*-$>?if2LOQs>QUGFK+_7AaCZw6>~neYkhCgPjBPX z)$^LNr1j;kTHtLI=*C8tUPF9&yXL+F|D0&erRjHmuDtS2u<>QT=}YrafV@jLdpG{~ z`<&{}_<>zZMKkgq2q7@u3lhogY@uI+5f$&#H;9V&xC|LIpTGq-m*kVU zh~!iFZ(8$deFJMgLm_nVSyJ?WCn@at94R{dJSZcP9#QERNJsRiqKnuupu>)lK7e4L zE@CpKCk*=dVG9Q&@I^HJ5}uVWqCFz?OCXVa8UJa7(#SYMuhhisor|q}MGH(M2!B;8 z_*zo|5dONpfluGSMT+n@aUCQ4EnLyVZ}Vx2@OQ}62!EGXaQH4hjuHMIE{8f3gujoQ zi6*u`pfs`lAub~M5&oOl{#f6@j-OBn*#49hJ^zdp*#4XpUHt--*wPnb`%BW1`~VX3 z-mpC&roTcvVESv2NPdI=6jK`4is?j*q0J=Z*%+kjZy_>lcDa@K6pP%Adqh=FYtH%d zJ8%o~d;FU{X*$J;_6P7H`6Hh!N8#lPk3Pil;LAO_*`N5Z3oj!)%HzwQaodtdI0{q8 zHeMxjg;fo4JV^e6=bro(|B?KSvgXQkS}5|Y2P4jxzvBt)T!sETso+Ep_sDVD!nJ+* z2c8X^OJ%H#1~}alN>%;|p1C&p`WSc~jw88tFqXvum7EjQsyX==CAyLRWm_L9X~Urb z^w8U|8?&#;zAONH7{Q4HDUD*;tMMq4FAFudC-B&1YU3g>&2~JO8ClHhp0uV%L!1$4 zCvTx$mkwTZSMXIEM~P|;>BK!9(1TQrr;0A{hA?NrRUBlh>lsbDwP41vszD-_q1a-x zC$TR+{US>!=Ug~!uEUUfQUp+*{zehsa+A4=%cT%Am(u|s4IT7f<;z76+3gj(6pl+T zHJQupS_$V`{9vYP`;Kh~vJCuv=6ZZY#~$jv>0eGo9W<>R$O_){Z~>}^wc<3F4_OHw zFke;)YmH)aCiZ0&_*hi11MSwwyhM0)EZjR~NuA$Ypx3r)vPR3U;jppL=jazPN5d7w z`yqIU_awV9cH2Qqi5#K1 zYsxrbv8Ra5a<^KDS;T-9d7s2IPst%J}$bCF%2l=WI!?0Cbs z!wS5tRpm&{UXBkk9s=1#rbykY`m#auR}wv(Y>PKXVh9bbb4h%ftH@-LqqJ}@^PxEv z`_iYm%jS)k91XVF9tLBBr^_+C&LpasMaRaP^m}e|kmWdvb?YXBzB?`(dB3b!aeb?V z0Z2gX*KNBo)8I9A%$=4^6l2O+rQ(!Z2^={doFSZmn;WEZ0tMU6-8*5@0IxfflX)`8 zyUQQ!<7kql+U{{1Re{Bk&fy+8ucLBy3{KQse4J~{PBSO5<%X6+4vm?>!LcDuGZlL> z2Voq3+f1o-b5ShLO~sQTGNDtXms4?Z7PeE^c%fU7ExhPOPP7jHsbKCi*T(5@S8Y8# z0p7qVCP(4qG>9OXl5x>V;>+n^7UT@7JVd9BTgO&{J}qh2IgAzAiib$fB{*A%v5$FY z#=IU4O>>Ih2JUcJGS|$n&Gbo0Ig5?j^cg-xto)4YAgqPbSvZ9i&)mdE~3P%I_pouksi23QO-rprP5FE-b!W h3`RjN!N2~*iQ|Pbgquh%#lN$*htPZIz4zWbgx-7a{r_h7WLc2F2Yx^Jpf4xg+|0Z;ul!%TX1O1ver}`K zOeSfdOohL;Rbnf&Z0kW<-lY{)F`US@vU8a-w6aV6)x86KeSK|d!*)yq)64db;cF+9 z){BhC%lqVk^Js7;7i&%4FgCIvkS6s&H4P1QX;_SAQX5roD`R8}w^nMjN{srs)}UNB zX|8=mt7k+dP=2ZH@4xT`Xti<-U$GJGB!cyI3A5)-QLD z-tz3*B+!zT{@v52CZzd9B8u`EMGvLs7Pyd)W|KQ zd}5cjRK-w`XS~nQNj18)81!Rl48EOQquYp~hV=Jq*3&69s)`jX)U7qTZMaT~{^HcB zH5v~GWiD36QKD#KdIhd5jfN(}?y6L6v26P zMtE$vAv`YJ6mAy%?hu_Bg7Mo|L$G^?5M16d1aD`BVCzmHm^nKS!9!S5zVl+jyVU{M z@;U#S+Fc;MbGvjN*a?~P>3Kuujm1|$*|Mc&7FOu4;Q#zC-HrLT%lrCDzS;0);-#5N zCJJ-#4(rzoB9p~(&QnPX67!m=_IAkKYA=oi6~1BT4$rb6I;q}oyeRQx9D8k8iB7zR zPCG_vGwFHTu|paUUK+I$6?mPhLBq;cAc+?q{2Sur>ht8rZ4jFQMkv-qD)Zz4@5aMc8#!!s<{Z+j-svQ*EL zY0G`7uJl;tcd;zkalwa~Ggh_B2WUlkq(L=FJ)>-%d1>M}g^(@YP+_ifJlLyZM;7N0 zneo72kam(-rnp#pCT-ddJdoG%vxT^}j$^gFsHG|ZiVz!pD5aw#t32kuXQjB$nO)+? zd7#`Q619W z$;vKh+C=RP%TYndcs*-jDkg0oNt)H}*vtTl?hmVPcCLZ>F@c;ba>8^0WTTw|HgoK0CsnFX@+5!jrn{ByCH+? zt}b1|;M!Pm7+m3g@IKX;Xh;LtYo>`cUKRcVA2(_qAq!tEkqM5u74T5WbQH6q6#hY0rf*~oz9c&-8< zk$}wrm+xWJFDVoV-2*QKA&Y2NiV5f&0!9H~366ucV%;GNVj9Vuxr<(NtS(kd5s@Ft`A*(sBsP5zQ<#FEyK%hH^3}9oWyb z+bl$UaBP6V?FB97PTIpyabZEtLam4zvkFm+8Sb%(QwUN8n`MaNJlU4wgMB411=vSB zMLa`n^!FoTG+?8*VB5uY9C#3=lT+Z=hH^&db@#6}PAA2}{jP>Hj-YNpfmIWEml9MhuDd5v3wnsWC z-4k$suP)u2aec{T7#f#w{g!c^?gL!f_0N?UDpPKqX%cfI_Y#3ifWqowpQKNHH=t86#UA7Gy6nCGj*0Xfh1eZkZ~L6`2AH}HsKmi6^5#n79HpRXI7jwGOC+Q`H|$B!Sy(}iwbs|{9B}5 zX>ZVq;6}){DB-kz+$Dzm?hp(~Pe*=Oky#c;zRPjBKHx;H&D4>k>-3;2u;F-; zLyuTxwM+~bGD_1UXT->SPu;bCAJwHtiy{15G<+Y^rN@dfGuLjUalN5Jgz|Rr=F-o+Uo;$saE%*0-M;|sW?1+O z*{)wy_O)L;JtkIiqkvu_R&Jl!wu@exb4-7k!>${<^zwNcuW&S8$ydCJFMc(Xcnx3n zT8^nV@UhpyLBn9%_6;m)=-VIySt~ zB@E$(Mcy!aS=^bJ$ zN&@s6d|NMAH1y6Iy-N(CUCTAGp?5Fn?l(2MF~Hl(6*A5-KBD)e^xiJLuPWB{Or_2< z1%9%j_k)e2aCNE!OoPxZM~~G99@7VA#A@C2u@z&XT*vf5aeSG5*)+v)DpI!T>iW>O z<0<-(7>0%Tim#>*lF{auL#fqIn&ni^P(w7d2O=)hk+}_-sUxuwi8os5Qz!G$u zq_-x>+gW|y=L~%nvO>E&N}6f8?Q1M#G~Kx$1lnj}wdw0KVm-^f8O2U(b@cgpM4;#! zVhBG>oP64u0ew@fRR3%U##98`wsVi6<3Zn>J8Tt-x_7VE`*U^26 z;<^klt#f0l?_Mu9;U(>PBs#41y2)5p-#a8$sAQJDKU2OdGb#`84ooY5z~VcQp>0@q z@f2a$&<}w(EE5bX-NdPU@sAFPRmCu;&elsm2Agc73#{xXAhAgB^i$EF+vdbs^fOT@ zkF!Dl9H*mXp^E4iV%Y7Rz&wY3Dc006DB_d@CW!Gvi+(jDhT*|zM>V4Z^lJe3u$7H^ zCkkvxznLBqqet2i{Z{mg-P=I=cVe(NMg6_F^uIrK{DT;7se}hS(A6LDGG{-BCHg1$ z3LD0}JO5d1UQkSBbLeg*&Yc4_JB6KQivA)t9x0ziZt>UfCNatoRzED0zlr5hKz|4Q z6xj?WjD_lSA5zLg;`qY%RID5TKyWs!m*Y;o3|nC2rL3I^8@(KhHN66#VuLekOqbBn z@ELAK2>&BS#WVUR14$S$XmEBS`;iSww*%+Lvf?+iea>P zAjp-%V#5_wI@)O<*tyVdHAWkaR=v>*hvHVjwW6I@Y!}Rtpel%9mn7P?r#w5@vm>Qm zFOJ@hl$Mm|1iPk*m3psa)azxmTX}AODN#qnry4NM+O880|$i zX#?c;N;b$=ve~mdKiEy>5KKlwR_9*rU~aKosg__i+IwBJPtR0ifU)%}Q2=ylN}f?1TQl%iwG zySIZKs+D>e9gAtq%{o?eTzO_0X&>JnnJSPtEXu-i(Q@Q{LK246x z&v3j6#t`*~NVgc4hDIiajHi>5=;ZR;@_uo-Czz8~6FssFOONU)L+>eN$UL57_Aby14iy@k$bMleT>LGPlT@Nkf`?8 zPLb|-%ZEK{!+AVi#%-}tk1KKJw_F(F{#+|wo|hNP4cBVbBk7RC`KJ0n zqlo)yxMk+yQaM%X&323IP9C1s@&|B28^cwrR^}S*)+C(1d|m{ORbVK}Q$91!yqc*M97Q0sX632{*vv?&)Ys=nCNe&K zlQ|5oK{*~9L%8hbqt&ptN}W3Dg{mrqhPUt9{YMU3NLI zV+zqa+2$o?n?thAVcBLuwmBl(EXp?LsQbt^OFiXaa53IY>gcwYD8vFslW4sRYFdOc z&0mB~#!XZ+-d8A<{HWXv>m@`#G)~{oMHTFFEQvO#8jYrt?J%mU68hDS-KCvNGYQiC-txynPf6&L&-^QmaPJa!QR_p;C|H!R^V3TcxNa*4q-o#$dku z(Rj03DOOt1rpKS4D=u_xF;l8CM!A8&N%Zne9M^hrESl1GbbWh-k~N9sf6{eDuYkT+Cef?J^8bA6uby5pRRSzm zsOF;AppYAq=(VCQCxvu8ZS*>6w@K0;OEHx3M5a*=xf= zJoBU=Xjz_M-a>*-pp^H45><49saR17k%GlO8kIsGm13N)#Ca$qx-QA(t9~D_Shcw= z;Y1-$BL{d`?Tq^=ly^eBt_aVf96ta}rQ4!0qx-D2Or=g+vnC}w3%n2%GOZOhgt@c^ z=0}xkVWb+0)HJYB&;(zlM*ZMczFgQC-bb91JDV^mMmqWaNtJ`Sr) zH;kyMv8KeL$dQ=Kx0rDi`_K-GTIB}Xo=jI33{_go@|&1>hPe*6P-8(M6{khFaDtH6 z5JF4k%Nh2U4{H+5Jc)pFw6ebK=jCz!M4!wQyF2;hVHmM_l|{3qu!Y!Qoq#j7ytprV zALgGqx$F0~Q%kcRRVK0e3hM)U*5`98F z_MxWbW+ZtNUPM94ElKoA(PTkN)|I1AX-NFE$@epo?`I|7&q=`U)(4HHp3^DgE!{;OkxbzAcHq(b0G2 z0Hbe8-`_HQe_Q(gj`aOq>HB-q_w5~he?QfC7L@(~;oOl#cV_y&ty|x#75Z%Rtqkg^ z&;Nh-tYq4$I{_8`TontuIMLeU(x*it|a=Y%TLoMR%K<>?zy4{%2kD z`k&h@UDM-Vl%v5V)IaUG82z$)YX7Uw)czjz%wMaI{$}#j{EFvmG4%c|FiY^zo@`pd&*ap@3AQ-%Llz8?r%0#|GQfI2i3V5 zbZEJPyQs}=#|z$I3-MFNdN&hzzbr`o0wYA2|D^jX4CN5&9iE9X*JuiYO;Eiz_-m_gI1@ei@YX9%UwY-Q5j3{<)++>ajrRI7K@G7W;cM4Q+gO{`K(Jh>MK%6q;iH9UA>nQ*i?Wu1m;Vq=Bb6v#2^M~maqL!Q03 zc87HzWn1iAEa$3Wy4H&AxcsG!M$JOxZpsu*hb*X(@4|wX5SQgKC&Mc?niHl4zdvKV zwVSpStFT_g8Dq?b%q~hLW5j79j@CmCU*{Gm^T>5>p*((!jr*p%=fo34Mhxz%*fbObh{bK?jFS^QCWY~W}(}|GU$(c@<;tq zt7httdkfMZ_YvH!pf0(u{>~|=S00x2%Kb>|DYFIW_UB*X^7fv$;{d5cVA$!HZ0sJU zN|ug^EWa68)-Ir1YUQBg0A)bO!v&$^Ktbp@NDv|p22P@&M;XC=H+Ts7i0V*4;tt~} zQKeLfW-lt1z}zxJ>GddsH?t6SCeAeF!Uh%wOFvxT7ApnwsVr0VcC9nn3JIefOIlhP z!%v&T)s}53tBUm|hJrBmqi{NMDjLveQs*p&s}!{;Wk~sIg$1DD;e!qsKk~>UPC0?S zJcvp+(euSJdzVGVe^#+-BcVC$beOjdGKQA0I?8CbmQ6^;gSbJwkdBg_7TCDgysBDY ze_2~}-Gkal$bjN~`#FX29J}w3tpPG_)H*|7tm2#u$%oE0AVp&k+w}Furh11DXh52| z$*V(ZSz_`s?k#L0L7Sq4AvT)&WyrKvLYk4VYei12h}2X;89Ov|ffky4HMPq6G7FTn z(I|4rLknk=$;hx}JQ3l?Hd;`8qE#$gC$z&E%QTp4cd=Y(vc2Y)?JV-hYC$3ln_ZeO zY;08g-mTYrMjGQ~SZCm5Z#9jr2=PX(WKBVvY+!N;zeK7SFk55gSPHAKW-GOfo8i+} zpSJeGbI%xNaaOq&T}hKN);`yVMNjT>TJUoHX6SUe!^kV1tj6^&Ics!0-l+-6CvK)U5_*NOHb1epo6}O3$2Qad=<7*H9h)c!RYXu zEf8I7h1aEpZ^zMJKrmoqzlQxSv2wPqk}Z1Vr(IfMKQ-5*LPTXgR?@ti$v5-y5gshN zbOj`7C~D!-QbmNl#cD(ABTIAGsz3DAIUz>0)Pfc1(lYfZReDlnXr$UGZpgU`c=We1t7C(&WAI=M z@5EZ%B-Y1lO0DuqOLZo&h9z0z(vwf@_t_`ADrK3uHKC`^XXIObJW&=SNd+Jaci zMnSA)lOWbH4wQAAl3B-uGJ*%i;H4Bn%9jBW_c)%JYmm&g%nK9Cf4t8h{1LFbOX}#) zeakc7&*@9+8GfyGBt2T888IjCS^ZPrv`zT#erZR1rkiNlv?yKA%hfsctwm0qw6OD? zuEATy&nP(O%+WSm30BW#)>DHHh3lQ;7h0HQYB`1eBf{EJBb#YWg)_%0%7g>@28MVIAaR=wE59|?Q^rxK(n$BuEKES<9#W9wb8#=~vy%I2%R|sM(uN1^sUL}aJyc*bTEU!_z zKczptqj5KYfsMQtkhs_J%xpx2cH79skoxa*O78WZk~bJ7Z}gN5{@Yu96Aew)(3_2b zx1j{#K;k~bGvijobaSiIRoUS1 zPz*w!^@M)T2>rY#)Q)^TltkSM9UUDq!_g#1n+;zuD!=Hd+Vs012oW2j#Fy0~K2g(Q@pw&A-!ocnXB<_bi zF|e_e6j6_jAvA3}D4W9qxE`D#(KW=CFF_aR;#(Zzkk!FO?{h= z>f^(>{329!0=8q+@Y0tImEQxGOZWIMMIO`xX3ZrB?B1e*TutM01_PMKLE2 zw6oo|jcqm?_!x z)X}yMAEZ?ZRg+FKIRR25yzO&8K_-(mXfw&XOk`;Ar^-izcMGDyp9!MDp9`YFUjU`S zfy|J8NrD0~oi>?P*zQ+gpuT$miTkyo=kEvoH()@aRJrx{Wt@HSU+?AIZ$UuizXK%h z_dKzR!DUeKV6^N0KtXxLKdORY2W=U+d--q2E<0x8{zQ^}jMH`%_h;qrOH21_JMJ%_ zNpyb|M3jFMM8tm=M8y9PM5HrV8kUb0$98;&cLb{CoGk>*BoQHQ58%iS&&scg!I!6Qww0LUOAO|z^nq;N%>`L9nWsV>u5-MNWjxIn${q!=wWI#R)&fD; zS||uxiv;K4b+&M}SV=wQLm({}ycJUZk9Dq{;14Bf{WfvC@RUjZALMga=`rh~*{a+U z<9fH0YklOt7FWyH;(Xf1_qJ@(vXWV>woBo1x4W;PYaB5zw1*YOmiAOWwzQWZHnz7Q zU1=XdY-?YjywKXr3+<;2KaSjYtNVk5dh&q8J&dQuk(3lsZ{x_+m7ozkYSykWg~Aaan$1VoR@2+Su9a)%KjD$&Y@<#YJ?K1 zk|tQS$+;t-13^i2>6gp%IwZRzm5P{-GGdXz(MmuDj}SyQ#|R>;V+E1PaX@6!8HJ8l zx*~w({7KviJjL{-4=K~`L{YVLOo~XuB{TDrj5@eHSs8HoNI|%KlptK5A_$kK0=?$7 z{m6?3+Cv@;PwsR|Ve@AI*r2p3@(;3#M^g$eBv~A{c3RJ}+RjdE^B?VH2II~VI=Wn8 z*>Jg132?be5H1G<;c~SgT%HTmD4_;4{yj#}e{bq5b?1=+6Kep8TgwyOTDKD+-7^ec znbo=g2>$s1_9=ME7ScSy$=qCMXcwhue$KSTDenyn;=S*3(u1FdbmH>$hd1f4mn5{UUWOcf$Nr0Cp0TTCQo*6G9V;Wwr@%Wn!|0y0n3=D(Dr$-G@>s4q)VGrLR20QYj?!`bzg z4`;7X0-U{45YApD2xqSrgtONGyE(f->6zVGt?soX!Pn~miF-ZIj4zSW&6h^oJ}}>4 zm~Zr$HU{@~cp#EtA~}{0pKmhEH>a2zDZf$^JkE7x^EvHJYomr^%VA-Ib`N@(T~63! ztWjqk#!2wTCJJy;s#I}&N0-ZPjM3UXebP)=$3ir{tAN=_OULDyk@GE(0F4I-*qt9^ z*>L$*BMwQvO?gQ2MnNR`c0nZh4nZXOPGI+N`7WhvxO_K%689dS2yU?bP%-Il5c)&d3P{|? ztRX)4`8PE5aq31QQcybTe!|+kIc-xnH)Pi0ZV@tF>yws=ygsD_uW zZdxG(a|`jv?2?pGQvyA9ZV$(Q`HmHdh?Y5Ome zu)a#hWbVFZ1-_mZn8e*}LWa9PN7Y{(-qwvzTBNw?uWjd-C59u^COZwoK5y9Kelo|Ny{Bd-BSYc zLY2?K6^`dE#MXp~fSj+3@d9`GdZ+OMKeY-G%iTgjEI$)OEI$`SEWZ#$EWZSHdx2jm zU0&cG{;)K|Q(j=20Q0^HbH7m~OUJ}pchCK;RR&SNQwBu+UJ#=GAP7-^6ojaIf$F&z z%MAad#A!p^`=Q{^6hfPS0VM9PJYixiB}<%{SMPG{e>23td&I$>t<~Uk(6zVK=&f?C z3p=A)t<&OJ&i#WzFguMBX7HJkzSwg5s6zbC6olXH1>tuGLHL~o>{h~TrArBO_>;J~ zJf#F3E|_8+_eGYQrz)0?iLY)I|K*IEDSy0I=d&62I~ z`gL)e-P_im*5Xt8bX0Dq*^BYEfGRDJ5gbs;>&?8;bTx$3Sr1;u2`*#Y) zJzO;4Uk_A+=^E%k{GaX)!Ra*O4hDJ5Rz;73)~#1XA5cB6MM^{HWsDyyls#=h^*H^7_u~cOeYqgKpCFjC1=WoG6P1)LsA?`T z*~m{K8+K0yB<_(s-Zx{v?`UzCM+Vb+V052TlQTAXw13yOGuS*qv&% zpT;woOM+I=V|ThGo}t9W@kDK;Q60)k#qLa!*SSY4bEipnL0WxhS?<}&-E~S)-QyIy za|~gH5aw}fmjC|It+dotJk=wE9kXjF6`;ETlDT-Y!%OGRO1IjIoy&8p6}5OGW;rcG z&AG>bgr7bSkhnD}Va9`A*V+pz3-}Yvs%l5aozMRj+sUXe;Gc|IUkPUyI=Ty$c#!ma zk^Z6I$12i+#1(jUs2Q;rs3{7G z214)vsaOpxK}G@afNFNwMsDL`&{f^W5sSz=3Ks~)&a%X zy_VN5Up2}>#TFrI?tFb*9OvBY$ZxpU^Gw_ugd6Ofx!xgN%Bo%+yEl>pox9Lp!58I5mOjkCyi6Yd@QzaTpY zOF?4tcPedWSazj! zF|Ykzq3sYXNa^#})VlWxue@p?*vCGg8$wVGyHe7>`VSeMdp~HwVlfa?kej>gLqPWd zCC@5_BklF>gQ_W5Y+o2+G85G>E{9>ueTekU!M^^gsQaq_!>VYuNGrD7NA$8lw=?mb z!tn~%Ju?uu<5Y^DRMoSB+5R#q_bIE= zbdGgzti+X8!?{me>JpB@7B&oV*0oX{;>&(IF&6{7&yaadurI9EI+4Q`GaB;eoj(iG z=3x7h?=0!X?Gb-bqZi>9tj_uV zvwpVy>Koh_4SAvZLua^)-IpwN(G-ojFOwY1YPUvvk8@wq|6E#?deK*XO?K^CN6GGM zLYrqrdbtqJeO>R1hWH3ZbAN1IH*&e#tn55I4JT4YE934PLQ|J3j11ZNbN5YBR&f3G zWFvLo65_02?U|7DZT+8-j*Fqq%7Md%O<>3(YFG=-_rs z<(}2%7B};KmE6B;2GN}0!i&1O8BVqIgUl_}KM>YFlchK`xhviQ%9wSLg>uD1Tf}y! z3eT*R+z<6k+Z-!4oK>r!LM{gg~P=X@>!NB2JMZlAWmMALEcKO=RZJrXRL8voMCT+97jg=W}g z+wK?qPuwqg_LO(?-xut~Wo&zn9Z3=wPM=WTV{En-2A0@dw;k+^y>Ge9-AC)cvP$kz zi5{Y70)<~&g$&TYQ6dBKZv`2ke+TS@2ESLLg$94nKgR1n0^7m7Y`}@#y(F-%!_($H Z+z;;l%uC|_!n3?Pr(*>7D?nA>e*yU+ZA<_F literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/model.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/model.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e899322599f7b623e4c12608a6f702191aac75c7 GIT binary patch literal 41473 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 q%H%pen1+Tpte7mEK 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 literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/HTML-CSS.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/HTML-CSS.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6f1ce0e2f17eabf09e8db9693d0add15d0cb0e17 GIT binary patch literal 32886 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�SSQRcEgejhRxq#^1KY7_niyg- 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 DqP|HG literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/MathMenu.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/MathMenu.doctree new file mode 100644 index 0000000000000000000000000000000000000000..8da7c6aac27858a86403dcbbc7ff1e9250e61ff3 GIT binary patch literal 20894 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 ZFFuK9x_IEQiqKy^XnKVEXQ8V5zW~w2V*LOB literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/MathZoom.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/MathZoom.doctree new file mode 100644 index 0000000000000000000000000000000000000000..fab47063a4281d19fee6e7cecb015a7ffb2a8598 GIT binary patch literal 11292 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 literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/NativeMML.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/NativeMML.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6c4222caa6785d77c68e6c4e92e645d7e2cb08ea GIT binary patch literal 15786 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%0DE%)w?Z;Hki9V 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 Pb_DBN!llx1)%^beR~IE{ literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/jsMath2jax.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/options/jsMath2jax.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c1b6c2b552abac8ce1980bfb52a4b00d44993e7f GIT binary patch literal 13213 zcmds82Y4LS)pe64tu47=8)F+7M3cdm07C#l=r{%=QS1Q)5WBOxBh9RLclO;-n(4=f2(=h~@eD}lRtU(E^C+-_&4xfG}yz^rUSJBKt7aJB5_&`v3}Z17Z+*?WW)SiOfs(|feF(OQ=iw-WTS#+WW8u=zgPUA*Q=07zqjBgn0laA+n&8iZ5OKTvu0~xjgU%Zm@^|!)edIL z3IcJn)d20(6{;P(&FQ3iry;eo*_O3(8-&fe%aGdDY|B?G%=46`*ZM(yjsrTw}c z;N9N=%svN>9N@sY1G}Ah&V1Ve-d7`}oL0N)^sa4j0L|Qbi?zU^gFxo*Ig`W6XUqXE_MW5TSeD^x&=L{XsaWMd9}v;8e(2U%tsOP z(L}qphLa$UnMmMzdkpd0|9@6IfT%b&RL23NLlB2mv)1J1Ks;L`VpW`!Iv!q~5UO?b zs(KS_qepe=gG?tjkz*D>IGvqUdC1Q=UE@T!W(Ib`~S$YfuSjS;v z8%5U-?7T7R1`f+`1tZX~RV@a_Mypu0ecF14ZwH1|*2Tfdulc#62Fn7lI<8D66$c!# zX#{;3X`Q}I+=YAARI@#YYf#V&SwzUQtQS(Kix;O!Qt_JHwO((?oZ}02s5@32qsNP9u|3eTijd^FlTo$U!38hm9OuZju zGU^I4f2C&rDl&gHnZJh2UrXk%t1*B5VeH%Ry;_SA0oH!H)kRlYaI2kIe+q6Og&<@RmS`D znn`_Nz--4$$;($U_&+)jjpG>HKIpK49}CroK!tM$efqF&&5y92k9M0gNSJ!uxp%Nt z<6Eg6{FqIEPY~*p#PV^r^X(ihKY@1UB7U;J-OJTeXueN|>QhOJKUQmTtObyfBhr>; zt4|}}XF~Nfo9pk{JQFp%J$YV;hn;k`=;bz~)Mw%Fv!VJN3p-@XNKa20Mm@~?489xO zt88@b(LSTA?3L{<=)zRE`~dZN)SRrTI+`j|Um&4hM38V%TK0VP+-9?_Xq88**r%v3 zMe_<);J#jgt1p}FW2IuBU$L-Xc^>U2SPjTVTYZI0zd+8v${_d}8|UjJ{u^w`1<8#3 zO>p>6ap_wi{M(`WPSQ}%qM^`2T$8;Rs_&Azy+GZlS1soC@&)S_EKy>Hux8?t0+C{i z5qMlwX~r^{9`(ICS&m+9d|!v#59rYk>EMs(>W}H$Pw3mi#J8VvwZRdnxl;8rK>c~B zenCuINd6`2dlAqX=D!NnuW2?5r8Iz5zhNu=R^#{`ar~Y*{y-dmB#u8ZxL;&&{}~W; zH;5uZ{RMUZHIyk>o+eEFsut2Q+-53dDs0c*B-0>5nI2`-xF^`nKvEsLv}pU8u|1a~ zbyB63wq2pL>E!MqX{TbhAxTm0G9K*`Z;z#90nC{e^M9oMBr4I@B?eK6ga2^uDl*h~!Tf-3f@fg?)Zl2N zE_5_1v~fBpY|VV2XH2JohH)xD%j+mX*Xfj?>-ChNCxooe18>0Fkh~F3gidW9ID_xm zLOkMc!dobB!ZYS5S=JSjvHnb^74#5as1NODK}#fOQv%63lt6MWC6Js4S(rScZ>Cz0 zwLU-7vgdH0=$HBAyx4br@jzfZx43Kn~?-Yi9YI2g=AoUi_QeD-pVu}d>bVY zzMT>XFQNp(iy;fO5qY1aV_iaZJnX&$ze9N^o`6w^>m;_g&O`YV?Q^NNKpmG+fjTay zMBP_V0?U<@sPigFcH>%YS2H16<4y4J8l)hGuZ0NZIy{pYCa7evEyTm=_1fx&2CD{U zk^%HaoeY#W;RjLPObL{?Py*$xlt6hKWE0AFLD8*8(A)7Vly~d*#e=(I|F+)2kQX0I z`aE33@Fz_JBn~{Vq7QtmiQ^qo`nYH@naLPf_m}+?7R)7UgKb#JhQq)H!7W2Aw zeO{Ri+9`N|r6mI^lVP!L&M`_hfUzE(32AT=hox3Dz9&$+wQ*|HEfzURY;=7Wn2l-~ z--!%YpSd$`n)Ut17=GDBsqh3^ z$w!-;n3a^zX)~c>7_{Ti)v#4np9%X03Sz;UaJd69gC5IBZJYt`)S-l+yo(74%J)zr zDBnwopuC$BL3s}(gL3<%qrMLc&VY;b47jBrlzU-MDEDjo#V=+508D_9K_1Uv z59+KB#aSoKU+-rI3;+*n19N_g=YBW zZYobP9~}Lpwu7Ueq5_V7ni7tFh7yiGO$kSzfoyd2v(!gNrxQw-XORSNKL-)Y=kZLu zCA7%f=zMH5z5Q<)Fyspn>@RBA&qc5Y|GOZ538qsD5^elV$i_DQ7WMsuEhtqFrt)nl(6Zlw2<1gQla?in#+I!h z%fEZzmG4IAzNgWBKSDS7A3^d1RNmZ9Kh&Up6oZ;@_VHtyqoIDHlhIH=r2-B0GfFhn z&neMRzo0}z{SvaVp?*bu)A7fzp+QUi1|pQ-;+eD*fi$+%3+#jc(-YP2A}W5bsrW-g z#o+(G+kb?owHU5b1;-5`ozYfx|vL5txOzYNA7I0xQn9rCpn(B9p-* zfHhv3^ckmgoxGwIi4 ztIpllI(>1JK6rc+cc*l@rID@`r~8t_XMkR}#Op@ArSXcJ>nT)5y22r{3QD78J{OMK zW+IW>p!6*exkOjGB_fwHLrml{{sxiTQi90sC_&`*lpxZ8B$0b1MDD*v_7BP! zSYP8N1y<}uy|Q+28wBGpFS_7^3APM6yWXSdjSd#Xqt4g%E>;VzVp4uY%s9m$z3rgT1C+M*F z7%8i?@!qlVDirq$Xpw#D2s7Fqj9Df{Aea5{9QZq@79N#O$5vSNND&t zDSb&UKgi1g%mq>oqy$N?rg7t!N;wFc^B9>2(*%4TLJ9s3rF__VB;pWD{==Y{c%#TJ zRUFHA{gfPzRB&?yL?}n%$?;D62*+0IcU1Bk{9q+(wBqps@#(KL0K1ZI9t8!zSIW_} z1oE|%fO8BamjWc88<2j=e*HoCrNU7LV21`i76M1HcqSoFquCyD0pt{%WJjrWGd(SoRd()7?v5-jGf`jj0PJWaX_M zU((tjLxXmF5s!A(Vrgv_PxeZ4c5>~L#~+e|8W%llzSQoBN?vEP@thcd{x~jel@iO8 z48sOtI0AvwSv;fWMhv?81u9GL_pgU_Jgq z7*?39uPutgPuyIbp+E76)*m&n`dIPtv&s++@I$Xgs`wGgMm%e1M)eEOjL`@cj8mfi z*HHq`>6EDO^^lBvdc;CQ%KpJV3=3=c@d?arFrwQFMi)*-Cf&yE;{7>Xn#G8l+>7jy zH=q;*=o=wIIRnq6R}iZ16^wSHy_=~l{4`UUOF0s z#+S38#i=WvW=9eaQKXy$T`1==WiCF;xx!1Fkw?Cqr?YKlVjHgB1vvEa<$Sz0T(HDZ z6F<`AQzz7HDOXDDx`tvNr5>ojkzk~3f4f)wD~3iaWD2se~@Wd!#|`6cqL zNET9kz7bXMjUEg zO5HTOESK>|d!EOM0d5V-<#?w9x{=aRuwMb)T68+Nii_F!!iW?W{ zhS?G0i|+Bt)wFYt959!m$vsJfC{JI~iC!HXb{6sT8km`L>41-n4(cz04Y`);mb{&< zj>vT^$((DKvbdq^2jfNCcWgV5>!IIlZtGQpN;UX<<=?=9W)fO1kQ@2Z!RwXfYAHR& z@lS4o4y`&TUoBPAwV}k9o1w?3h%Z}idDx4MZ;6aMM=jxTBG8C!mE=}!yO7N`>=t$F zr!mUF6~y~(NW^UqyRvfUJ@(GayZAcK9&>Sb9iv>;k6FB(MYotUqb@1$)muBomOGJnp1CbtE!BqQdKjhk#S^&;Mw`v)c6p<` zM;8`3Uh(Z}9$uD;@?Nc;i>pZ<0@+1Rk+N0v<_hJ#Fu-ucFu$rll!1HTdKkE%KhYi{!Yb3u@^lMmE@Ki8(AKtS-Z}%5?{aN zA->N^^Jo~y((#>odB4uvj*$jy$6rjZ;uaaE$*#V>O;;)m~;Dh z$Qd0S?Wv3hj#t)0PTtkaU1ClM*Y`8bxOTx0=N&))#@bR^Y(;E*_@ZH1a86aD0w;CPw}y6mx7d6Z+QCTK_SKY7HMIB6 zpD#%i?8i-}gjK?dhF`@~l@Ha0e@5FNvj8+|l7+8ZepEAs;k&bF} zGi3#VxS2`--?W8li*|D|&AVlv+RALoSlQJ=S8m;>wlSM>l``x5s=ZGwG8?l6%lGlL zZJ*lCY=}x0_o*dj1M0Xr)#1R_Qwna$R-JHNQxbw|duNgZ%kNOhjJ1q!XQ@F-?Fid1 z4b@KV&U|x%18X`9oQ38__HY>zX|!*{%vn2^&WxnBPCJL{15Tqe&vy*7F>Xff;y|Tc z+a2KD%>m3V2a4?OK)F5IomtLo+X3D^5k^jH#mT1Za8i)P-w4E?d{BFA3*=X z_2b433UKH?fWB|2_5*Z1pjOrlsKaUp)c(+GDfI&61`M5otqvgI12y0e5%4ksK8S!1 zCe-CskVJ6ESnI8{hY_~jZ{KSV;^ELx9R_#~5$s#ZSnE3iVQdYGRd!P9aOiVHs8&#) z{U=VCKz-ssGctC;8!|8w0`Uq4Q-@c!qfu;l1Deqv2V;L-Hc17J6&S8>AdrnA$1WKo zUd3=r*+L~}8~y!lNeJitw*Gz;L~TJqyW}&*`wdIP8cCrS)D&XSX-Q|04#NP-5s27E z!Sw?>XAHT4!!}$okesYaAu!fhg^KM{)=T+zU|6M*7_?v2aB&rr1yqSD{YD&N1jg=D zT}Y%(SARTUJC;>49s6lS?Th-2tW_wW8w_2;9=3{QIC^D`@0+W}Rwn&_r1t+&^nWk? ze>DC7Vfud+{olwSrT>p*rIpq_)&)1jU&^~_h;19e;t6&q1Cw!A6;dNEWbG^z7K2GNV* zGh6}W^~X0#!3{7V3Mm!97?n`1VcRolj4?5;hG>&v zZIcn&Shrcisd zvN{VrpB<`m60j$0uukMOA;$N7aI4P%(`Q3*)OKqFQM5lrP(i|*)Ok}{faRo=St{zRj95`Y<_-Z^C&Jjv0E>vsn4Ox=R@@c z;uv4zi*eBVWydWIcUZYxG}|oOrJP$DOb_Etol;+dKG%fmTDG$ZdV0HLsjg#_7}C>g z+fdh2?Hk(7Ml{G7tGcmw3R+^;RX1UN2Ckm9shfLegTHNZ;L%e3KF%xRof43`UT)(zBG*KyWxJ578C4ST0K6~&mssJqM=W9C`vZnLR8(xvA^ z>Yg6684pD-S3#b?w`O?2NP&TkXQcj)13m>a(f56>A_+4e>1d+^=&L-kPN?)$6m#@ikhH$cVlUQ7?8 z-Xo!Ul)ic^nIA-6x7U9K#MvgDDR|k{DfL4r{8*?SXJdPgkM!7-VZ_P3%ix2-guTYK zhq{cml2@|Zzzb91qTSUK=r)-zwbb>bo}@LOLU?etS@L}K^g6StV3h_dSahgobpFX> zUhV67wfd3SJX|bv`DF`>k7waLv3*JImw&%r!e4u zuFp#__0K}}^Tb7u!A0;5=UXp_>K8QHjxgGgS1IH$ID=>k)E}D%vm(wL5F@r2fyX(M zHdlXthx+BHr5rt__>~T{SE$afsoig==WnUl@2J?^M6usxm ziK13NJWl9<Utl+1zHqO~$tSDhDC)$^ug95rY`*$_ok zZoU?Q5*v{Lr8XvovI|I|>?Wj8Zc|XR5i4DBZC@7RsZTb;717ia2a_0lULP8EBeE&k z9ECvE1`^5^xF)_$kWHbSY>5&A+lmrc{d*DKt?{_doEl|w*#=M03b5NL4%mxG0ef3g zz}}7&uor`xjb0|tcZe*(lb-qLuH1|*9V~C+qZa7IW1hTPwYJA|`+5dvowV;_fgNCP zBqcjQ3i|B`63S9m!I)@)EA4{KeV8tzR4Ei>CzLoF=V^v`CD>ZulI+YPSl|P?4d}QF z8PIW8Qs}rFDRk^2g^s&}nhgUk7XPvb?$>dIFG!rSCphDS=Q27ad!Zb-_XY{&gSY~B zK1NApVwBAqC9B9jlWI&-K zNTJXQQYf^N6bhN3bqXEH0_1Ty3OAu}u+sfGxSwk^H)qgt$qG4+2&8u`iG9q1k?u1# zUW0n)4QtoTh*6yZcBI%svV_F~8f#iCpuGZ^@fKf)9L@eW&Qs^eU-~T|AJ#aa&?*){ zp<_s)P#-B2`Uoi$N`q3NjgqM82ZOJMUEaM0VxbKCUJDozXUR>zUTHX-O}`u`Z7`s8?A5j55Ge*&K~`8d(9 z#ZxFJ;u_m1nabsp6#sFS<#lGyk7o2wfJ-DNkpjslNrB{KQXn}6G{1f#Uq`l1-@L1Z z^(j2J=i~HzDjq^PjVz2$t{mc72PU6ZAqcQ$ZIjbc469OuXf)-MoP36^2z#B$GNAl4 zDNvq83Y2G)0_8cN`D!xWIT==;Av?~vpT&JB=i&+|`M6Kwi~HP%xA4(y zpIe7WfHImNvAcn(eBfg~94`XXhehj&e(c(nt&*R@WVvXqwhap@RhE8i z8gksMV-#&5VZ-sHeh)Uc7a(Gfej9?1tAJD8pf@a??NbS|_BF2W0<=*n;X{w%>iyKZ zw?=G%McBoRHe=Dc;aGkO>nZ?Ufi(qc)h!4D0BSy~kt#aA6qz;(=&SVFRI#Q$ETBT^CNBa}&ax|_xgNiJIUBqsFvLQO0)fSp$Cxf-^r=>6b&56N{1Ck$u?aqa8z zdL3nm*Be-Xc)gJn@p=;};`L@y#Op1fjMs(9IKCAOz8?8$X#Dt;+aQAB^<|JyzM|!$ zPf2ef|5bwfrIZ-Mur=empdi z}CfX8Oq;0fSwuaiiFNs8+j4(c>F+Lq(?0p~cJOc>ze*BS!_G}D| z%bmLHCqHHlc;7w9^*3?VX!jsV>+)NQL-F6~ zVkrK5GNAY$NTK*2Nul_kNTK+jL2DI%mHcP}A!=0q0uHqPD@Z7R!!^;GKx(z-W=i~C zk-tZkUelFck1FZimPFtU@apyYhnD?kEE{d>RNqeWFUmu)H+4A_n}ByT6`M#3#U_zL zvB{)RYzklrh)~{8bPq%f@`7~q10+-Q?vKt{V2^5q?Cp1g}EKZ)2lGROjLkWC_k^!|TQepBdMjYljo^;~_SHpOPKDL5-Q zAo|+vcZm^I7(3=+>Z|asxH_ud~yLr!IPK z$~B>ph{RL!Wa24H&>-wmqb9#hNQds{>2=Q7FA>to3eP(H?jYOq9=h*93Y+Xm3Y#n? zg$;HBr45!OHrSa3-T!;&KY;dNzFj~<*%jAhjMG}9w%bjYcSYsBhu7I|RhwHJY+HP+ zFIg<1JKZ7=eRUQ`%5JtJUmk1=`)E~|G+IM&YOiI+8gh5EK8_*x(4CHF$URvhHsoHs zhavYSg&{vk3PbKg3PW-kNki_C7;--rbpMxB*&mI=st16Cav-jWRcXh_s@y94kS<>q zmFq9iE9_`>*oDu6UHxO$M70Yd-`K+miiIWd`pDm_-@pn8C+Y$$YxUa4!6_Xq?0EVJ zU%Ifg)75zZ4URxqV@W+^jdaLC=)T_U{Cp$_YgDl0a+brAhmgX;-J}TJ9#UBLP*7TS z$HcOSfx(p#&le>6$l+kZB1eFPvO-HlClIOdom!%(^Qy7^RMPSbiDeRXez00{fvLV)GIWWc^^RkO&tl?chB{oW7n*oqe261J+ z(>g*iM?a$z7dPxAuNe>KiBHe@0Cox0Tnz@lGE0GyKwcyToDwLf1vEZai5_XU{)Yc{ z;V5Ou!NCe76u~tKc_P)51+yv9Li~saKS%q^?>2S=w1ZA7Afc?m6`kt+<#*fQ5Zb5) zAzpH$|2%wTP74HkI2dU71|q|d?J--bCsturUq&>PkK$@Jfx$h0UyjwxJF(0sBe?IUV=QCo;~?z#Zf6OqRySW#!XkE@Z%-#XE%I*(}xvN#z{e;w&@_f%JSrZ!T?muqyjYgyQYLk9u&{J(Udq2d?nN+|>MF;&CU=4YI?1r43sSL{3*pfNZE@p6G+7Ctw zw(r<>AYTW6ow=!33Cfk=t=j(v8=6XJ*+3rTLkkbTmMX>cFq5Br6FhizMy^sUr>l9y zmv4cOl!&jAZfU@ag})sMw+>mt-Cm#(+bYU;wCr5EZNM#P@28PspbFysyC}pN9lN|_ ztL=Bn$@lm;%N};|^8uu|iXU6?`)s@eU9knR(arwJgm8MvjxvuoyPXP zTS(*38YV?J$S#kd@Dy`Xs9LP%*GT5D1_FTlkL(P`GIaMQoQWjl^nDz7UYMT zJrhUCJOr|fks>9l;LBs0KbzLWk0qiLtC0yG*KJOVelL*bV38-Za4W|{HI4Z4q~^{T z<1u*(Y_p*f3@q7Ip5}cjZi=JmnW!bVRO@8<5yhHyl_fZ~AkXr7Mw)x~_@og3xIuob z>oz0PVB$F74$E^Cz!}4gp`8jKD7U!Fxp`niQNZ@!Soo{mX znobDgcNQ;GYLj|%rt8P#FCdcFW2KcjIX!B>U$XKfHz&X1O)CaRZ5+G;<~nmhln3Ht z0Y2;;IO+Ju7V>L|U{u8p(xb(f-+Se_7>U3@j4j(rBt@2ducSBzj!hvz*|T)e z(p@@eDIIjsLHAxzDBY!#F6dtW@9%lH|`&(^w(>J zQnkHY8OT*rx*g1wYpGzPMHd7chruRonQ7(hV6HYYl&c04!(dWd*SrZ6Ce-q|bS<}j z&ti6cddTI5T%|u(tyWwxd3o0y;`=M*)rB>6ms=903Z^XEsGgZqt@l-Hg&K8M$~^ltgcjQ|rPEtt7%qs$bsTo|YZv%+9@TYhq89{k3fENS6)PJT*e&RA~e z)-zN4^M%p?3A=tNCog+Pacu>ZOg;&etFnjnn#fR^9Xl9TYgS{ZY~eM2jWKgDY<&S zW7(uUtYx+uw-y9CC=3qH&s808f5=$BDbz|B^iWtoEDR2Zb!$*76AkLbWP>^ax%QG= zusn&TQ_2NLis7S-;iJXyF=F^wF?^g@UDjYy92`GddnBy$m!vHuACmJ)YFA>f2lr@OZWE9k6pM}o!{F_gf9yL zbLFahyf>Y7E<2K<7IHfAVBM1SAnoZiT#k?=mo62mwcJ2@xKPWhjDkzkIc4jmT6$f! zRL@nFwvwvmYUylwBx1VSkZ^H>rz~8>qV%RC4-;dmKDCsNG{3YrYOw9c)ce{GH;&pC z^``r?r4rT9bkn)@*})+Uy)t3@X$@ru8QK37v;V2Gf0yikn(TkN?0<&rKSfR|`>$%t zcXoBqc|1dl1l_p6nPJc)i$0tDy)b|BSf4Q$Znn)-ki~QQ!k}OEOoPvc{(=F?nKL<8 zOU^ZtGcP#{lCxM>4U%y!B2FP|r1_u(>w{rXrbz1-`tV+w&#X~(2bFpsIbT4|XW(|h z5TyrU;KcAV&08H`DWyV<22n}{HIz{ggLNuaC4-0xymhJaI09EF1RH^oL3{?9bxdASm(ERoqNB~#BNNV7QB`$uM30Mi;wYBydiS>>QKH= zUf-S_81S>rpOP+rrso{>5gyb*cc6b5frIonawQ+1ZXohp(hy=k(H;4KpSt!_e@L}|jzf%Hz#O(M{Rr0a6%tUD`xIcfl^>{-gOH8_t z=fvG7#OEi)$fsoCH>q#@G#1``Tw&W51)sropACc0#pb@RVQxlyGHyo3@dl>PlkW>* z@I~3`$n2VAq&cHZ zxHNr6`izAO7B1$0_hK$rt!m?D)v84cyVKny4pZTx{e!Q;Pdt&D(ZWLTb*cFQ{6YzIm6xT`kd4j#%(TR&J@S{=%=DtQ>Ix?DBq*5!h4O8<|@ z65oQ^u-*3=B`(J=Ut)O<8*9>A$_Ta}&z2snwiWT!%6Tf`2Ten{6>t96a6^#J&HVPCr^aIZ{uXWEfNI3lTCkb zto%W&{86m@Nv!-?to%g{H(j`( z+ifab-0fz7v50P_h%HkjHwzM+&IUp^hcFVfC@#FLexQ{FS}pG8`n;Q2-pzepv(%_` zTM*^tQztOG_b-$Oa_duWOA;acR#wY3{n+PK5a2^2i08J~Hr;ZyDq;^F&HAasWj!gn#^Qo=-BPBSi*#T_mx z3~FJj9>E29E_>csfoIo#SX{84{-XFb@OQ7 zH`cTuM$IX=oTLbJf|YS%qKt&jH%(@7Cy_`3ootB_XoUy}v{Hyb86g6lB1E85!4`qK z6v2?-PU9kUrxVKj1DIb6#lk>Znv0j`kw-8NupX~61!v^w%du#(Z9f*yeIw2Bp*^J% z;`KADca0vy`AP|5w7=Ny&QSf^6eY8_myI26mGOZ<-HJeHC8QJEJ|1_ z0!kvk6q;xvu!|3cmO6{C*+BJM(WF=3>mc)D1OyZB2KSG1nJ*zD0?3{{+5 zDuk2EgmAJ!2q%|=#jzdv6(U>rt*azkS90H0jJoHSa1*+#M529ejg^`c6=uH7c5SlD zT({d@O)8WtL42bs#$EF@mLIiUt2mgwP6)Ht3t{#KA9>Y+?A# z5ZbIey_2iZy~Xb5bv=Z+4%H5%I?|ym1D-Az^;q_*U!*tH?qjW@-n3q&Bh6ORh4K=u zL(_Xc=Cow5ln3H; z6gF5WClgZiY3!@^XUpk)c3n<93~HOx7*27gUDx4kxkkdo_T*ysR>Z{Lq}*gD{x*{y zJ-%HL=b)w&NT!^3&4VciFHjln)7#E|z1 zG31AZ815sW4A&ML?xTw6d}bVej6A5}ejs!oCyX1gr1m<{1mzPJ|4AR;rOwx{T>G;$ znC7fQji^+qthM!OZ|{Qk_Vxw6?EmBVy}hg2xLvhK_dMimUEBKZ)LL7PCRgZJQ)^q! z6Gh)Ztp(9uZTeCwWnD^h=&Chbo;#*<rsZ*>Cgj84Z9CoEbM+m1lWB@2)hpp zVfULt*nI@lbV%iEI`l1J>vZVbkl^z>KM-}70&Z&`of zv)Y27HQ5h|Y0AhZg?rR;{3yy{GRE%deyr5U_!Emo#-ECSj6V}1? zY^)H*Qi+wMRF9cd|4WU0qF2o%Q_WAqo``lFVw9gqr z+UHCm?Q@op_Bk8WFwhYX19KG7+4aAw&$)NUqKZ09R(%))kOsN!US5KeXx!pW{eI9Ujev#@Owc@LbesH-Gfi@0wrYb92_vf(#jp7un=0|b_Yg~UXd+cYX(y>iV5C0G zq7mS5E+oJaLIgNchyX_k5#VUBMSx=<_=WGWT!rp9yPwzf0Oowg3*W|CR}dbEgHd1o4A;O~^)}bQ>ew4=V7CkzaXx7_*_|G5qNBu4MWDpxLX>!d z5G9@{M2RPXQsUmR&z-D@&i`titw2P4b|nzH453<7q)2&=xvdS^r&y9xeUks#Ax0+; z#__S!OfC4>>59k4&Jf~btAzMiw-6sY6O@nbANyF3BK~)W>|Vsj|FS^n`UvHJk&@+c z;|$sTmUh6W9e2piSsYql&4sM6Mu>ItLab8|VvQo$9J1GP$DTeR7HSOHgSu}F*=6oR zS0Ri#_c25EkmAM+*#T5>;)HNg6~akP2q$%LoFRLi$Tno_D#_L`_l+TYJvX5n5s4vt z3;Ouz3DA+%{wxQ?m!?-|OH6CeA_d+nAw~_)XIoxWc8=m;G!(+yIT4RJ8A9tDMDY4({ezx!Ag=US(q}T_7#{VWSovEL&7>s<+piLN&4xr&@*! zr4oBzHEnulOH`2?VD-XAod)VeT@*M%niRX&)xv<1u_f(l+Cm?vvXvu41)ZVQMi^V- z{CSCCz)Ku&ulWr-tBifZG&_T7aTRa7H`j!=C&##-($2V^w#Ne4reb`|*NX#>>vHgh zE>L0?HLj^kXI>oJGSrTrB;-uG7pD0%^j6t!o1#1y?;U;Z+`dT&w{I50?VUoneG91l9u=>By0;2D?WmqC<=)0UJiZ+W z-Ccxns}d8mDmLl-7M9MYwED4ohtK;?%X_!aYiCnNrF$1qtrFg2S>7FGnQRiuUEO<> z6#3q3QONf`5s>d*A@aRnhdAMm75_(WsYjpHgbn{b`Fu-JcNwb$?cf zx<4mG-Jcht?k|8zb$?NGza{F2qc1@~<6j2YoFF>V=8a8&`*r1pGHiz^j$wwVr=wt zi^N8ciGYoMA;d<%6k?-a39-?y!K96TBYL9mdYpT#^aK#P-x9`F5)(-)*|FK^flp#Y za=-Hh{N4)qgD=3Ju^lJzABk_3^-q@X&rv?VHQyNH++UO)asO)Zi2FAY5clsw#GSAS zh`1XG5qD!SDefks`$sBKscs@9B%TC>ZZcsku~zu>5Q^&iZ61i6*s zgl;RsSQla-sf*^rmw7(R)|O=(pC$3|Wm_msS#*MEJ4?BJl(O}a*$zsLI6GP_;-p1D zoSlS-Ghc`}I|~tK0hknL7tvcEne7S*nHB<}Ya@(h5+hzFe^T`DM!)miCPRxTmkM_S z*dHXM!mfW*;fpD+p-(nwThAXYu{zs*o#U?gIxG$i?yiE+=pI5ey{8aO?2F0S^`ePhkHFL$Bak1*2km^I&0#f@3>?GII)93X^~1BGyMkPuD|2FF?R z9U`)=`E-?J>rn0+Yrey{3Ekl$VFsN)ir0MQbp=-`>!c_PKbyE6K`N9hK}N0njzb$(_*POK^grj0qr`Q~|?ptmtsN)31 zQOAiw>OM&bFDDDBa|Ni`bECGEity);o?O@riEz_XfY6;v7+I|-{>-rw+pt}h>a;|v zgp%U5-{}?&!)I_IhF1w;xLXLrX9{7s2W(-uR}otKWw~I3gHYDmDqj1=b9I(rjb)1t zOH^$crl(4cWBzdmt;0jn7Hnc+r;|vF)4T}G!i@t9dN<(s?8;mhry!c%kZNP0*OyyU zD4$)e==Bs9iJ=Z)u<%JxdV3eys&6psV1$*C9dzIfxg9Fi!je;^(UY-gF_}&*Cdbxm zlb%$xu#Adf%~+||w0zXEQHLnfymXUmcl}b?HbogGx#Su!)nS92BCx?~AvRbe#0GgG zHYk9y!SS(+79nWKrLNr;Q*JF3JfsAKZqTCVC8Env;6Nse7FiWbITWRAnWzLxOwaBt z68@?pz+X)We{~`JtrNoEFsPng#cPqZUYMAujBpQgX91x*n=p1?F_9dq7{xUyKF6mI zE&aJZeLN{XkK3js8l=v*WEVuqS_i2Ml^RhlvRFj9SOi45M2ILa79z@}LPWU?Op3BW z^wvS@a!5#X1rWL`31ex*NOF+s)*$tKy1sjfXXPqmDjJp__$R=oTRsx)n@X=%u1}cI`}^PopDnw~-v{ zy$lH5%L!xaNra>??n!~qywh;6@a4bK%D>&0-}NlZdKKAQ_55lp_Kv97*2U~=lp0OG z)?(4*>qJ14uNR`pHwe+>8--}{O<+=!Zx%hdn7tDMx_S!`y0;R>x)K{nT^)k17LU_A zKcimqZN9d*TWxpw+PeNBCBK8h8hRWv5qqaqc(<=`+=R0t;@ z6T->;;5ZYpkBe**F>G_Pn^WCS3LZjk- z)a>gsmI+;bR&j9nIUyW=UI>R@5W?XX!RG9%7!Pe<5;>ZEeVJ=^Q3zq97}Y7>M$Nvy zYALAWYl@?euM4UB0U^9RD5TDBfEq{}wLPQ=|7PGQ2_Gf~-~T2Mx$@h=A3f+(GeqPrC z#>xObWbN9==fOa;Lgt{+hXiCX-uqV3Do}4+=>t1_NW>mF zl>M2oYPmqENCMTdkuNTzle(#@-kFN6qRBDOBbvt-(iEhEP2uh*I1J5IZkn8c{?z;k zkNlY;@W`JF@yN%7c;qjHc;qiZdF0BtmHrBXCZPKC(D)wceoYb@&~JdyJ#Oj!r;45= z{SzdCM|pU3VE4C{^>fM~smh0x(<~iQrbIx>=|ZI3REU%_gh)9POiDRR^v?(%@58yLBO)}fza(t7+Y3sBrU5w z^M7`i>lS$Kb}{aD_1xL+{XdzP%p4(47FGU47Egv zq1uHQszZpOb_bJ&+C%itE^P_>VaM$W1xxJ(gzklev8BXF(o&D84gOaTQ7`hU*xOXG zk5@(4f4|uKB5A`1S(@0++J2^lrI8ZUT^#AZ(p6pR_V*b^59J3~Vx00o#p9F*331AU zg*fFQLY(qYP(%5d@lbx4B06orYSwZ%L>%)7Aaq9(;+Vy#YH^2e!mC~zJIazA?UQsJ z0k6@Vgk!by&(K7vdp=)E(Z7xkeM&{6rcF)sDpER5GHPz;j-f#Gk`U8gDLdBc8Sj;{ z%XdvR#Z{IFYEMWvBOnORzz(TY5U z(#KKcsaENDiqzSNSdpjc8bzKiM3H9*QRFHiitGlZ$ThJd&s0R`^CU_Sg`?G8Aaq&6 zSgX>b*Q)lV`z*fS$J>{)R^;sEw)9dyXSB3;)Lh$MzKAB;)${@R+F)r(e0xx@KOUT8 zuFmR;Idz_|3(^laPcB(@Tb*N#)N(p_E2@3L3eS`_To5s~-~mK%<9Rcixoy>g+H z5g|%CONo;o#d2puxlEpUj*_6yP>BA{72cbFztJ(WAUD@ccduLL;sM;N=jIJF5vW@;>jyUNqBv;Q>3v-RDpDThk00YY~z zA(h&vDV}YC*HK2p2^r-4U;H74>#d#}d_CjtzujnYsPiTjgnDllVvt*e801zVYJMr$ z+<&``JI=8Y;suSvuP@hqWB=_H+=cFygpp>)?7!WvxH0>0uYxL0UM+-^JA`oZ8X=s# z793~)?R6sC{+q6nY`vcQ#{SzIxCz}GMMCul(}=2T3qvb;^-80v-zu2Dm`P;gvRWG{ zYC=W*GpNLK;n+tuzR!Bf^zRv93s6%h)8c0BGTK0i1c=_xnbwx zj_EFuqYb-va2>jL62f;es#C&@+OWIZQc%ac6h|HR2&wzsLU?(PkUHNBstGr0d!HgY z{~;>5m!fd<_XDB(0Ab_-MM+`9N#ddE2QAfy5~&iZjCc6%vuMQnFc%W*BSOUbs1UI} zCPb|J!4|PTt_XVror}NS z56R;X=kS0s)%Ro{&q=pc$Q~W9Wl(Fp(#{)(yeZfbZJwo~&njzX5q-PXzOt)rt@vd@ zzO$%dv5jpgmm93C%h}%9BIbGYuF8~LyhJ+@etRwP2v(ED#D1ZF*SyfLGr4kW-Y)!< z)Wo*4An|tLr%hex{WFR{@1GT-_szs`@IWqnS?t^#6J+`ZcTd>rt(?=MX=ScMm8vBin-(i{ic^0*ZS`h~gd= zqPTAgQQRY-#xIqx@#|Z{*4?vjLqgc^0KD!_7&j*|VnbE*y8B(|`ajS0zURgJzKQn( zFJ9MwrYJvz`-ZQKc^vkrN%$i#;kd)`k1Y=G_=yU_TYf6Ui+(1=i+(P|YaRoe!|^Y; zV=I|3Iqv;R_l@EB*WB?b0m8_8#tg@gD{jni`~*~S@>?OC{7wibzZb&EAHZ>j<3EaQ z!?CWCZ2gJ*#&G;+ZbJ7Lk?54S$A5hfdAPne&+05{S3RCO-~E-8C|JUb8f^b&WuUsh zD-MPyaD+n)ZzP1_jfF703D_KL&yD-5i6TdX?If-_1xW~3#i&lPI%=?;VkxL&Di^9_ znvl9vLU@@jq|Qx2^^T3&W+GR5a{h)*mmYQ=|yb|;aYE_tmX}!%CJT9 zB(HmKJx@;6wi~r)qLiWPZqcVJuw_*2-rFlA=lVbG4?Ye zQ}7W3I84~f9{6dONe}CqPde>sU1B;>s8#*cf%#Co+fHt=O;OI5oH}f8?t!1}pa}eI zMJH^rSHXzFlwJavG{e}QAU1@J-J+XV>SuEx~7e>qbN;R9`} z2{Ikg1FtsYZ&Adb|K5CSlW@B!lQ!5b5jI&Y0ybG9#3t=RY|s>u~!kF%~(%BC*JUB4Ck&gjnQYAr?7Ah(!(slNLElbpOc1m+20N zf-Q~!*jXlwZ6P+2)5Jrt#dGbu+)=)^qph}Md~J57=sA~sEQK}oC=Wl*Dp?j)Vn0ui z=sMl;%789AEdjb*E&{qdL5MC-6r#(Mgy`~QFsaKGqWcZNxJPy?p`pzT5V}(cV{M9= zq-W2OXOHf^-Kjpi4vL2EG@spnSbt2?(}``B_YBLmD#{hf+ZYX8w=y8_nU(-~dqhCq zULo>kg~;0{MBaWdDer*jk-Sl{E(Z;HR|BD2Lm0~|W|H!*L*9SQfaLO?$Aa-#^gMR` z3;9_K3r)+Z#g~k=!HBiirD0jAFdiu7iZt zhJnznCycEoMv`rQ2YKmJkK-f0th21Fvwc}zPb1$sByDJ6%%Uf>;?DKOjl1YM&*G5# zd=-QqE)b%h3x(+CA|d*?7;G+jF5!+-#)Qe$#ihD$EP5{EE_53RBfX4S^jxmEF^irn zpo)_#g>do`A)H(#gp;emaTYz-h-`}WRqn z-3_Eg#S&-KvgbxC1?AnOI9R?}2+Ow!Vfj`eEWZ?NE_*h_bFJG%j+Q+yGZgz#02 z>J+o1mOZbq6x8ub#ZkxYLh62%5MEv_q|Q4)&FmVry+#q8PfO(2k`&K=9T2+L6ULq` zF7a&pi%$u@!BV|3kt(68c;WLVi-zqtb0N0x6vFmfgs}ZqA#A@5Y+?KDiqOL6E-pg% z4nkQj9Ul^WcJtHJZvGqGyXg)3$ke$}AK})4K1$~=UP|d(WIQfQzF?u>yV8_jpEZ+(=~hA&FUu*Yl5Au_NcWUF7t6&o+HL^^J+onlQ_ z(ZRTi_S$vtl<#a)l!qo)M|YbK;f(K61kQMm5NCY15NCXk5NCWZC}+GNZn5u!pw-a< z^c%5rJd4#)%H2yrw6OOB?9yAQ^PYRDAEY4URZF2Cj-LK~$m+N+szVdu*!SIsm7Y=Y zBNmB5J}LqV`Ir!e+%H5S9~YvKPk(?IAxLl}1*V#5Z- zqJN-AHk-YTZh!8xzJ$+N37_{RJW0|o5ZjQ~wuirHxxN(TYMldoS*elsD;A5iUljpq zza~W5uM3g(0U^>p2qvZdhUl$xfQKLu zKmR%yr%bs8q@hRH1z`V{(7P$EVWHj78rrzXOe(SAU2==KUbd0i!fsrtZM;CS(N8G?jKm+m9Z*4leoK zBD;Z`y_JXx_7PJ5zC!rfPe_GJLA6auq(b)>`V&dV=y#^j+*+0a`bq0F$5TfAc=voQ zBlKQ1Hi>>xx!oN=5j5okfzTa97&m3{>6>!KATzU7z3yP2KrS>?aXkERhd^1LnOYd| zKjQ5UV7itwyxNt4NlaEdi=z%u{~}ZMbfcCk^EK>TBGYDk(ENH`vFId)qOqYCe~%xgO{nGTZaU z|4_a5Waam&pvhvbA3f`4hJL8ITp#RNug=f)LBp!E2I_-DJ&k^ZL%-1J68UUfp}e{h zB_8mJXAWnbo{_-~C%pz;&eConv#lWr5+7Vk zdsceNtu;L!O}Upp3>uaa-r@{>o_7?%XS=2lj=B* zmo-<|yMrCkxhhXz!ROigb4StIa~*szrM$L7$E%9j^&R+BwS%9->lpQ;vF-YaymM9l zv^6;fx2#Nl9{0;LGtE7l#yH=o{2=a7v%k4OId_cuo8jT%_MwqlzEZaSW+1n&gTz#O zp;B$vs?MI)HhB?Aiq=+Us!#4|>hEG@-ncN}F44tI1WEeAiy>~vZ0q}h_%S|uuH}2| z;W0jXDM@Hmk%6qWRNZ9|Iiaf}x3u=-Pt?=f(5mhCR@~)8(n_bh>~Mp2g{RFh)inD0 zE1@p0_hq&iJ;kuS8ut=qnvmI~Fi>?@aUHs=3ET2>*z%p5->aUPi*wW4)#~c)dil`_xBYu literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/output.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/output.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6c3d3b4c4d78fc756668c354dab58c27e7e5ad97 GIT binary patch literal 28591 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 literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/platforms/index.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/platforms/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..988a205864d5d4f432ca53f508d8f1182e3642f5 GIT binary patch literal 19490 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 literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/platforms/movable-type.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/platforms/movable-type.doctree new file mode 100644 index 0000000000000000000000000000000000000000..7aefc1a6b1453474be27855188404ccab7668d4e GIT binary patch literal 11163 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 Ri+{JhU#=rvVu7pf{{zU(5X}Gp literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/platforms/wordpress.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/platforms/wordpress.doctree new file mode 100644 index 0000000000000000000000000000000000000000..772d67975e46f91ee5b61f0b033567cadfcf6687 GIT binary patch literal 13097 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 YAPdRk_z}C~c~nV6(39N?xA6~|XoB#j- literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/start.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/start.doctree new file mode 100644 index 0000000000000000000000000000000000000000..65c027529f5ea6d406defb02fcf0c512b5351fc1 GIT binary patch literal 63120 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 literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/startup.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/startup.doctree new file mode 100644 index 0000000000000000000000000000000000000000..e196242001fa8c4592582bac97977f6a6ac41270 GIT binary patch literal 50199 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

V6$(s?`as||u*&{Xd8Nu5QVuhXU3k*p z$l7fjwkyBQuakZ_QQRhK$$Ge{)x?OA5@5t;LX6m4h!I-|F=9(l>!Eb%l)sg*{5F57 zf44P-7*PuZZWL*>G>Tq)Y0Th-XfFPzC#~DYv)a~JjrOeS{#zMrhtl%#+TO_Q5RzHa zPFnFTRM)k|?WisoxG~m*fg39U1D6ysa61VZxSfRzoW5O&58N)2*VZl88GkhzxN=2q zS86eWy8(gQoirLj5sr`Gt{TDr*n;QAc^-Qhk9yCe?mw(^JZeg#R66n6Dw#4K4Iz)+ zuzfqeo2_t8h)zg+*yo=(G!3;{-9EQS@cnRAdq*L|xxv0^)VgD>N4Q2KQaaD-TMXA^ zx*7Mh3K{naLdJcfka5ol8TTxxRcD>({F+0cl}G#45^FaJDFfXM1g^!ZaLz5O(ux#+ z$o6oRX|vkxVeRR!GI_Oxw6mI!E=U0Bq7c#@LP$>*LV60QV3jVdGE;@qTVAL+p7vp)jnR8zmM~`y4{zaN}eUsx_)lLw+}6R;mF4x{*xEC z9}PHJ?{7Q~@I2z1zvO@}P27P}!4Mpz%6xj>F=0Y>sympYWRDuT{t#7QC=L}eM2D%U z7jJZ^-r+j15j#S~jL?yi^pO^QROgPe+I+*?kZp8FbD)r0FABM1)JR*pW61>WI8yB{ zmLa^hZ!6d{fW-Lmo9d%nwoT#IEBr#G${nxPyw)X%-Sj`fdV%SQDj=9n5@Ny0LM%E( z2-Q=;_+IBU$+g!xolM})AQhXXXN8SBQ;n;0G9AU2IkSRP3yB2~t?dfN&~aYPBzm)h;>IU9Q@U{S{UU z$txv*i+z|oVs+pPWVzI{CSOHa4&P+9qv&z_|07_ob9Ox{F*F{NSaT{D&83YZLXWG8=F$^n0{0}TqF3+cZSOzmvlC484ZJ<_ zj-FcECuOB53IilD(mt2(KJkVnHlLd2=Q{j(jSl$&y%;^Bi$AXMS2p1z!f@9zv?`I{ zi!TYo)1qe-{bq&#dS4F@6IuVzFWw`KSy1`@v^b4#*|v@<#CJr#yBa=sOHB(mEy-4X zS_C`%Ge$b#I#E2Pq`2hkP@&!UrDYQz%=5UBD*V(48cH-ph~EX^^FBKdhtw4RH6kpC>v0k9_stTa;pT9-Dda@fe3yi zg!sooh<_r4=%=8TG_w@0pK)y8Z@JIO@y3`P52zbl;Vdw{!E|5HNNm2e#%TRY06+S%{ingsAyd zh??I(jmjp{@jD0IPcnZX#ruB(ft!O{b6P~S-z&wj>wy%mq86TH=0p;>xx(7j)b6^5 zxVhB`m-MtsaP1`lTzd=Q+D8c2zCyTGfpUq|i0(X+`xpJ~ToXFq&5Inu{Qy3$B89M4 z{hUb6?36RWH?FqE^ZCXVPdNiAE7`15PV5V@`K|Q=Ve9>{{%@_1e`9rw)<(CW=;G~# zj1=BpSOUDgh!AftD#Y813Gw#gU_1Z^Nv;4~f=u9+Bvl~%k1%d2ajVYB?eSTVFpk)| zvAGF7G$2i45v% z0fAeaG@2nI6Q3d4cUL}V$79m1xU@b*>#gLjYsgLf2S@E9Qm zj}>BY5{w(XljL1uVP|C6sb?;M+l4f;Q)J?HYRRuEttY$sX1iIl-F-7VD|A*FhqPp0 zmlbjkYgZq(8%NiFZ|gRbjhh=UF1Rjb8gX5N1h}qIi0hh!xGpWkbrZn&@;6a(Eq@s@ ze4R$BORTxlKp#vEVWO%q{O}4sI!n)cBl|NkZv#HXK+f7wx48$~R4F5ePfd5`X z`0p)*e;|baKA;9d>Se;d!rHp!P+DQL-EEWa_M<-L?GNy|8fg^YG9n(|HT2l!f?#G* zb)fJ2AnW^J-*??#=;sicmOR{LrW|UW9~O4LF(m))C5Ss*>KKC~tW(C|NC_B&qlApX z(L%=H7$IYDEEt~*$4Rcqa6Fm7oj{6LbJlNlPK@KBdZHDh<|GxM=42siP7$K!R3U0k z0~M-UYMf8!K%u(C%q(_iP?Hfp6A0W{)@;BmG&`G`I9(=$VSSGEaBi%Jiec@eo5$Vf zsR#UczO}%>3nak63xybXkq`qf7GmHfp!_JEvhh-(|6HX)EPFlfGAd!-8|u`uCg{)`!@C@IxN2iQOWi$0e7u6x-M*_Po7H~{qf^xc)@zTdc_|% zSX=yYqXhWlCL#W~S%^Pw5#o1fB}V@z5|`bD+a_Z2sjBEM+-GD0_c^Iz`W|9>o9LETV_Vy# zY}%iE{I5C1rd)Jwt16Xly_I^gA3iGUiknTzLUdEkROn>_UWw2nBYwWLiC=Mb{7B`5 z@E0X1s&s#^ zm(afmJUxAXP=)FAC&0ZB-ne2Yb0G<_W=1jL`K=(=gF;?G@>TqusJZMQb|-3X1Y*@w z2-{vl*!C8}t`DdwZstL-FUS5)R24ZshqL49-ifL>Y;Il}X`$(7jnUd)0<;bg!lqh? zkLDA?Vjw6MvPf>4U#LZT0WyJGkW^lj-hgx$f^5GV$2h(27yBkqS_=u@E(z2vM`C5H%w~#fE-z)omuB zzdbV}TQ;W}zTW}}+?J#E33J+uW7#*HoI%5tEI90H_AG}ux%v3ux*7H zHd=^b+X*pjdob?59VD0kb|k|q8>FIb{Z{A1Fz&yxR*agY3Q)6?5H&jsQKNT4rDhjU z{@Y&u+f~Bazh>ZWw8g2r1AHGw8e=EQ-JH6I)vWh5?e}wHXEwi2skls4x$(4-FH_bQ zBO4^Z$VMSXHVH8@EyTzPVBD7zC6_NVWVm7{g>B`{WJL}xryjWU7Wl`>_Cm!Z>j_59 zDu7Xo5Js&+7_|vu)DFt+JIL*M4!SRC4k->T09<@qm99%#2U1wbif~DrY_+F^wd0$~ za6y}@CirfeRe|ZA62NpXAx!rc!ZZ-VbRST@lM<2LR~X+++H$rZQpoNPa4AiSKkdf4 z2+eFcJJ2^i$QmE)8&_P;4xy}MZ|8DWaWi?S^>&!=t>R|#aFvyBCXbK;oN%NN=Nu)( zIY$d|#xbCVZA`Rl@Or9b! z`cIX(Y%`gRn4G36+Dx8Kh8Ge@71KR-9$qD(fAww#DzBy%^YR)XaMzL& z6S&rs8{!<9oS3tQ$YDD){ zVSHEWyLPW3hw$q_;NBn&*Rh;P&1@Ne(>H$08o%uuS6s&5p{!(c=Q3`q*SpsGy|A^u zo+|C+3bro&okhpJFU>ga1M45heJBBr`$&l6J{ID*PlPz`Q!pM&pGmG*`kV|8{7Dr{ z)-Tt)Dvia`7gmg#FI9k=uY{=iT8Nr&gsAxzR4mnLaK7U}v9#>08SlQQK7;lHz|((g zJYbd^|44ntLgs|=_mlPWbJ&j_^UYut)@ZP%yI<4|j{Vh|VexMgVDaxlEdE1?#eWL1 zcn)q!%CS-`qkC|S&3b9M!u`(9p)a^OsfoFB0fC#FG>TCXkH;uQ(M`{uzD+M{)7!U+ z-}LN*sN{t%5!u%oRfUZNt~ zjECVs$rXn4lL_1cqzXgpw>l@r@i1J_iczzW3Q)7K5H*VkQM0HJHH(1?!(B8Yi*pc# z;Vf9}22r1JSpwi40Bh{Sa8?>GMSTW9=7eFGuzr>f`_Zlb8H6DbxQu$hr^{Lkj9pFw zj9p%cu`38Mc10n^4hH2@>6E=ggwws_?g!efL?w(|83^1^(kS>uw-kI`B50V^uJN@i zUFnRO&W_6sr;UtS#oA)jsuEz-YC?=!U5HU@2r+6+FdistNv=Ryn@r%=A%$_JE1l_Z zaOYQwd$J7Yx2}bLw07mNzVYGn|MjHxYv=OM7+EqT@n1k-8$xV>r)J=iFjkGFV zPm`M=g@vpL<70EHy+v5N^GYYO!)>W1_--q!0@JM}fN8A|rlW)~-9`x0Z9(}?Ne?ClJvidQ;2S#LZ0 z-YQ<{XsPRRrL&6^;DlX;IA=E@&e>gvGsb}$w%w!ai#;SLUFpF-z~N_z!<{FhIG z{9kbLZ?D>QO67M~{jceDd1HK7qC#i0bhU%-(p3&Gjt=AFzjQ)`revF&xwk%1FNW$% zzH|$JS86h^icZnb1adr0A8>>}lcPV}(B+0mMV>AvcU0#zBC%_mN#+&&+blT)+akp8 ztwP43O^Bo0K?b^XZIkENU)wlxfh*Xtf3v-UM>_bTKySf%_qrmrA)}FruNEEF32Y{- z05(&Eu$d}^%`_ow_5>AnduRggC1I_-Q$KUfdsCTt832LXhm@Geg>+;IQV1`Oe6=;c#y76GdS6Rf$=c4<+ZL_sto8L_>!9+Y zHT&z#UtML~4dRNQZ!|{u`6dbQ^UXs1e2Wl2-zvnWXhplm!Yb!16{!G)Y@gvlSx!e*4{iD{;V_`q~Y_j5}mOk0hKCb4B%oA1}OP`bg zOP>;A>C-|ieMX3-&w?5mDU`9#32W>0o0S!=sZipcrv~P|0Pu?)q|tN`(fD-WFuIm{ zi9Bsy2Kc>OQrc*P5tY9}zGOAQZ)@(WR{J$y+poE=+d*v2eM1c~>rEl%z9q!mw}qJZ z4k+_15-{&w$+Zu7k4)g+ClwX_36;Ng#&sX4M?C(abp?fwB!I%lLa2Qr#N(d|q4XIj zN-|F#|6Hgw_+MlK_XVjat@&3exi8frulfsOHx|CKjv@H93LyB65Q5(dA^4pTg5QG* z{zkF;LBiU8*0;^bta*uMj#_Lg>r`Y7EjEgLygVeg^G_6vy@l0yn^_ zbUlMsBZY-b2p5z2toFdLw*O;GB`>=9RUfY{VCB$UPy%Q!B!uR|LTD}`gyy24ye17| zx|qJI7MlxUu?47L&T39?DWSi| zHGPd+QHfc;H4wO3QX(uD(hzf7yo(S*y9#mCZbFFc z4vL73lCQ=Ib=KH}OyKHCgP0Y*^wiuVa5_6`R2t=Jt^X7{h(dPR4LQ2^houg^b|= zLdNhwA!B$D7?13OIra;ygs2vZe+vx8*%pFEw439=4K0OXM6>vR51#mr52-l;8 za6MWG*JD6Uk7fniu^ec6EHVRP?l>wDcEGZ(;Z$pdX{SkmX{QS@?F=ENohih$vp@}l^vb%kh5jps3YTY{y4*Qb z#KLodz@0}LO)SxlPb_w*(N);_zRd;J=0e{lewB6+qLL4ytF())_9ecyU(YYKgV=h0 znHpl<#xtN8O^He#FOE? z-UwpY4H973jY15*Nyu>CEX2@TKp85hX*h2c>U?nGo_FXE#?7M}SeUA{c?-gS9eV`_2t8BiX15MCDGcnRVKt)3ML4Y?ftkr;-w|a<* zaFs*DiTbd0@JQH!zkyOZzjfJ4x<}QVA$`oMW832rVA~TyY$JL%Ua19iP2s#rW)X3Gmq)LVWh75TCsz#Ak1Vai6^-x&LiT->G{S2|juc z;4TemR8^i1)q{;=Qjyd2f`CiMVfsT137j6S(h4 zwTKLv9UAU?byA&^CGjc#gLMX}f2#meKMEoBlMqrr3nBFjs44Em=vNN9Z&80k%9#ER z1nv*3(shgaCsJ6*kZ|(O(MPp=kjf_gQ6K-+Sj?ktPDpNFP0hH$fc=LiZ3PaI~hhe3g7yW$W{?>SaZ(MPET1{EW z>dru`c=KXD>usR#t>Vp#`Bhea^I`!hzz+)w@y|j+{IjqSe=GuO@QTqbgGD7M-MmeQ^8-Y9P*LC#Q-8J|9F90S=KY7~5jSPO+&MmL@)j63E#vAaLuFLOd4|k~PG0^gsH#ZiLlc&)2OO zZR@M7JlZxuB<>puv1ubAHf=1#hD|`(Ff|(EO(iHr+enTAw;Ad5qHS}Pl}B42IcW>z zQoN-Q#an@~Xxmz1^w&yU7HxY*Oh&1SqHP;8f!mfeincMlx7@kG&lbXaPx?LG@#BlG zgOBN|+-SA0&dG#$v~6eoz-W6F;EElDFx^oI^D#oGjRoV;mXuu4wi6ldOOQsq}Qb6Du ztaLzUX(Ix3i+H${H(AAWSkd2Yh%RDE{&W-6j>UYU)q`Y40!U_skjx1oIY|h~W>AZ{ zG>K=6u>7yDhP}I1ieTIZ1g@PljIf-j#g}v0Xn!jx?^`%)QSdFyMk_5MD7Uf0Doze7 z0-UaVaJVU|jA2u)5W}WPfMI(IF>Eg(hV3oHumFr3wvXiA|LW51%Q4pM2Lx_^(#RT- zC|RTPiT#h}^Z{1?z|Q)m)%-#32#euCDl4DU2O|>4LxgZYR0#LOgm66^RHW=3&7>nF zD9!03ISSlSq#?(W&I9M719Tp(vhq3ISI#&FxfCBOMDcN8Y)&69G5SxCxNJ`E6EQha zRWzqhA``fiNi~Oh@{{lJ->uWHN%FyJQGc$ZJyj?q2J;h??XInn`^jyNpU39LZ|7mx z+rs|7)>z+1_f1~eYdOB|_Ab4>@15$Ij)v%0Cx<0=?64PmN^kw}Swk6>?l1XFzps(a z>6AY~cB)A5yW;w@R^|Oftjyr9ltQLDdabuS)_;km{ zouUA#&M8J?x9m@~I3eOrlbldLT}ULJAtW--6cT!8f$=r_Y>xe%vUA7n>kA9%3D2^}Y=Ueyiyg&u;yif?wi-hpJSP0KcKuytov`AhmVeQ}MbQ#^S1YHjB zV-lpytXxP`*4x5kxBaiQDp&a`{x;Fob`ZNwbPWPAzgCDv*9o!cdLb6v0BS)r7huGV z9Q)h;H<1h6&34@F%4f!N)7?TVtw6V0Yt-H*0cvj-Lgx-4j=WO{jk`e6kV*38-9nwD z?;#Vodr9R6>$f^5YVq;9&x%oVzY0+EfDkng3Q_Y9A!;51HD3Ek$HN?SzoL2sDeiw1 z;Esh=>3T)=I8wNZT6h|M!fHPm*7jFaU0mdzQY(D&wAF&_GZH}dSs`Sf6GHZRA!J_w z^mmmcc*Ka}ZS@r_@##;^It6|bmX zr>tak=M|Nm2HvpNZ-%W0bBd0w6wxYJacy>QsaxFgwl&5r??`}K-WB4O_k_6ReIai7 z0E~yqhmtE)J|Yvik4Y6O)^BxA%;KT)i4~*fQx%}*Ga+g|7oz50LezW#DpdBD>%Zin zd#HSc6u*BB1nwKF(lu1RMT*lzEew_KtoHX|ZU0w^yL-s}poX~R-&PU6KS}`KpM>!J zSqR@>gz)_plv|`qlz$WYze?P-d-pqK5dQ<` zP9UYB{Q>oOrMZxoZ0-^$b6d-vVao*F&+N?XdZ{}+(c2o~i9QnGiM~QSQ6t@NIg{g}Z7XbpdC~1t1DB1!a|LlD+tGT$ZS+@dCi_I?GT$#>Z#SNl~T(^WZ#ik`C zz^0{y*pv`r)6zn0S_X`}Zdu9Yy5-0OZh2CXwSKt)pwigeP%Bt5YF1PMY6c5YGen4* zm4v8S8I$f^5Hu1n1ZN;eBP6ephUWl3b&rm$A3nne}NP-`WKoe z7+xd+3@;YK{1PEfzElX~%Rn)f_44!OLajenkm0)vQZXL;A7bpTlD_Jk{1Xq7t4%Nb zuTcT~uNA`oIwAb87sCGrP(gB-$lu6;7B+neJ#+uMo2X7~+zbTn7HjK&NPiaE-b!_N z%S+)>c$;-|d)STt+277vE$$9AU}WyJ3RrfR1Xy;r5X>Oy{y$ z;rZ=jrsDBXg`VYf+q8DSE#{t3|2XnVYlkDBk^o0OEyR(}2yx`ILLB)V7+>I?ms}zK z0vW!gAl0H^{Z{8hDjtb1Sutu}Rsm}MDMZaHLe#t}M9piUBJoHK*6SQ}KgGU*l;L_4 z2;5s%rRyp7ZKQZl)WW!W$7;VD*47ixXvZ2l$GxXEc;tPn1Jw^Cfa-@rsD31b>c>K; zegeuP(jvB>3Ty2I=(nrZv-=D&bUz39{RGk|xxjy?Lz;RQpK))&4@L4iG}M zS_swoKzUDE#CD+MouL%=?B+)d-30)CY>+exB~glpQl%&Q3;D(iTjNE1kK{mK5ThrG$7VA;cR?gBrMFqNgCs zNKkqnvn)qEOeYP^FX@b)$1Jb1^5-#Ca`y_zrFcaliU)(S=P^ShM*m6@mpzX;E@HB> zs%R@RlnlRPNLo3pc`OjU{N(TdRfYdtjk@3|y1-x4+e7`~))k~yQ32jqRS4PDgpgld z2)i{vyiOlQtx89t+2L^2Y0%s;6`%@z3qU&ZBH7_C{dW% zjM~9B-q9M5@r^6asIiolEYys$|75(^ll=?R_(Hy=KK%T{B~>3Qcd|aQa%VEhp3UjW z>1J0)epCcIqvYI0{q?ze zlW#qGi|yQavKq+J-^)rNu%K!n!v!>{_YAC>>;P72RYK7OAv`7u;gu1hI1A$YOg}k3 zCt+>f2y=Y&hxzPpM)`>n{@i?P8-FazHDy~<&BIn5kyvK6WfFtKG!~JDPJd^D-k^ty)`WwbDuvdAQxmuq96>@~|WCJzO9s%Ze(EJlr9nd3dsN z7&=A8-osPLj@l;l@H7r`k#9@Cg1o0%X~OPBCUAR`mV6u70etpRC49TD5C;1R@$LRX zR2~2-u4SU!d!TUk-Mf0sy{iv#2hj`eJs1ewA*7LeMYWrI54CECbyn-<-ovd7bB-Vr zx%Wu&-n~bWlW|9@G;;4T5}JFDRSsK^Q?YmN@nlCOL-(G*LCL+P-vvBTt>oU5$neOV zwB+7X>;OKesuJ!!O$dY2g}C<&Au7)VrbMG2M+}ZSkd(Q!Qv`QMe zS5&*X_dKh1erL6A?!CauFy}%tk$W#9@7;SbIT?3}N+b7PDxtaeGUc%Kaus{`UO{%$ z9-(`$jY3r31j@ZKQSQB2 zIQ#BhGv?kkhqznl1^3gd&tSS zdsP~__dW^Dz4t4Jtq-W!yZ1q|qq3oU|G`1Yy`}FRA5ts1_hB-DdxW&)-bd{KK98vq z?tNScgC~Tz_emitp91AxnJD)@Eu4M#t`&3dT0`73^n!bz1p@aRY2;o}?dIO+t=bEn z)w;R&MJvOcm&io!eVM#>??1`OxK~sfx%X8G&AqQFhpn%x*t_=)vZE%4?tPPkl6y;U zWWJ?Va_`$@0{0GS$-VE|0es$5CEWYI5C$IzaqovhRDJ}?y)sem{a85r?p-_P-nECg zPv`~rehLKcGt$VtqT0>9pIfzmbyn-<-Y={SbG{@Kx%Vsb-o0OwlX2guG;;5^5}JFz zQx03dSFv~R4`fH}8M^o19F*K!dIj-EwUT>(A``fuNlWhi#SY-}t198%--IyuU5I=C z5Tf!=Q0|q9a_<~m82<(Lt`l?bIzwC!dcnPO0=#TZ8o5_gySaC6tJbr#S~vIhvNFu+ zO(t@0AM)P4eaXqVDwRg=okv1*@4U)kYd;lx_x2|{YM;=(12`zTxAZnxwOYx&^N|VM zK+=+X=eGm+ETBrbcR?Wx782s#g@veG1eAMaqTIWvaQ35j-I#mV9pVrz5V%34 zk$Xk8n|qhAYD;!j>*n62tPFD!WFq%2P2RhA8FDgiS(QfaT~0!C@AArF>k2CN?p=}W zsN+KS4(6cb-qOY05VewfS0WR*l}StP9cl;g8Kz3Ow?+tq;X>TIiV&5nf^x4+lzUeb z*4C{*oBQ5XSBd#|)m4VL)#(QZuL1BGJZa=$k&Qbzo$TM(;rNRd#rp7)U@dBlPF6Lg z8{7PkSGl!KGBDLqY@5*5R%FwiuD8oow+5y6LnPgCAU|LUJlk*f^s^+cwKTLf*GH`iZWF|O?ybW4%9vVzBdv5Zl`hbwX}wk0+$wCL3Vj>1Mf=sRg4@!h zTaoILJ~?mXD!V+|8u94lz>+P|1zEw>TC-7VrVER0$nY?hv=ktt?SKH;j!YD=+mrVJ zy8}6e%Z@6I0(Ojq7O-QLBYKi5_5r&SSw_NNtL@A|7_c~BcL6O>cOetFT}ewkcC!O` z?5;`#>Np{q_Ye}O^+HsQ2NkHYMI)LL*4nShY^BRXJTfU!Ou31?F1<{6FJo9Co$pAu zHl~-+Ujf#&8m{I?36M0^xCVM4L>mFF5=o;F70u2N%`BBm`ZZUP(B9_waX6Qz%IIXD zY*QGA6FA2De(`}XxQR%)z9dcdi^kNCb{1LSaw@6L@|TKTy0KXA*%#a-Yu2p7KH+P! z1=qsi;Lg7p&kuU*Pc=7H?UZWnNEfPHE9Gsjjg;4|RW~^>ip~0lRO2N1r{MCGz;k}| zahY1*ly0XF{E;QP9c81F^STL*G$^F&J6y9XAWJTuDHhvD3?E)>YilmlWYfh7HEnL< z@Jz9#dAKX8MqgsEF)cN&!)xf@o^F?^-rEH?**foED7tKWePde-f5M_za8pd$uh=G) z5yz?Ou_xtjnwzG4zvfiy#139}r6GU!W>3lHOt-qdlF?)qt7cM$T! zlS{O96x%zB)9e3Wb<|7L8jJ1_9rP;@FRdLd^;5NmxkHgLssoxjTH5PN%R#{%hMbkH zsjV^FI-xDBe7LXNe@e==$`<-fr&`<*R(C-So4&=@=+|?T2UCdmBPmSwp={XltE|!F zj?&?L>8V-PY*wm{Lg>Y#)pgHgukg>G9b;YEm=oQTvxO|LLc3#4x?p2-TWV5$x+Rru zu1_^JIbQw7L7SA|_^7Mu0Vht?}0*9o^B8T(Ij7!JO=FP@_4Lb7`Y`3;F j&MF0W4+8EdkS2R6HlcMN2Z6hvG*iR91mU0*tZM!bpLz-k literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/synchronize.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/synchronize.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1b5a3c271b4f20449a3b2ffe4007a367d5b44402 GIT binary patch literal 15236 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 literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/tex.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/tex.doctree new file mode 100644 index 0000000000000000000000000000000000000000..92f08a1249b85d7ad10bd582f2770008dd8c97c6 GIT binary patch literal 74743 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 TFE5&xT!0^S2 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 literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/typeset.doctree b/lib/gollum/frontend/public/javascript/MathJax/docs/html/.doctrees/typeset.doctree new file mode 100644 index 0000000000000000000000000000000000000000..637ae2653d9506e5ae4c3cbab645b2af2245fe58 GIT binary patch literal 40258 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 + + + + + + CSS Style Objects — MathJax v1.0 documentation + + + + + + + + + + + +

+ +
+
+
+
+ +
+

CSS Style Objects

+

Many MathJax components allow you to specify CSS styles that control +the look of the elements they create. These are described using CSS +style objects, which are JavaScript objects that represent standard +CSS declarations. The main CSS style object is a collection of +name:value pairs where the name is the CSS selector that is being +defined, and the value is an object that gives the style for that +selector. Most often, the selector will need to be enclosed in +quotation marks, as it will contain special characters, so you would +need to use "#myID" rather than just #myID and "ul li" +rather than just ul li.

+

The value used to define the CSS style can either be a string +containing the CSS definition, or a javascript object that is itself a +collection of name:value pairs, where the name is the attribute +being defined and value is the value that attibute should be given. +Note that, since this is a JavaScript object, the pairs are separated +by commas (not semi-colons) and the values are enclosed in quotation +marks. If the name contains dashes, it should be enclosed in +quotation marks as well.

+

For example, jax/output/HTML-CSS/config.js includes the following +declaration:

+
styles: {
+
+  ".MathJax .merror": {
+    "background-color": "#FFFF88",
+    color:   "#CC0000",
+    border:  "1px solid #CC0000",
+    padding: "1px 3px",
+    "font-family": "serif",
+    "font-style": "normal",
+    "font-size":  "90%"
+  },
+
+  ".MathJax_Preview": {color: "#888888"},
+
+}
+
+
+

This defines two CSS styles, one for the selector .MathJax +.merror, which specifies a background color, foreground color, +border, and so on, and a second for .MathJax_Preview that sets its +color.

+

You can add as many such definitions to a styles object as you +wish. Note, however, that since this is a JavaScript object, the +selectors must be unique (e.g., you can’t use two definitions for +"img", for example, as only the last one would be saved). If you +need to use more than one entry for a single selector, you can add +comments like /* 1 */ and /* 2 */ to the selector to make them +unique.

+

It is possible to include selectors like "@media print", in which +case the value is a CSS style object. For example:

+
styles: {
+  "@media print": {
+    ".MathJax .merror": {
+       "background-color": "white",
+       border: 0
+    }
+  }
+}
+
+
+

The various extensions and output processors include more examples of +CSS style objects, so see the code for those files for additional +samples. In particular, the extensions/MathMenu.js, +extensions/MathZoom.js, extensions/FontWarnsing.js, and +jax/output/HTML-CSS/jax.js files include such definitions.

+
+ + +
+
+
+
+
+

Previous topic

+

Describing HTML snippets

+

Next topic

+

Glossary

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/HTML-snippets.html b/lib/gollum/frontend/public/javascript/MathJax/docs/html/HTML-snippets.html new file mode 100644 index 00000000..47e3a900 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/HTML-snippets.html @@ -0,0 +1,170 @@ + + + + + + + + Describing HTML snippets — MathJax v1.0 documentation + + + + + + + + + + + + + +
+
+
+
+ +
+

Describing HTML snippets

+

A number of MathJax configuration options allow you to specify an HTML +snippet using a JavaScript object. This lets you include HTML in your +configutation files even though they are not HTML files themselves. +The format is fairly simple, but flexible enough to let you represent +complicated HTML trees.

+

An HTML snippet is an array consisting of a series elements that formt +he HTML tree. Those elements are one of two things: either a string, +which represents text to be included in the snippet, or an array, +which represents an HTML tag to be included. In the latter case, the +array consists of three items: a string that is the tag name (e.g., +“img”), an optional object that gives attributes for the tag (as +described below), and an optional HTML snippet array that gives the +contents of the tag.

+

When attributes are provided, they are given as name:value pairs, +with the name giving the attribute name, and value giving its +value. For example

+
[["img",{src:"/images/mypic.jpg"}]]
+
+
+

represents an HTML snippet that includes one element: an <img> tag +with src set to /images/mypic.jpg. That is, this is +equivalent to

+
<img src="/images/mypic.jpg">
+
+
+

Note that the snippet has two sets of square brackets. The outermost +one is for the array that holds the snippet, and the innermost set is +because the first (and only) element in the snippet is a tag, not +text. Note that the code ["img",{src:"/images/mypic.jpg"}] +is invalid as an HTML snippet. It would represent a snippet that +starts with “img” as text in the snippet (not a tag), but the second +item is neither a string nor an array, and so is illegal. This is a +common mistake that should be avoided.

+

A more complex example is the following:

+
[
+  "Please read the ",
+  ["a",{href:"instructions.html"},["instructions"]],
+  " carefully before proceeding"
+]
+
+
+

which is equivalent to

+
please read the <a href="instructions.html">instructions</a> carefully
+before proceeding.
+
+
+

A final example shows how to set style attributes on an object:

+
[["span",
+  {
+    id:"mySpan",
+    style: {color:"red", "font-weight":"bold"}
+  },
+  [" This is bold text shown in red "]
+]]
+
+
+

which is equivalent to

+
<span id="mySpan" style="color: red; font-weight: bold;">
+This is bold text shown in red
+</span>
+
+
+
+ + +
+
+
+
+
+

Previous topic

+

Converting to MathJax from jsMath

+

Next topic

+

CSS Style Objects

+

This Page

+ + + +
+
+
+
+ + + + \ No newline at end of file diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_images/badge.gif b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_images/badge.gif new file mode 100644 index 0000000000000000000000000000000000000000..e5082b651ef9c3abe641bfe89a1a1685d6c52b9e GIT binary patch literal 3723 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 kSG#|k?1Zl$kuL5AO`3umAu6 literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_images/mt_menu.png b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_images/mt_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..e64f2ae9a7beea5c2ec0221a047402dc3c3fcfb4 GIT binary patch literal 15145 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 literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_images/wp_templates.png b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_images/wp_templates.png new file mode 100644 index 0000000000000000000000000000000000000000..35c9105d35f8b6d56ce2fa230f5d62ac169ea136 GIT binary patch literal 7053 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 tag +with ``src`` set to ``/images/mypic.jpg``. That is, this is +equivalent to + +.. code-block:: html + + + +Note that the snippet has two sets of square brackets. The outermost +one is for the array that holds the snippet, and the innermost set is +because the first (and only) element in the snippet is a tag, not +text. Note that the code ``["img",{src:"/images/mypic.jpg"}]`` +is invalid as an HTML snippet. It would represent a snippet that +starts with "img" as text in the snippet (not a tag), but the second +item is neither a string nor an array, and so is illegal. This is a +common mistake that should be avoided. + +A more complex example is the following: + +.. code-block:: javascript + + [ + "Please read the ", + ["a",{href:"instructions.html"},["instructions"]], + " carefully before proceeding" + ] + +which is equivalent to + +.. code-block:: html + + please read the instructions carefully + before proceeding. + +A final example shows how to set style attributes on an object: + +.. code-block:: javascript + + [["span", + { + id:"mySpan", + style: {color:"red", "font-weight":"bold"} + }, + [" This is bold text shown in red "] + ]] + +which is equivalent to + +.. code-block:: html + + + This is bold text shown in red + + diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/ajax.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/ajax.txt new file mode 100644 index 00000000..0da172d6 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/ajax.txt @@ -0,0 +1,196 @@ +.. _api-ajax: + +*********************** +The MathJax.Ajax Object +*********************** + +The `MathJax.Ajax` structure holds the data and functions for handling +loading of external modules. Modules are loaded only once, even if +called for in several places. The loading of files is asynchronous, +and so the code that requests an external module will continue to run +even when that module has not completed loading, so it is important to +be aware of the timing issues this may cause. Similarly, creating or +loading stylesheets is an asynchronous action. In particular, all +actions that rely on the file or stylesheet having been loaded must be +delayed until after the file has been downloaded completely. This is +the reason for the large number of routines that take callback +functions. + +Any operation that could cause the loading of a file or stylesheet +must be synchronized with the rest of the code via such callbacks. +Since processing any mathematics might cause files to be loaded (e.g., +little-used markup might be implemented in an extension that is loaded +only when that markup is used), any code that dynamically typesets +mathematics will need to be structured to use callbacks to guarantee +that the mathematics has been completely processed before the code +tries to use it. See the :ref:`Synchronizing with MathJax ` +documentation for details on how to do this properly. + + +Properties +========== + +.. describe:: timeout + + Number of milliseconds to wait for a file to load before + it is considered to have failed to load. + + *Default:* 20 seconds + +.. describe:: STATUS.OK + + The value used to indicate that a file load has occurred + successfully. + +.. describe:: STATUS.ERROR + + The value used to indicate that a file load has caused an error or + a timeout to occur. + +.. describe:: loaded + + An object containing the names of the files that have been loaded (or + requested) so far. ``MathJax.Ajax.loaded["file"]`` will be + non-``null`` when the file has been loaded, with the value being + the ``MathJax.Ajax.STATUS`` value of the load attempt. + +.. describe:: loading + + An object containing the files that are currently loading, the + callbacks that are to be run when they load or timeout, and + additional internal data. + + +Methods +======= + +.. method:: Require(file[,callback]) + + Loads the given file if it hasn't been already. The file must be a + JavaScript file or a CSS stylesheet; i.e., it must end in ``.js`` + or ``.css``. Alternatively, it can be an object with a single + `key:value` pair where the `key` is one of ``js`` or ``css`` and + the `value` is the file of that type to be loaded (this makes it + possible to have the file be created by a CGI script, for example, + or to use a ``data::`` URL). The file must be relative to the + MathJax home directory and can not contain ``../`` file path + components. + + When the file is completely loaded and run, the `callback`, if + provided, will be executed passing it the status of the file load. + If there was an error while loading the file, or if the file fails + to load within the time limit given by ``MathJax.Ajax.timout``, + the status will be ``MathJax.Ajax.STATUS.ERROR`` otherwise it + will be ``MathJax.Ajax.STATUS.OK``. If the file is already + loaded, the callback will be called immediately and the file will + not be loaded again. + + :Parameters: + - **file** --- name of the file to be loaded + - **callback** --- the callback specification + :Returns: the callback object + +.. method:: Load(file[,callback]) + + Used internally to load a given file without checking if it + already has been loaded, or where it is to be found. + + :Parameters: + - **file** --- name of the file to be loaded + - **callback** --- the callback specification + :Returns: the callback object + +.. method:: loadComplete(file) + + Called from within the loaded files to inform MathJax that the + file has been completely loaded and initialized. The `file` + parameter is the name of the file that has been loaded. This + routine will cause any callback functions registered for the file + or included in the :meth:``MathJax.Ajax.Require()`` calls to be + executed, passing them the status or the load + (`MathJax.Ajax.STATUS.OK`` or ``MathJax.Ajax.STATUS.ERROR``) as + their last parameter. + + :Parameters: + - **file** --- name of the file that has been loaded + :Returns: ``null`` + +.. method:: loadTimeout(file) + + Called when the timeout period is over and the file hasn't loaded. + This indicates an error condition, and the + :meth:`MathJax.Ajax.loadError()` method will be executed, then the + file's callback will be run with ``MathJax.Ajax.STATUS.ERROR`` as + its parameter. + + :Parameters: + - **file** --- name of the file that timed out + :Returns: ``null`` + +.. method:: loadError(file) + + The default error handler called when a file fails to load. It + puts a warning message into the MathJax message box on screen. + + :Parameters: + - **file** --- the name of the file that failed to load + :Returns: ``null`` + +.. method:: loadHook(file,callback) + + Registers a callback to be executed when the given file is + loaded. The file load operation need to be started when this + method is called, so it can be used to register a hook for a file + that may be loaded in the future. + + :Parameters: + - **file** --- the name of the file to wait for + - **callback** --- the callback specification + :Returns: the callback object + +.. method:: Styles(styles[,callback]) + + Creates a stylesheet from the given style data. `styles` can + either be a string containing a stylesheet definition, or an + object containing a :ref:`CSS Style Object `. + For example: + + .. code-block:: javascript + + MathJax.Ajax.Styles("body {font-family: serif; font-style: italic}"); + + and + + .. code-block:: javascript + + MathJax.Ajax.Styles({ + body: { + "font-family": "serif", + "font-style": "italic" + } + }); + + both set the body font family and style. + + The callback routine is called when the stylesheet has been + created and is available for use. + + :Parameters: + - **styles** --- CSS style object for the styles to set + - **callback** --- the callback specification + :Returns: the callback object + + .. note:: + + Internet Explorer has a limit of 32 dynamically created + stylesheets, so it is best to combine your styles into one + large group rather than making several smaller calls. + +.. method:: fileURL(file) + + Returns a complete URL to a file (replacing ``[MathJax]`` with the + actual root URL location). + + :Parameters: + - **file** --- the file name possibly including ``[MathJax]`` + :Returns: the full URL for the file diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/callback.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/callback.txt new file mode 100644 index 00000000..3e51db0d --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/callback.txt @@ -0,0 +1,259 @@ +.. _api-callback: + +************************** +The MathJax.Callback Class +************************** + +The ``MathJax.Callback`` object is one of the key mechanisms used by +MathJax to synchronize its actions with those that occur +asynchronously, like loading files and stylesheets. A `Callback` +object is used to tie the execution of a function to the completion of +an asynchronous action. See :ref:`Synchronizing with MathJax +` for more details, and :ref:`Using Callbacks +` in particular for examples of how to specify and +use MathJax `Callback` objects. + + +Specifying a callback +--------------------- + +When a method includes a callback as one of its arguments, that +callback can be specified in a number of different ways, depending on +the functionality that is required of the callback. The easiest case +is to simply provide a function to be called, but it is also possible +to include data to pass to the function when it is executed, and even +the object that will be used as the javascript `this` object when the +function is called. + +Most functions that take callbacks as arguments accept a `callback +specification` rather than an actual callback object, though you can +use the :meth:`MathJax.Callback` function to convert a callback +specification into a Callback object if needed. + +A callback specification is any one of the following: + + .. describe:: fn + + A function that is to be called when the callback is executed. + No additional data is passed to it (other that what it is + called with at the time the callback is executed), and `this` + will be the window object. + + .. describe:: [fn] + + An array containing a function to be called when the callback + is executed (as above). + + .. describe:: [fn, data...] + + An array containing a function together with data to be passed + to that function when the callback is executed; `this` is still + the window object. For example, + + .. code-block:: javascript + + [function (x,y) {return x+y}, 2, 3] + + would specify a callback that would pass ``2`` and ``3`` to + the given function, and it would return their sum, ``5``, when + the callback is executed. + + .. describe:: [object, fn] + + An array containing an object to use as `this` and a function to + call for the callback. For example, + + .. code-block:: javascript + + [{x:'foo', y:'bar'}, function () {this.x}] + + would produce a callback that returns the string ``"foo"`` + when it is called. + + .. describe:: [object, fn, data...] + + Similar to the previous case, but with data that is passed to + the function as well. + + ..describe:: ["method", object] + + Here, `object` is an object that has a method called `method`, and + the callback will execute that method (with the object as + `this`) when it is called. For example, + + .. code-block:: javascript + + ["length",[1,2,3,4]] + + would call the `length` method on the array ``[1,2,3,4]`` when + the callback is called, returning ``4``. + + .. describe:: ["method", object, data...] + + Similar to the previous case, but with data that is passed to + the method. E.g., + + .. code-block:: javascript + + ["slice",[1,2,3,4],1,3] + + would perform the equivalent of ``[1,2,3,4].slice(1,3)``, + which returns the array ``[2,3]`` as a result. + + .. describe:: {hook: fn, data: [...], object: this} + + Here the data for the callback are given in an associative + array of `key:value` pairs. The value of `hook` is the + function to call, the value of `data` is an array of the + arguments to pass to the function, and the value of `object` + is the object to use as `this` in the function call. The + specification need not include all three `key:value` pairs; any + that are missing get default values (a function that does + nothing, an empty array, and the window object, respectively). + + .. describe:: "string" + + This specifies a callback where the string is executed via an + ``eval()`` statement. The code is run in the global context, + so any variables or functions created by the string become + part of the global namespace. The return value is the value of + the last statement executed in the string. + + +Executing a Callback Object +=========================== + +The `Callback` object is itself a function, and calling that function +executes the callback. You can pass the callback additional +parameters, just as you can any function, and these will be added to +the callback function's argument list following any data that was +supplied at the time the callback was created. For example + +.. code-block:: javascript + + var f = function (x,y) {return x + " and " +y} + var cb = MathJax.Callback([f, "foo"]); + var result = cb("bar"); // sets result to "foo and bar" + +Usually, the callback is not executed by the code that creates it (as +it is in the example above), but by some other code that runs at a +later time at the completion of some other activity (say the loading +of a file), or in response to a user action. For example: + +.. code-block:: javascript + + function f(x) {alert("x contains "+x)}; + function DelayedX(time) { + var x = "hi"; + setTimeout(MathJax.Callback([f, x], time); + } + +The ``DelayedX`` function arranges for the function ``f`` to be called at +a later time, passing it the value of a local variable, ``x``. Normally, +this would require the use of a closure, but that is not needed when a +`MathJax.Callback` object is used. + + +Callback Object Properties +-------------------------- + +.. describe:: hook + + The function to be called when the callback is executed. + +.. describe:: data + + An array containing the arguments to pass to the callback + function when it is executed. + +.. describe:: object + + The object to use as `this` during the call to the callback + function. + +.. describe:: called + + Set to ``true`` after the callback has been called, and undefined + otherwise. A callback will not be exectued a second time unless + the callback's :meth:`reset()` method is called first, or its + ``autoReset`` property is set to ``true``. + +.. describe:: autoReset + + Set this to ``true`` if you want to be able to call the callback + more than once. (This is the case for signal listeners, for example). + +.. describe:: isCallback + + Always set to ``true`` (used to detect if an object is a callback + or not). + + +Callback Object Methods +----------------------- + +.. method:: reset() + + Clears the callback's `called` property. + + +MathJax.Callback Methods +------------------------ + +.. method:: Delay(time[, callback]) + + Waits for the specified time (given in milliseconds) and then + performs the callback. It returns the Callback object (or a blank + one if none was supplied). The returned callback structure has a + `timeout` property set to the result of the ``setTimeout()`` call + that was used to perform the wait so that you can cancel the wait, + if needed. Thus :meth:`MathJax.Callback.Delay()` can be used to + start a timeout delay that executes the callback if an action + doesn't occur within the given time (and if the action does occur, + the timeout can be canceled). Since + :meth:`MathJax.Callback.Delay()` returns a callback structure, it + can be used in a callback queue to insert a delay between queued + commands. + + :Parameters: + - **time** --- the amount of time to wait + - **callback** --- the callback specification + :Returns: the callback object + +.. method:: executeHooks(hooks[, data[,reset]]) + + Calls each callback in the `hooks` array (or the single hook if it + is not an array), passing it the arguments stored in the data + array. It `reset` is ``true``, then the callback's + :meth:`reset()` method will be called before each hook is + executed. If any of the hooks returns a `Callback` object, then + it collects those callbacks and returns a new callback that will + execute when all the ones returned by the hooks have been + completed. Otherwise, :meth:`MathJax.Callback.executeHooks()` + returns ``null``. + + :Parameters: + - **hooks** --- array of hooks to be called, or a hook + - **data** --- array of arguments to pass to each hook in turn + - **reset** --- ``true`` if the :meth:`reset()` method should be called + :Returns: callback that waits for all the hooks to complete, or ``null`` + +.. method:: Queue([callback,...]) + + Creates a `MathJax.CallBack.Queue` object and pushes the given + callbacks into the queue. See :ref:`Using Queues ` + for more details about MathJax queues. + + :Parameters: + - **callback** --- one or more callback specifications + :Returns: the `Queue` object + +.. method:: Signal(name) + + Looks for a named signal, creates it if it doesn't already exist, + and returns the signal object. See + :ref:`Using Signals ` for more details. + + :Parameters: + - **name** --- name of the signal to get or create + :Returns: the `Signal` object diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/elementjax.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/elementjax.txt new file mode 100644 index 00000000..8ef99627 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/api/elementjax.txt @@ -0,0 +1,122 @@ +.. _api-element-jax: + +**************************** +The MathJax.ElementJax Class +**************************** + +The element jax is the bridge between the input and output jax, and +contains the data produced by the input jax needed by the output jax +to display the results. It is tied to the individual `` + +where ``path-to-MathJax`` is replaced by the URL of the MathJax +directory on your server, or (if you are using MathJax locally rather +than through a server) the location of that directory on your hard +disk. For example, if the MathJax directory is at the top level of +your web server's directory hierarchy, you might use + +.. code-block:: html + + + +to load MathJax. + +Although it is possible to load MathJax from a site other than your +own web server, there are issues involved in doing so that you need to +take into consideration. See the :ref:`Notes About Shared Servers +` for more details. Please do **not** link to +the copy of MathJax at ``www.mathjax.org``, as we do not have the +resources to act as a web service for all the sites on the web that +would like to display mathematics. If you are able to run MathJax +from your own server, please do so (this will probably give you better +response time in any case). + +It is best to load MathJax in the document's ```` block, but it +is also possible to load MathJax into the ```` section, if +needed. If you do this, load it as early as possible, as +MathJax will begin to load its components as soon as it is included in +the page, and that will help speed up the processing of the +mathematics on your page. MathJax does expect there to be a +```` section to the document, however, so be sure there is one +if you are loading MathJax in the ````. + +It is also possible to load MathJax dynamically after the page has +been prepared, for example, via a `GreaseMonkey +`_ script, or using a specially prepared +`bookmarklet `_. This is an +advanced topic, however; see :ref:`Loading MathJax Dynamically +` for more details. + + +Configuring MathJax +=================== + +There are several ways to configure MathJax, but the easiest is to use +the ``config/MathJax.js`` file that comes with MathJax. See the +comments in that file, or the :ref:`configuration details +` section, for explanations of the meanings of the various +configuration options. You can edit the ``config/MathJax.js`` file to +change any of the settings that you want to customize. When you +include MathJax in your page via + +.. code-block:: html + + + +it will load ``config/MathJax.js`` automatically as one of its +first actions. + +Alternatively, you can configure MathJax efficiently by calling +:meth:`MathJax.Hub.Config()` when you include MathJax in your page, as +follows: + +.. code-block:: html + + + +This example includes the ``tex2jax`` preprocessor and configures it +to use both the standard TeX and LaTeX math delimiters. It uses the +TeX input processor and the HTML-CSS output processor, and forces the +HTML-CSS processor to use the TeX fonts rather that other locally +installed fonts (e.g., :term:`STIX` fonts). See the +:ref:`configuration options ` section (or the comments +in the ``config/MathJax.js`` file) for more information about the +configuration options that you can include in the +:meth:`MathJax.Hub.Config()` call. Note that if you configure MathJax +using this in-line approach, the ``config/MathJax.js`` file is **not** +loaded. + +Finally, if you would like to use several different configuration +files (like ``config/MathJax.js``, but with different settings in each +one), you can copy ``config/MathJax.js`` to ``config/MathJax-2.js``, +or some other convenient name, and use + +.. code-block:: html + + + +to load the alternative configuration file ``config/MathJax-2.js`` +from the MathJax ``config`` directory. In this way, you can have as +many distinct configuration files as you need. + + +.. _common-configurations: + +Common Configurations +===================== + +The following examples show configurations that are useful for some +common situations. This is certainly not an exhaustive list, and +there are variations possible for any of them. Again, the comments in +the ``config/MathJax.js`` file can help you decide what settings to +include, even if you are using the in-line configuration method. + +The TeX setup +------------- + +This example calls the ``tex2jax`` preprocessor to identify +mathematics in the page by looking for TeX and LaTeX math delimiters. +It uses ``$...$`` and ``\(...\)`` for in-line mathematics, while +``$$...$$`` and ``\[...\]`` mark displayed equations. Because dollar +signs are used to mark mathematics, if you want to produce an actual +dollar sign in your document, you must "escape" it using a slash: +``\$``. This configuration also loads the ``AMSmath`` and +``AMSsymbols`` extensions so that the macros and environments they +provide are defined for use on the page. + +.. code-block:: javascript + + MathJax.Hub.config({ + extensions: ["tex2jax.js","TeX/AMSmath.js","TeX/AMSsymbols.js"], + jax: ["input/TeX","output/HTML-CSS"], + tex2jax: { + inlineMath: [['$','$'],["\\(","\\)"]], + processEscapes: true, + }, + }); + +Other extensions that you may consider adding to the `extensions` +array include: ``TeX/noErrors.js``, which shows the original TeX code +if an error occurs while processing the mathematics (rather than an +error message), ``TeX/noUndefined.js``, which shows undefined +macros names in red (rather than producing an error), and +``TeX/autobold.js``, which automatically inserts ``\boldsymbol{...}`` +around your mathematics when it appears in a section of your page that +is in bold. Most of the other TeX extensions are loaded automatically +when needed, and so do not need to be included explicitly in your +`extensions` array. + +See the :ref:`tex2jax configuration ` section for +other configuration options for the ``tex2jax`` preprocessor, and the +:ref:`TeX input jax configuration ` section for options +that control the TeX input processor. + + +The MathML setup +---------------- + +This example calls the ``mml2jax`` preprocessor to identify +mathematics in the page that is in :term:`MathML` format, which uses +```` to indicate displayed equations, and +```` or simply ```` to mark in-line +formulas. + +.. code-block:: javascript + + MathJax.Hub.config({ + extensions: ["mml2jax.js"], + jax: ["input/MathML","output/HTML-CSS"] + }); + +Note that this will work in HTML files, not just XHTML files (MathJax +works with both), and that the web page need not be served with any +special MIME-type. Also note that, unless you are using XHTML rather +than HTML, you should not include a namespace prefix for your +```` tags; for example, you should not use ```` except +in a file where you have tied the ``m`` namespace to the MathML DTD. + +See the :ref:`mml2jax configuration ` section for +other configuration options for the ``mml2jax`` preprocessor, and the +:ref:`MathML input jax configuration ` section for +options that control the MathML input processor. + + +Both TeX and MathML +------------------- + +This example provides for both TeX and MathML input in the same file. +It calls on both the ``tex2jax`` and ``mml2jax`` preprocessors and the +TeX and MathML input jax to do the job. + +.. code-block:: javascript + + MathJax.Hub.config({ + extensions: ["tex2jax.js", "mml2jax.js"], + jax: ["input/TeX", "input/MathML", "output/HTML-CSS"], + }); + +Notice that no ``tex2jax`` configuration section is included, so it +uses its default options (no single dollar signs for in-line math). + +The majority of the code for the TeX and MathML input processors are +not loaded until they are actually needed by the mathematics on the +page, so if this configuration is used on a page that include only +MathML, the TeX input processor will not be loaded. Thus it is +reasonably efficient to specify both input processors even if only one +(or neither one) is used. + + +TeX input with MathML output +---------------------------- + +This example configures MathJax to use the ``tex2jax`` preprocessor +and TeX input processor, but the choice of output format is determined +by MathJax depending on the capabilities of the users's browser. The +is performed by the ``MMLorHTML.js`` configuration file that is loaded +in the `config`` array. + +.. code-block:: javascript + + MathJax.Hub.Config({ + config: ["MMLorHTML.js"], + extensions: ["tex2jax.js"], + jax: ["input/TeX"] + }); + +With this setup, Firefox or Internet Explorer with the `MathPlayer +plugin `_ installed +will use the NativeMML output processor, while all other browsers will +use the HTML-CSS output processor. Since native MathML support is +faster than MathJax's HTML-CSS processor, this will mean that the web +pages will display faster for Firefox and IE than they woudl +otherwise. This speed comes at the cost, however, as you are now +relying on the native MathML support to render the mathematics, and +that is outside of MathJax's control. There may be spacing or other +display differences (compared to MathJax's HTML-CSS output) when the +NativeMML output processor is used. + +See :ref:`MathJax Output Formats ` for more +information on the NativeMML and HTML-CSS output processors. See the +:ref:`MMLorHTML configuration ` section for +details on the options that control the ``MMLorHTML`` configuration. + + +MathML input and output in all browsers +--------------------------------------- + +This example configures MathJax to look for MathML within your page, +and to display it using the browser's native MathML support, if +possible, or its HTML-CSS output if not. + +.. code-block:: javascript + + MathJax.Hub.Config({ + config: ["MMLorHTML.js"], + extensions: ["mml2jax.js"], + jax: ["input/MathML"] + }); + +Using this configuration, MathJax finally makes MathML available in +all modern browsers. + +See the :ref:`MMLorHTML configuration ` section +for details on the options that control the ``MMLorHTML`` +configuration file, the :ref:`MathML configuration ` +section for the options that control the MathML output processor, and +the :ref:`mml2jax configuration ` section for the +options that control the ``mml2jax`` preprocessor. + + +.. _configuration: + +Configuration Objects +===================== + +The various components of MathJax, including its input and output +processors, its preprocessors, its extensions, and the MathJax core, +all can be configured through the ``config/MathJax.js`` file, or via a +:meth:`MathJax.Hub.Config()` call (indeed, if you look closely, you +will see that ``config/MathJax.js`` is itself one big call to +:meth:`MathJax.Hub.Config()`). Anything that is in +``config/MathJax.js`` can be included in-line to configure MathJax. + +The structure that you pass to :meth:`MathJax.Hub.Config()` is a +JavaScript object that includes name-value pairs giving the names of +parameters and their values, with pairs separated by commas. Be +careful not to include a comma after the last value, however, as some +browsers (namely Internet Explorer) will fail to process the +configuration if you do. + +The MathJax components, like the TeX input processor, have their own +sections in the configuration object, labeled by the component name, +and using an configuration object as its value. The object is itself +a configuration object made up of name-value pairs that give the +configuration options for the component. + +For example, + +.. code-block:: javascript + + MathJax.Hub.Config({ + showProcessingMessages: false, + jax: ["input/TeX", "output/HTML-CSS"], + TeX: { + TagSide: "left", + Macros: { + RR: '{\\bf R}', + bold: ['{\\bf #1}',1] + } + } + }); + +is a configration that includes two settings for the MathJax Hub (one +for `showProcessingMessages` and one of the `jax` array), and a +configuration object for the TeX input processor. The latter includes +a setting for the TeX input processor's `TagSide` option (to set tags +on the left rather than the right) and a setting for `Macros`, which +defines new TeX macros (in this case, two macros, one called ``\RR`` +that produces a bold "R", and one called ``\bold`` that puts is +argument in bold face). + +The ``config/MathJax.js`` file is another example that shows nearly +all the configuration options for all of MathJax's components. + + +Configuration Options by Component +================================== + +The individual options are explained in the following sections, which +are categorized by the component they affect. + +.. toctree:: + :maxdepth: 1 + + The core options + +.. toctree:: + :maxdepth: 1 + + The tex2jax preprocessor options + The mml2jax preprocessor options + The jsMath2jax preprocessor options + +.. toctree:: + :maxdepth: 1 + + The TeX input processor options + The MathML input processor options + The HTML-CSS output processor options + The NativeMML output processor options + The MMLorHTML configuration options + +.. toctree:: + :maxdepth: 1 + + The MathMenu options + The MathZoom options + The FontWarnings options + + diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/dynamic.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/dynamic.txt new file mode 100644 index 00000000..ef386435 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/dynamic.txt @@ -0,0 +1,181 @@ +.. _ajax-mathjax: + +*************************** +Loading MathJax Dynamically +*************************** + +MathJax is designed to be included via a ```` section of your HTML document, and it does rely on being +part of the original document in that it uses an ``onload`` event +handler to synchronize its actions with the loading of the page. +If you wish to insert MathJax into a document after it has +been loaded, that will normally occur *after* the page's ``onload`` +handler has fired, and so MathJax will not be able to tell if it is +safe for it to process the contents of the page. Indeed, it will wait +forever for its ``onload`` handler to fire, and so will never process +the page. + +To solve this problem, you will need to call MathJax's ``onload`` +handler yourself, to let it know that it is OK to typeset the +mathematics on the page. You accomplish this by calling the +:meth:`MathJax.Hub.Startup.onload()` method as part of your MathJax +startup script. To do this, you will need to give MathJax an in-line +configuration, so you will not be able to use the +``config/MathJax.js`` file (though you can add it to your in-line +configuration's `config` array). + +Here is an example of how to load and configure MathJax dynamically: + +.. code-block:: javascript + + (function () { + var script = document.createElement("script"); + script.type = "text/javascript"; + script.src = "/MathJax/MathJax.js"; // use the location of your MathJax + + var config = 'MathJax.Hub.Config({' + + 'extensions: ["tex2jax.js"],' + + 'jax: ["input/TeX","output/HTML-CSS"]' + + '});' + + 'MathJax.Hub.Startup.onload();'; + + if (window.opera) {script.innerHTML = config} + else {script.text = config} + + document.getElementsByTagName("head")[0].appendChild(script); + })(); + +Be sure to set the ``src`` to the correct URL for your copy of +MathJax. You can adjust the ``config`` variable to your needs, but be +careful to get the commas right. The ``window.opera`` test is because +Opera doesn't handle setting ``script.text`` properly, while Internet +Explorer doesn't handle setting the ``innerHTML`` of a script tag. + +Here is a version that uses the ``config/MathJax.js`` file to +configure MathJax: + +.. code-block:: javascript + + (function () { + var script = document.createElement("script"); + script.type = "text/javascript"; + script.src = "/MathJax/MathJax.js"; // use the location of your MathJax + + var config = 'MathJax.Hub.Config({ config: "MathJax.js" }); ' + + 'MathJax.Hub.Startup.onload();'; + + if (window.opera) {script.innerHTML = config} + else {script.text = config} + + document.getElementsByTagName("head")[0].appendChild(script); + })(); + +Note that the **only** reliable way to configure MathJax is to use an +in-line configuration of the type discussed above. You should **not** +call :meth:`MathJax.Hub.Config()` directly in your code, as it will +not run at the correct time --- it will either run too soon, in which +case ``MathJax`` may not be defined and the function will throw an +error, or it will run too late, after MathJax has already finished its +configuration process, so your changes will not have the desired +effect. + + +MathJax and GreaseMonkey +======================== + +You can use techniques like the ones discussed above to good effect in +GreaseMonkey scripts. There are GreaseMonkey work-alikes for all the +major browsers: + +- Firefox: `GreaseMonkey `_ +- Safari: `GreaseKit `_ (also requires `SIMBL `_) +- Opera: Built-in (`instructions `_) +- Internet Explorer: `IEPro7 `_ +- Chrome: Built-in for recent releases + +Note, however, that most browsers don't allow you to insert a script +that loads a ``file://`` URL into a page that comes from the web (for +security reasons). That means that you can't have your GreaseMonkey +script load a local copy of MathJax, so you have to refer to a +server-based copy. In the scripts below, you need to insert the URL +of a copy of MathJax from your own server. + +---- + +Here is a script that runs MathJax in any document that contains +MathML (whether its includes MathJax or not). That allows +browsers that don't have native MathML support to view any web pages +with MathML, even if they say it only works in Forefox and +IE+MathPlayer. + +.. code-block:: javascript + + // ==UserScript== + // @name MathJax MathML + // @namespace http://www.mathjax.org/ + // @description Insert MathJax into pages containing MathML + // @include * + // ==/UserScript== + + if ((window.unsafeWindow == null ? window : unsafeWindow).MathJax == null) { + if ((document.getElementsByTagName("math").length > 0) || + (document.getElementsByTagNameNS == null ? false : + (document.getElementsByTagNameNS("http://www.w3.org/1998/Math/MathML","math").length > 0))) { + var script = document.createElement("script"); + script.src = "http://www.yoursite.edu/MathJax/MathJax.js"; // put your URL here + var config = 'MathJax.Hub.Config({' + + 'extensions:["mml2jax.js"],' + + 'jax:["input/MathML","output/HTML-CSS"]' + + '});' + + 'MathJax.Hub.Startup.onload()'; + if (window.opera) {script.innerHTML = config} else {script.text = config} + document.getElementsByTagName("head")[0].appendChild(script); + } + } + +**Source**: `mathjax_mathml.user.js <_statis/mathjax_mathml.user.js>`_ + +---- + +Here is a script that runs MathJax in Wikipedia pages after first +converting the math images to their original TeX code. + +.. code-block:: javascript + + // ==UserScript== + // @name MathJax in Wikipedia + // @namespace http://www.mathjax.org/ + // @description Insert MathJax into Wikipedia pages + // @include http://en.wikipedia.org/wiki/* + // ==/UserScript== + + if ((window.unsafeWindow == null ? window : unsafeWindow).MathJax == null) { + // + // Replace the images with MathJax scripts of type math/tex + // + var images = document.getElementsByTagName('img'); + for (var i = images.length - 1; i >= 0; i--) { + var img = images[i]; + if (img.className === "tex") { + var script = document.createElement("script"); script.type = "math/tex"; + if (window.opera) {script.innerHTML = img.alt} else {script.text = img.alt} + img.parentNode.replaceChild(script,img); + } + } + // + // Load MathJax and have it process the page + // + var script = document.createElement("script"); + script.src = "http://www.yoursite.edu/MathJax/MathJax.js"; // put your URL here + var config = 'MathJax.Hub.Config({' + + 'config: ["MMLorHTML.js"],' + + 'extensions:["TeX/noErrors.js","TeX/noUndefined.js",' + + '"TeX/AMSmath.js","TeX/AMSsymbols.js"],' + + 'jax:["input/TeX"]' + + '});' + + 'MathJax.Hub.Startup.onload()'; + if (window.opera) {script.innerHTML = config} else {script.text = config} + document.getElementsByTagName("head")[0].appendChild(script); + } + +**Source**: `mathjax_wikipedia.user.js <_statis/mathjax_wikipedia.user.js>`_ diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/glossary.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/glossary.txt new file mode 100644 index 00000000..30a3d082 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/glossary.txt @@ -0,0 +1,75 @@ +.. _glossary: + +******** +Glossary +******** + +.. if you add new entries, keep the alphabetical sorting! + +.. glossary:: + + Callback + A JavaScript function that is used to perform actions that + must wait for other actions to complete before they are + performed. + + Callback Queue + MathJax uses `Queues` to synchronize its activity so that + actions that operate asynchronously (like loading files) will + be performed in the right order. :term:`Callback` functions + are pushed onto the queue, and are performed in order, with + MathJax handling the synchronization if operations need to + wait for other actions to finish. + + Callback Signal + A JavaScript object that acts as a mailbox for MathJax events. + Like an event handler, but it also keeps a history of + messages. Your code can register an "interest" in a signal, + or can register a :term:`callback` to be called when a + particular message is sent along the signal channel. + + HTML-CSS + MathJax output form that employs only on HTML and CSS 2.1, + allowing MathJax to remain compatible across all browsers. + + jax + MathJax's input and output processors are called "jax", as is + its internal format manager. The code for the jax are in the + ``MathJax/jax`` directory. + + LaTeX + LaTeX is a variant of :term:`TeX` that is now the dominant TeX style. + + .. seealso:: + + `LaTeX Wikipedia entry `_ + + MathML + An XML specification created to describe mathematical + notations and capture both its structure and content. MathML + is much more verbose than :term:`TeX`, but is much more + machine-readable. + + .. seealso:: + + `MathML Wikipedia entry `_ + + STIX + The Scientific and Technical Information Exchange font + package. A comprehensive set of scientific glyphs. + + .. seealso:: + + `STIX project `_ + + TeX + A document markup language with robust math markup commands + developed by Donald Knuth in the late 1970's, but still in + extensive use today. It became the industry standard for + typesetting of mathematics, and is one of the most common + formats for mathematical journals, articles, and books. + + .. seealso:: + + `TeX Wikipedia entry `_ + diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/index.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/index.txt new file mode 100644 index 00000000..23a387c5 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/index.txt @@ -0,0 +1,71 @@ +##################### +MathJax Documentation +##################### + +MathJax is an open-source JavaScript display engine for LaTeX and +MathML that works in all modern browsers. + +Basic Usage +=========== + +.. toctree:: + :maxdepth: 1 + + What is MathJax? + Getting Started with MathJax + Installing and Testing MathJax + Loading and Configuring MathJax + Using MathJax in Web Platforms + +.. toctree:: + :maxdepth: 1 + + MathJax TeX and LaTeX Support + MathJax MathML Support + MathJax Output Formats + +.. toctree:: + :maxdepth: 1 + + The MathJax Community + + +.. _advanced-topics: + +Advanced Topics +=============== + +.. toctree:: + :maxdepth: 1 + + The MathJax Processing Model + The MathJax Startup Sequence + Synchronizing Your Code with MathJax + Loading MathJax Dynamically + Modifying Math on the Page + +.. toctree:: + :maxdepth: 1 + + Details of the MathJax API + +.. toctree:: + :maxdepth: 1 + + Converting to MathJax from jsMath + +Reference Pages +=============== + +.. toctree:: + :maxdepth: 1 + + HTML snippets + CSS style objects + Glossary + +* :ref:`Search ` + +-------- + +This version of the documentation was built |today|. diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/installation.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/installation.txt new file mode 100644 index 00000000..799dee2a --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/installation.txt @@ -0,0 +1,184 @@ +.. _installation: + +****************************** +Installing and Testing MathJax +****************************** + +MathJax can be loaded from a public web server or privately from your +hard drive or other local media. To use MathJax in either way, you +will need to obtain a copy of MathJax and its font package. There are +two main ways to do this: via ``svn`` or via a pre-packaged archive. +We recommend the former, as it is easier to keep your installation up +to date using ``svn``. + + +.. _getting-mathjax-svn: + +Obtaining MathJax via SVN +========================= + +The easiest way to get MathJax and keep it up to date is to use the +`subversion `_ source control system, +``svn``. Use the commands + +.. code-block:: sh + + svn co http://mathjax.svn.sourceforge.net/svnroot/mathjax/trunk/mathjax mathjax + cd mathjax + unzip fonts.zip + +to obtain and set up a copy of MathJax. (The `SourceForge development +page `_ also shows +how to do this.) + +Whenever you want to update MathJax, you can now use + +.. code-block:: sh + + cd mathjax + svn status + +to check if there are updates to MathJax. If MathJax needs updating, +use + +.. code-block:: sh + + cd mathjax + svn update + # if fonts.zip is updated, do the following as well: + rm -rf fonts + unzip fonts.zip + +to udpate your copy of MathJax to the current release version. If the +``fonts.zip`` file has been updated, you will need to remove the old +fonts directory and unpack the new one bring your installation up to +date. If you keep MathJax updated in this way, you will be sure that +you have the latest bug fixes and new features as they become +available. + +This gets you the current development copy of MathJax, which is the +"bleeding-edge" version that contains all the latest changes to +MathJax. At times, however, these may be less stable than the +"release" version. If you prefer to use the most stable version (that +may not include all the latest patches and features), use + +.. code-block:: sh + + svn co http://mathjax.svn.sourcesforge.net/svnroot/mathjax/tags/mathjax-1.0 mathajx + cd mathjax + unzip fonts.zip + +to obtain the version 1.0 release. When you wish to update to a new +release, you will need to check out a new copy of MathJax with the new +release number. + + +.. _getting-mathjax-zip: + +Obtaining MathJax via an archive +================================ + +Release versions of MathJax are available in archive files from the +`MathJax download page `_ or the +`SourceForge files page +`_, where you can +download the archives that you need. + +You should download the ``MathJax-v1.0.zip`` file, then simply unzip +it. Once the MathJax directory is unpacked, you should move it to the +desired location on your server (or your hard disk, if you are using +it locally rather then through a web server). One natural location is +to put it at the top level of your web server's hierarchy. That would +let you refer to the main MathJax file as ``/MathJax/MathJax.js`` from +within any page on your server. + + +Testing your installation +========================= + +Use the HTML files in the ``test`` directory to see if your +installation is working properly:: + + test/ + index.html # Tests default configuration + index-images.html # Tests image-font fallback display + sample.html # Sample page with lots of pretty equations + +Open these files in your browser to see that they appear to be working +properly. If you have installed MathJax on a server, use the web +address for those files rather than opening them locally. When you +view the ``index.html`` file, you should see (after a few moments) a +message that MathJax appears to be working. If not, you should check +that the files have been transferred to the server completely, that +the fonts archive has been unpacked in the correct location, and that +the permissions allow the server to access the files and folders that +are part of the MathJax directory (be sure to verify the MathJax +folder's permissions as well). Checking the server logs may help +locate problems with the installation. + + +.. _cross-domain-linking: + +Notes about shared installations +================================ + +Typically, you want to have MathJax installed on the same server as +your web pages that use MathJax. There are times, however, when that +may be impractical, or when you want to use a MathJax installation at +a different site. For example, a departmental server at +``www.math.yourcollege.edu`` might like to use a college-wide +installation at ``www.yourcollege.edu`` rather than installing a +separate copy on the departmental machine. MathJax can certainly +be loaded from another server, but there is one imporant caveat --- +Firefox's same-origin security policy for cross-domain scripting. + +Firefox’s interpretation of the same-origin policy is more strict than +most other browsers, and it affects how fonts are loaded with the +`@font-face` CSS directive. MathJax uses this directory to load +web-based math fonts into a page when the user doesn't have them +installed locally on their own computer. Firefox's security policy, +however, only allows this when the fonts come from the same server as +the web page itself, so if you load MathJax (and hence its web fonts) +from a different server, Firefox won't be able to access those web +fonts. In this case, MathJax will pause while waiting for the font to +download (which will never happen) and will time out after about 15 +seconds for each font it tries to access. Typically that is three or +four fonts, so your Foirefox users will experience a minute or so +delay before mathematics is displayed, and then it will probably +display incorrectly because the browser doesn't have access to the +correct fonts. + +There is a solution to this, however, if you manage the server where +MathJax is installed, and if that server is running the `Apache web +server `_. In the remote server's +``MathJax/fonts/HTML-CSS/TeX/otf`` folder, create a file called +``.htaccess`` that contains the following lines: :: + + + + Header set Access-Control-Allow-Origin "*" + + + +and make sure the permissions allow the server to read this file. +(The file's name starts with a period, which causes it to be an +"invisible" file on unix-based operating systems. Some systems, +particularly graphic user interfaces, may not allow you to create such +files, so you might need to use the command-line interface to +accomplish this.) + +This file should make it possible for pages at other sites to load +MathJax from this server in such a way that Firefox will be able to +download the web-based fonts. If you want to restrict the sites that +can access the web fonts, change the ``Access-Control-Allow-Origin`` +line to something like:: + + Header set Access-Control-Allow-Origin "http://www.math.yourcollege.edu" + +so that only pages at ``www.math.yourcollege.edu`` will be able to +download the fonts from this site. See the open font library +discussion of `web-font linking +`_ +for more details. + + diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/jsMath.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/jsMath.txt new file mode 100644 index 00000000..3f40feba --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/jsMath.txt @@ -0,0 +1,31 @@ +.. _jsMath-support: + +********************************* +Converting to MathJax from jsMath +********************************* + +MathJax is the successor to the popular `jsMath +`_ package for rendering +mathematics in web pages. Like jsMath, MathJax works by locating and +processing the mathematics within the webpage once it has been loaded +in the browser by a user viewing your web pages. If you are using +jsMath with its ``tex2math`` preprocessor, then switching to MathJax +should be easy, and is simply a matter of configuring MathJax +appropriately. See the section on :ref:`Configuring MathJax +` for details about loading and configuring MathJax. + +On the other hand, if you are using jsMath's ``...`` and ``
...
`` tags to +mark the mathematics in your document, then you should use MathJax's +``jsMath2jax`` preprocessor when you switch to MathJax. To do this, +include ``"jsMath2jax.js"`` in the `extensions` array of your +configuration, with the `jax` array set to include ``"input/TeX"``. + +.. code-block:: javascript + + extensions: ["jsMath2jax.js"], + jax: ["input/TeX", ...] + +There are a few configuration options for ``jsMath2jax``, which you +can find in the ``config/MathJax.js`` file, or in the :ref:`jsMath +configuration options ` section. diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/mathjax.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/mathjax.txt new file mode 100644 index 00000000..70d3b3b5 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/mathjax.txt @@ -0,0 +1,36 @@ +**************** +What is MathJax? +**************** + +MathJax is an open-source JavaScript display engine for LaTeX and +MathML that works in all modern browsers. It was designed with the +goal of consolidating the recent advances in web technologies into a +single, definitive, math-on-the-web platform supporting the major +browsers and operating systems. It requires no setup on the part of +the user (no plugins to downlaod or software to install), so the page +author can write web documents that include mathematics and be +confident that users will be able to view it naturally and easily. +One simply includes MathJax and some mathematics in a web page, and +MathJax does the rest. + +MathJax uses web-based fonts (in those browsers that support it) to +produce high-quality typesetting that scales and prints at full +resolution (unlike mathematics included as images). MathJax can be +used with screen readers, providing accessibility for the visually +impaired. With MathJax, mathematics is text-based rather than +image-based, and so it is available for search engines, meaning that +your equations can be searchable, just like the text of your pages. +MathJax allows page authors to write formulas using TeX and LaTeX +notation, or `MathML `_, a World Wide +Web Constortium standard for representing mathematics in XML format. +MathJax will even convert TeX notation into MathML, so that it can be +rendered more quickly by those browsers that support MathML natively, +or so that you can copy and past it into other programs. + +MathJax is modular, so it loads components only when necessary, and +can be extended to include new capabilities as needed. MathJax is +highly configurable, allowing authors to customize it for the special +requirements of their web sites. Finally, MathJax has a rich +application programming interface (API) that can be used to make the +mathematics on your web pages interactive and dynamic. + diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/mathml.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/mathml.txt new file mode 100644 index 00000000..13acda76 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/mathml.txt @@ -0,0 +1,97 @@ +.. _MathML-support: + +********************** +MathJax MathML Support +********************** + +The support for :term:`MathML` in MathJax consists of three parts: the +`mml2jax` preprocessor, the MathML input processor, and the NativeMML +output processor. The first of these looks for ```` tags within +your document and marks them for later processing by MathJax. The +second converts the MathML to the internal format used by MathJax, and +the third turns the internal format into MathML within the page so +that it can be displayed by the browser's native MathML support. + +Because of MathJax's modular design, you do not need to use all three +of these components. For example, you could use the `tex2jax` +preprocessor and the TeX input processor, but the NativeMML output +processor, so that your mathematics is entered in TeX format, but +displayed as MathML. Or you could use the `mml2jax` reprocessor and +MathML input processor with the HTML-CSS output processor to make +MathML available in browsers that don't have native MathML support. +It is also possible to have MathJax select the output processor for +you so that MathML is used in those browsers that support it, while +HTML-CSS is used for those that don't. See the :ref:`common +configurations ` section for details and +examples. + +Of course it is also possible to use all three components together. +It may seem strange to go through an internal format just to return to +MathML in the end, but this is actually what makes it possible to view +MathML within an HTML page (rather than an XHTML page), without +the complications of handling special MIME-types for the document, or +any of the other setup issues that make using native MathML +difficult. MathJax handles the setup and properly marks the +mathematics so that the browser will render it as MathML. In +addition, MathJax provides its contextual menu for the MathML, which +lets the user zoom the mathematics for easier reading, get the copy +the source markup, and so on, so there is added value to using MathJax +even whith a pure MathML workflow. + + +MathML in HTML pages +==================== + +For MathML that is handled via the pre-processor, you should not use +the named MathML entities, but rather use the numeric entities like +``√`` or unicode characters embedded in the page itself. The +reason is that entities are replaced by the browser before MathJax +runs, and some browsers report errors for unknown entities. For +browsers that are not MathML-aware, that will cause errors to be +displayed for the MathML entities. While that might not occur in the +browser you are using to compose your pages, it can happen with other +browsers, so you should avoid the named entities whenever possible. +If you must use named entities, you may need to declare them in the +`DOCTYPE` declaration by hand. + +When you use MathML in an HTML document rather than an XHTML one +(MathJax will work woth both), you should not use the "self-closing" +form for tags with no content, but should use separate open and close +tags. That is, use + +.. code-block:: html + + + +rather than ````, since there is no closing tag, the rest of +the mathematics will become the content of the ```` tag; but +since ```` should have no content, the rest of the mathematics +will not be displayed. This is a common error that should be avoided. + + +Supported MathML commands +========================= + +MathJax supports the `MathML3.0 `_ +presentation mathematics tags, with some limitations. The MathML +support is still under active development, so some tags are not yet +implemented, and some features are not fully developed, but are +coming. + +The deficiencies include: + +- No support for the elementary math tags: ``mstack``, ``mlongdiv``, + ``msgroup``, ``msrow``, ``mscarries``, and ``mscarry``. + +- Limited support for line breaking (they are only allowed in direct + children of ``mrow`` or implied ``mrow`` elements. + +- No support for alignment groups in table. + +- No support for right-to-left rendering. + +See the `results of the MathML3.0 test suite +`_ for details. diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/model.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/model.txt new file mode 100644 index 00000000..acc7ea24 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/model.txt @@ -0,0 +1,224 @@ +**************************** +The MathJax Processing Model +**************************** + +The purpose of MathJax is to bring the ability to include mathematics +easily in web pages to as wide a range of browsers as possible. +Authors can specify mathematics in a variety of formats (e.g., +:term:`MathML` or :term:`LaTeX`), and MathJax provides high-quality +mathematical typesetting even in those browsers that do not have +native MathML support. This all happens without the need for special +downloads or plugins, but rendering will be enhanced if high-quality +math fonts (e.g., :term:`STIX`) are available to the browser. + +MathJax is broken into several different kinds of components: page +preprocessors, input processors, output processors, and the MathJax +Hub that organizes and connects the others. The input and output +processors are called :term:`jax`, and are described in more detail +below. + +When MathJax runs, it looks through the page for special tags that +hold mathematics; for each such tag, it locates an appropriate input +jax which it uses to convert the mathematics into an internal form +(called an element jax), and then calls an output jax to transform the +internal format into HTML content that displays the mathematics within +the page. The page author configures MathJax by indicating which +input and output jax are to be used. + +Often, and especially with pages that are authored by hand, the +mathematics is not stored (initially) within the special tags needed +by MathJax, as that would require more notation than the average page +author is willing to type. Instead, it is entered in a form that is +more natural to the page author, for example, using the standard TeX +math delimiters ``$...$`` and ``$$...$$`` to indicate what part of the +document is to be typeset as mathematics. In this case, MathJax can +run a preprocessor to locate the math delimiters and replace them by +the special tags that it uses to mark the formulas. There are +preprocessors for :ref:`TeX notation `, :ref:`MathML +notation `, and the :ref:`jsMath notation +` that uses `span` and `div` tags. + +For pages that are constructed programatically, such as HTML +pages that result from running a processor on text in some other +format (e.g., pages produced from Markdown documents, or via programs +like `tex4ht`), it would be best to use MathJax's special tags +directly, as described below, rather than having MathJax run +another preprocessor. This will speed up the final display of the +mathematics, since the extra preprocessing step would not be needed, +and it also avoids the conflict between the use of the less-than sign, +``<``, in mathematics and asn an HTML special character (that starts +an HTML tag). + + +How mathematics is stored in the page +===================================== + +In order to identify mathematics in the page, MathJax uses special +``[math] + + would display "[math]" in place of the math until MathJax is able + to typeset it. + + See also the ``preJax`` and ``postJax`` comments above. + +.. describe:: showProcessingMessages: true + + This value controls whether the `Processing Math: nn%` message are + displayed in the lower left-hand corner. Set to ``false`` to + prevent those messages (though file loading and other messages + will still be shown). + +.. describe:: messageStyle: "normal" + + This value controls the verbosity of the messages in the lower + left-hand corner. Set it to ``"none"`` to eliminate all messages, + or set it to ``"simple"`` to show "Loading..." and "Processing..." + rather than showing the full file name or the percentage of the + mathematics processed. + +.. describe:: displayAlign: "center" and displayIndent: "0em" + + These two parameters control the alignment and shifting of + displayed equations. The first can be ``"left"``, ``"center"``, + or ``"right"``, and determines the alignment of displayed + equations. When the alignment is not ``"center"``, the second + determines an indentation from the left or right side for the + displayed equations. + + +.. describe:: delayStartupUntil: "none" + + Normally MathJax will perform its starup commands (loading of + configuration, styles, jax, and so on) as soon as it can. If you + expect to be doing additional configuration on the page, however, + you may want to have it wait until the page's onload hander is + called. If so, set this to ``"onload"``. + +.. describe:: skipStartupTypeset: false + + Normally MathJax will typeset the mathematics on the page as soon + as the page is loaded. If you want to delay that process, in + which case you will need to call :meth:`MathJax.Hub.Typeset()` + yourself by hand, set this value to ``true``. + +.. describe:: menuSettings: { ... } + + This block contains settings for the mathematics contextual menu + that act as the defaults for the user's settings in that menu. + The possible values are: + + .. describe:: zoom: "none" + + This indicates when typeset mathematics should be zoomed. It + can be set to ``"None"``, ``"Hover"``, ``"Click"``, or + ``"Double-Click"`` to set the zoom trigger. + + .. describe:: CTRL: false, ALT: false, CMD: false, Shift: false + + These values indicate which keys must be pressed in order for + math zoom to be triggered. For example, if ``CTRL`` is set to + ``true`` and ``zoom`` is ``"Click"``, then math will be zoomed + only when the user control-clicks on mathematics (i.e., clicks + while holding down the `CTRL` key). If more than one is + ``true``, then all the indicated keys must be pressed for the + zoom to occur. + + .. describe:: zscale: "200%" + + This is the zoom scaling factor, and it can be set to any of + the values available in the `Zoom Factor` menu of the + `Settings` submenu of the contextual menu. + + .. describe:: context: "MathJax" + + This controls what contextual menu will be presented when a + right click (on a PC) or CTRL-click (on the Mac) occurs over a + typeset equation. When set to ``"MathJax"``, the MathJax + contextual menu will appear; when set to ``"Browser"``, the + browser's contextual menu will be used. For example, in + Internet Explorer with the MathPlayer plugin, if this is set + to ``"Browser"``, you will get the MathPlayer contextual menu + rather than the MathJax menu. + + There are also settings for ``format``, ``renderer``, and ``font``, + but these are maintained by MathJax and should not be set by the + page author. + +.. describe:: errorSettings: { ... } + + This block contains settings that control how MathJax responds to + unexpected errors while processing mathematical equations. Rather + than simply crash, MathJax can report an error and go on. The + options you can set include: + + .. describe:: message: ["[Math Processing Error"]] + + This is an HTML snippet that will be inserted at the location + of the mathematics for any formula that causes MathJax to + produce an internal error (i.e., an error in the MathJax code + itself). See the :ref:`description of HTML snippets + ` for details on how to represent HTML code in + this way. + + .. describe:: style: {color:"#CC0000", "font-style":"italic"} + + This is the CSS style description to use for the error + messages produced by internal MathJax errors. See the section + on :ref:`CSS style objects ` for details on + how these are specified in JavaScript. + diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/jsMath2jax.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/jsMath2jax.txt new file mode 100644 index 00000000..7bba6a99 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/jsMath2jax.txt @@ -0,0 +1,53 @@ +.. _configure-jsMath2jax: + +*************************** +The jsMath2jax Preprocessor +*************************** + +The options below control the operation of the `jsMath2jax` +preprocessor that is run when you include ``"jsMath2jax.js"`` in the +`extensions` array of your configuration. They are listed with their +default values. To set any of these options, include a ``jsMath2jax`` +section in your :meth:`MathJax.Hub.Config()` call. For example + +.. code-block:: javascript + + MathJax.Hub.Config({ + jsMath2jax: { + preview: "none" + } + }); + +would set the ``preview`` parameter to ``"none"``. + + +.. describe:: element: null + + The id name of the element that should be processed by `jsMath2jax`. + The default is the whole document. + +.. describe:: preview: "TeX" + + This controls whether `jsMath2jax` inserts ``MathJax_Preview`` spans + to make a preview available, and what preview to use, when it + locates in-line or display mathematics in the page. The default + is ``"TeX"``, which means use the TeX code as the preview (which + will be visible until it is processed by MathJax). Set to + ``"none"`` to prevent previews from being inserted (the math + will simply disappear until it is typeset). Set to an array + containing the description of an HTML snippet in order to use the + same preview for all equations on the page. + + Examples: + + .. code-block:: javascript + + preview: ["[math]"], // insert the text "[math]" as the preview + + .. code-block:: javascript + + preview: [["img",{src: "/images/mypic.jpg"}]], // insert an image as the preview + + See the :ref:`description of HTML snippets ` for + details on how to represent HTML code in this way. + diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/mml2jax.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/mml2jax.txt new file mode 100644 index 00000000..ab36f475 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/mml2jax.txt @@ -0,0 +1,53 @@ +.. _configure-mml2jax: + +************************ +The mml2jax Preprocessor +************************ + +The options below control the operation of the `mml2jax` preprocessor +that is run when you include ``"mml2jax.js"`` in the `extensions` array +of your configuration. They are listed with their default values. To +set any of these options, include a ``mml2jax`` section in your +:meth:`MathJax.Hub.Config()` call. For example + +.. code-block:: javascript + + MathJax.Hub.Config({ + mml2jax: { + preview: "none" + } + }); + +would set the ``preview`` parameter to ``"none"``. + +.. describe:: element: null + + The id name of the element that should be processed by `mml2jax`. + The default is the whole document. + +.. describe:: preview: "alttext" + + This controls whether `mml2jax` inserts ``MathJax_Preview`` spans + to make a preview available, and what preview to use, when it + locates mathematics on the page. The default is ``"alttext"``, + which means use the ```` tag's ``alttext`` attribute as the + preview (visible until it is processed by MathJax), if the tag has + one. Set it to ``"none"`` to prevent the previews from being + inserted (the math will simply disappear until it is typeset). + Set it to an array containing the description of an HTML snippet + in order to use the same preview for all equations on the page. + + Examples: + + .. code-block:: javascript + + preview: ["[math]"], // insert the text "[math]" as the preview + + .. code-block:: javascript + + preview: [["img",{src: "/images/mypic.jpg"}]], // insert an image as the preview + + See the :ref:`description of HTML snippets ` for + details on how to represent HTML code in this way. + + diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/tex2jax.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/tex2jax.txt new file mode 100644 index 00000000..adfc126c --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/options/tex2jax.txt @@ -0,0 +1,137 @@ +.. _configure-tex2jax: + +************************ +The tex2jax Preprocessor +************************ + +The options below control the operation of the `tex2jax` preprocessor +that is run when you include ``"tex2jax.js"`` in the `extensions` array +of your configuration. They are listed with their default values. To +set any of these options, include a ``tex2jax`` section in your +:meth:`MathJax.Hub.Config()` call. For example + +.. code-block:: javascript + + MathJax.Hub.Config({ + tex2jax: { + inlineMath: [ ['$','$'], ['\\(','\\)'] ] + } + }); + +would set the ``inlineMath`` delimiters for the `tex2jax` +preprocessor. + + +.. describe:: element: null + + The id name of the element that should be processed by `tex2jax`. + The default is the whole document. + +.. describe:: inlineMath: [['\\(','\\)']] + + Array of pairs of strings that are to be used as in-line math + delimters. The first in each pair is the initial delimiter and + the second is the terminal delimiter. You can have as many pairs + as you want. For example, + + .. code-block:: javascript + + inlineMath: [ ['$','$'], ['\\(','\\)'] ] + + would cause `tex2jax` to look for ``$...$`` and ``\(...\)`` as + delimiters for inline mathematics. (Note that the single dollar + signs are not enabled by default because they are used too + frequently in normal text, so if you want to use them for math + delimiters, you must specify them explicitly.) + + Note that the delimiters can't look like HTML tags (i.e., can't + include the less-than sign), as these would be turned into tags by + the browser before MathJax has the chance to run. You can only + include text, not tags, as your math delimiters. + +.. describe:: displayMath: [ ['$$','$$'], ['\\[','\\]'] ] + + Array of pairs of strings that are to be used as delimters for + displayed equations. The first in each pair is the initial + delimiter and the second is the terminal delimiter. You can have + as many pairs as you want. + + Note that the delimiters can't look like HTML tags (i.e., can't + include the less-than sign), as these would be turned into tags by + the browser before MathJax has the chance to run. You can only + include text, not tags, as your math delimiters. + +.. describe:: processEscapes: false + + When set to ``true``, you may use ``\$`` to represent a literal + dollar sign, rather than using it as a math delimiter. When + ``false``, ``\$`` will not be altered, and the dollar sign may be + considered part of a math delimiter. Typically this is set to + ``true`` if you enable the ``$ ... $`` in-line delimiters, so you + can type ``\$`` and `tex2jax` will convert it to a regular dollar + sign in the rendered document. + +.. describe:: processEnvironments: true + + When ``true``, `tex2jax` looks not only for the in-line and + display math delimters, but also for LaTeX environments + (``\begin{something}...\end{something}``) and marks them for + processing by MathJax. When ``false``, LaTeX environments will + not be processed outside of math mode. + +.. describe:: preview: "TeX" + + This controls whether `tex2jax` inserts ``MathJax_Preview`` spans + to make a preview available, and what preview to use, when it + locates in-line or display mathematics in the page. The default + is ``"TeX"``, which means use the TeX code as the preview (which + will be visible until it is processed by MathJax). Set to + ``"none"`` to prevent previews from being inserted (the math + will simply disappear until it is typeset). Set to an array + containing the description of an HTML snippet in order to use the + same preview for all equations on the page. + + Examples: + + .. code-block:: javascript + + preview: ["[math]"], // insert the text "[math]" as the preview + + .. code-block:: javascript + + preview: [["img",{src: "/images/mypic.jpg"}]], // insert an image as the preview + + See the :ref:`description of HTML snippets ` for + details on how to represent HTML code in this way. + +.. describe:: skipTags: ["script","noscript","style","textarea","pre","code"] + + This array lists the names of the tags whose contents should not + be processed by `tex2jax` (other than to look for ignore/process + classes as listed below). You can add to (or remove from) this + list to prevent MathJax from processing mathematics in specific + contexts. + +.. describe:: ignoreClass: "tex2jax_ignore" + + This is the class name used to mark elements whose contents should + not be processed by tex2jax (other than to look for the + ``processClass`` pattern below). Note that this is a regular + expression, and so you need to be sure to quote any `regexp` + special characters. The pattern is automatically preceeded by + ``'(^| )('`` and followed by ``')( |$)'``, so your pattern will + have to match full words in the class name. Assigning an element + this class name will prevent `tex2jax` from processing its + contents. + +.. describe:: processClass: "tex2jax_process" + + This is the class name used to mark elements whose contents + *should* be processed by `tex2jax`. This is used to turn on + processing within tags that have been marked as ignored or skipped + above. Note that this is a regular expression, and so you need to + be sure to quote any `regexp` special characters. The pattern is + automatically preceeded by ``'(^| )('`` and followed by ``')( + |$)'``, so your pattern will have to match full words in the class + name. Use this to restart processing within an element that has + been marked as ignored above. diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/output.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/output.txt new file mode 100644 index 00000000..30e7b20a --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/output.txt @@ -0,0 +1,126 @@ +.. _output-formats: + +********************** +MathJax Output Formats +********************** + +Currently, MathJax can render math in two ways: + +- Using HTML-with-CSS to lay out the mathematics, or +- Using a browser's native MathML support. + +These are implemented by the `HTML-CSS` and `NativeMML` output +processors. You select which one you want to use by including either +``"output/HTML-CSS"`` or ``"output/NativeMML"`` in the `jax` array of +your MathJax configuration. For example + +.. code-block:: javascript + + jax: ["input/TeX","output/HTML-CSS"] + +would specify TeX input and HTML-with-CSS output for the mathematics +in your document. + +The HTML-CSS output processor produces high-quality output in all +major browsers, with results that are consistent across browsers and +operating systems. This is MathJax's primary output mode. It's major +advantage is its quality and consistency; it's drawback is that it is +slower that the NativeMML mode at rendering the mathematics. (The +HTML-CSS processor has not yet been optimized for speed, so you can +expect some improvement in the future. Note that IE8 in "IE8 +standards mode" is an order of magnitude slower than any other browser +when processing math through the HTML-CSS output processor; see +:ref:`HTML-CSS with IE8 ` below for some strategies +to deal with this.) + +The NativeMML output processor uses the browser's internal MathML support (if +any) to render the mathematics. Currently, Firefox has native support +for MathML, and IE has the `MathPlayer plugin +`_ for rendering +MathML. Opera has some built-in support for MathML that works well +with simple equations, but fails with more complex formulas, so we +don't recommend using the NativeMML output processor with Opera. Safari, +Chrome, Konqueror, and most other browsers don't support MathML +natively. + +The advantage of the NativeMML output Processor is its speed, since +native MathML support is much faster than using complicated HTML and +CSS to lay out mathematics via an interpreted language like JavaScript +(as the HTML-CSS output processor does). The disadvantage is that you +are dependent on the browser's MathML implementation for your +rendering, and these vary in quality of output and completeness of +implementation. MathJax may rely on features that are not available +in some renderers (for example, Firefox's MathML support does not +implement some of the named widths, such as +``negativethinmathspace``). The results using the NativeMML output +processor may have spacing or other rendering problems that are +outside of MathJax's control. + +Automatic Selection of the Output Processor +=========================================== + +Since not all browsers support MathML natively, it would be unwise to +choose the NativeMML output processor unless you are sure of your +audience's browser capabilities. MathJax can help with that, however, +since there is a special configuration file that will choose between +NativeMML and HTML-CSS depending on the browser in use. To invoke it, +add ``"MMLorHTML.js"`` to your configurations `config` array, and **do +not** include an output processor in your `jax` array; MathJax will +fill that in for you based on the abilities of your user's browser. + +.. code-block:: javascript + + config: ["MMLorHTML.js"], + jax: ["input/TeX"] + +You can customize which choice to make on a browser-by-browser basis +or a global basis. See the ``config/MathJax.js`` file or the +:ref:`Configuring MathJax ` section for futher +details. + +MathJax produces MathML that models the underlying mathematics as best +it can, rather than using complicated hacks to improve output for a +particular MathML implementation. When you make the choice to use the +NativeMML output processor, you are making a trade-off: gaining speed +at the expense of quality and reliability, a decision that should not +be taken lightly. Note, however, that a user can employ the MathJax +contectual menu to select the other other renderer if he or she +wishes. + + +.. _html-css-with-ie8: + +HTML-CSS with IE8 +================= + +Internet Explorer 8 has at least eight different rendering modes in +which can operate, and that are triggered by the `DOCTYPE` of the +document being viewed. It's "quirks" mode is its fasted mode, and its +"IE8 standards" mode is its slowest. This is the mode triggered by +strict HTML document types, and since most modern content management +systems now include a `DOCTYPE` that activates "standards" mode, IE8 +will operate in its slowest manner. This is particularly apparent +when MathJax is used, since IE8 in standards mode runs 20 to 30 times +slower than its does in its IE7 emulation mode, and 60 times slower +than in quirks mode. + +Most users find this speed reduction unacceptable when there is much +mathematics on the page. To overcome this problem, you may wish to +tell IE8 to use its IE7 emulation mode rather than its IE8 standards +mode. You can accomplish this by including the line + +.. code-block:: html + + + +at the top of the ```` section of your HTML documents. This +lets you keep the strict `DOCTYPE` for validation purposes, while +still managing to get reasonable perforance from Internext Explorer +8. Note that this line must come at the beginning of the ````, +before any stylesheets or other content are loaded. + +Altertnatively, you can use the `MMLorHTML` configuration file +described above to select NativeMML output when possible, and request +that your users install the `MathPlayer plugin +`_, which will render +the mathematics much more quickly. diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/platforms/index.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/platforms/index.txt new file mode 100644 index 00000000..2349c3d8 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/platforms/index.txt @@ -0,0 +1,65 @@ +.. _platforms: + +====================================== +Using MathJax in popular web platforms +====================================== + +Most web-based content-management systems include a theme or template +layer that determines how the pages look, and that loads information +common to all pages. Such theme files provide one popular way to +include MathJax in your web templates in the absense of +MathJax-specific plugins for the system you are using. To take +advantage of this approach, you will need access to your theme files, +which probably means you need to be an administrator for the site; if +you are not, you may need to have an administrator do these steps for +you. + +To enable MathJax in your web platform, add the line:: + + + +(where ``path-to-MathJax`` is the web-address of the main MathJax +directory for your server) either just before the ```` tag in +your theme file, or at the end of the file if it contains no +````. + +The theme files for various popular platforms are: + + `WordPress `_ + ``wp-content/themes/[current_theme]/header.php`` + + `Movable Type `_ + ``[current_theme_templates]/html_head.mhtml`` + + `Drupal `_ + ``themes/[current_theme]/page.tpl.php`` + + `Joomla `_ + ``templates/[current_theme]/index.php`` + + `MediaWiki `_ + ``skins/[current_skin].php`` + + `TiddlyWiki `_ + ``*.php`` (Whatever you call your TiddlyWiki php file) + + `Moodle `_ + ``theme/[current_theme]/header.html`` + +Keep in mind that this will enable MathJax for your current +theme/template only. If you change themes or update your theme, you +will have to repeat these steps. + + +Insructions for Specific Platforms +================================== + +Some programs, such as WordPress and Moveable Type, allow you to edit +template files from inside their administrator interfaces. Specific +instructions for these are given via the links below. + +.. toctree:: + :maxdepth: 1 + + Wordpress + Movable Type diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/platforms/movable-type.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/platforms/movable-type.txt new file mode 100644 index 00000000..86ae2dba --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/platforms/movable-type.txt @@ -0,0 +1,41 @@ +.. _platform-movable-type: + +========================== +Using MathJax in WordPress +========================== + +These instructions assume you already have placed the MathJax files on +your server (see :ref:`Installing and Testing MathJax `). + +1. Open Moveable Type Admin interface for the site on which you want to enable + MathJax. + +2. In the dashboard menu on the left, open up the Design menu. This + should show you the templates you are currently using on the site. + + .. image:: ../images/mt_menu.png + + +3. Scroll down to the Template Modules section in the template list + and open the `HTML Head` template. + + .. image:: ../images/mt_templates.png + +4. At the end of the file, insert + + .. code-block:: html + + + + where ``path-to-MathJax`` is replaced by the web-address of the + main MathJax dorectory on your server. + + .. image:: ../images/mt_head.png + +5. Save the file. This should enable MathJax, so you should be able + to start adding mathematical content to your pages. Use the + ``config/MathJas.js`` file in the MathJax directory to configure + MathJax to your needs (see :ref:`Configuring MathJax + ` for details). + + diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/platforms/wordpress.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/platforms/wordpress.txt new file mode 100644 index 00000000..efe1063e --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/platforms/wordpress.txt @@ -0,0 +1,42 @@ +.. _platform-wordpress: + +=============================== +Installing MathJax in WordPress +=============================== + +These instructions assume you already have placed the MathJax files on +your server (see :ref:`Installing MathJax `). + +1. Open the WordPress admin interface. + +2. In the administration menu on the left, open up the `Appearance` + menu and click on the `Editor` submenu option. + + .. image:: ../images/wp_menu.png + + When you click on the editor option, WordPress should open up the + first stylesheet in the current theme. + +3. In the template list on the right side of the page, click on the + header file (it should be ``header.php``). + + .. image:: ../images/wp_templates.png + + This part depends slightly on how your current theme is written. + In the ``header.php`` file, look for the end-of-head tag, + ````. If you find it, insert + + .. code-block:: html + + + + just before that. Otherwise, insert the same code at the very + bottom of the file. Here, ``path-to-MathJax`` should be replaced + by the web-address of the main MathJax directory on your server, + e.g., ``src="/mathjax/MathJax.js"``. + +4. Save the file. This should enable MathJax, so you should be able to + start adding mathematical content to your pages. Use the + ``config/MathJas.js`` file in the MathJax directory to configure + MathJax to your needs (see :ref:`Configuring MathJax + ` for details). diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/queues.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/queues.txt new file mode 100644 index 00000000..d85fa50d --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/queues.txt @@ -0,0 +1,254 @@ +.. _using-queues: + +************ +Using Queues +************ + +The `callback queue` is one of MathJax's main tools for synchronizing +its actions, both internally, and with external programs, like +javascript code that you may write as part of dynamic web pages. +Because many actions in MathJax (like loading files) operate +asynchornously, MathJax needs a way to coordinate those actions so +that they occur in the right order. The +`MathJax.Callback.Queue` object provides that mechanism. + +A `callback queue` is a list of commands that will be performed one at +a time, in order. If the return value of one of the commands is a +`Callback` object, processing is suspended until that callback is +called, and then processing of the commands is resumed. In this way, +if a command starts an asynchronous operation like loading a file, it +can return the callback for that file-load operation and the queue +will wait until the file has loaded before continuing. Thus a queue +can be used to guarantee that commands don't get performed until other +ones are known to be finished, even if those commands usually operate +asynchronously. + + +Constructing Queues +=================== + +A queue is created via the :meth:`MathJax.Callback.Queue()` command, +which returns a `MathJax.Callback.Queue` object. The queue +itself consists of a series of commands given as callback +specifications (see :ref:`Using Callbacks ` for +details on callbacks), which allow you to provide functions (together +with their arguments) to be executed. You can provide the collection +of callback specifications when the queue is created by passing them +as arguments to :meth:`MathJax.Callback.Queue()`, or you can create an +empty queue to which commands are added later. Once a +`MathJax.Callback.Queue` object is created, you can push +additional callbacks on the end of the queue; if the queue is empty, +the command will be performed immediately, while if the queue is +waiting for another command to complete, the new command will be +queued for later processing. + +For example, + +.. code-block:: javascript + + function f(x) {alert(x)} + var queue = MathJax.Callback.Queue([f, 15], [f, 10], [f, 5]); + queue.Push([f, 0]); + +would create a queue containing three commands, each calling the +function ``f`` with a different input, that are performed in order. A +fourth command is then added to the queue, to be performed after the +other three. In this case, the result will be four alerts, the first +with the number 15, the second with 10, the third with 5 and the +fourth with 0. Of course ``f`` is not a function that operates +asynchronously, so it would have been easier to just call ``f`` four +times directly. The power of the queue comes from calling commands +that could operate asynchronously. For example: + +.. code-block:: javascript + + function f(x) {alert(x)} + MathJax.Callback.Queue( + [f, 1], + ["Require", MathJax.Ajax, "[MathJax]/extensions/AMSmath.js"], + [f, 2] + ); + +Here, the command ``MathJax.Ajax.require("extensions/AMSmath.js")`` is +queued between two calls to ``f``. The first call to ``f(1)`` will be +made immediately, then the :meth:`MathJax.Ajax.Require` statement will +be performed. Since the ``Require`` method loads a file, it operates +asynchronously, and its return value is a `MathJax.Callback` +object that will be called when the file is loaded. The call to +``f(2)`` will not be made until that callback is performed, +effectively synchronizing the second call to ``f`` with the completion +of the file loading. This is equivalent to + +.. code-block:: javascript + + f(1); + MathJax.Ajax.Require("[MathJax]/extensions/AMSmath.js", [f, 2]); + +since the ``Require()`` command allows you to specify a (single) +callback to be performed on the completion of the file load. Note, +however, that the queue could be used to synchronize several file +loads along with multiple function calls, so is more flexible. + +For example, + +.. code-block:: javascript + + MathJax.Callback.Queue( + ["Require", MathJax.Ajax, "[MathJax]/extensions/AMSmath.js"], + [f, 1], + ["Require", MathJax.Ajax, "[MathJax]/config/local/AMSmathAdditions.js"], + [f, 2] + ); + +would load the AMSmath extension, then call ``f(1)`` then load the +local AMSmath modifications, and then call ``f(2)``, with each action +waiting for the previous one to complete before being performed +itself. + + +Callbacks versus Callback Specifications +======================================== + +If one of the callback specifications is an actual callback object +itself, then the queue will wait for that action to be performed +before proceeding. For example, + +.. code-block:: javascript + + MathJax.Callback.Queue( + [f, 1], + MathJax.Ajax.Require("[MathJax]/extensions/AMSmath.js"), + [f, 2], + ); + +starts the loading of the AMSmath extension before the queue is +created, and then creates the queue containing the call to ``f``, the +callback for the file load, and the second call to ``f``. The queue +performs ``f(1)``, waits for the file load callback to be called, and +then calls ``f(2)``. The difference between this and the second +example above is that, in this example the file load is started before +the queue is even created, so the file is potentially loaded and +executed before the call to ``f(1)``, while in the example above, the +file load is guaranteed not to begin until after ``f(1)`` is executed. + +As a further example, consider + +.. code-block:: javascript + + MathJax.Callback.Queue( + MathJax.Ajax.Require("[MathJax]/extensions/AMSmath.js"), + [f, 1], + MathJax.Ajax.Require("[MathJax]/config/local/AMSmathAdditions.js"), + [f, 2] + ); + +in comparison to the example above that uses ``["Require", +MathJax.Ajax, "[MathJax]/extensions/AMSmath.js"]`` and ``["Require", +MathJax.Ajax, "[MathJax]/config/local/AMSmathAdditions.js"]`` instead. In that +example, ``AMSmath.js`` is loaded, then ``f(1)`` is called, then the +local additions are loaded, then ``f(2)`` is called. + +Here, however, both file loads are started before the queue is +created, and are operating in parallel (rather than sequentially as in +the earlier example). It is possible for the loading of the local +additions to complete before the AMSmath extension is loaded in this +case, which was guaranteed **not** to happen in the other example. +Note, however, that ``f(1)`` is guaranteed not to be performed until +after the AMSmath extensions load, and ``f(2)`` will not occur until +after both files are loaded. + +In this way, it is possible to start asynchronous loading of several +files simultaneously, and wait until all of them are loaded (in +whatever order) to perform some command. For instance, + +.. code-block:: javascript + + MathJax.Callback.Queue( + MathJax.Ajax.Require("file1.js"), + MathJax.Ajax.Require("file2.js"), + MathJax.Ajax.Require("file3.js"), + MathJax.Ajax.Require("file4.js"), + [f, "all done"] + ); + +starts four files loading all at once, and waits for all four to +complete before calling ``f("all done")``. The order in which they +complete is immaterial, and they all are being requested +simultaneously. + + +The MathJax Processing Queue +============================ + +MathJax uses a queue stored as ``MathJax.Hub.queue`` to regulate its +own actions so that they operate in the right order even when some +of them include asynchronous operations. You can take advantage of +that queue when you make calls to MathJax methods that need to be +synchronized with the other actions taken by MathJax. It may not +always be apparent, however, which methods fall into that category. + +The main source of asynchronous actions in MathJax is the loading of +external files, so any action that may cause a file to be loaded may +act asynchronously. Many important actions do so, including some that +you might not expect; e.g., typesetting mathematics can cause files to +be loaded. This is because some TeX commands, for example, are rare +enough that they are not included in the core TeX input processor, but +instead are defined in extensions that are loaded automatically when +needed. The typesetting of an expression containing one of these TeX +commands can cause the typesetting process to be suspended while the +file is loaded, and then restarted when the extension has become +evailable. + +As a result, any call to :meth:`MathJax.Hub.Typeset()` (or +:meth:`MathJax.Hub.Process()`, or :meth:`MathJax.Hub.Update()`, etc.) +could return long before the mathematics is actually typeset, and the +rest of your code may run before the mathematics is available. If you +have code that relys on the mathematics being visible on screen, you +will need to break that out into a separate operation that is +synchronized with the typesetting via the MathJax queue. + +Furthermore, your own typesetting calls may need to wait for file loading +to occur that is already underway, so even if you don't need to access +the mathematics after it is typeset, you may still need to queue the +typeset command in order to make sure it is properly synchronized with +*previous* typeset calls. For instance, if an earlier call +started loading an extension and you start another typeset call before +that extension is fully loaded, MathJax's internal state may be in +flux, and it may not be prepared to handle another typeset operation +yet. This is even more important if you are using other libraries +that may call MathJax, in which case your code may not be aware of the +state that MathJax is in. + +For these reasons, it is always best to perform typesetting operations +through the MathJax queue, and the same goes for any other action +that could cause files to load. A good rule of thumb is that, if a +MathJax function includes a callback argument, that function may operate +asynchronously; you should use the MathJax queue to perform it and +any actions that rely on its results. + +To place an action in the MathJax queue, use the +:meth:`MathJax.Hub.Queue()` command. For example + +.. code-block:: javascript + + MathJax.Hub.Queue(["Typeset",MathJax.Hub,"MathDiv"]); + +would queue the command ``MathJax.Hub.Typeset("MathDiv")``, causing +the contents of the DOM element with `id` equal to ``MathDiv`` to be +typeset. + +One of the uses of the MathJax queue is to allow you to synchronize an +action with the startup process for MathJax. If you want to have a +function performed after MathJax has become completely set up (and +performed its initial typesetting of the page), you can push it onto +the ``MathJax.Hub.queue`` so that it won't be performed until MathJax +finishes everything it has queued when it was loaded. For example, + +.. code-block:: html + + + diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/signals.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/signals.txt new file mode 100644 index 00000000..f4ca8f6c --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/signals.txt @@ -0,0 +1,161 @@ +.. _using-signals: + +************* +Using Signals +************* + +Because much of MathJax operates asynchronously, it is important for +MathJax to be able to indicated to other components operating on the +page that certain actions have been taken. For example, as MathJax is +starting up, it loads external files such as its configuration files +and the various input and output :term:`jax` that are used on the +page. This means that MathJax may not be ready to run until well +after the `` + +in your document's ```` block. Here, ``path-to-MathJax`` should +be replaced by the URL for the main MathJax directory, so if you have +put the ``MathJax`` directory at the top level of you server's web +site, you could use + +.. code-block:: html + + + +to load MathJax in your page. For example, your page could look like + +.. code-block:: html + + + + ... + + + + ... + + + +Although it is possible to load MathJax from a site other than your +own web server, there are issues involved in doing so that you need to +take into consideration. See the :ref:`Notes About Shared Servers +` for more details. Please do **not** link to +the copy of MathJax at ``www.mathjax.org``, as we do not have the +resources to act as a web service for all the sites on the web that +would like to display mathematics. If you are able to run MathJax +from your own server, please do so (this will probably give you better +response time in any case). + + +Putting mathematics in a web page +================================= + +To put mathematics in your web page, you can use either TeX and LaTeX +notation, or MathML notation (or both); the configuration file tells +MathJax which you want to use, and how you plan to indicate the +mathematics when you are using TeX notation. The following sections +tell you how to use each of these formats. + + +.. _tex-and-latex-input: + +TeX and LaTeX input +------------------- + +To process mathematics that is written in :term:`TeX` or :term:`LaTeX` +format, include ``"input/TeX"`` in your configuration's `jax` array, +and add ``"tex2jax.js"`` to the `extensions` array so that MathJax +will look for TeX-style math delimiters to identify the mathematics on +the page. + +.. code-block:: javascript + + extensions: ["tex2math.js"], + jax: ["input/TeX", "output/HTML-CSS"] + +Note that the default math delimiters are ``$$...$$`` and ``\[...\]`` +for displayed mathematics, and ``\(...\)`` for in-line mathematics. +In particular, the ``$...$`` in-line delimiters are **not** used by +default. That is because dollar signs appear too often in +non-mathematical settings, which could cause some text to be treated +as mathematics unexpectedly. For example, with single-dollar +delimiters, "... the cost is $2.50 for the first one, and $2.00 for +each additional one ..." would cause the phrase "2.50 for the first +one, and" to be treated as mathematics since it falls between dollar +signs. For this reason, if you want to use single-dollars for in-line +math mode, you must enable that explicitly in your configuration: + +.. code-block:: javascript + + tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]} + +See the ``config/MathJax.js`` file, or the :ref:`tex2jax configuration +options ` page, for additional configuration +parameters that you can specify for the ``tex2jax`` preprocessor. + +Here is a complete sample page containing TeX mathematics (which +assumes that ``config/MathJax.js`` is configured as described above): + +.. code-block:: html + + + + MathJax TeX Test Page + + + + When \(a \ne 0\), there are two solutions to \(ax^2 + bx + c = 0\) and they are + $$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$ + + + +There are a number of extensions for the TeX input processor that you +might want to add to the `extensions` array. These include: + +- `TeX/AMSmath.js`, which defines the AMS math environments and + macros, + +- `TeX/AMSsymbols.js`, which defines the macros for the symbols in + the msam10 and msbm10 fonts, + +- `TeX/noErrors.js`, which shows the original TeX code rather than + an error message when there is a problem processing the TeX, and + +- `TeX/noUndefined.js`, which prevents undefined macros from + producing an error message, and instead shows the macro name in red. + +For example, + +.. code-block:: javascript + + extensions: ["tex2math.js","TeX/noErrors.js","TeX/noUndefined.js", + "TeX/AMSmath.js","TeX/AMSsymbols.js"] + +loads all four extensions, in addition to the ``tex2math`` +preprocessor. + + +MathML input +------------ + +To process mathematics written in :term:`MathML`, include +``"input/MathML"`` in your configuration's `jax` array, and add +``"mml2jax.js"`` to the `extensions` array so that MathJax will +locate the ```` elements in the page automatically. + +.. code-block:: javascript + + extensions: ["mml2jax.js"], + jax: ["input/MathML", "output/HTML-CSS"] + +With this configuration, you would mark your mathematics using +standard ```` tags, where ```` represents +displayed mathematics and ```` or just +```` represents in-line mathematics. + +Note that this will work in HTML files, not just XHTML files (MathJax +works with both), and that the web page need not be served with any +special MIME-type. Also note that, unless you are using XHTML rather +than HTML, you should not include a namespace prefix for your +```` tags; for example, you should not use ```` except +in a file where you have tied the ``m`` namespace to the MathML DTD. + +Here is a complete sample page containing MathML mathematics (which +assumes that ``config/MathJax.js`` is configured as described above): + +.. code-block:: html + + + + MathJax MathML Test Page + + + + + When a0, + there are two solutions to + ax2 + + bx + + c = 0 + and they are + + x = + + + + + b + ± + + b2 + + 4ac + + + 2a + + + . + + + + + +The ``mml2jax`` has only a few configuration options; see the +``config/MathJax.js`` file or the :ref:`mml2jax configuration options +` page for more details. + + +Where to go from here? +====================== + +If you have followed the instructions above, you should now have +MathJax installed and configured on your web server, and you should be +able to use it to write web pages that include mathematics. At this +point, you can start making pages that contain mathematical content! + +You could also read more about the details of how to :ref:`customize +MathJax `. + +If you are trying to use MathJax in blog or wiki software or in some +other content-management system, you might want to read about :ref:`using +MathJax in popular platforms `. + +If you are working on dynamic pages that include mathematics, you +might want to read about the :ref:`MathJax Application Programming +Interface ` (its API), so you know how to include +mathematics in your interactive pages. + +If you are having trouble getting MathJax to work, you can read more +about :ref:`installing MathJax `, or :ref:`loading and +configuring MathJax `. + +Finally, if you have questions or comments, or want to help support +MathJax, you could visit the :ref:`MathJax community forums +` or the :ref:`MathJax bug tracker +`. diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/startup.txt b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/startup.txt new file mode 100644 index 00000000..3ae50c5c --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_sources/startup.txt @@ -0,0 +1,152 @@ +.. _startup-sequence: + +**************************** +The MathJax Startup Sequence +**************************** + +When you load ``MathJax.js`` into a web page, it configures itself and +immediately begins loading the components it needs. As MathJax starts +up, it uses its :ref:`signaling mechanism ` +to indicate the actions that it is taking so that MathJax extensions +can tie into the initialization process, and so other applications +within the page can synchronize their actions with MathJax. + +The startup process performs the following actions: + +- It creates the ``MathJax`` variable, and defines the following + subsystems: + + - ``MathJax.Object`` (object-oriented programming model) + - ``MathJax.Callback`` (callbacks, signals, and queues) + - ``MathJax.Ajax`` (file-loading and style-creation code) + - ``MathJax.HTML`` (support code for creating HTML elements) + - ``MathJax.Message`` (manages the menu line in the lower left) + - ``MathJax.Hub`` (the core MathJax functions) + +.. + +- It then creates the base ``MathJax.InputJax``, + ``MathJax.OutputJax``, and ``MathJax.ElementJax`` objects. + +.. + +- MathJax sets up the default configuration, and creates the + signal objects used for the startup and hub actions. + +.. + +- MathJax locates the `` + + + + + + + Type some TeX code: + +

+ +

+ You typed: ${}$ +
+ + + diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/basic.css b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/basic.css new file mode 100644 index 00000000..69f30d4f --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/basic.css @@ -0,0 +1,509 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +img { + border: 0; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable dl, table.indextable dd { + margin-top: 0; + margin-bottom: 0; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- general body styles --------------------------------------------------- */ + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.field-list ul { + padding-left: 1em; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +.align-left { + text-align: left; +} + +.align-center { + clear: both; + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.field-list td, table.field-list th { + border: 0 !important; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, .highlighted { + background-color: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.refcount { + color: #060; +} + +.optional { + font-size: 1.3em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +tt.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +tt.descclassname { + background-color: transparent; +} + +tt.xref, a tt { + background-color: transparent; + font-weight: bold; +} + +h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/doctools.js b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/doctools.js new file mode 100644 index 00000000..eeea95ea --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/doctools.js @@ -0,0 +1,247 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilties for all documentation. + * + * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +} + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s == 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * small function to check if an array contains + * a given item. + */ +jQuery.contains = function(arr, item) { + for (var i = 0; i < arr.length; i++) { + if (arr[i] == item) + return true; + } + return false; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node) { + if (node.nodeType == 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { + var span = document.createElement("span"); + span.className = className; + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this); + }); + } + } + return this.each(function() { + highlight(this); + }); +}; + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated == 'undefined') + return string; + return (typeof translated == 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated == 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('.sidebar .this-page-menu')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) == 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('.sidebar .this-page-menu li.highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this == '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/file.png b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..d18082e397e7e54f20721af768c4c2983258f1b4 GIT binary patch literal 392 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b z3=G`DAk4@xYmNj^kiEpy*OmP$HyOL$D9)yc9|lc|nKf<9@eUiWd>3GuTC!a5vdfWYEazjncPj5ZQX%+1 zt8B*4=d)!cdDz4wr^#OMYfqGz$1LDFF>|#>*O?AGil(WEs?wLLy{Gj2J_@opDm%`dlax3yA*@*N$G&*ukFv>P8+2CBWO(qz zD0k1@kN>hhb1_6`&wrCswzINE(evt-5C1B^STi2@PmdKI;Vst0PQB6!2kdN literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/jquery.js b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/jquery.js new file mode 100644 index 00000000..7c243080 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/jquery.js @@ -0,0 +1,154 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/mathjax_mathml.user.js b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/mathjax_mathml.user.js new file mode 100644 index 00000000..5a98950c --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/mathjax_mathml.user.js @@ -0,0 +1,22 @@ +// ==UserScript== +// @name MathJax MathML +// @namespace http://www.mathjax.org/ +// @description Insert MathJax into pages containing MathML +// @include * +// ==/UserScript== + +if ((window.unsafeWindow == null ? window : unsafeWindow).MathJax == null) { + if ((document.getElementsByTagName("math").length > 0) || + (document.getElementsByTagNameNS == null ? false : + (document.getElementsByTagNameNS("http://www.w3.org/1998/Math/MathML","math").length > 0))) { + var script = document.createElement("script"); + script.src = "http://www.yoursite.edu/MathJax/MathJax.js"; // put your URL here + var config = 'MathJax.Hub.Config({' + + 'extensions:["mml2jax.js"],' + + 'jax:["input/MathML","output/HTML-CSS"]' + + '});' + + 'MathJax.Hub.Startup.onload()'; + if (window.opera) {script.innerHTML = config} else {script.text = config} + document.getElementsByTagName("head")[0].appendChild(script); + } +} diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/mathjax_wikipedia.user.js b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/mathjax_wikipedia.user.js new file mode 100644 index 00000000..3c0e7bc3 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/mathjax_wikipedia.user.js @@ -0,0 +1,35 @@ +// ==UserScript== +// @name MathJax in Wikipedia +// @namespace http://www.mathjax.org/ +// @description Insert MathJax into Wikipedia pages +// @include http://en.wikipedia.org/wiki/* +// ==/UserScript== + +if ((window.unsafeWindow == null ? window : unsafeWindow).MathJax == null) { + // + // Replace the images with MathJax scripts of type math/tex + // + var images = document.getElementsByTagName('img'); + for (var i = images.length - 1; i >= 0; i--) { + var img = images[i]; + if (img.className === "tex") { + var script = document.createElement("script"); script.type = "math/tex"; + if (window.opera) {script.innerHTML = img.alt} else {script.text = img.alt} + img.parentNode.replaceChild(script,img); + } + } + // + // Load MathJax and have it process the page + // + var script = document.createElement("script"); + script.src = "http://www.yoursite.edu/MathJax/MathJax.js"; // put your URL here + var config = 'MathJax.Hub.Config({' + + 'config: ["MMLorHTML.js"],' + + 'extensions:["TeX/noErrors.js","TeX/noUndefined.js",' + + '"TeX/AMSmath.js","TeX/AMSsymbols.js"],' + + 'jax:["input/TeX"]' + + '});' + + 'MathJax.Hub.Startup.onload()'; + if (window.opera) {script.innerHTML = config} else {script.text = config} + document.getElementsByTagName("head")[0].appendChild(script); +} diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/minus.png b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..da1c5620d10c047525a467a425abe9ff5269cfc2 GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1SHkYJtzcHoCO|{#XvD(5N2eUHAey{$X?>< z>&kweokM_|(Po{+Q=kw>iEBiObAE1aYF-J$w=>iB1I2R$WLpMkF=>bh=@O1TaS?83{1OVknK< z>&kweokM`jkU7Va11Q8%;u=xnoS&PUnpeW`?aZ|OK(QcC7sn8Z%gHvy&v=;Q4jejg zV8NnAO`-4Z@2~&zopr02WF_WB>pF literal 0 HcmV?d00001 diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/pygments.css b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/pygments.css new file mode 100644 index 00000000..1f2d2b61 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/pygments.css @@ -0,0 +1,61 @@ +.hll { background-color: #ffffcc } +.c { color: #408090; font-style: italic } /* Comment */ +.err { border: 1px solid #FF0000 } /* Error */ +.k { color: #007020; font-weight: bold } /* Keyword */ +.o { color: #666666 } /* Operator */ +.cm { color: #408090; font-style: italic } /* Comment.Multiline */ +.cp { color: #007020 } /* Comment.Preproc */ +.c1 { color: #408090; font-style: italic } /* Comment.Single */ +.cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ +.gd { color: #A00000 } /* Generic.Deleted */ +.ge { font-style: italic } /* Generic.Emph */ +.gr { color: #FF0000 } /* Generic.Error */ +.gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.gi { color: #00A000 } /* Generic.Inserted */ +.go { color: #303030 } /* Generic.Output */ +.gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.gs { font-weight: bold } /* Generic.Strong */ +.gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.gt { color: #0040D0 } /* Generic.Traceback */ +.kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.kp { color: #007020 } /* Keyword.Pseudo */ +.kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.kt { color: #902000 } /* Keyword.Type */ +.m { color: #208050 } /* Literal.Number */ +.s { color: #4070a0 } /* Literal.String */ +.na { color: #4070a0 } /* Name.Attribute */ +.nb { color: #007020 } /* Name.Builtin */ +.nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.no { color: #60add5 } /* Name.Constant */ +.nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.ne { color: #007020 } /* Name.Exception */ +.nf { color: #06287e } /* Name.Function */ +.nl { color: #002070; font-weight: bold } /* Name.Label */ +.nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.nt { color: #062873; font-weight: bold } /* Name.Tag */ +.nv { color: #bb60d5 } /* Name.Variable */ +.ow { color: #007020; font-weight: bold } /* Operator.Word */ +.w { color: #bbbbbb } /* Text.Whitespace */ +.mf { color: #208050 } /* Literal.Number.Float */ +.mh { color: #208050 } /* Literal.Number.Hex */ +.mi { color: #208050 } /* Literal.Number.Integer */ +.mo { color: #208050 } /* Literal.Number.Oct */ +.sb { color: #4070a0 } /* Literal.String.Backtick */ +.sc { color: #4070a0 } /* Literal.String.Char */ +.sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.s2 { color: #4070a0 } /* Literal.String.Double */ +.se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.sh { color: #4070a0 } /* Literal.String.Heredoc */ +.si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.sx { color: #c65d09 } /* Literal.String.Other */ +.sr { color: #235388 } /* Literal.String.Regex */ +.s1 { color: #4070a0 } /* Literal.String.Single */ +.ss { color: #517918 } /* Literal.String.Symbol */ +.bp { color: #007020 } /* Name.Builtin.Pseudo */ +.vc { color: #bb60d5 } /* Name.Variable.Class */ +.vg { color: #bb60d5 } /* Name.Variable.Global */ +.vi { color: #bb60d5 } /* Name.Variable.Instance */ +.il { color: #208050 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/searchtools.js b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/searchtools.js new file mode 100644 index 00000000..513a7bad --- /dev/null +++ b/lib/gollum/frontend/public/javascript/MathJax/docs/html/_static/searchtools.js @@ -0,0 +1,505 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilties for the full-text search. + * + * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words, hlwords is the list of normal, unstemmed + * words. the first one is used to find the occurance, the + * latter for highlighting it. + */ + +jQuery.makeSearchSummary = function(text, keywords, hlwords) { + var textLower = text.toLowerCase(); + var start = 0; + $.each(keywords, function() { + var i = textLower.indexOf(this.toLowerCase()); + if (i > -1) + start = i; + }); + start = Math.max(start - 120, 0); + var excerpt = ((start > 0) ? '...' : '') + + $.trim(text.substr(start, 240)) + + ((start + 240 - text.length) ? '...' : ''); + var rv = $('
').text(excerpt); + $.each(hlwords, function() { + rv = rv.highlightText(this, 'highlighted'); + }); + return rv; +} + +/** + * Porter Stemmer + */ +var PorterStemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + + +/** + * Search Module + */ +var Search = { + + _index : null, + _queued_query : null, + _pulse_status : -1, + + init : function() { + var params = $.getQueryParameters(); + if (params.q) { + var query = params.q[0]; + $('input[name="q"]')[0].value = query; + this.performSearch(query); + } + }, + + loadIndex : function(url) { + $.ajax({type: "GET", url: url, data: null, success: null, + dataType: "script", cache: true}); + }, + + setIndex : function(index) { + var q; + this._index = index; + if ((q = this._queued_query) !== null) { + this._queued_query = null; + Search.query(q); + } + }, + + hasIndex : function() { + return this._index !== null; + }, + + deferQuery : function(query) { + this._queued_query = query; + }, + + stopPulse : function() { + this._pulse_status = 0; + }, + + startPulse : function() { + if (this._pulse_status >= 0) + return; + function pulse() { + Search._pulse_status = (Search._pulse_status + 1) % 4; + var dotString = ''; + for (var i = 0; i < Search._pulse_status; i++) + dotString += '.'; + Search.dots.text(dotString); + if (Search._pulse_status > -1) + window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something + */ + performSearch : function(query) { + // create the required interface elements + this.out = $('#search-results'); + this.title = $('

' + _('Searching') + '

').appendTo(this.out); + this.dots = $('').appendTo(this.title); + this.status = $('

').appendTo(this.out); + this.output = $('
+ + \ No newline at end of file From 4afc7dce643e5d9bf932c12099b19e0b0079481c Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Thu, 11 Nov 2010 16:14:29 -0800 Subject: [PATCH 082/393] Fix nodeSelector bug where out-of-range node is selected --- lib/gollum/frontend/public/javascript/gollum.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/gollum/frontend/public/javascript/gollum.js b/lib/gollum/frontend/public/javascript/gollum.js index ddaddcb2..36fb914a 100644 --- a/lib/gollum/frontend/public/javascript/gollum.js +++ b/lib/gollum/frontend/public/javascript/gollum.js @@ -100,13 +100,13 @@ var nodeSelector = { } } else { - // not checked, get a range set up - $node.addClass('selected'); if ( !nodeSelector.node1 ) { nodeSelector.node1 = $node; + nodeSelector.node1.addClass('selected'); } else if ( !nodeSelector.node2 ) { // okay, we don't have a node 2 but have a node1 nodeSelector.node2 = $node; + nodeSelector.node2.addClass('selected'); nodeSelector.selectNodeRange( nodeSelector.node1, nodeSelector.node2 ); } else { From 530700932f64f7b8fba3e5a11b14443da4ed0ec0 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Thu, 11 Nov 2010 16:15:04 -0800 Subject: [PATCH 083/393] Adding to Pod --- .../frontend/public/javascript/gollum-editor/langs/pod.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js b/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js index f4f503af..a1c9ca26 100644 --- a/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js @@ -1,7 +1,5 @@ /** * Pod Language Definition - * - * **/ (function() { From ba35b2249c1795f8b47018cb5aaea39f06226c60 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Thu, 11 Nov 2010 16:15:43 -0800 Subject: [PATCH 084/393] Hide MathJax loading messages --- lib/gollum/frontend/public/css/gollum.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/gollum/frontend/public/css/gollum.css b/lib/gollum/frontend/public/css/gollum.css index 6555013b..6153ab0a 100644 --- a/lib/gollum/frontend/public/css/gollum.css +++ b/lib/gollum/frontend/public/css/gollum.css @@ -331,6 +331,7 @@ a:hover, a:visited { #wiki-history table tr td.revert-action { border-left: 0; + min-width: 10em; text-align: right; } @@ -446,3 +447,8 @@ ul.actions { margin: 1em 0 0.5em; padding: 0; } + + +#MathJax_Message { + display: none; +} \ No newline at end of file From 1a2ba11abe75b280031386d8b19680988b3308b5 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Thu, 11 Nov 2010 16:21:53 -0800 Subject: [PATCH 085/393] Meh, whitespace --- lib/gollum/frontend/templates/layout.mustache | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/gollum/frontend/templates/layout.mustache b/lib/gollum/frontend/templates/layout.mustache index 724cc036..85628e94 100644 --- a/lib/gollum/frontend/templates/layout.mustache +++ b/lib/gollum/frontend/templates/layout.mustache @@ -14,7 +14,6 @@ src="/javascript/gollum-editor/gollum.editor.js"> - {{title}} From 00a934b85d81f7f164440e4037f7de0aa2d615e1 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Fri, 12 Nov 2010 13:37:59 -0800 Subject: [PATCH 086/393] Abstracting Dialog out of editor --- .../javascript/gollum-editor/gollum.editor.js | 179 +---------------- .../public/javascript/gollum.dialog.js | 181 ++++++++++++++++++ 2 files changed, 182 insertions(+), 178 deletions(-) create mode 100644 lib/gollum/frontend/public/javascript/gollum.dialog.js diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js index f34e9fa0..29d57204 100644 --- a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js @@ -446,189 +446,12 @@ }; - - /** - * Dialog - * Used by FunctionBar & internally to display editor-specific messages, - * inputs and more. - * - */ - var Dialog = { - - markupCreated: false, - - attachEvents: function( evtOK ) { - $('#gollum-editor-action-ok').click(function( e ) { - Dialog.eventOK( e, evtOK ); - }); - $('#gollum-editor-action-cancel').click( Dialog.eventCancel ); - }, - - createFieldMarkup: function( fieldArray ) { - var fieldMarkup = '
'; - for ( var i=0; i < fieldArray.length; i++ ) { - if ( typeof fieldArray[i] == 'object' ) { - fieldMarkup += '
'; - switch ( fieldArray[i].type ) { - - // only text is supported for now - case 'text': - case 'code': - default: - fieldMarkup += Dialog.createFieldText( fieldArray[i] ); - break; - - } - fieldMarkup += '
'; - } - - } - fieldMarkup += '
'; - return fieldMarkup; - }, - - createFieldText: function( fieldAttributes ) { - var html = ''; - - if ( fieldAttributes.name ) { - html += ''; - } - - html += ''; - } - - return html; - }, - - createMarkup: function( title, body ) { - Dialog.markupCreated = true; - return '
' + - '
' + - '
' + - '

' + - title +'

' + - '
' + body + '
' + - '
' + - 'Cancel' + - 'OK' + - '
' + - '
' + - '
'; - }, - - eventCancel: function( e ) { - e.preventDefault(); - debug('Cancelled dialog.'); - Dialog.hide(); - }, - - eventOK: function( e, evtOK ) { - e.preventDefault(); - - var results = []; - // get the results from each field and build them into the object - $('#gollum-editor-dialog-body input').each(function() { - results[$(this).attr('name')] = $(this).val(); - }); - - // pass them to evtOK if it exists (which it should) - if ( evtOK && - typeof evtOK == 'function' ) { - evtOK( results ); - } - Dialog.hide(); - }, - - hide: function() { - $('#gollum-editor-dialog').animate({ opacity: 0 }, { - duration: 200, - complete: function() { - $('#gollum-editor-dialog').removeClass('active'); - } - }); - }, - - init: function( argObject ) { - var title = ''; - var body = ''; - - // bail out if necessary - if ( !argObject || - typeof argObject != 'object' ) { - debug('Editor Dialog: Cannot init; invalid init object'); - return; - } - - // alright, build out fields - if ( argObject.fields && typeof argObject.fields == 'object' ) { - body = Dialog.createFieldMarkup( argObject.fields ); - } - - if ( argObject.title && typeof argObject.title == 'string' ) { - title = argObject.title; - } - - if ( Dialog.markupCreated ) { - $('#gollum-editor-dialog').remove(); - } - var $dialog = $( Dialog.createMarkup( title, body ) ); - $('body').append( $dialog ); - if ( argObject.OK && - typeof argObject.OK == 'function' ) { - Dialog.attachEvents( argObject.OK ); - } - Dialog.show(); - }, - - show: function() { - if ( !Dialog.markupCreated ) { - debug('Dialog: No markup to show. Please use init first.') - } else { - debug('Showing dialog'); - $('#gollum-editor-dialog').animate({ opacity: 0 }, { - duration: 1, - complete: function() { - $('#gollum-editor-dialog').addClass('active'); - Dialog.position(); // position this thing - $('#gollum-editor-dialog').animate({ opacity: 1 }, { - duration: 500 - }); - } - }); - } - }, - - position: function() { - var dialogHeight = $('#gollum-editor-dialog-inner').height(); - debug(dialogHeight); - $('#gollum-editor-dialog-inner') - .css('height', dialogHeight + 'px') - .css('margin-top', -1 * parseInt( dialogHeight / 2 )); - } - - }; - - /** * $.GollumEditor.Dialog * Used in exec() to display dialogs with dynamic fields. * */ - $.GollumEditor.Dialog = Dialog; + $.GollumEditor.Dialog = $.GollumDialog; $.GollumEditor.replaceSelection = function( repText ) { FunctionBar.replaceFieldSelection( $('#gollum-editor-body'), repText ); } diff --git a/lib/gollum/frontend/public/javascript/gollum.dialog.js b/lib/gollum/frontend/public/javascript/gollum.dialog.js new file mode 100644 index 00000000..c6252a02 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/gollum.dialog.js @@ -0,0 +1,181 @@ +/** + * Dialog + * Used by FunctionBar & internally to display editor-specific messages, + * inputs and more. + * + */ + +(function($) { + + var Dialog = { + + markupCreated: false, + + attachEvents: function( evtOK ) { + $('#gollum-editor-action-ok').click(function( e ) { + Dialog.eventOK( e, evtOK ); + }); + $('#gollum-editor-action-cancel').click( Dialog.eventCancel ); + }, + + createFieldMarkup: function( fieldArray ) { + var fieldMarkup = '
'; + for ( var i=0; i < fieldArray.length; i++ ) { + if ( typeof fieldArray[i] == 'object' ) { + fieldMarkup += '
'; + switch ( fieldArray[i].type ) { + + // only text is supported for now + case 'text': + case 'code': + default: + fieldMarkup += Dialog.createFieldText( fieldArray[i] ); + break; + + } + fieldMarkup += '
'; + } + + } + fieldMarkup += '
'; + return fieldMarkup; + }, + + createFieldText: function( fieldAttributes ) { + var html = ''; + + if ( fieldAttributes.name ) { + html += ''; + } + + html += ''; + } + + return html; + }, + + createMarkup: function( title, body ) { + Dialog.markupCreated = true; + return '
' + + '
' + + '
' + + '

' + + title +'

' + + '
' + body + '
' + + '
' + + 'Cancel' + + 'OK' + + '
' + + '
' + + '
'; + }, + + eventCancel: function( e ) { + e.preventDefault(); + debug('Cancelled dialog.'); + Dialog.hide(); + }, + + eventOK: function( e, evtOK ) { + e.preventDefault(); + + var results = []; + // get the results from each field and build them into the object + $('#gollum-editor-dialog-body input').each(function() { + results[$(this).attr('name')] = $(this).val(); + }); + + // pass them to evtOK if it exists (which it should) + if ( evtOK && + typeof evtOK == 'function' ) { + evtOK( results ); + } + Dialog.hide(); + }, + + hide: function() { + $('#gollum-editor-dialog').animate({ opacity: 0 }, { + duration: 200, + complete: function() { + $('#gollum-editor-dialog').removeClass('active'); + } + }); + }, + + init: function( argObject ) { + var title = ''; + var body = ''; + + // bail out if necessary + if ( !argObject || + typeof argObject != 'object' ) { + debug('Editor Dialog: Cannot init; invalid init object'); + return; + } + + // alright, build out fields + if ( argObject.fields && typeof argObject.fields == 'object' ) { + body = Dialog.createFieldMarkup( argObject.fields ); + } + + if ( argObject.title && typeof argObject.title == 'string' ) { + title = argObject.title; + } + + if ( Dialog.markupCreated ) { + $('#gollum-editor-dialog').remove(); + } + var $dialog = $( Dialog.createMarkup( title, body ) ); + $('body').append( $dialog ); + if ( argObject.OK && + typeof argObject.OK == 'function' ) { + Dialog.attachEvents( argObject.OK ); + } + Dialog.show(); + }, + + show: function() { + if ( !Dialog.markupCreated ) { + debug('Dialog: No markup to show. Please use init first.') + } else { + debug('Showing dialog'); + $('#gollum-editor-dialog').animate({ opacity: 0 }, { + duration: 1, + complete: function() { + $('#gollum-editor-dialog').addClass('active'); + Dialog.position(); // position this thing + $('#gollum-editor-dialog').animate({ opacity: 1 }, { + duration: 500 + }); + } + }); + } + }, + + position: function() { + var dialogHeight = $('#gollum-editor-dialog-inner').height(); + debug(dialogHeight); + $('#gollum-editor-dialog-inner') + .css('height', dialogHeight + 'px') + .css('margin-top', -1 * parseInt( dialogHeight / 2 )); + } + + }; + + $.GollumDialog = Dialog; + +})(jQuery); \ No newline at end of file From 62c5de1414a6714888422190e14d008a1732f3c7 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Fri, 12 Nov 2010 13:38:32 -0800 Subject: [PATCH 087/393] Re-namespace Gollum Dialogs --- .../public/javascript/gollum.dialog.js | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/lib/gollum/frontend/public/javascript/gollum.dialog.js b/lib/gollum/frontend/public/javascript/gollum.dialog.js index c6252a02..6594a756 100644 --- a/lib/gollum/frontend/public/javascript/gollum.dialog.js +++ b/lib/gollum/frontend/public/javascript/gollum.dialog.js @@ -12,10 +12,10 @@ markupCreated: false, attachEvents: function( evtOK ) { - $('#gollum-editor-action-ok').click(function( e ) { + $('#gollum-dialog-action-ok').click(function( e ) { Dialog.eventOK( e, evtOK ); }); - $('#gollum-editor-action-cancel').click( Dialog.eventCancel ); + $('#gollum-dialog-action-cancel').click( Dialog.eventCancel ); }, createFieldMarkup: function( fieldArray ) { @@ -59,7 +59,7 @@ if ( fieldAttributes.type == 'code' ) { html+= ' class="code"'; } - html += ' id="gollum-editor-dialog-generated-field-' + + html += ' id="gollum-dialog-dialog-generated-field-' + fieldAttributes.id + '">'; } @@ -68,16 +68,16 @@ createMarkup: function( title, body ) { Dialog.markupCreated = true; - return '
' + - '
' + - '
' + - '

' + + return '
' + + '
' + + '
' + + '

' + title +'

' + - '
' + body + '
' + - '' + + '
' + + 'Cancel' + - 'OK' + '
' + '
' + @@ -95,7 +95,7 @@ var results = []; // get the results from each field and build them into the object - $('#gollum-editor-dialog-body input').each(function() { + $('#gollum-dialog-dialog-body input').each(function() { results[$(this).attr('name')] = $(this).val(); }); @@ -108,10 +108,10 @@ }, hide: function() { - $('#gollum-editor-dialog').animate({ opacity: 0 }, { + $('#gollum-dialog-dialog').animate({ opacity: 0 }, { duration: 200, complete: function() { - $('#gollum-editor-dialog').removeClass('active'); + $('#gollum-dialog-dialog').removeClass('active'); } }); }, @@ -137,7 +137,7 @@ } if ( Dialog.markupCreated ) { - $('#gollum-editor-dialog').remove(); + $('#gollum-dialog-dialog').remove(); } var $dialog = $( Dialog.createMarkup( title, body ) ); $('body').append( $dialog ); @@ -153,12 +153,12 @@ debug('Dialog: No markup to show. Please use init first.') } else { debug('Showing dialog'); - $('#gollum-editor-dialog').animate({ opacity: 0 }, { + $('#gollum-dialog-dialog').animate({ opacity: 0 }, { duration: 1, complete: function() { - $('#gollum-editor-dialog').addClass('active'); + $('#gollum-dialog-dialog').addClass('active'); Dialog.position(); // position this thing - $('#gollum-editor-dialog').animate({ opacity: 1 }, { + $('#gollum-dialog-dialog').animate({ opacity: 1 }, { duration: 500 }); } @@ -167,9 +167,9 @@ }, position: function() { - var dialogHeight = $('#gollum-editor-dialog-inner').height(); + var dialogHeight = $('#gollum-dialog-dialog-inner').height(); debug(dialogHeight); - $('#gollum-editor-dialog-inner') + $('#gollum-dialog-dialog-inner') .css('height', dialogHeight + 'px') .css('margin-top', -1 * parseInt( dialogHeight / 2 )); } From 5ff52121481ebda1b021dde893879411a18b4fef Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Fri, 12 Nov 2010 13:39:05 -0800 Subject: [PATCH 088/393] Comments, oops --- lib/gollum/frontend/public/javascript/gollum.dialog.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/gollum/frontend/public/javascript/gollum.dialog.js b/lib/gollum/frontend/public/javascript/gollum.dialog.js index 6594a756..ae083049 100644 --- a/lib/gollum/frontend/public/javascript/gollum.dialog.js +++ b/lib/gollum/frontend/public/javascript/gollum.dialog.js @@ -1,7 +1,7 @@ /** - * Dialog - * Used by FunctionBar & internally to display editor-specific messages, - * inputs and more. + * gollum.dialog.js + * + * Used for dialogs. Duh. * */ From 3d30cffee67856abd879a2b0cde4c1250153f4cf Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Fri, 12 Nov 2010 14:04:22 -0800 Subject: [PATCH 089/393] Adding abstracted dialog CSS --- lib/gollum/frontend/public/css/dialog.css | 140 ++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 lib/gollum/frontend/public/css/dialog.css diff --git a/lib/gollum/frontend/public/css/dialog.css b/lib/gollum/frontend/public/css/dialog.css new file mode 100644 index 00000000..78171c08 --- /dev/null +++ b/lib/gollum/frontend/public/css/dialog.css @@ -0,0 +1,140 @@ +/* @control dialog */ + +#gollum-dialog-dialog { + display: none; + top: 50%; + left: 50%; + position: absolute; +} + +#gollum-dialog-dialog.active { + display: block; +} + +#gollum-dialog-dialog-inner { + background: transparent; + margin: 0 0 0 -225px; + overflow: hidden; + position: relative; + width: 450px; + + border: 7px solid rgba(0, 0, 0, 0.3); + border-radius: 5px; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; +} + +#gollum-dialog-dialog-bg { + background-color: #fff; + overflow: hidden; + padding: 1em; + + filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f7f7f7', endColorstr='#ffffff'); + background: -webkit-gradient(linear, left top, left bottom, from(#f7f7f7), to(#ffffff)); + background: -moz-linear-gradient(top, #f7f7f7, #ffffff); +} + +#gollum-dialog-dialog-inner h4 { + border-bottom: 1px solid #ddd; + color: #000; + font-size: 1.8em; + line-height: normal; + font-weight: bold; + margin: 0 0 0.75em 0; + padding: 0 0 0.3em 0; +} + +#gollum-dialog-dialog-body { + font-size: 1.2em; + line-height: 1.6em; +} + +#gollum-dialog-dialog-body fieldset { + border: 0; + margin: 0; + padding: 0; +} + +#gollum-dialog-dialog-body fieldset .field { + margin: 0 0 1.5em 0; + padding: 0; +} + + #gollum-dialog-dialog-body fieldset .field label { + color: #000; + display: block; + font-size: 1.2em; + font-weight: bold; + line-height: 1.6em; + margin: 0; + padding: 0; + min-width: 80px; + } + + #gollum-dialog-dialog-body fieldset .field input[type="text"] { + border: 1px solid #ddd; + display: block; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-size: 1.2em; + line-height: 1.6em; + margin: 0.3em 0 0 0; + padding: 0.3em 0.5em; + width: 96.5%; + } + + #gollum-dialog-dialog-body fieldset .field input.code { + font-family: 'Monaco', 'Courier New', Courier, monospace; + } + +#gollum-dialog-dialog-body fieldset .field:last-child { + margin: 0 0 1em 0; +} + +#gollum-dialog-dialog-buttons { + border-top: 1px solid #ddd; + overflow: hidden; + margin: 1.5em 0 0 0; + padding: 1em 0 0 0; +} + +#gollum-dialog-dialog a.minibutton { + float: right; + margin-right: 0.5em; + width: auto; +} + +#gollum-dialog-dialog a.minibutton, +#gollum-dialog-dialog a.minibutton:visited { + background-color: #f7f7f7; + border: 1px solid #d4d4d4; + color: #333; + cursor: pointer; + display: block; + font-size: 1.2em; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-weight: bold; + margin: 0 0 0 0.8em; + padding: 0.4em 1em; + + text-shadow: 0 1px 0 #fff; + + filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f4f4f4', endColorstr='#ececec'); + background: -webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#ececec)); + background: -moz-linear-gradient(top, #f4f4f4, #ececec); + + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} + +#gollum-dialog-dialog a.minibutton:hover { + background: #3072b3; + border-color: #518cc6 #518cc6 #2a65a0; + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + text-decoration: none; + + filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#599bdc', endColorstr='#3072b3'); + background: -webkit-gradient(linear, left top, left bottom, from(#599bdc), to(#3072b3)); + background: -moz-linear-gradient(top, #599bdc, #3072b3); +} \ No newline at end of file From c8f6059abff7bd2eb0a09f2a09a1c1ab980e666e Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Fri, 12 Nov 2010 14:04:33 -0800 Subject: [PATCH 090/393] Fix visited links --- lib/gollum/frontend/public/css/gollum.css | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/gollum/frontend/public/css/gollum.css b/lib/gollum/frontend/public/css/gollum.css index 6153ab0a..3f66cbba 100644 --- a/lib/gollum/frontend/public/css/gollum.css +++ b/lib/gollum/frontend/public/css/gollum.css @@ -23,6 +23,7 @@ a:link { } a:hover, a:visited { + color: #4183c4; text-decoration: underline; } From 42c7058eccaef8eb6c63ccab08984aa08be47dc2 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Fri, 12 Nov 2010 14:04:58 -0800 Subject: [PATCH 091/393] Fix JSLint issues in Dialog; add revert dialog on history page --- .../public/javascript/gollum.dialog.js | 23 +++++++++++++++---- .../frontend/public/javascript/gollum.js | 22 +++++++++++++++++- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/lib/gollum/frontend/public/javascript/gollum.dialog.js b/lib/gollum/frontend/public/javascript/gollum.dialog.js index ae083049..ef20a195 100644 --- a/lib/gollum/frontend/public/javascript/gollum.dialog.js +++ b/lib/gollum/frontend/public/javascript/gollum.dialog.js @@ -9,6 +9,7 @@ var Dialog = { + debugOn: false, markupCreated: false, attachEvents: function( evtOK ) { @@ -27,10 +28,11 @@ // only text is supported for now case 'text': - case 'code': - default: fieldMarkup += Dialog.createFieldText( fieldArray[i] ); break; + + default: + break; } fieldMarkup += '
'; @@ -126,10 +128,14 @@ debug('Editor Dialog: Cannot init; invalid init object'); return; } + + if ( argObject.body && typeof argObject.body == 'string' ) { + body = '

' + argObject.body + '

'; + } // alright, build out fields if ( argObject.fields && typeof argObject.fields == 'object' ) { - body = Dialog.createFieldMarkup( argObject.fields ); + body += Dialog.createFieldMarkup( argObject.fields ); } if ( argObject.title && typeof argObject.title == 'string' ) { @@ -150,7 +156,7 @@ show: function() { if ( !Dialog.markupCreated ) { - debug('Dialog: No markup to show. Please use init first.') + debug('Dialog: No markup to show. Please use init first.'); } else { debug('Showing dialog'); $('#gollum-dialog-dialog').animate({ opacity: 0 }, { @@ -168,7 +174,6 @@ position: function() { var dialogHeight = $('#gollum-dialog-dialog-inner').height(); - debug(dialogHeight); $('#gollum-dialog-dialog-inner') .css('height', dialogHeight + 'px') .css('margin-top', -1 * parseInt( dialogHeight / 2 )); @@ -176,6 +181,14 @@ }; + var debug = function(m) { + if ( Dialog.debugOn + && typeof console != 'undefined' + && typeof console.log == 'function' ) { + console.log( m ); + } + }; + $.GollumDialog = Dialog; })(jQuery); \ No newline at end of file diff --git a/lib/gollum/frontend/public/javascript/gollum.js b/lib/gollum/frontend/public/javascript/gollum.js index 36fb914a..1f1fab34 100644 --- a/lib/gollum/frontend/public/javascript/gollum.js +++ b/lib/gollum/frontend/public/javascript/gollum.js @@ -29,7 +29,27 @@ $(document).ready(function() { $('#wiki-history td.revert-action a').mouseenter(highlightOn); $('#wiki-history td.revert-action a').mouseleave(highlightOff); - }; + } + + if ($('td.revert-action a').length) { + $('td.revert-action a').click(function(e) { + e.preventDefault(); + + var commitSha = $(this).attr('rel'); + var truncatedSha = commitSha.toString().substr(0, 7) + "…"; + // revert action + $.GollumDialog.init({ + title: 'Revert to ' + truncatedSha + '?', + body: 'Are you sure you wish to revert to revision ' + + truncatedSha + '' + + ' ? This will overwrite any previous changes.', + OK: function() { + // TODO add async endpoint to revert here + } + }); + }); + + } }); From 46ab67b211ee722597447a3f30bb4f2c5b76e981 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Fri, 12 Nov 2010 14:17:56 -0800 Subject: [PATCH 092/393] Adding searchbar markup --- lib/gollum/frontend/templates/history.mustache | 5 +++-- lib/gollum/frontend/templates/layout.mustache | 2 ++ lib/gollum/frontend/templates/page.mustache | 1 + lib/gollum/frontend/templates/searchbar.mustache | 6 ++++++ 4 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 lib/gollum/frontend/templates/searchbar.mustache diff --git a/lib/gollum/frontend/templates/history.mustache b/lib/gollum/frontend/templates/history.mustache index a2ef1e88..c7c6a7d4 100644 --- a/lib/gollum/frontend/templates/history.mustache +++ b/lib/gollum/frontend/templates/history.mustache @@ -7,6 +7,7 @@
  • Edit Page
  • + {{>searchbar}}
    @@ -39,7 +40,7 @@ [{{id7}}…] - Revert to {{id7}}… + Revert to {{id7}}… {{/versions}} @@ -55,7 +56,7 @@ class="action-compare-revision">Compare Revisions -
  • Back to Top
  • diff --git a/lib/gollum/frontend/templates/layout.mustache b/lib/gollum/frontend/templates/layout.mustache index 85628e94..52280300 100644 --- a/lib/gollum/frontend/templates/layout.mustache +++ b/lib/gollum/frontend/templates/layout.mustache @@ -4,10 +4,12 @@ + + + - {{title}} From 6aace6f21fe41311ef9a53f7c487ea03adb7c31e Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 15 Nov 2010 16:03:26 -0800 Subject: [PATCH 103/393] Add Page Preview, fix weirdness in app.rb --- lib/gollum/frontend/app.rb | 9 ++-- lib/gollum/frontend/public/css/editor.css | 47 +++++++++++++++++++ lib/gollum/frontend/public/css/gollum.css | 2 +- .../javascript/gollum-editor/gollum.editor.js | 21 +++++++++ lib/gollum/frontend/templates/edit.mustache | 6 +-- lib/gollum/frontend/templates/editor.mustache | 3 +- 6 files changed, 79 insertions(+), 9 deletions(-) diff --git a/lib/gollum/frontend/app.rb b/lib/gollum/frontend/app.rb index f0b488e2..a814c752 100644 --- a/lib/gollum/frontend/app.rb +++ b/lib/gollum/frontend/app.rb @@ -80,10 +80,13 @@ module Precious end post '/preview' do - format = params['wiki_format'] - data = params['text'] + @name = params['page'] + format = params['format'] + data = params['content'] wiki = Gollum::Wiki.new(settings.gollum_path) - wiki.preview_page("Preview", data, format).formatted_data + @page = wiki.preview_page("Preview", data, format) + @content = @page.formatted_data + mustache :page end get '/history/:name' do diff --git a/lib/gollum/frontend/public/css/editor.css b/lib/gollum/frontend/public/css/editor.css index 7898622b..5fd45342 100644 --- a/lib/gollum/frontend/public/css/editor.css +++ b/lib/gollum/frontend/public/css/editor.css @@ -236,6 +236,7 @@ a#function-image:hover span { background-position: -324px -28px; } color: #333; cursor: pointer; display: block; + float: left; font-size: 1.2em; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-weight: bold; @@ -360,4 +361,50 @@ a#function-image:hover span { background-position: -324px -28px; } margin: 0.7em 0; padding: 0.5em; width: 98%; +} + +/* @control minibutton */ + +#gollum-editor a.minibutton, +#gollum-editor a.minibutton:visited { + background-color: #f7f7f7; + border: 1px solid #d4d4d4; + color: #333; + cursor: pointer; + display: block; + font-size: 1.2em; + font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-weight: bold; + line-height: 1.2em; + margin: 0 0 0 0.8em; + padding: 0.5em 1em; + + text-shadow: 0 1px 0 #fff; + + filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f4f4f4', endColorstr='#ececec'); + background: -webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#ececec)); + background: -moz-linear-gradient(top, #f4f4f4, #ececec); + + border-radius: 3px; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} + +#gollum-editor a.minibutton:hover { + background: #3072b3; + border-color: #518cc6 #518cc6 #2a65a0; + color: #fff; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); + text-decoration: none; + + filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#599bdc', endColorstr='#3072b3'); + background: -webkit-gradient(linear, left top, left bottom, from(#599bdc), to(#3072b3)); + background: -moz-linear-gradient(top, #599bdc, #3072b3); +} + + +#gollum-editor #gollum-editor-preview { + float: left; + font-weight: normal; + padding: left; } \ No newline at end of file diff --git a/lib/gollum/frontend/public/css/gollum.css b/lib/gollum/frontend/public/css/gollum.css index e4153f9e..21891cdf 100644 --- a/lib/gollum/frontend/public/css/gollum.css +++ b/lib/gollum/frontend/public/css/gollum.css @@ -413,7 +413,7 @@ ul.actions { list-style-type: none; overflow: hidden; padding: 0; - } +} ul.actions li { float: left; diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js index 59538144..0337abbc 100644 --- a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js @@ -54,6 +54,23 @@ }); } + if ( EditorHas.previewButton() ) { + var formAction = + $('#gollum-editor #gollum-editor-preview').click(function() { + // make a dummy form, submit to new target window + // get form fields + var oldAction = $('#gollum-editor form').attr('action'); + var $form = $($('#gollum-editor form').get(0)); + $form.attr('action', '/preview'); + $form.attr('target', '_blank'); + $form.submit(); + + + $form.attr('action', oldAction); + $form.removeAttr('target'); + }); + } + // Initialize the function bar by loading proper definitions if ( EditorHas.functionBar() ) { @@ -281,6 +298,10 @@ return ( $('input#gollum-editor-message-field').length > 0 ); }, + previewButton: function() { + return ( $('#gollum-editor #gollum-editor-preview').length ); + }, + titleDisplayed: function() { return ( ActiveOptions.NewFile ); } diff --git a/lib/gollum/frontend/templates/edit.mustache b/lib/gollum/frontend/templates/edit.mustache index b86a71cd..23074b74 100644 --- a/lib/gollum/frontend/templates/edit.mustache +++ b/lib/gollum/frontend/templates/edit.mustache @@ -8,10 +8,8 @@ class="action-page-history">Page History

    -
    -
    - {{>editor}} -
    +
    + {{>editor}}
    - + {{title}} diff --git a/scratch/TODO b/scratch/TODO old mode 100644 new mode 100755 index b789b739..d5033f93 --- a/scratch/TODO +++ b/scratch/TODO @@ -1,10 +1,8 @@ * Editor - * Create rest of markup lang definitions - * Finish RDoc - * Finish rst - * Org-mode - * Create inline help for langs - * Create mathjax inline help + * Get MathJax running +* IE7 Styles +* Fix how text selections occur in IE7/8 so we actually get the right text +* Figure out why Dialogs won't fire in IE7 (likely a css issue) * Write Editor/Sidebar implementation notes for Rick * Find some clever way to represent page hierarchy. From 4222289236d81d0191c2bb877a4afc52fb977202 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 1 Dec 2010 18:18:24 -0800 Subject: [PATCH 136/393] Have editor function bar fail nicely to bad language definitions --- lib/gollum/frontend/public/css/editor.css | 18 ++- .../javascript/gollum-editor/gollum.editor.js | 104 +++++++++++++----- lib/gollum/frontend/templates/editor.mustache | 2 + scratch/TODO | 2 + 4 files changed, 97 insertions(+), 29 deletions(-) mode change 100644 => 100755 lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js mode change 100644 => 100755 lib/gollum/frontend/templates/editor.mustache diff --git a/lib/gollum/frontend/public/css/editor.css b/lib/gollum/frontend/public/css/editor.css index 604e5c62..fc186164 100755 --- a/lib/gollum/frontend/public/css/editor.css +++ b/lib/gollum/frontend/public/css/editor.css @@ -84,16 +84,23 @@ a { #gollum-editor #gollum-editor-function-bar { border-bottom: 1px solid #ddd; overflow: hidden; - padding: 0 0 1.1em 0; - display: none; + padding: 0; } + #gollum-editor-title-field + #gollum-editor-function-bar { margin-top: 0.6em; } -#gollum-editor #gollum-editor-function-bar.active { +#gollum-editor #gollum-editor-function-bar #gollum-editor-function-buttons { + display: none; +} + +#gollum-editor #gollum-editor-function-bar.active #gollum-editor-function-buttons { display: block; + float: left; + overflow: hidden; + padding: 0 0 1.1em 0; } #gollum-editor #gollum-editor-function-bar a.function-button { @@ -179,6 +186,11 @@ a#function-help:hover span { background-position: -405px -28px; } width: 0.5em; } +#gollum-editor #gollum-editor-function-bar #gollum-editor-format-selector { + overflow: hidden; + padding: 0 0 1.1em 0; +} + #gollum-editor #gollum-editor-function-bar #gollum-editor-format-selector select { background-color: #f9f9f9; diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js old mode 100644 new mode 100755 index 780a9384..bba422db --- a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js @@ -80,26 +80,12 @@ if ( htmlSetMarkupLang ) { ActiveOptions.MarkupType = htmlSetMarkupLang; } - - if ( !LanguageDefinition.isLoadedFor(ActiveOptions.MarkupType) ) { - debug('Loading language definition for ' + ActiveOptions.MarkupType); - LanguageDefinition.loadFor( ActiveOptions.MarkupType, - function(data, textStatus) { - if ( textStatus != 'success' ) { - debug('Language definition could not be loaded for markup ' - + 'type ' + ActiveOptions.MarkupType); - return; - } - - if ( EditorHas.formatSelector() ) { - FormatSelector.init( - $('#gollum-editor-format-selector select') ); - } - - // activate the function bar - debug('Activating function bar'); - FunctionBar.activate(); - } ); + + // load language definition + LanguageDefinition.setActiveLanguage( ActiveOptions.MarkupType ); + if ( EditorHas.formatSelector() ) { + FormatSelector.init( + $('#gollum-editor-format-selector select') ); } if ( EditorHas.help() ) { @@ -175,12 +161,25 @@ setActiveLanguage: function( name ) { if ( !LanguageDefinition.isLoadedFor(name) ) { - LanguageDefinition.loadFor( name ); + LanguageDefinition._ACTIVE_LANG = null; + LanguageDefinition.loadFor( name, function(x, t) { + if ( t != 'success' ) { + debug('Failed to load language definition for ' + name); + return; + } + + // update features that rely on the language definition + if ( EditorHas.functionBar() ) + FunctionBar.refresh(); + + if ( LanguageDefinition.isValid() && EditorHas.formatSelector() ) + FormatSelector.updateSelected(); + + } ); } else { LanguageDefinition._ACTIVE_LANG = name; + FunctionBar.refresh(); } - // tell help we switched languages - Help.setActiveHelp(name); }, @@ -245,6 +244,12 @@ return true; } return false; + }, + + isValid: function() { + return ( LanguageDefinition._ACTIVE_LANG && + typeof LanguageDefinition._LANG[LanguageDefinition._ACTIVE_LANG] == + 'object' ); } }; @@ -395,10 +400,14 @@ * */ activate: function() { + debug('Activating function bar'); + // check these out $('#gollum-editor-function-bar a.function-button').each(function() { - if ( LanguageDefinition.getDefinitionFor( $(this).attr('id') ) ) + if ( LanguageDefinition.getDefinitionFor( $(this).attr('id') ) ) { $(this).click( FunctionBar.evtFunctionButtonClick ); + $(this).removeClass('disabled'); + } else if ( $(this).attr('id') != 'function-help' ) $(this).addClass('disabled'); }); @@ -409,6 +418,13 @@ }, + deactivate: function() { + $('#gollum-editor-function-bar a.function-button').unbind('click'); + $('#gollum-editor-function-bar').removeClass( 'active' ); + FunctionBar.isActive = false; + }, + + /** * FunctionBar.evtFunctionButtonClick * Event handler for the function buttons. Traps the click and @@ -517,6 +533,28 @@ }, + isShown: function() { + return ($('#gollum-editor-function-bar').is(':visible')); + }, + + refresh: function() { + if ( EditorHas.functionBar() ) { + if ( LanguageDefinition.isValid() ) { + $('#gollum-editor-function-bar a.function-button').unbind('click'); + FunctionBar.activate(); + if ( Help ) + Help.setActiveHelp( LanguageDefinition.getActiveLanguage() ); + } else { + debug('Language definition is invalid.'); + if ( FunctionBar.isShown() ) { + // deactivate the function bar; it's not gonna work now + FunctionBar.deactivate(); + } + } + } + }, + + /** * replaceFieldSelection * Replaces the currently selected substring of the textarea with @@ -589,13 +627,27 @@ init: function( $sel ) { debug('Initializing format selector'); + // unbind events if init is being called twice for some reason + if ( FormatSelector.$_SELECTOR && + typeof FormatSelector.$_SELECTOR == 'object' ) { + FormatSelector.$_SELECTOR.unbind( 'change' ); + } + FormatSelector.$_SELECTOR = $sel; // set format selector to the current language + FormatSelector.updateSelected(); + FormatSelector.$_SELECTOR.change( FormatSelector.evtChangeFormat ); + }, + + + /** + * FormatSelector.update + */ + updateSelected: function() { var currentLang = LanguageDefinition.getActiveLanguage(); FormatSelector.$_SELECTOR.val( currentLang ); - FormatSelector.$_SELECTOR.change( FormatSelector.evtChangeFormat ); - } + } }; diff --git a/lib/gollum/frontend/templates/editor.mustache b/lib/gollum/frontend/templates/editor.mustache old mode 100644 new mode 100755 index 24d63c5b..4e901a56 --- a/lib/gollum/frontend/templates/editor.mustache +++ b/lib/gollum/frontend/templates/editor.mustache @@ -16,6 +16,7 @@ {{/is_edit_page}}
    +
    - + data-markup-lang="{{format}}" name="content">{{content}} + {{#has_footer}} + {{/has_footer}} + {{#has_sidebar}} + {{/has_sidebar}}
    diff --git a/lib/gollum/frontend/templates/page.mustache b/lib/gollum/frontend/templates/page.mustache old mode 100644 new mode 100755 diff --git a/lib/gollum/frontend/views/create.rb b/lib/gollum/frontend/views/create.rb old mode 100644 new mode 100755 index 073cc5af..2b7dafbc --- a/lib/gollum/frontend/views/create.rb +++ b/lib/gollum/frontend/views/create.rb @@ -16,6 +16,21 @@ module Precious def is_edit_page false end + + def format + @format = (@page.format || false) if @format.nil? + @format.to_s.downcase + end + + def has_footer + @footer = (@page.footer || false) if @footer.nil? + !!@footer + end + + def has_sidebar + @sidebar = (@page.sidebar || false) if @sidebar.nil? + !!@sidebar + end def page_name @name.gsub('-', ' ') diff --git a/lib/gollum/frontend/views/edit.rb b/lib/gollum/frontend/views/edit.rb old mode 100644 new mode 100755 index bf789ed0..44392a22 --- a/lib/gollum/frontend/views/edit.rb +++ b/lib/gollum/frontend/views/edit.rb @@ -16,6 +16,21 @@ module Precious def is_edit_page true end + + def format + @format = (@page.format || false) if @format.nil? + @format.to_s.downcase + end + + def has_footer + @footer = (@page.footer || false) if @footer.nil? + !!@footer + end + + def has_sidebar + @sidebar = (@page.sidebar || false) if @sidebar.nil? + !!@sidebar + end def title "#{@page.title}" From 389b7cbbe138da31986e8c3a6c605a0115e652e3 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 6 Dec 2010 15:35:57 -0700 Subject: [PATCH 157/393] --- Home.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Home.md b/Home.md index e3657469..fe0ba3c7 100644 --- a/Home.md +++ b/Home.md @@ -1,3 +1,3 @@ -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vulputate tincidunt sollicitudin. Quisque sit amet leo sed nunc eleifend rhoncus in consectetur leo. Vivamus posuere semper convallis. Duis malesuada lacus sed erat lobortis tincidunt mattis ligula consectetur. Sed aliquam vulputate eros at euismod. Aenean egestas lorem ligula, quis faucibus turpis. Curabitur a eros in ipsum gravida ornare. Sed elementum enim vel mi scelerisque dapibus. Nulla id libero ligula, quis tempus sem. Morbi nec felis tortor, ac cursus risus. Mauris elementum tortor id lacus eleifend non lobortis tellus pharetra. Etiam posuere cursus vestibulum. +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vulputate tincidunt sollicitudin. Quisque sit amet leo sed nunc eleifend rhoncus in consectetur leo. Vivamus posuere semper convallis. Duis malesuada lacus sed erat lobortis tincidunt mattis ligula consectetur. Sed aliquam vulputate eros at euismod. Aenean egestas lorem ligula, quis faucibus turpis. Curabitur a eros in ipsum gravida ornare. Sed elementum enim vel mi scelerisque dapibus. Nulla id libero ligula, quis tempus sem. Morbi nec felis tortor, ac cursus risus. Mauris elementum tortor id lacus eleifend non lobortis tellus pharetra. Etiam posuere cursus vestibulum. $x < y$ Morbi tincidunt dolor vel massa dictum volutpat. Vestibulum quis nibh metus, id tincidunt nisl. Vivamus eget sem ac risus eleifend rhoncus at eu nisl. Nunc elit massa, vulputate ac gravida eget, condimentum quis justo. Integer scelerisque, libero vel consequat ultricies, eros libero sagittis libero, pellentesque bibendum quam massa ut orci. Maecenas sit amet urna eget quam aliquam posuere. Nulla facilisi. Duis imperdiet augue sit amet metus ornare et hendrerit dui feugiat. Aenean a lacus neque. Sed eu enim tincidunt dolor pharetra porttitor. Vestibulum ut felis dui, rutrum iaculis orci. Duis eu bibendum tortor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse mollis sagittis purus sit amet sollicitudin. Phasellus vel interdum erat. \ No newline at end of file From 9e00acc60ede88e67c2609d1151cc035f597cc63 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 6 Dec 2010 15:36:16 -0700 Subject: [PATCH 158/393] From 8e432f1abd40756c885bb556087242be7d6e00be Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 6 Dec 2010 15:36:27 -0700 Subject: [PATCH 159/393] --- Home.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Home.md b/Home.md index fe0ba3c7..6edf0edb 100644 --- a/Home.md +++ b/Home.md @@ -1,3 +1,3 @@ -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vulputate tincidunt sollicitudin. Quisque sit amet leo sed nunc eleifend rhoncus in consectetur leo. Vivamus posuere semper convallis. Duis malesuada lacus sed erat lobortis tincidunt mattis ligula consectetur. Sed aliquam vulputate eros at euismod. Aenean egestas lorem ligula, quis faucibus turpis. Curabitur a eros in ipsum gravida ornare. Sed elementum enim vel mi scelerisque dapibus. Nulla id libero ligula, quis tempus sem. Morbi nec felis tortor, ac cursus risus. Mauris elementum tortor id lacus eleifend non lobortis tellus pharetra. Etiam posuere cursus vestibulum. $x < y$ +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque vulputate tincidunt sollicitudin. Quisque sit amet leo sed nunc eleifend rhoncus in consectetur leo. Vivamus posuere semper convallis. Duis malesuada lacus sed erat lobortis tincidunt mattis ligula consectetur. Sed aliquam vulputate eros at euismod. Aenean egestas lorem ligula, quis faucibus turpis. Curabitur a eros in ipsum gravida ornare. Sed elementum enim vel mi scelerisque dapibus. Nulla id libero ligula, quis tempus sem. Morbi nec felis tortor, ac cursus risus. Mauris elementum tortor id lacus eleifend non lobortis tellus pharetra. Etiam posuere cursus vestibulum. $x \lt y$ Morbi tincidunt dolor vel massa dictum volutpat. Vestibulum quis nibh metus, id tincidunt nisl. Vivamus eget sem ac risus eleifend rhoncus at eu nisl. Nunc elit massa, vulputate ac gravida eget, condimentum quis justo. Integer scelerisque, libero vel consequat ultricies, eros libero sagittis libero, pellentesque bibendum quam massa ut orci. Maecenas sit amet urna eget quam aliquam posuere. Nulla facilisi. Duis imperdiet augue sit amet metus ornare et hendrerit dui feugiat. Aenean a lacus neque. Sed eu enim tincidunt dolor pharetra porttitor. Vestibulum ut felis dui, rutrum iaculis orci. Duis eu bibendum tortor. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse mollis sagittis purus sit amet sollicitudin. Phasellus vel interdum erat. \ No newline at end of file From c5631ae376524554cd98fb4e991c9d0c82a2c0d2 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 6 Dec 2010 14:37:11 -0800 Subject: [PATCH 160/393] Get MathJax workin' --- .../public/javascript/gollum-editor/gollum.editor.js | 5 +---- lib/gollum/frontend/public/javascript/gollum.js | 8 ++++++++ scratch/TODO | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) mode change 100644 => 100755 lib/gollum/frontend/public/javascript/gollum.js diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js index 9b359de2..88897fdd 100755 --- a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js @@ -353,8 +353,7 @@ * @return boolean */ mathJax: function() { - //TODO - return false; + return (typeof window.MathJax == 'object'); }, @@ -769,8 +768,6 @@ } var helpData = Help._HELP[name]; - // add MathJax Help if we have it - // TODO if ( EditorHas.mathJax() && Help.isLoadedFor('mathjax') ) { debug('Adding MathJax support to help'); // TODO diff --git a/lib/gollum/frontend/public/javascript/gollum.js b/lib/gollum/frontend/public/javascript/gollum.js old mode 100644 new mode 100755 index e88fb0b0..679c4fb9 --- a/lib/gollum/frontend/public/javascript/gollum.js +++ b/lib/gollum/frontend/public/javascript/gollum.js @@ -71,6 +71,10 @@ $(document).ready(function() { }); } + if ( window.MathJax ) { + + } + }); var nodeSelector = { @@ -179,3 +183,7 @@ function highlightOff() { function highlightChecked() { nodeSelector.checkNode($(this)); } + +function initMathJax() { + +} diff --git a/scratch/TODO b/scratch/TODO index 8333fd0a..bbba778a 100755 --- a/scratch/TODO +++ b/scratch/TODO @@ -1,5 +1,6 @@ * Editor * Get MathJax running + * Fix up regexes * Figure out why Dialogs won't fire in IE7 (likely a css issue) From add9402b7e46425480c30e366b111eb79f1e7349 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 6 Dec 2010 16:10:58 -0800 Subject: [PATCH 161/393] Change regex replacement methods to allow for replacement at cursor --- .../javascript/gollum-editor/gollum.editor.js | 57 +++++++++++++++---- 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js index 88897fdd..65f6bbbd 100755 --- a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js @@ -453,6 +453,7 @@ var selText = FunctionBar.getFieldSelection( $('#gollum-editor-body') ); var repText = selText; var reselect = true; + var cursor = null; // execute a replacement function if one exists if ( definitionObject.exec && @@ -469,12 +470,36 @@ searchExp = definitionObject.search; debug( searchExp ); } - + debug(repText); // replace text if ( definitionObject.replace && typeof definitionObject.replace == 'string' ) { debug('Running replacement - using ' + definitionObject.replace); - repText = repText.replace( searchExp, definitionObject.replace ); + var rt = definitionObject.replace; + var matches = searchExp.exec( repText ); + if ( matches && matches.length > 1 ) { + debug(matches); + for ( var i = 1; i < matches.length; i++ ) { + var searchStr = '$' + i; + debug('searching for ' + searchStr + ' to replace with ' + matches[i]); + rt = rt.replace( searchStr, matches[i] ); + } + repText = rt; + } else if ( repText == '' ) { + debug('Search string is empty'); + + // find position of $1 - this is where we will place the cursor + var cursor = rt.indexOf('$1'); + + // we have an empty string, so just remove backreferences + repText = rt.replace( /\$[\d]/g, '' ); + + // if the position of $1 doesn't exist, stick the cursor in + // the middle + if ( cursor == -1 ) { + cursor = Math.floor( rt.length / 2 ); + } + } } // append if necessary @@ -485,10 +510,10 @@ } repText += definitionObject.append; } - - if (repText) + + if ( repText ) FunctionBar.replaceFieldSelection( $('#gollum-editor-body'), - repText, reselect ); + repText, reselect, cursor ); }, @@ -607,7 +632,7 @@ * @param string The string to replace the current selection with. * @param boolean Reselect the new text range. */ - replaceFieldSelection: function( $field, replaceText, reselect ) { + replaceFieldSelection: function( $field, replaceText, reselect, cursorOffset ) { var selPos = FunctionBar.getFieldSelectionPosition( $field ); var fullStr = $field.val(); var selectNew = true; @@ -626,13 +651,25 @@ if ( selectNew ) { if ( $field[0].setSelectionRange ) { - $field[0].setSelectionRange( selPos.start, - selPos.start + replaceText.length ); + if ( cursorOffset ) { + $field[0].setSelectionRange( + selPos.start + cursorOffset, + selPos.start + cursorOffset + ); + } else { + $field[0].setSelectionRange( selPos.start, + selPos.start + replaceText.length ); + } } else if ( $field[0].createTextRange ) { var range = $field[0].createTextRange(); range.collapse( true ); - range.moveEnd( 'character', selPos.start + replaceText.length ); - range.moveStart( 'character', selPos.start ); + if ( cursorOffset ) { + range.moveEnd( selPos.start + cursorOffset ); + range.moveStart( selPos.start + cursorOffset ); + } else { + range.moveEnd( 'character', selPos.start + replaceText.length ); + range.moveStart( 'character', selPos.start ); + } range.select(); } } From 05f259cee85258858d907480e676625f68a68b91 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 6 Dec 2010 16:11:19 -0800 Subject: [PATCH 162/393] Change regexes in language definitions to strip trailing spaces in Windows textareas --- .../javascript/gollum-editor/langs/asciidoc.js | 15 +++++++-------- .../javascript/gollum-editor/langs/markdown.js | 18 +++++++++--------- .../javascript/gollum-editor/langs/pod.js | 6 +++--- .../javascript/gollum-editor/langs/rdoc.js | 7 +++---- .../javascript/gollum-editor/langs/textile.js | 9 ++++----- .../frontend/public/javascript/gollum.js | 7 +------ 6 files changed, 27 insertions(+), 35 deletions(-) mode change 100644 => 100755 lib/gollum/frontend/public/javascript/gollum-editor/langs/rdoc.js mode change 100644 => 100755 lib/gollum/frontend/public/javascript/gollum-editor/langs/textile.js diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/langs/asciidoc.js b/lib/gollum/frontend/public/javascript/gollum-editor/langs/asciidoc.js index a97ff53b..b1fb5a90 100755 --- a/lib/gollum/frontend/public/javascript/gollum-editor/langs/asciidoc.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/langs/asciidoc.js @@ -8,33 +8,32 @@ var ASCIIDoc = { 'function-bold' : { - search: /([^\n]+)([\n]*)/gi, + search: /(^\n]+)([\n\s]*)/g, replace: "*$1*$2" }, 'function-italic' : { - search: /([^\n]+)([\n]*)/gi, + search: /(^\n]+)([\n\s]*)/g, replace: "_$1_$2" }, 'function-code' : { - search: /([^\n]+)([\n]*)/gi, + search: /(^\n]+)([\n\s]*)/g, replace: "+$1+$2" }, 'function-ul' : { - search: /(.+)([\n]?)/gi, + search: /(^\n]+)([\n\s]*)/g, replace: "* $1$2" }, - - /* This looks silly but is completely valid Markdown */ + 'function-ol' : { - search: /(.+)([\n]?)/gi, + search: /(.+)([\n]?)/g, replace: ". $1$2" }, 'function-blockquote' : { - search: /(.+)([\n]?)/gi, + search: /(.+)([\n]?)/g, replace: "----\n$1$2\n----\n" }, diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/langs/markdown.js b/lib/gollum/frontend/public/javascript/gollum-editor/langs/markdown.js index 91b575fc..5f136b9f 100755 --- a/lib/gollum/frontend/public/javascript/gollum-editor/langs/markdown.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/langs/markdown.js @@ -22,17 +22,17 @@ var MarkDown = { 'function-bold' : { - search: /([^\n]+)([\n]*)/gi, + search: /([^\n]+)([\n\s]*)/g, replace: "**$1**$2" }, 'function-italic' : { - search: /([^\n]+)([\n]*)/gi, + search: /([^\n]+)([\n\s]*)/g, replace: "_$1_$2" }, 'function-code' : { - search: /([^\n]+)([\n]*)/gi, + search: /(^\n]+)([\n\s]*)/g, replace: "`$1`$2" }, @@ -41,33 +41,33 @@ var MarkDown = { }, 'function-ul' : { - search: /(.+)([\n]?)/gi, + search: /(.+)([\n]?)/g, replace: "* $1$2" }, /* This looks silly but is completely valid Markdown */ 'function-ol' : { - search: /(.+)([\n]?)/gi, + search: /(.+)([\n]?)/g, replace: "1. $1$2" }, 'function-blockquote' : { - search: /(.+)([\n]?)/gi, + search: /(.+)([\n]?)/g, replace: "> $1$2" }, 'function-h1' : { - search: /(.+)([\n]?)/gi, + search: /(.+)([\n]?)/g, replace: "# $1$2" }, 'function-h2' : { - search: /(.+)([\n]?)/gi, + search: /(.+)([\n]?)/g, replace: "## $1$2" }, 'function-h3' : { - search: /(.+)([\n]?)/gi, + search: /(.+)([\n]?)/g, replace: "### $1$2" }, diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js b/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js index d50dd1f0..e706088b 100755 --- a/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js @@ -6,17 +6,17 @@ var Pod = { 'function-bold' : { - search: /([^\n]+)([\n]*)/gi, + search: /(^\n]+)([\n\s]*)/g, replace: "B<$1>$2" }, 'function-italic' : { - search: /([^\n]+)([\n]*)/gi, + search: /(^\n]+)([\n\s]*)/g, replace: "I<$1>$2" }, 'function-code' : { - search: /([^\n]+)([\n]*)/gi, + search: /(^\n]+)([\n\s]*)/g, replace: "C<$1>$2" }, diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/langs/rdoc.js b/lib/gollum/frontend/public/javascript/gollum-editor/langs/rdoc.js old mode 100644 new mode 100755 index 592af965..f701ed47 --- a/lib/gollum/frontend/public/javascript/gollum-editor/langs/rdoc.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/langs/rdoc.js @@ -22,11 +22,11 @@ var RDoc = { 'function-bold' : { - search: /([^\n]+)([\n]*)/gi, + search: /(^\n]+)([\n\s]*)/g, replace: "((*$1*))$2" } 'function-code' : { - search: /([^\n]+)([\n]*)/gi, + search: /(^\n]+)([\n\s]*)/g, replace: "(({$1}))$2" }, @@ -34,8 +34,7 @@ var RDoc = { search: /(.+)([\n]?)/gi, replace: "* $1$2" }, - - /* This looks silly but is completely valid Markdown */ + 'function-ol' : { exec: function( txt, selText, $field ) { var count = 1; diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/langs/textile.js b/lib/gollum/frontend/public/javascript/gollum-editor/langs/textile.js old mode 100644 new mode 100755 index 5411106b..3af32c29 --- a/lib/gollum/frontend/public/javascript/gollum-editor/langs/textile.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/langs/textile.js @@ -6,12 +6,12 @@ var Textile = { 'function-bold' : { - search: /([^\n]+)([\n]*)/gi, + search: /(^\n]+)([\n\s]*)/g, replace: "*$1*$2" }, 'function-italic' : { - search: /([^\n]+)([\n]*)/gi, + search: /(^\n]+)([\n\s]*)/g, replace: "_$1_$2" }, @@ -20,7 +20,7 @@ var Textile = { }, 'function-code' : { - search: /([^\n]+)([\n]*)/gi, + search: /(^\n]+)([\n\s]*)/g, replace: "
    $1
    $2" }, @@ -28,8 +28,7 @@ var Textile = { search: /(.+)([\n]?)/gi, replace: "* $1$2" }, - - /* This looks silly but is completely valid Markdown */ + 'function-ol' : { search: /(.+)([\n]?)/gi, replace: "# $1$2" diff --git a/lib/gollum/frontend/public/javascript/gollum.js b/lib/gollum/frontend/public/javascript/gollum.js index 679c4fb9..acd37458 100755 --- a/lib/gollum/frontend/public/javascript/gollum.js +++ b/lib/gollum/frontend/public/javascript/gollum.js @@ -69,12 +69,7 @@ $(document).ready(function() { $(this).unbind('submit'); $(this).submit(); }); - } - - if ( window.MathJax ) { - - } - + } }); var nodeSelector = { From 641605b9fab9de6951218906dd41e7bacd02f66f Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 6 Dec 2010 16:13:29 -0800 Subject: [PATCH 163/393] Whoops, bad copy/replace job --- .../public/javascript/gollum-editor/langs/asciidoc.js | 8 ++++---- .../public/javascript/gollum-editor/langs/markdown.js | 2 +- .../frontend/public/javascript/gollum-editor/langs/pod.js | 6 +++--- .../public/javascript/gollum-editor/langs/rdoc.js | 4 ++-- .../public/javascript/gollum-editor/langs/textile.js | 6 +++--- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/langs/asciidoc.js b/lib/gollum/frontend/public/javascript/gollum-editor/langs/asciidoc.js index b1fb5a90..3558be48 100755 --- a/lib/gollum/frontend/public/javascript/gollum-editor/langs/asciidoc.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/langs/asciidoc.js @@ -8,22 +8,22 @@ var ASCIIDoc = { 'function-bold' : { - search: /(^\n]+)([\n\s]*)/g, + search: /(^[\n]+)([\n\s]*)/g, replace: "*$1*$2" }, 'function-italic' : { - search: /(^\n]+)([\n\s]*)/g, + search: /(^[\n]+)([\n\s]*)/g, replace: "_$1_$2" }, 'function-code' : { - search: /(^\n]+)([\n\s]*)/g, + search: /(^[\n]+)([\n\s]*)/g, replace: "+$1+$2" }, 'function-ul' : { - search: /(^\n]+)([\n\s]*)/g, + search: /(^[\n]+)([\n\s]*)/g, replace: "* $1$2" }, diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/langs/markdown.js b/lib/gollum/frontend/public/javascript/gollum-editor/langs/markdown.js index 5f136b9f..7152502f 100755 --- a/lib/gollum/frontend/public/javascript/gollum-editor/langs/markdown.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/langs/markdown.js @@ -32,7 +32,7 @@ var MarkDown = { }, 'function-code' : { - search: /(^\n]+)([\n\s]*)/g, + search: /(^[\n]+)([\n\s]*)/g, replace: "`$1`$2" }, diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js b/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js index e706088b..5b12ae90 100755 --- a/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/langs/pod.js @@ -6,17 +6,17 @@ var Pod = { 'function-bold' : { - search: /(^\n]+)([\n\s]*)/g, + search: /(^[\n]+)([\n\s]*)/g, replace: "B<$1>$2" }, 'function-italic' : { - search: /(^\n]+)([\n\s]*)/g, + search: /(^[\n]+)([\n\s]*)/g, replace: "I<$1>$2" }, 'function-code' : { - search: /(^\n]+)([\n\s]*)/g, + search: /(^[\n]+)([\n\s]*)/g, replace: "C<$1>$2" }, diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/langs/rdoc.js b/lib/gollum/frontend/public/javascript/gollum-editor/langs/rdoc.js index f701ed47..eca68f4d 100755 --- a/lib/gollum/frontend/public/javascript/gollum-editor/langs/rdoc.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/langs/rdoc.js @@ -22,11 +22,11 @@ var RDoc = { 'function-bold' : { - search: /(^\n]+)([\n\s]*)/g, + search: /([^\n]+)([\n\s]*)/g, replace: "((*$1*))$2" } 'function-code' : { - search: /(^\n]+)([\n\s]*)/g, + search: /([^\n]+)([\n\s]*)/g, replace: "(({$1}))$2" }, diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/langs/textile.js b/lib/gollum/frontend/public/javascript/gollum-editor/langs/textile.js index 3af32c29..9d848671 100755 --- a/lib/gollum/frontend/public/javascript/gollum-editor/langs/textile.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/langs/textile.js @@ -6,12 +6,12 @@ var Textile = { 'function-bold' : { - search: /(^\n]+)([\n\s]*)/g, + search: /(^[\n]+)([\n\s]*)/g, replace: "*$1*$2" }, 'function-italic' : { - search: /(^\n]+)([\n\s]*)/g, + search: /(^[\n]+)([\n\s]*)/g, replace: "_$1_$2" }, @@ -20,7 +20,7 @@ var Textile = { }, 'function-code' : { - search: /(^\n]+)([\n\s]*)/g, + search: /(^[\n]+)([\n\s]*)/g, replace: "
    $1
    $2" }, From 6bada4cef5d50d1de8ab5a34cd63e216a9897973 Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 6 Dec 2010 17:43:05 -0800 Subject: [PATCH 164/393] useless --- test/static/default/Bilbo-Baggins.html | 41 --- test/static/default/Eye-Of-Sauron.html | 65 ---- test/static/default/My-Precious.html | 29 -- test/static/default/css/gollum.css | 408 ------------------------- test/static/default/css/template.css | 146 --------- test/static/default/index.html | 30 -- 6 files changed, 719 deletions(-) delete mode 100644 test/static/default/Bilbo-Baggins.html delete mode 100644 test/static/default/Eye-Of-Sauron.html delete mode 100644 test/static/default/My-Precious.html delete mode 100644 test/static/default/css/gollum.css delete mode 100644 test/static/default/css/template.css delete mode 100644 test/static/default/index.html diff --git a/test/static/default/Bilbo-Baggins.html b/test/static/default/Bilbo-Baggins.html deleted file mode 100644 index 9dd2c777..00000000 --- a/test/static/default/Bilbo-Baggins.html +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - Bilbo Baggins - - - -
    -
    -
    -
    -
    -

    Bilbo Baggins

    - -

    Bilbo Baggins is the protagonist of The Hobbit and also makes a few -appearances in The Lord of the Rings, two of the most well-known of J. R. R. -Tolkien's fantasy writings. The story of The Hobbit featuring Bilbo is also -retold from a different perspective in the Chapter The Quest of Erebor in -Unfinished Tales.

    - -

    In Tolkien's narrative conceit, in which all the writings of Middle-earth are -'really' translations from the fictitious volume of The Red Book of Westmarch, -Bilbo is the author of The Hobbit and translator of The Silmarillion.

    - -

    From http://en.wikipedia.org/wiki/Bilbo_Baggins.

    -
    -
    -
    - -
    - -
    - - - - diff --git a/test/static/default/Eye-Of-Sauron.html b/test/static/default/Eye-Of-Sauron.html deleted file mode 100644 index 6619be30..00000000 --- a/test/static/default/Eye-Of-Sauron.html +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - Eye Of Sauron - - - -
    -
    -
    -
    -
    -

    Eye Of Sauron

    - -

    Here are some pictures of the Eye of Sauron!

    - -

    Just the photo.

    - -

    - -

    With alt.

    - -

    Eye of Sauron

    - -

    With frame and caption.

    - -

    Eye of SauronEye of Sauron

    - -

    Align left.

    - -

    - -

    Alight center.

    - -

    - -

    Alight right.

    - -

    - -

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas interdum velit eu justo rutrum vitae semper urna porttitor. Sed viverra bibendum tincidunt. Curabitur vel mi sed nisl vestibulum lobortis eu ac nisl. Morbi fringilla adipiscing felis. Mauris luctus interdum accumsan. Integer leo mauris, dapibus a sollicitudin non, varius non erat. Donec eu dictum orci. Morbi viverra eleifend felis, et adipiscing neque consequat a. Vestibulum accumsan ligula suscipit mi rhoncus ac gravida lectus tincidunt. Donec interdum, FIRE FIRE FIREFIRE FIRE FIRE lorem sed interdum molestie, est ipsum pharetra est, sit amet eleifend purus eros at ligula. Aliquam erat volutpat. Sed dignissim interdum ipsum, et pulvinar lectus faucibus et. Ut at lacus risus, non lobortis erat. Proin malesuada sagittis mauris, in posuere turpis tincidunt eu. Nunc accumsan, ligula ut rutrum aliquet, neque metus suscipit ligula, in aliquam augue velit vel orci. Aliquam diam lectus, posuere id faucibus sed, aliquam vel erat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas interdum velit eu justo rutrum vitae semper urna porttitor. Sed viverra bibendum tincidunt. Curabitur vel mi sed nisl vestibulum lobortis eu ac nisl. Morbi fringilla adipiscing felis. Mauris luctus interdum accumsan. Integer leo mauris, dapibus a sollicitudin non, varius non erat. Donec eu dictum orci. Morbi viverra eleifend felis, et adipiscing neque consequat a. Vestibulum accumsan ligula suscipit mi rhoncus ac gravida lectus tincidunt. Donec interdum, lorem sed interdum molestie, est ipsum pharetra est, sit amet eleifend purus eros at ligula. Aliquam erat volutpat. Sed dignissim interdum ipsum, et pulvinar lectus faucibus et. Ut at lacus risus, non lobortis erat. Proin malesuada sagittis mauris, in posuere turpis tincidunt eu. Nunc accumsan, ligula ut rutrum aliquet, neque metus suscipit ligula, in aliquam augue velit vel orci. Aliquam diam lectus, posuere id faucibus sed, aliquam vel erat.

    - -

    Smaller width.

    - -

    - -

    Smaller height.

    - -

    -
    -
    -
    - -
    - -
    - - - - diff --git a/test/static/default/My-Precious.html b/test/static/default/My-Precious.html deleted file mode 100644 index 588bc404..00000000 --- a/test/static/default/My-Precious.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - My Precious - - - -
    -
    -
    -
    -
    -

    One ring to rule them all!

    -
    -
    -
    - -
    - -
    - - - - diff --git a/test/static/default/css/gollum.css b/test/static/default/css/gollum.css deleted file mode 100644 index 627d98ef..00000000 --- a/test/static/default/css/gollum.css +++ /dev/null @@ -1,408 +0,0 @@ -/* - gollum.css - A basic stylesheet for Gollum -*/ - -/* @section core */ -body, html { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 10px; /* -> 1em */ - margin: 0; - padding: 0; -} - -#wiki-wrapper { - margin: 0 auto; - overflow: visible; - width: 80%; -} - -a:link { - color: #4183c4; - text-decoration: none; -} - -a:hover, a:visited { - text-decoration: underline; -} - - -/* @section head */ -#head { - border-bottom: 1px solid #ccc; - margin: 4.5em 0 0.5em; - padding: 0.5em 0; - overflow: hidden; -} - - #head h1 { - font-size: 3.3em; - float: left; - line-height: normal; - margin: 0; - padding: 0.08em 0 0 0; - } - - #head ul.actions { - float: right; - } - - -/* @section content */ -#wiki-content { - height: 1%; - overflow: visible; -} - - #wiki-content .wrap { - height: 1%; - overflow: auto; - } - - /* @section comments */ - #wiki-body #inline-comment { - display: none; /* todo */ - } - - /* @section body */ - #wiki-body { - float: left; - margin-right: 3%; - width: 70%; - } - - /* @section rightbar */ - #wiki-rightbar { - float: right; - width: 27%; - } - - #wiki-rightbar #nav { - background-color: #f7f7f7; - border: 1px solid #ddd; - margin-top: 1.5em; - padding: 1em; - - border-radius: 0.5em; - -moz-border-radius: 0.5em; - -webkit-border-radius: 0.5em; - } - - #wiki-rightbar #nav { - font-size: 1.2em; - line-height: 1.5em; - } - - #wiki-rightbar #nav p.parent { - border-bottom: 1px solid #bbb; - font-weight: bold; - margin: 0 0 0.5em 0; - padding: 0 0 0.5em 0; - text-shadow: 0 1px 0 #fff; - } - - /* Back arrow */ - #wiki-rightbar #nav p.parent:before { - color: #666; - content: "← "; - } - - #wiki-rightbar #nav h3 { - font-size: 1.2em; - color: #333; - margin: 1.2em 0 0; - padding: 0; - text-shadow: 0 1px 0 #fff; - } - - #wiki-rightbar #nav ul { - margin: 0.5em 0 1em; - padding: 0; - } - - #wiki-rightbar #nav ul li { - color: #bbb; - list-style-position: outside; - list-style-type: none; - margin: 0 0 0 1em; - padding: 0; - line-height: 1.75em; - } - - #wiki-rightbar #nav ul li:hover { - list-style-type: square; - } - - #wiki-rightbar #nav ul li a { - font-weight: bold; - text-shadow: 0 1px 0 #fff; - } - - /* @section footer */ - #wiki-footer { - clear: both; - margin: 2em 0 5em; - } - - .has-rightbar #wiki-footer { - width: 70%; - } - - #wiki-footer #footer-content { - background-color: #f7f7f7; - border: 1px solid #ddd; - font-size: 1.2em; - line-height: 1.5em; - margin-top: 1.5em; - padding: 1em; - - border-radius: 0.5em; - -moz-border-radius: 0.5em; - -webkit-border-radius: 0.5em; - } - - #wiki-footer #footer-content h3 { - font-size: 1.2em; - color: #333; - margin: 0; - padding: 0 0 0.2em; - text-shadow: 0 1px 0 #fff; - } - - #wiki-footer #footer-content p { - margin: 0.5em 0 0; - padding: 0; - } - - #wiki-footer #footer-content ul.links { - margin: 0.5em 0 0; - overflow: hidden; - padding: 0; - } - - #wiki-footer #footer-content ul.links li { - color: #999; - float: left; - list-style-position: inside; - list-style-type: square; - padding: 0; - margin-left: 0.75em; - } - - #wiki-footer #footer-content ul.links li a { - font-weight: bold; - text-shadow: 0 1px 0 #fff; - } - - #wiki-footer #footer-content ul.links li:first-child { - list-style-type: none; - margin: 0; - } - - .ff #wiki-footer #footer-content ul.links li:first-child { - margin: 0 -0.75em 0 0; - } - - /* @section page-footer */ - .page #footer { - border-top: 1px solid #ccc; - margin: 1em 0 7em; - } - - #footer p#last-edit { - font-size: 1.2em; - line-height: 1.6em; - color: #999; - margin: 0.9em 0; - } - - #footer p#last-edit span.username { - font-weight: bold; - } - - -/* @section history */ -.history h1 { - color: #999; - font-weight: normal; -} - - .history h1 strong { - color: #000; - font-weight: bold; - } - -#wiki-history { - margin-top: 3em; -} - - #wiki-history fieldset { - border: 0; - margin: 2em 0; - padding: 0; - } - - #wiki-history table, #wiki-history tbody { - border-collapse: collapse; - padding: 0; - margin: 0; - width: 100%; - } - - #wiki-history table tr { - padding: 0; - margin: 0; - } - - #wiki-history table tr { - background-color: #ebf2f6; - } - - #wiki-history table tr td { - border: 1px solid #c0dce9; - font-size: 1.2em; - line-height: 1.6em; - margin: 0; - padding: 0.3em 0.7em; - } - - #wiki-history table tr td.checkbox { - padding: 0.3em; - } - - #wiki-history table tr td.checkbox input { - cursor: pointer; - display: block; - padding-right: 0; - padding-top: 0.4em; - margin-right: -0.2em; - } - - #wiki-history table tr:nth-child(2n), - #wiki-history table tr.alt-row { - background-color: #f3f7fa; - } - - #wiki-history table tr.selected { - background-color: #ffffea !important; - z-index: 100; - } - - #wiki-history table tr td.commit-name { - border-right: none; - } - - #wiki-history table tr td.commit-name span.time-elapsed { - color: #999; - } - - #wiki-history table tr td.author { - width: 20%; - } - - #wiki-history table tr td.author a { - color: #000; - font-weight: bold; - } - - #wiki-history table tr td.author a span.username { - display: block; - padding-top: 3px; - } - - #wiki-history table tr td img { - background-color: #fff; - border: 1px solid #999; - display: block; - float: left; - height: 18px; - overflow: hidden; - margin: 0 0.5em 0 0; - width: 18px; - padding: 2px; - } - - #wiki-history table tr td.commit-name a { - font-size: 0.9em; - font-family: 'Monaco', 'Andale Mono', Consolas, 'Courier New', monospace; - padding: 0 0.2em; - } - - #wiki-history table tr td.revert-action { - border-left: 0; - text-align: right; - } - - #wiki-history table tr td.revert-action a { - font-weight: bold; - } - - #wiki-history table tr td.revert-action a span { - font-size: 0.9em; - font-family: 'Monaco', 'Andale Mono', Consolas, 'Courier New', monospace; - } - -.history #wiki-history ul.actions li, -.history #footer ul.actions li { - margin: 0 0.6em 0 0; -} - - -/* @section edit */ -.edit h1 { - color: #999; - font-weight: normal; -} - - .edit h1 strong { - color: #000; - font-weight: bold; - } - - - -/* @control minibutton */ -ul.actions { - display: block; - list-style-type: none; - overflow: hidden; - padding: 0; - } - - ul.actions li { - float: left; - font-size: 1.2em; - margin-left: 0.6em; - } - -.minibutton a { - background-color: #f7f7f7; - border: 1px solid #d4d4d4; - color: #333; - display: block; - font-weight: bold; - margin: 0; - padding: 0.4em 1em; - - text-shadow: 0 1px 0 #fff; - - filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f4f4f4', endColorstr='#ececec'); - background: -webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#ececec)); - background: -moz-linear-gradient(top, #f4f4f4, #ececec); - - border-radius: 3px; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; -} - -.minibutton a:hover { - background: #3072b3; - border-color: #518cc6 #518cc6 #2a65a0; - color: #fff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); - text-decoration: none; - - filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#599bdc', endColorstr='#3072b3'); - background: -webkit-gradient(linear, left top, left bottom, from(#599bdc), to(#3072b3)); - background: -moz-linear-gradient(top, #599bdc, #3072b3); -} \ No newline at end of file diff --git a/test/static/default/css/template.css b/test/static/default/css/template.css deleted file mode 100644 index 882877ff..00000000 --- a/test/static/default/css/template.css +++ /dev/null @@ -1,146 +0,0 @@ -/* - template.css - Wiki content formatting - Keeping this file separate so it can be easily swapped out if you - want to format your wiki content differently from the default. -*/ - -#template { - margin-bottom: 4em; /* Give it some breathing room */ -} - -.has-footer #template { - margin: 0; -} - -#template p { - font-size: 1.4em; - line-height: 1.6em; -} - - /* See http://webtypography.net/Rhythm_and_Proportion/ */ - #template p + p { - margin: -0.75em 0 0; - text-indent: 1em; - } - - /* Everybody loves type ornaments */ - #template p:last-child:after { - color: #999; - content: " ❈"; - font-size: 0.8em; - } - - #template blockquote p:last-child:after { - content: none; - } - -#template a:link { - color: #4183c4; - text-decoration: none; -} - -#template a:hover, #template a:visited { - text-decoration: underline; -} - -#template ul, #template ol { - margin: 1.0em 0 0 2.0em; - list-style-position: outside; - padding: 0; - -} - -#template p + ul, #template p + ol, -#template ul li > ul, #template ol li > ol { - margin-top: 0; -} - -#template ul li > ul, #template ol li > ol { - margin-left: 0; -} - - #template ul { - list-style-type: square; - } - - #template ol li > ol li { - font-size: 1.0em !important; - list-style-type: lower-roman; - list-style-position: inside; - } - - #template ol li > ol li > ol li { - list-style-type: lower-alpha; - } - - #template ol li > ol li > ol li > ol li { - list-style-type: lower-greek; - } - -#template ul li, #template ol li { - font-size: 1.4em; - line-height: 1.6em; - padding-top: 0.1em; /* Line up ordinals */ -} - -#template blockquote { - margin: 0 4.0em 0 2.0em; - padding: 0; -} - - #template blockquote p { - color: #888; - font-style: italic; - } - - -/* Headings */ -#template h1, #template h2, #template h3, -#template h4, #template h5, #template h6 { - margin: 0; - padding: 0.5em 0 0; -} - -#template h1 { - font-size: 2.6em; - font-weight: bold; -} - -#template h2 { - font-size: 2.2em; - font-weight: bold; -} - -#template h3 { - font-size: 2.0em; - font-weight: bold; -} - -#template h4 { - font-size: 1.8em; - font-weight: bold; -} - -#template h5 { - font-size: 1.6em; - font-weight: bold; - -} - -#template h6 { - font-size: 1.4em; - font-weight: bold; - margin-top: 1.0em; - text-transform: uppercase; /* all caps */ -} - - -/* Code-related */ -#template p code { - background-color: #f7f7f7; - border: 1px solid #ddd; - color: #222; /* This is a little heavy when #000 */ - font-family: Consolas, Monaco, "Courier New", monospace; - padding: 0.15em 0.3em; -} \ No newline at end of file diff --git a/test/static/default/index.html b/test/static/default/index.html deleted file mode 100644 index 58d42871..00000000 --- a/test/static/default/index.html +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - The LOTR Wiki - - - -
    -
    -
    -
    -
    -

    The LOTR Wiki

    -

    This wiki is awesome. You can learn about Bilbo Baggins or some evil stuff.

    -
    -
    -
    - -
    - -
    - - - - From 0472a95ac020b2a87e48d75882d15951cd3824e1 Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 6 Dec 2010 17:58:40 -0800 Subject: [PATCH 165/393] fix some 'create' view errors if @page is nil --- lib/gollum/frontend/views/create.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/gollum/frontend/views/create.rb b/lib/gollum/frontend/views/create.rb index 2b7dafbc..93e88987 100755 --- a/lib/gollum/frontend/views/create.rb +++ b/lib/gollum/frontend/views/create.rb @@ -18,17 +18,17 @@ module Precious end def format - @format = (@page.format || false) if @format.nil? + @format = (@page.format || false) if @format.nil? && @page @format.to_s.downcase end - - def has_footer - @footer = (@page.footer || false) if @footer.nil? + + def has_footer + @footer = (@page.footer || false) if @footer.nil? && @page !!@footer end - + def has_sidebar - @sidebar = (@page.sidebar || false) if @sidebar.nil? + @sidebar = (@page.sidebar || false) if @sidebar.nil? && @page !!@sidebar end From 2de9f5f3967f5f6c3d60e6793b0168cd6176f110 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 6 Dec 2010 18:03:26 -0800 Subject: [PATCH 166/393] Fixing backreference bug in WebKit --- .../frontend/public/javascript/gollum-editor/gollum.editor.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js index 65f6bbbd..b07a25df 100755 --- a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js @@ -484,6 +484,8 @@ debug('searching for ' + searchStr + ' to replace with ' + matches[i]); rt = rt.replace( searchStr, matches[i] ); } + // remove any excess backreferences from the replace string + rt = rt.replace( /\$[\d]/g, '' ); repText = rt; } else if ( repText == '' ) { debug('Search string is empty'); From 5e0919efe162dd686cb1c8e9103ca17315e239c6 Mon Sep 17 00:00:00 2001 From: rick Date: Tue, 7 Dec 2010 13:26:18 -0800 Subject: [PATCH 167/393] remove unused method that breaks due to dependence on unreleased grit. whew --- lib/gollum/git_access.rb | 49 ---------------------------------------- test/test_git_access.rb | 8 ------- 2 files changed, 57 deletions(-) diff --git a/lib/gollum/git_access.rb b/lib/gollum/git_access.rb index 9306c893..150044d3 100644 --- a/lib/gollum/git_access.rb +++ b/lib/gollum/git_access.rb @@ -72,23 +72,6 @@ module Gollum end end - # Public: Gets a list of Git commits. - # - # *shas - An Array of String SHAs. - # - # Returns an Array of Grit::Commit instances. - def commits(*shas) - shas.flatten! - cached_commits = multi_get(:commit, shas) - missing_shas = shas.select do |sha| - !cached_commits.key?(sha) - end - - multi_commit!(missing_shas, cached_commits) if !missing_shas.empty? - - shas.map { |sha| cached_commits[sha] } - end - # Public: Clears all of the cached data that this GitAccess is tracking. # # Returns nothing. @@ -136,21 +119,6 @@ module Gollum # attr_reader :commit_map - # Raw method for fetching a list of Git commits. - # - # shas - An Array of String SHAs. - # hash - Optional Hash to store the found commits, indexed by their SHA. - # - # Returns the same Hash instance. - def multi_commit!(shas, hash = {}) - shas.each_slice(500) do |slice| - @repo.batch(slice).each do |commit| - hash[commit.id] = commit - end - end - hash - end - # Checks to see if the given String is a 40 character hex SHA. # # str - Possible String SHA. @@ -230,23 +198,6 @@ module Gollum cache[key] = value || :_nil end - # Gets multiple values from the cache in a single call. - # - # name - The cache prefix used in building the full cache key. - # keys - Array of cache key names to fetch. - # - # Returns a Hash of the objects that were found in the cache, indexed by - # the cache key. - def multi_get(name, keys) - value = instance_variable_get("@#{name}_map") - keys.inject({}) do |memo, key| - if v = value[key] - memo[key] = v - end - memo - end - end - # Parses a line of output from the `ls-tree` command. # # line - A String line of output: diff --git a/test/test_git_access.rb b/test/test_git_access.rb index ef13fbeb..914e7d96 100644 --- a/test/test_git_access.rb +++ b/test/test_git_access.rb @@ -13,14 +13,6 @@ context "GitAccess" do assert_equal actual.message, @access.commit_map[actual.id].message end - test "#commits uses commit_map" do - actual = @access.repo.commits.first - @access.commit_map['abc'] = 1 - commits = @access.commits('abc', actual.id) - assert_equal 1, commits[0] - assert_equal actual.message, commits[1].message - end - test "#tree_map_for caches ref and tree" do assert @access.ref_map.empty? assert @access.tree_map.empty? From 2c932cee5deeb5d54ce6f0f176212ac9aeda2c99 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Tue, 7 Dec 2010 14:04:06 -0800 Subject: [PATCH 168/393] Get dialogs working in IE --- lib/gollum/frontend/public/css/dialog.css | 14 +++--- .../public/javascript/gollum.dialog.js | 48 ++++++++++++------- 2 files changed, 36 insertions(+), 26 deletions(-) mode change 100644 => 100755 lib/gollum/frontend/public/javascript/gollum.dialog.js diff --git a/lib/gollum/frontend/public/css/dialog.css b/lib/gollum/frontend/public/css/dialog.css index a383f4c3..99a3ecb9 100755 --- a/lib/gollum/frontend/public/css/dialog.css +++ b/lib/gollum/frontend/public/css/dialog.css @@ -1,12 +1,11 @@ /* @control dialog */ #gollum-dialog-dialog { - display: none; - top: 50%; - left: 50%; + display: block; overflow: visible; position: absolute; - z-index: 1000; + top: 50%; + left: 50%; } #gollum-dialog-dialog.active { @@ -14,14 +13,12 @@ } #gollum-dialog-dialog-inner { - background: transparent; margin: 0 0 0 -225px; position: relative; width: 450px; - z-index: 1000; border: 7px solid #999; - border: 7px solid rgba(0, 0, 0, 0.3); + border: 7px solid rgba(0, 0, 0, 0.3); border-radius: 5px; -moz-border-radius: 5px; -webkit-border-radius: 5px; @@ -32,7 +29,6 @@ overflow: hidden; padding: 1em; - filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f7f7f7', endColorstr='#ffffff'); background: -webkit-gradient(linear, left top, left bottom, from(#f7f7f7), to(#ffffff)); background: -moz-linear-gradient(top, #f7f7f7, #ffffff); } @@ -53,8 +49,10 @@ } #gollum-dialog-dialog-body fieldset { + display: block; border: 0; margin: 0; + overflow: hidden; padding: 0; } diff --git a/lib/gollum/frontend/public/javascript/gollum.dialog.js b/lib/gollum/frontend/public/javascript/gollum.dialog.js old mode 100644 new mode 100755 index ef20a195..99cf0890 --- a/lib/gollum/frontend/public/javascript/gollum.dialog.js +++ b/lib/gollum/frontend/public/javascript/gollum.dialog.js @@ -81,6 +81,7 @@ 'class="minibutton">Cancel' + 'OK' + + '
    ' + '
    ' + '
    ' + '
    '; @@ -110,12 +111,17 @@ }, hide: function() { - $('#gollum-dialog-dialog').animate({ opacity: 0 }, { - duration: 200, - complete: function() { - $('#gollum-dialog-dialog').removeClass('active'); - } - }); + if ( $.browser.msie ) { + $('#gollum-dialog-dialog').hide().removeClass('active'); + $('select').css('visibility', 'visible'); + } else { + $('#gollum-dialog-dialog').animate({ opacity: 0 }, { + duration: 200, + complete: function() { + $('#gollum-dialog-dialog').removeClass('active'); + } + }); + } }, init: function( argObject ) { @@ -159,16 +165,23 @@ debug('Dialog: No markup to show. Please use init first.'); } else { debug('Showing dialog'); - $('#gollum-dialog-dialog').animate({ opacity: 0 }, { - duration: 1, - complete: function() { - $('#gollum-dialog-dialog').addClass('active'); - Dialog.position(); // position this thing - $('#gollum-dialog-dialog').animate({ opacity: 1 }, { - duration: 500 - }); - } - }); + if ( $.browser.msie ) { + $('#gollum-dialog.dialog').addClass('active'); + Dialog.position(); + $('select').css('visibility', 'hidden'); + } else { + $('#gollum-dialog.dialog').css('display', 'none'); + $('#gollum-dialog-dialog').animate({ opacity: 0 }, { + duration: 0, + complete: function() { + $('#gollum-dialog-dialog').css('display', 'block'); + Dialog.position(); // position this thing + $('#gollum-dialog-dialog').animate({ opacity: 1 }, { + duration: 500 + }); + } + }); + } } }, @@ -183,8 +196,7 @@ var debug = function(m) { if ( Dialog.debugOn - && typeof console != 'undefined' - && typeof console.log == 'function' ) { + && typeof console != 'undefined' ) { console.log( m ); } }; From a657b12a881358efb5513aa754eafc5601617ab2 Mon Sep 17 00:00:00 2001 From: rick Date: Tue, 7 Dec 2010 15:29:25 -0800 Subject: [PATCH 169/393] revert last commit due to parsing issues --- HISTORY.md | 1 - lib/gollum/markup.rb | 37 ------------------------------------- test/test_markup.rb | 10 ---------- 3 files changed, 48 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index fb585a03..6938de58 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -9,7 +9,6 @@ rendering for added customization. * Bug Fixes * Use `@wiki.page_class` in Gollum::Markup where appropriate (#63). - * Don't modify content inside
     tags during rendering.
     
     # 1.1.0 / 2010-10-28
     
    diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb
    index 00fb1d91..6b8a4582 100644
    --- a/lib/gollum/markup.rb
    +++ b/lib/gollum/markup.rb
    @@ -33,7 +33,6 @@ module Gollum
             @wiki.sanitizer
     
           data = extract_tex(@data.dup)
    -      data = extract_pre(data)
           data = extract_code(data)
           data = extract_tags(data)
           begin
    @@ -46,7 +45,6 @@ module Gollum
           end
           data = process_tags(data)
           data = process_code(data)
    -      data = process_pre(data)
           if sanitize || block_given?
             doc  = Nokogiri::HTML::DocumentFragment.parse(data)
             doc  = sanitize.clean_node!(doc) if sanitize
    @@ -413,40 +411,5 @@ module Gollum
         # Returns nothing.
         def update_cache(type, id, data)
         end
    -
    -    #########################################################################
    -    #
    -    # Code
    -    #
    -    #########################################################################
    -
    -    # Extract all code blocks into the codemap and replace with placeholders.
    -    #
    -    # data - The raw String data.
    -    #
    -    # Returns the placeholder'd String data.
    -    def extract_pre(data)
    -      data.gsub! /\r/, '' # \r gets encoded to 
    -      doc = Nokogiri::HTML::DocumentFragment.parse(data)
    -      doc.search('pre').each do |element|
    -        id = Digest::SHA1.hexdigest(element.inner_html)
    -        @premap[id] = element.inner_html
    -        element.inner_html = id
    -      end
    -      doc_to_html(doc)
    -    end
    -
    -    # Process all code from the codemap and replace the placeholders with the
    -    # final HTML.
    -    #
    -    # data - The String data (with placeholders).
    -    #
    -    # Returns the marked up String data.
    -    def process_pre(data)
    -      @premap.each do |id, content|
    -        data.gsub!(id, content)
    -      end
    -      data
    -    end
       end
     end
    diff --git a/test/test_markup.rb b/test/test_markup.rb
    index 33739cf7..892685af 100644
    --- a/test/test_markup.rb
    +++ b/test/test_markup.rb
    @@ -50,16 +50,6 @@ context "Markup" do
         assert yielded
       end
     
    -  test "does not modify content in pre tags" do
    -    @wiki.write_page("Pre", :markdown, 
    -      "abc [[a]]\n\n
     [[b]] 
    \n\n``` ruby\n[[c]]\n```\n[[d]]", - commit_details) - page = @wiki.page("Pre") - html = page.formatted_data - assert html['[[b]]'] - assert html[%([[c)] - end - ######################################################################### # # Links From 5bb7417495f48aee61e63fbb738266561b5e6f97 Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 8 Dec 2010 08:48:38 -0800 Subject: [PATCH 170/393] unnecessary test files --- test/examples/lotr/Bilbo-Baggins.md | 13 -------- test/examples/lotr/Data.csv | 3 -- test/examples/lotr/Home.textile | 3 -- test/examples/lotr/Mordor/Eye-Of-Sauron.md | 37 --------------------- test/examples/lotr/Mordor/_Footer.md | 1 - test/examples/lotr/Mordor/_Sidebar.md | 1 - test/examples/lotr/Mordor/eye.jpg | Bin 9714 -> 0 bytes test/examples/lotr/Mordor/todo.txt | 1 - test/examples/lotr/My-Precious.md | 1 - test/examples/lotr/_Footer.md | 1 - test/examples/lotr/_Sidebar.md | 1 - 11 files changed, 62 deletions(-) delete mode 100644 test/examples/lotr/Bilbo-Baggins.md delete mode 100644 test/examples/lotr/Data.csv delete mode 100644 test/examples/lotr/Home.textile delete mode 100644 test/examples/lotr/Mordor/Eye-Of-Sauron.md delete mode 100644 test/examples/lotr/Mordor/_Footer.md delete mode 100644 test/examples/lotr/Mordor/_Sidebar.md delete mode 100644 test/examples/lotr/Mordor/eye.jpg delete mode 100644 test/examples/lotr/Mordor/todo.txt delete mode 100644 test/examples/lotr/My-Precious.md delete mode 100644 test/examples/lotr/_Footer.md delete mode 100644 test/examples/lotr/_Sidebar.md diff --git a/test/examples/lotr/Bilbo-Baggins.md b/test/examples/lotr/Bilbo-Baggins.md deleted file mode 100644 index 2cb9156a..00000000 --- a/test/examples/lotr/Bilbo-Baggins.md +++ /dev/null @@ -1,13 +0,0 @@ -# Bilbo Baggins - -Bilbo Baggins is the protagonist of The [[Hobbit]] and also makes a few -appearances in The Lord of the Rings, two of the most well-known of [[J. R. R. -Tolkien]]'s fantasy writings. The story of The Hobbit featuring Bilbo is also -retold from a different perspective in the Chapter The Quest of Erebor in -Unfinished Tales. - -In Tolkien's narrative conceit, in which all the writings of Middle-earth are -'really' translations from the fictitious volume of The Red Book of Westmarch, -Bilbo is the author of The Hobbit and translator of The Silmarillion. - -From [http://en.wikipedia.org/wiki/Bilbo_Baggins](http://en.wikipedia.org/wiki/Bilbo_Baggins). diff --git a/test/examples/lotr/Data.csv b/test/examples/lotr/Data.csv deleted file mode 100644 index c3b43e9f..00000000 --- a/test/examples/lotr/Data.csv +++ /dev/null @@ -1,3 +0,0 @@ -FirstName,LastName -Bilbo,Baggins -Frodo,Baggins diff --git a/test/examples/lotr/Home.textile b/test/examples/lotr/Home.textile deleted file mode 100644 index fae7ef53..00000000 --- a/test/examples/lotr/Home.textile +++ /dev/null @@ -1,3 +0,0 @@ -h1. The LOTR Wiki - -This wiki is awesome. You can learn about [[Bilbo Baggins]] or some [[evil|Eye Of Sauron]] stuff. diff --git a/test/examples/lotr/Mordor/Eye-Of-Sauron.md b/test/examples/lotr/Mordor/Eye-Of-Sauron.md deleted file mode 100644 index 936b83ee..00000000 --- a/test/examples/lotr/Mordor/Eye-Of-Sauron.md +++ /dev/null @@ -1,37 +0,0 @@ -# Eye **Of** Sauron - -Here are some pictures of the Eye of Sauron! - -Just the photo. - -[[/Mordor/eye.jpg]] - -With alt. - -[[/Mordor/eye.jpg|alt=Eye of Sauron]] - -With frame and caption. - -[[/Mordor/eye.jpg|frame|alt=Eye of Sauron]] - -Align left. - -[[/Mordor/eye.jpg|align=left]] - -Alight center. - -[[/Mordor/eye.jpg|align=center]] - -Alight right. - -[[/Mordor/eye.jpg|align=right]] - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas interdum velit eu justo rutrum vitae semper urna porttitor. Sed viverra bibendum tincidunt. Curabitur vel mi sed nisl vestibulum lobortis eu ac nisl. Morbi fringilla adipiscing felis. Mauris luctus interdum accumsan. Integer leo mauris, dapibus a sollicitudin non, varius non erat. Donec eu dictum orci. Morbi viverra eleifend felis, et adipiscing neque consequat a. Vestibulum accumsan ligula suscipit mi rhoncus ac gravida lectus tincidunt. Donec interdum, [[/Mordor/eye.jpg|float|frame|alt=FIRE FIRE FIRE]] lorem sed interdum molestie, est ipsum pharetra est, sit amet eleifend purus eros at ligula. Aliquam erat volutpat. Sed dignissim interdum ipsum, et pulvinar lectus faucibus et. Ut at lacus risus, non lobortis erat. Proin malesuada sagittis mauris, in posuere turpis tincidunt eu. Nunc accumsan, ligula ut rutrum aliquet, neque metus suscipit ligula, in aliquam augue velit vel orci. Aliquam diam lectus, posuere id faucibus sed, aliquam vel erat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas interdum velit eu justo rutrum vitae semper urna porttitor. Sed viverra bibendum tincidunt. Curabitur vel mi sed nisl vestibulum lobortis eu ac nisl. Morbi fringilla adipiscing felis. Mauris luctus interdum accumsan. Integer leo mauris, dapibus a sollicitudin non, varius non erat. Donec eu dictum orci. [[/Mordor/eye.jpg|float|align=right]] Morbi viverra eleifend felis, et adipiscing neque consequat a. Vestibulum accumsan ligula suscipit mi rhoncus ac gravida lectus tincidunt. Donec interdum, lorem sed interdum molestie, est ipsum pharetra est, sit amet eleifend purus eros at ligula. Aliquam erat volutpat. Sed dignissim interdum ipsum, et pulvinar lectus faucibus et. Ut at lacus risus, non lobortis erat. Proin malesuada sagittis mauris, in posuere turpis tincidunt eu. Nunc accumsan, ligula ut rutrum aliquet, neque metus suscipit ligula, in aliquam augue velit vel orci. Aliquam diam lectus, posuere id faucibus sed, aliquam vel erat. - -Smaller width. - -[[/Mordor/eye.jpg|width=100px]] - -Smaller height. - -[[/Mordor/eye.jpg|height=100px]] diff --git a/test/examples/lotr/Mordor/_Footer.md b/test/examples/lotr/Mordor/_Footer.md deleted file mode 100644 index 9697dc65..00000000 --- a/test/examples/lotr/Mordor/_Footer.md +++ /dev/null @@ -1 +0,0 @@ -Ones does not simply **walk** into Mordor! diff --git a/test/examples/lotr/Mordor/_Sidebar.md b/test/examples/lotr/Mordor/_Sidebar.md deleted file mode 100644 index 9697dc65..00000000 --- a/test/examples/lotr/Mordor/_Sidebar.md +++ /dev/null @@ -1 +0,0 @@ -Ones does not simply **walk** into Mordor! diff --git a/test/examples/lotr/Mordor/eye.jpg b/test/examples/lotr/Mordor/eye.jpg deleted file mode 100644 index 714323c104239440a5c66ab12a67ed07a83c404f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9714 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 RYkk0m?%5YWY^a}S{|lH_;yC~S diff --git a/test/examples/lotr/Mordor/todo.txt b/test/examples/lotr/Mordor/todo.txt deleted file mode 100644 index 0ade1e29..00000000 --- a/test/examples/lotr/Mordor/todo.txt +++ /dev/null @@ -1 +0,0 @@ -[ ] Write section on Ents diff --git a/test/examples/lotr/My-Precious.md b/test/examples/lotr/My-Precious.md deleted file mode 100644 index aab61fe8..00000000 --- a/test/examples/lotr/My-Precious.md +++ /dev/null @@ -1 +0,0 @@ -One ring to rule them all! diff --git a/test/examples/lotr/_Footer.md b/test/examples/lotr/_Footer.md deleted file mode 100644 index ecda3205..00000000 --- a/test/examples/lotr/_Footer.md +++ /dev/null @@ -1 +0,0 @@ -Lord of the Rings wiki \ No newline at end of file diff --git a/test/examples/lotr/_Sidebar.md b/test/examples/lotr/_Sidebar.md deleted file mode 100644 index ecda3205..00000000 --- a/test/examples/lotr/_Sidebar.md +++ /dev/null @@ -1 +0,0 @@ -Lord of the Rings wiki \ No newline at end of file From e7d37eaf388a531cd286f9eaaba84bb4994d52d5 Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 8 Dec 2010 13:24:15 -0800 Subject: [PATCH 171/393] refactor common index-writing logic in wiki update methods --- lib/gollum/wiki.rb | 64 ++++++++++++++++++++++------------------------ 1 file changed, 30 insertions(+), 34 deletions(-) diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 9d9b7b10..888cf20a 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -183,18 +183,11 @@ module Gollum # Returns the String SHA1 of the newly written version. def write_page(name, format, data, commit = {}) commit = normalize_commit(commit) - index = self.repo.index - - if pcommit = @repo.commit('master') - index.read_tree(pcommit.tree.id) + index = nil + sha1 = commit_index(commit) do |index| + add_to_index(index, '', name, format, data) end - add_to_index(index, '', name, format, data) - - parents = pcommit ? [pcommit] : [] - actor = Grit::Actor.new(commit[:name], commit[:email]) - sha1 = index.commit(commit[:message], parents, actor) - @access.refresh update_working_dir(index, '', name, format) @@ -218,26 +211,20 @@ module Gollum # Returns the String SHA1 of the newly written version. def update_page(page, name, format, data, commit = {}) commit = normalize_commit(commit) - pcommit = @repo.commit('master') name ||= page.name format ||= page.format - index = self.repo.index - - dir = ::File.dirname(page.path) - dir = '' if dir == '.' - - index.read_tree(pcommit.tree.id) - - if page.name == name && page.format == format - index.add(page.path, normalize(data)) - else - index.delete(page.path) - add_to_index(index, dir, name, format, data, :allow_same_ext) + dir = ::File.dirname(page.path) + dir = '' if dir == '.' + index = nil + sha1 = commit_index(commit) do |index| + if page.name == name && page.format == format + index.add(page.path, normalize(data)) + else + index.delete(page.path) + add_to_index(index, dir, name, format, data, :allow_same_ext) + end end - actor = Grit::Actor.new(commit[:name], commit[:email]) - sha1 = index.commit(commit[:message], [pcommit], actor) - @access.refresh update_working_dir(index, dir, page.name, page.format) update_working_dir(index, dir, name, format) @@ -255,18 +242,14 @@ module Gollum # # Returns the String SHA1 of the newly written version. def delete_page(page, commit) - pcommit = @repo.commit('master') - - index = self.repo.index - index.read_tree(pcommit.tree.id) - index.delete(page.path) + index = nil + sha1 = commit_index(commit) do |index| + index.delete(page.path) + end dir = ::File.dirname(page.path) dir = '' if dir == '.' - actor = Grit::Actor.new(commit[:name], commit[:email]) - sha1 = index.commit(commit[:message], [pcommit], actor) - @access.refresh update_working_dir(index, dir, page.name, page.format) @@ -530,6 +513,19 @@ module Gollum index.add(fullpath, normalize(data)) end + def commit_index(options = {}) + options[:parent] ||= [@repo.commit('master')] + options[:parent].compact! + index = self.repo.index + if parent = options[:parent][0] + index.read_tree(parent.tree.id) + end + yield index if block_given? + + actor = Grit::Actor.new(options[:name], options[:email]) + index.commit(options[:message], options[:parent], actor) + end + # Ensures a commit hash has all the required fields for a commit. # # commit - The commit Hash details: From d4da0f86702202b30005811b5623f02ed19bb2fa Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 8 Dec 2010 13:28:20 -0800 Subject: [PATCH 172/393] explicitly set the local var for 1.9 --- lib/gollum/wiki.rb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 888cf20a..205aed24 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -184,7 +184,8 @@ module Gollum def write_page(name, format, data, commit = {}) commit = normalize_commit(commit) index = nil - sha1 = commit_index(commit) do |index| + sha1 = commit_index(commit) do |idx| + index = idx add_to_index(index, '', name, format, data) end @@ -216,7 +217,8 @@ module Gollum dir = ::File.dirname(page.path) dir = '' if dir == '.' index = nil - sha1 = commit_index(commit) do |index| + sha1 = commit_index(commit) do |idx| + index = idx if page.name == name && page.format == format index.add(page.path, normalize(data)) else @@ -243,7 +245,8 @@ module Gollum # Returns the String SHA1 of the newly written version. def delete_page(page, commit) index = nil - sha1 = commit_index(commit) do |index| + sha1 = commit_index(commit) |idx| + index = idx index.delete(page.path) end From 54eca090ee545bf88468ef68c44b8e7b97496bb8 Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 8 Dec 2010 13:35:16 -0800 Subject: [PATCH 173/393] do or do not --- lib/gollum/wiki.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 205aed24..18fb0c45 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -245,7 +245,7 @@ module Gollum # Returns the String SHA1 of the newly written version. def delete_page(page, commit) index = nil - sha1 = commit_index(commit) |idx| + sha1 = commit_index(commit) do |idx| index = idx index.delete(page.path) end From 25a56725f9a5331b80b832514ad7fb1325913e55 Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 8 Dec 2010 14:57:29 -0800 Subject: [PATCH 174/393] add ability to revert wiki pages --- lib/gollum/wiki.rb | 45 ++++- test/examples/revert.git/HEAD | 1 + test/examples/revert.git/config | 12 ++ test/examples/revert.git/description | 1 + .../revert.git/hooks/applypatch-msg.sample | 15 ++ .../revert.git/hooks/commit-msg.sample | 24 +++ .../revert.git/hooks/post-commit.sample | 8 + .../revert.git/hooks/post-receive.sample | 15 ++ .../revert.git/hooks/post-update.sample | 8 + .../revert.git/hooks/pre-applypatch.sample | 14 ++ .../revert.git/hooks/pre-commit.sample | 46 +++++ .../revert.git/hooks/pre-rebase.sample | 169 ++++++++++++++++++ .../hooks/prepare-commit-msg.sample | 36 ++++ test/examples/revert.git/hooks/update.sample | 128 +++++++++++++ test/examples/revert.git/index | Bin 0 -> 176 bytes test/examples/revert.git/info/exclude | 6 + test/examples/revert.git/info/refs | 3 + test/examples/revert.git/logs/HEAD | 1 + .../revert.git/logs/refs/heads/master | 1 + .../20/2ced67cea93c7b6bd2928aa1daef8d1d55a20d | Bin 0 -> 146 bytes test/examples/revert.git/objects/info/packs | 2 + ...61f8437234f74d0bacb9e0eebe52d207f5770d.idx | Bin 0 -> 1408 bytes ...1f8437234f74d0bacb9e0eebe52d207f5770d.pack | Bin 0 -> 948 bytes test/examples/revert.git/packed-refs | 3 + .../revert.git/refs/remotes/origin/HEAD | 1 + test/helper.rb | 10 ++ test/test_page.rb | 22 +++ 27 files changed, 568 insertions(+), 3 deletions(-) create mode 100644 test/examples/revert.git/HEAD create mode 100644 test/examples/revert.git/config create mode 100644 test/examples/revert.git/description create mode 100755 test/examples/revert.git/hooks/applypatch-msg.sample create mode 100755 test/examples/revert.git/hooks/commit-msg.sample create mode 100755 test/examples/revert.git/hooks/post-commit.sample create mode 100755 test/examples/revert.git/hooks/post-receive.sample create mode 100755 test/examples/revert.git/hooks/post-update.sample create mode 100755 test/examples/revert.git/hooks/pre-applypatch.sample create mode 100755 test/examples/revert.git/hooks/pre-commit.sample create mode 100755 test/examples/revert.git/hooks/pre-rebase.sample create mode 100755 test/examples/revert.git/hooks/prepare-commit-msg.sample create mode 100755 test/examples/revert.git/hooks/update.sample create mode 100644 test/examples/revert.git/index create mode 100644 test/examples/revert.git/info/exclude create mode 100644 test/examples/revert.git/info/refs create mode 100644 test/examples/revert.git/logs/HEAD create mode 100644 test/examples/revert.git/logs/refs/heads/master create mode 100644 test/examples/revert.git/objects/20/2ced67cea93c7b6bd2928aa1daef8d1d55a20d create mode 100644 test/examples/revert.git/objects/info/packs create mode 100644 test/examples/revert.git/objects/pack/pack-a561f8437234f74d0bacb9e0eebe52d207f5770d.idx create mode 100644 test/examples/revert.git/objects/pack/pack-a561f8437234f74d0bacb9e0eebe52d207f5770d.pack create mode 100644 test/examples/revert.git/packed-refs create mode 100644 test/examples/revert.git/refs/remotes/origin/HEAD diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 18fb0c45..6aa227ea 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -182,7 +182,6 @@ module Gollum # # Returns the String SHA1 of the newly written version. def write_page(name, format, data, commit = {}) - commit = normalize_commit(commit) index = nil sha1 = commit_index(commit) do |idx| index = idx @@ -211,7 +210,6 @@ module Gollum # # Returns the String SHA1 of the newly written version. def update_page(page, name, format, data, commit = {}) - commit = normalize_commit(commit) name ||= page.name format ||= page.format dir = ::File.dirname(page.path) @@ -312,6 +310,32 @@ module Gollum @repo.log('master', nil, log_pagination_options(options)) end + def revert_page(page, sha1, sha2 = nil, commit = {}) + if sha2.is_a?(Hash) + commit = sha2 + sha2 = nil + end + + pcommit = @repo.commit('master') + commit[:parent] = [pcommit] + commit[:tree] = write_to_real_index(pcommit.sha) do + options = {:reverse => true, :cached => true} + @repo.git.native(:apply, options) do |stdin| + stdin << full_diff_for(page, sha1, sha2) + stdin.close + end + end + + index = nil + sha1 = commit_index(commit) { |i| index = i } + dir = ::File.dirname(page.path) + dir = '' if dir == '.' + + @access.refresh + update_working_dir(index, dir, page.name, page.format) + sha1 + end + # Public: Refreshes just the cached Git reference data. This should # be called after every Gollum update. # @@ -517,10 +541,13 @@ module Gollum end def commit_index(options = {}) + normalize_commit(options) options[:parent] ||= [@repo.commit('master')] options[:parent].compact! index = self.repo.index - if parent = options[:parent][0] + if tree = options[:tree] + index.read_tree(tree) + elsif parent = options[:parent][0] index.read_tree(parent.tree.id) end yield index if block_given? @@ -529,6 +556,18 @@ module Gollum index.commit(options[:message], options[:parent], actor) end + def write_to_real_index(head_sha) + @repo.git.native('read-tree', {}, head_sha) + if yield + @repo.git.native('write-tree') + end + end + + def full_diff_for(page, sha1, sha2 = nil) + sha1, sha2 = "#{sha1}^", sha1 if sha2.nil? + repo.git.native(:diff, {}, sha1, sha2, '--', page.path) + end + # Ensures a commit hash has all the required fields for a commit. # # commit - The commit Hash details: diff --git a/test/examples/revert.git/HEAD b/test/examples/revert.git/HEAD new file mode 100644 index 00000000..cb089cd8 --- /dev/null +++ b/test/examples/revert.git/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/test/examples/revert.git/config b/test/examples/revert.git/config new file mode 100644 index 00000000..75f5c467 --- /dev/null +++ b/test/examples/revert.git/config @@ -0,0 +1,12 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true + ignorecase = true +[remote "origin"] + fetch = +refs/heads/*:refs/remotes/origin/* + url = /Users/rick/p/gollum/test/examples/revert.git +[branch "master"] + remote = origin + merge = refs/heads/master diff --git a/test/examples/revert.git/description b/test/examples/revert.git/description new file mode 100644 index 00000000..498b267a --- /dev/null +++ b/test/examples/revert.git/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/test/examples/revert.git/hooks/applypatch-msg.sample b/test/examples/revert.git/hooks/applypatch-msg.sample new file mode 100755 index 00000000..8b2a2fe8 --- /dev/null +++ b/test/examples/revert.git/hooks/applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +test -x "$GIT_DIR/hooks/commit-msg" && + exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"} +: diff --git a/test/examples/revert.git/hooks/commit-msg.sample b/test/examples/revert.git/hooks/commit-msg.sample new file mode 100755 index 00000000..b58d1184 --- /dev/null +++ b/test/examples/revert.git/hooks/commit-msg.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines. + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + exit 1 +} diff --git a/test/examples/revert.git/hooks/post-commit.sample b/test/examples/revert.git/hooks/post-commit.sample new file mode 100755 index 00000000..22668216 --- /dev/null +++ b/test/examples/revert.git/hooks/post-commit.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script that is called after a successful +# commit is made. +# +# To enable this hook, rename this file to "post-commit". + +: Nothing diff --git a/test/examples/revert.git/hooks/post-receive.sample b/test/examples/revert.git/hooks/post-receive.sample new file mode 100755 index 00000000..7a83e17a --- /dev/null +++ b/test/examples/revert.git/hooks/post-receive.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script for the "post-receive" event. +# +# The "post-receive" script is run after receive-pack has accepted a pack +# and the repository has been updated. It is passed arguments in through +# stdin in the form +# +# For example: +# aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master +# +# see contrib/hooks/ for a sample, or uncomment the next line and +# rename the file to "post-receive". + +#. /usr/share/doc/git-core/contrib/hooks/post-receive-email diff --git a/test/examples/revert.git/hooks/post-update.sample b/test/examples/revert.git/hooks/post-update.sample new file mode 100755 index 00000000..ec17ec19 --- /dev/null +++ b/test/examples/revert.git/hooks/post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/test/examples/revert.git/hooks/pre-applypatch.sample b/test/examples/revert.git/hooks/pre-applypatch.sample new file mode 100755 index 00000000..b1f187c2 --- /dev/null +++ b/test/examples/revert.git/hooks/pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"} +: diff --git a/test/examples/revert.git/hooks/pre-commit.sample b/test/examples/revert.git/hooks/pre-commit.sample new file mode 100755 index 00000000..b187c4bb --- /dev/null +++ b/test/examples/revert.git/hooks/pre-commit.sample @@ -0,0 +1,46 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=4b825dc642cb6eb9a060e54bf8d69288fbee4904 +fi + +# If you want to allow non-ascii filenames set this variable to true. +allownonascii=$(git config hooks.allownonascii) + +# Cross platform projects tend to avoid non-ascii filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test "$(git diff --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0')" +then + echo "Error: Attempt to add a non-ascii file name." + echo + echo "This can cause problems if you want to work" + echo "with people on other platforms." + echo + echo "To be portable it is advisable to rename the file ..." + echo + echo "If you know what you are doing you can disable this" + echo "check using:" + echo + echo " git config hooks.allownonascii true" + echo + exit 1 +fi + +exec git diff-index --check --cached $against -- diff --git a/test/examples/revert.git/hooks/pre-rebase.sample b/test/examples/revert.git/hooks/pre-rebase.sample new file mode 100755 index 00000000..9773ed4c --- /dev/null +++ b/test/examples/revert.git/hooks/pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up-to-date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +exit 0 + +################################################################ + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". diff --git a/test/examples/revert.git/hooks/prepare-commit-msg.sample b/test/examples/revert.git/hooks/prepare-commit-msg.sample new file mode 100755 index 00000000..f093a02e --- /dev/null +++ b/test/examples/revert.git/hooks/prepare-commit-msg.sample @@ -0,0 +1,36 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first comments out the +# "Conflicts:" part of a merge commit. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +case "$2,$3" in + merge,) + /usr/bin/perl -i.bak -ne 's/^/# /, s/^# #/#/ if /^Conflicts/ .. /#/; print' "$1" ;; + +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$1" ;; + + *) ;; +esac + +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" diff --git a/test/examples/revert.git/hooks/update.sample b/test/examples/revert.git/hooks/update.sample new file mode 100755 index 00000000..71ab04ed --- /dev/null +++ b/test/examples/revert.git/hooks/update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to blocks unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "Usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --bool hooks.allowunannotated) +allowdeletebranch=$(git config --bool hooks.allowdeletebranch) +denycreatebranch=$(git config --bool hooks.denycreatebranch) +allowdeletetag=$(git config --bool hooks.allowdeletetag) +allowmodifytag=$(git config --bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero="0000000000000000000000000000000000000000" +if [ "$newrev" = "$zero" ]; then + newrev_type=delete +else + newrev_type=$(git cat-file -t $newrev) +fi + +case "$refname","$newrev_type" in + refs/tags/*,commit) + # un-annotated tag + short_refname=${refname##refs/tags/} + if [ "$allowunannotated" != "true" ]; then + echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff --git a/test/examples/revert.git/index b/test/examples/revert.git/index new file mode 100644 index 0000000000000000000000000000000000000000..07167762cc8bf12127cfc4818178fe0e2a7ba3ef GIT binary patch literal 176 zcmZ?q402{*U|<4aUk0wrK$-zY^8v*eg_qrBU}#*zz`*zwC?x{K{0;&elDnjtrZ6ne zc*1DSy!w*#$E^%3j(WK%Al(T4Xy)8QH|Jlq>rRJo1C6CS8AWHt8R{^u|H8 1291848403 -0800 clone: from /Users/rick/p/gollum/test/examples/revert.git diff --git a/test/examples/revert.git/logs/refs/heads/master b/test/examples/revert.git/logs/refs/heads/master new file mode 100644 index 00000000..3a5bcd9e --- /dev/null +++ b/test/examples/revert.git/logs/refs/heads/master @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 7c45b5f16ff3bae2a0063191ef832701214d4df5 rick 1291848403 -0800 clone: from /Users/rick/p/gollum/test/examples/revert.git diff --git a/test/examples/revert.git/objects/20/2ced67cea93c7b6bd2928aa1daef8d1d55a20d b/test/examples/revert.git/objects/20/2ced67cea93c7b6bd2928aa1daef8d1d55a20d new file mode 100644 index 0000000000000000000000000000000000000000..d98eb1e7971ae58f56ee823c77199949cc00f138 GIT binary patch literal 146 zcmV;D0B!$xoR!Y)3BoWC08oEtiY!pM%XdJ;RW8?y4cbOR#PtO?aDWGo`@XlS4TRGi zBHE?oIM%{3WsBY+#7ba7ByUajMHo1fkb2ROW9rDx7hf^dY72=WfM7AB)MQNrH0V~h zRrRJo1C6CS8AWHt z8R{^u|H8O?>ZzYRm*+<~zPi|brdfQm-*bb~lZ?v^XFUDXvC85`&9oyi9Xs5MrQRLy z-_`!{`$}NZVgoE5dVqKjB+QtFfW<*R5Ch8`CU>CN5+FMQsO~b5zvS1%A1lu}Zc&n* k^3+?TZovsT|BRJ9pJ&Yx>=kh1iO7-hne*z#pPe!60PX#)C;$Ke literal 0 HcmV?d00001 diff --git a/test/examples/revert.git/objects/pack/pack-a561f8437234f74d0bacb9e0eebe52d207f5770d.pack b/test/examples/revert.git/objects/pack/pack-a561f8437234f74d0bacb9e0eebe52d207f5770d.pack new file mode 100644 index 0000000000000000000000000000000000000000..9741faf84b1f2edfa221e7d28d2de6c1d7904929 GIT binary patch literal 948 zcmWG=boORoU|<4bo~gVQbEcjSb=|so95>yHWnnft?pDZm=lce36uAe@&`;(ZT^Wu$$L(f$V4SA z>3c4^Zt*`^e8%{A3ttnvu(71IE7!TC8Lhm^oGY7mZCN;XqlgWYV(ZKUMRS@|{rFB) z&uK8S+~B|Zh4Hn$uj76!&3CTI{T;qUv{Gm4sj{bg@0mulJXu`4LSIdCvESNMo}bq9 zHa}haK_mC#`{q@@7_Zbh7eK-*78G6#55VD-ekD+Gk*$M32~+*Cu&i?Do^|)*7GCGy zcX8&@^&D4cI=N;l2?shFy@+64owa}`qNHioQR}j}_BAt4yh^xO%(dlti{{jjwWa5N zpR!|O>54pZe#Uma>eK#}Qgfb{{x(|QtKYA>?Yd$9=}0EF563bUDg)v)H@?1f?7{xU zJMJ%AJ?992?GbyqXs`@rzYZ>+ zd~;gMlN;7GZl^kp#NsyYx-P{O_|?$y(3{6eufn$*z7_d(W42Ll?VlODKRmv>>P@)R z+q}C$GHq`d-?9oEkh$eD)!$t?Hsn>_zj;AMYZtIo%rQ1GFfcX@EVy#oH?ctA#)Lbn zXH8lYD~}1gWk0(*eTjXZY0C-g#wY(ncfTv)FuxG7YjR*o+MI=akALa+Fw{1SGTK+n z`TXTG&&QH44gFGj54+)m0cf@S0xHutj$HKs;MHj5o zzhz9l+Q!huE@onZu#|~`E0jqT-P9Yu-|afOOX4wW@Z2TL?>(Nb5uTy<ll*yc9%wB!3ZHy4M7Ni#9rn*f@Cvyu< gGBX_AE3Wfv;*XW*9JeURPI>ArQn%oQoPWkj0K~n+UH||9 literal 0 HcmV?d00001 diff --git a/test/examples/revert.git/packed-refs b/test/examples/revert.git/packed-refs new file mode 100644 index 00000000..76aa95e8 --- /dev/null +++ b/test/examples/revert.git/packed-refs @@ -0,0 +1,3 @@ +# pack-refs with: peeled +7c45b5f16ff3bae2a0063191ef832701214d4df5 refs/heads/master +7c45b5f16ff3bae2a0063191ef832701214d4df5 refs/remotes/origin/master diff --git a/test/examples/revert.git/refs/remotes/origin/HEAD b/test/examples/revert.git/refs/remotes/origin/HEAD new file mode 100644 index 00000000..6efe28ff --- /dev/null +++ b/test/examples/revert.git/refs/remotes/origin/HEAD @@ -0,0 +1 @@ +ref: refs/remotes/origin/master diff --git a/test/helper.rb b/test/helper.rb index f6e01ded..a5bb1d4b 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -18,6 +18,16 @@ def testpath(path) File.join(TEST_DIR, path) end +def cloned_testpath(path) + path = testpath(path) + cloned = path.chomp('.git') + FileUtils.rm_rf cloned + Dir.chdir(File.expand_path(File.dirname(path))) do + %x{git clone #{File.basename(path)}} + end + cloned +end + def commit_details { :message => "Did something at #{Time.now}", :name => "Tom Preston-Werner", diff --git a/test/test_page.rb b/test/test_page.rb index ed2e7d5b..9fc6fa0a 100644 --- a/test/test_page.rb +++ b/test/test_page.rb @@ -135,3 +135,25 @@ context "Page" do assert_equal '', Gollum::Page.cname(3) end end + +context "Page Reverting" do + setup do + @wiki = Gollum::Wiki.new(cloned_testpath("examples/revert.git")) + end + + test "reverts single commit" do + page1 = @wiki.page('B') + sha = @wiki.revert_page(page1, '7c45b5f16ff3bae2a0063191ef832701214d4df5') + page2 = @wiki.page('B') + assert_equal sha, page2.version.sha + assert_equal "INITIAL", page2.raw_data.strip + end + + test "reverts multiple commits" do + page1 = @wiki.page('A') + sha = @wiki.revert_page(page1, '302a5491a9a5ba12c7652ac831a44961afa312d2^', 'b26b791cb7917c4f37dd9cb4d1e0efb24ac4d26f') + page2 = @wiki.page('A') + assert_equal sha, page2.version.sha + assert_equal "INITIAL", page2.raw_data.strip + end +end From 057baac3ce0dd69018af62a9ed349f166c0f6a32 Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 8 Dec 2010 15:03:21 -0800 Subject: [PATCH 175/393] rm cloned git paths --- test/test_page.rb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/test/test_page.rb b/test/test_page.rb index 9fc6fa0a..0502215b 100644 --- a/test/test_page.rb +++ b/test/test_page.rb @@ -138,7 +138,12 @@ end context "Page Reverting" do setup do - @wiki = Gollum::Wiki.new(cloned_testpath("examples/revert.git")) + @path = cloned_testpath("examples/revert.git") + @wiki = Gollum::Wiki.new(@path) + end + + teardown do + FileUtils.rm_rf @path end test "reverts single commit" do From 074b2119fa493165954816b26bf411d25c286d82 Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 8 Dec 2010 15:17:18 -0800 Subject: [PATCH 176/393] use a temp GIT_INDEX_FILE when working with the real git index (during reverts) --- lib/gollum/wiki.rb | 12 +++++++++++- test/helper.rb | 4 ++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 6aa227ea..ccd9d779 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -557,10 +557,20 @@ module Gollum end def write_to_real_index(head_sha) + old_index = ENV['GIT_INDEX_FILE'] + temp_index = @repo.git.create_tempfile('index', :clean) + ENV['GIT_INDEX_FILE'] = temp_index @repo.git.native('read-tree', {}, head_sha) if yield - @repo.git.native('write-tree') + tree_sha = @repo.git.native('write-tree') + after_index = ENV['GIT_INDEX_FILE'] + if after_index != temp_index + raise 'environment was changed for the git call' + end + tree_sha end + ensure + ENV['GIT_INDEX_FILE'] = old_index end def full_diff_for(page, sha1, sha2 = nil) diff --git a/test/helper.rb b/test/helper.rb index a5bb1d4b..32fc42d6 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -30,8 +30,8 @@ end def commit_details { :message => "Did something at #{Time.now}", - :name => "Tom Preston-Werner", - :email => "tom@github.com" } + :name => "Tom Preston-Werner", + :email => "tom@github.com" } end # test/spec/mini 3 From d8fed1ee84288da0a2b7db4242cd520de9ea7835 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 8 Dec 2010 15:23:28 -0800 Subject: [PATCH 177/393] Changing formatting to be more tolerant --- lib/gollum/frontend/public/css/template.css | 136 ++++++++++++++++---- 1 file changed, 109 insertions(+), 27 deletions(-) mode change 100644 => 100755 lib/gollum/frontend/public/css/template.css diff --git a/lib/gollum/frontend/public/css/template.css b/lib/gollum/frontend/public/css/template.css old mode 100644 new mode 100755 index 882877ff..e67601bf --- a/lib/gollum/frontend/public/css/template.css +++ b/lib/gollum/frontend/public/css/template.css @@ -16,25 +16,9 @@ #template p { font-size: 1.4em; line-height: 1.6em; + margin: 0.5em 0 0.5em 0; } - /* See http://webtypography.net/Rhythm_and_Proportion/ */ - #template p + p { - margin: -0.75em 0 0; - text-indent: 1em; - } - - /* Everybody loves type ornaments */ - #template p:last-child:after { - color: #999; - content: " ❈"; - font-size: 0.8em; - } - - #template blockquote p:last-child:after { - content: none; - } - #template a:link { color: #4183c4; text-decoration: none; @@ -48,15 +32,24 @@ margin: 1.0em 0 0 2.0em; list-style-position: outside; padding: 0; - } +#template dl { + margin: 1.0em 0 0 0.5em; +} + + #template dl * dl { + margin: 0.5em 0 0 0.5em; + } + #template p + ul, #template p + ol, -#template ul li > ul, #template ol li > ol { +#template ul li > ul, #template ol li > ol, +#template ul > ul, #template ol > ol { margin-top: 0; } -#template ul li > ul, #template ol li > ol { +#template ul li > ul, #template ol li > ol, +#template ul > ul, #template ol > ol { margin-left: 0; } @@ -64,35 +57,75 @@ list-style-type: square; } - #template ol li > ol li { + #template ul li > ul, + #template ul > ul { + padding-left: 1em; + } + + #template ul li > ul li, + #template ul li > ol li, + #template ol li > ol li, + #template ol li > ul li { font-size: 1.0em !important; + } + + #template ol li > ol li, + #template ol > ol li { list-style-type: lower-roman; list-style-position: inside; } - #template ol li > ol li > ol li { + #template ol li > ol li > ol li, + #template ol > ol > ol li { list-style-type: lower-alpha; } - #template ol li > ol li > ol li > ol li { + #template ol li > ol li > ol li > ol li, + #template ol > ol > ol > ol li { list-style-type: lower-greek; } -#template ul li, #template ol li { +#template ul li, #template ol li, #template dl dt, #template dl dd { font-size: 1.4em; line-height: 1.6em; padding-top: 0.1em; /* Line up ordinals */ } +#template dl dt { + font-weight: bold; +} + +#template dl dd { + padding: 1em 0; +} + +#template ul li p, #template ol li p { + font-size: 1.0em; +} + #template blockquote { + font-size: 1.4em; + line-height: 1.6em; margin: 0 4.0em 0 2.0em; padding: 0; } - #template blockquote p { + #template blockquote p, + #template blockquote > blockquote { color: #888; + font-size: 1.0em; + line-height: 1.0em; font-style: italic; } + + #template blockquote pre { + font-size: 1.0em; + line-height: 1.0em; + } + + #template blockquote > blockquote { + margin: 1em 4em 1em 2em; + } /* Headings */ @@ -137,10 +170,59 @@ /* Code-related */ -#template p code { +#template p code, #template p tt, +#template dl dt tt, #template ul li tt, #template ol li tt { background-color: #f7f7f7; border: 1px solid #ddd; color: #222; /* This is a little heavy when #000 */ + font-size: 1.0em; font-family: Consolas, Monaco, "Courier New", monospace; padding: 0.15em 0.3em; -} \ No newline at end of file +} + +#template pre { + padding-left: 0.5em; +} + +#template tt, #template pre { + color: #222; + font-size: 1.5em; + font-family: Consolas, Monaco, "Courier New", monospace; +} + +#template dl dt tt, #template dl dd tt, +#template ul li tt, #template ol li tt, +#template dl dt p, #template dl dd p, +#template dl dt pre, #template dl dd pre, +#template ul li pre, #template ol li pre, +#template ul li > dl dt, #template ol li > dl dt, +#template ul li > dl dd, #template ol li > dl dd, +#template dl dd > * li, #template dl dt > * li, +#template dl dd > * dd, #template dl dt > * dt, +#template dl * dt, #template dl * dd, +#template pre tt { + font-size: 1.0em; +} + +#template table { + margin: 1em 0; + padding: 0.5em; + border-collapse: collapse; + border: 1px solid #ddd; +} + +#template table tr { + margin: 0; +} + +#template table tr td, +#template table tr th { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + font-size: 1.4em; + padding: 0.5em 0.5em; +} + +#template table tr:nth-child(2n) { + background-color: #f9f9f9; +} From c42091870b7c602f70690f956e34a4badb0b1e56 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 8 Dec 2010 15:30:19 -0800 Subject: [PATCH 178/393] Remove unused file --- lib/gollum/frontend/public/javascript/gollum.fx.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 lib/gollum/frontend/public/javascript/gollum.fx.js diff --git a/lib/gollum/frontend/public/javascript/gollum.fx.js b/lib/gollum/frontend/public/javascript/gollum.fx.js deleted file mode 100644 index e69de29b..00000000 From 53c2fee24ff4432df9c37a99ac0c9f1244e3d1c2 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 8 Dec 2010 15:30:58 -0800 Subject: [PATCH 179/393] Remove unused file --- lib/gollum/frontend/public/css/page.css | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 lib/gollum/frontend/public/css/page.css diff --git a/lib/gollum/frontend/public/css/page.css b/lib/gollum/frontend/public/css/page.css deleted file mode 100644 index e69de29b..00000000 From 9843f4c739a3a5b03c8d29a5059381f40af71045 Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 8 Dec 2010 15:37:22 -0800 Subject: [PATCH 180/393] use grit's #apply_patch method --- lib/gollum/wiki.rb | 30 ++++-------------------------- 1 file changed, 4 insertions(+), 26 deletions(-) diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index ccd9d779..8eab9f59 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -316,15 +316,10 @@ module Gollum sha2 = nil end - pcommit = @repo.commit('master') + pcommit = @repo.commit('master') + patch = full_diff_for(page, sha1, sha2) commit[:parent] = [pcommit] - commit[:tree] = write_to_real_index(pcommit.sha) do - options = {:reverse => true, :cached => true} - @repo.git.native(:apply, options) do |stdin| - stdin << full_diff_for(page, sha1, sha2) - stdin.close - end - end + commit[:tree] = @repo.git.apply_patch(pcommit.sha, patch) index = nil sha1 = commit_index(commit) { |i| index = i } @@ -556,26 +551,9 @@ module Gollum index.commit(options[:message], options[:parent], actor) end - def write_to_real_index(head_sha) - old_index = ENV['GIT_INDEX_FILE'] - temp_index = @repo.git.create_tempfile('index', :clean) - ENV['GIT_INDEX_FILE'] = temp_index - @repo.git.native('read-tree', {}, head_sha) - if yield - tree_sha = @repo.git.native('write-tree') - after_index = ENV['GIT_INDEX_FILE'] - if after_index != temp_index - raise 'environment was changed for the git call' - end - tree_sha - end - ensure - ENV['GIT_INDEX_FILE'] = old_index - end - def full_diff_for(page, sha1, sha2 = nil) sha1, sha2 = "#{sha1}^", sha1 if sha2.nil? - repo.git.native(:diff, {}, sha1, sha2, '--', page.path) + repo.git.native(:diff, {:R => true}, sha1, sha2, '--', page.path) end # Ensures a commit hash has all the required fields for a commit. From a8f74a7e7cb136eca6b48ea182cc113292f4e10e Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 8 Dec 2010 15:39:41 -0800 Subject: [PATCH 181/393] awkwardly named method --- lib/gollum/wiki.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 8eab9f59..309aebcf 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -317,7 +317,7 @@ module Gollum end pcommit = @repo.commit('master') - patch = full_diff_for(page, sha1, sha2) + patch = full_reverse_diff_for(page, sha1, sha2) commit[:parent] = [pcommit] commit[:tree] = @repo.git.apply_patch(pcommit.sha, patch) @@ -551,7 +551,7 @@ module Gollum index.commit(options[:message], options[:parent], actor) end - def full_diff_for(page, sha1, sha2 = nil) + def full_reverse_diff_for(page, sha1, sha2 = nil) sha1, sha2 = "#{sha1}^", sha1 if sha2.nil? repo.git.native(:diff, {:R => true}, sha1, sha2, '--', page.path) end From 079917449a58f9e72626b28579bdea562591f39a Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Wed, 8 Dec 2010 15:40:45 -0800 Subject: [PATCH 182/393] Add Create New Page dialog --- .../frontend/public/javascript/gollum.js | 26 +++++++++++++++++-- lib/gollum/frontend/templates/layout.mustache | 1 - lib/gollum/frontend/templates/page.mustache | 1 + 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/lib/gollum/frontend/public/javascript/gollum.js b/lib/gollum/frontend/public/javascript/gollum.js index acd37458..8d264c01 100755 --- a/lib/gollum/frontend/public/javascript/gollum.js +++ b/lib/gollum/frontend/public/javascript/gollum.js @@ -24,6 +24,28 @@ $(document).ready(function() { ); } + if ($('#minibutton-new-page').length) { + $('#minibutton-new-page').click(function() { + $.GollumDialog.init({ + title: 'Create New Page', + fields: [ + { + id: 'name', + name: 'Page Name', + type: 'text' + } + ], + OK: function( res ) { + var n = 'New Page'; + if ( res['name'] ) + var n = res['name']; + n = encodeURIComponent( n ); + window.location = '/' + n; + } + }); + }); + } + if ($('#wiki-wrapper').hasClass('history')) { $('#wiki-history td.checkbox input').click(highlightChecked); @@ -38,8 +60,8 @@ $(document).ready(function() { var truncatedSha = commitSha.toString().substr(0, 7); // revert action $.GollumDialog.init({ - title: 'Revert to ' + truncatedSha + '?', - body: 'Are you sure you wish to revert to commit ' + + title: 'Reset to ' + truncatedSha + '?', + body: 'Are you sure you wish to reset to commit ' + truncatedSha + '' + ' ? This will overwrite any previous changes.', OK: function() { diff --git a/lib/gollum/frontend/templates/layout.mustache b/lib/gollum/frontend/templates/layout.mustache index a02ec805..d9877ddc 100755 --- a/lib/gollum/frontend/templates/layout.mustache +++ b/lib/gollum/frontend/templates/layout.mustache @@ -15,7 +15,6 @@ - diff --git a/lib/gollum/frontend/templates/page.mustache b/lib/gollum/frontend/templates/page.mustache index b9ac37a5..882187f9 100755 --- a/lib/gollum/frontend/templates/page.mustache +++ b/lib/gollum/frontend/templates/page.mustache @@ -2,6 +2,7 @@
    From d934ed9d8050b73dbe62d2f600f14bc328b0105a Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 13 Dec 2010 14:07:48 -0800 Subject: [PATCH 211/393] Fix checkbox selector --- lib/gollum/frontend/public/javascript/gollum.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/gollum/frontend/public/javascript/gollum.js b/lib/gollum/frontend/public/javascript/gollum.js index 1b4c9bb0..19d44b96 100755 --- a/lib/gollum/frontend/public/javascript/gollum.js +++ b/lib/gollum/frontend/public/javascript/gollum.js @@ -49,7 +49,12 @@ $(document).ready(function() { } if ($('#wiki-wrapper').hasClass('history')) { - $('#wiki-history td.checkbox input').click(highlightChecked); + $('#wiki-history td.checkbox input').each(function() { + $(this).click(highlightChecked); + if ( $(this).is(':checked') ) { + nodeSelector.checkNode($(this)); + } + }); if ($('.history a.action-compare-revision').length) { $('.history a.action-compare-revision').click(function() { From 55aaa5ee08f41d15e5d31df6f6f9f2a2967f150d Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 13 Dec 2010 14:25:43 -0800 Subject: [PATCH 212/393] Fix deprecated style classes --- lib/gollum/frontend/public/css/template.css | 66 +++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/lib/gollum/frontend/public/css/template.css b/lib/gollum/frontend/public/css/template.css index 63a28cdc..3c38768b 100755 --- a/lib/gollum/frontend/public/css/template.css +++ b/lib/gollum/frontend/public/css/template.css @@ -227,6 +227,72 @@ background-color: #f9f9f9; } + +/* Generic align commands (deprecated) */ +#template .frame { + display: block; + overflow: hidden; + padding: 1em 0; +} + + #template .frame span { + display: block; + color: #888; + } + + #template .frame img { + border: 1px solid #ddd; + padding: 1em; + } + +#template .float-left { + display: block; + float: left; + margin-right: 1em; + padding: 1em 0; + overflow: hidden; +} + +#template .float-right { + display: block; + float: right; + margin-left: 1em; + padding: 1em 0; + overflow: hidden; +} + +#template .align-left, +#template .align-left img { + display: block; + text-align: left; +} + +#template .align-center, +#template .align-center img { + display: block; + margin: 0 auto; +} + +#template .align-right, +#template .align-right img { + display: block; + overflow: hidden; +} + + #template .align-right img, + #template .align-right span { + display: block; + float: right; + } + +#template .align-left span, +#template .align-right span, +#template .align-center span { + color: #888; + display: block; +} + + /* @control syntax */ #template .data { border: 1px solid #ddd; From 87be3ff4149c45cdebab2a1f8d362b8d064ae1a1 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 13 Dec 2010 14:27:22 -0800 Subject: [PATCH 213/393] Fix line heights of captions --- lib/gollum/frontend/public/css/template.css | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/gollum/frontend/public/css/template.css b/lib/gollum/frontend/public/css/template.css index 3c38768b..d1755a38 100755 --- a/lib/gollum/frontend/public/css/template.css +++ b/lib/gollum/frontend/public/css/template.css @@ -236,8 +236,9 @@ } #template .frame span { - display: block; color: #888; + display: block; + line-height: normal; } #template .frame img { @@ -290,6 +291,7 @@ #template .align-center span { color: #888; display: block; + line-height: normal; } From 8b032f03f2544f7c0794ef9e04dff077b51f3d13 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 13 Dec 2010 14:34:44 -0800 Subject: [PATCH 214/393] Adding absent link color --- lib/gollum/frontend/public/css/template.css | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/gollum/frontend/public/css/template.css b/lib/gollum/frontend/public/css/template.css index d1755a38..9cde6b98 100755 --- a/lib/gollum/frontend/public/css/template.css +++ b/lib/gollum/frontend/public/css/template.css @@ -24,6 +24,16 @@ text-decoration: none; } +/* + Link classes available: + .absent - for internal links that do not yet exist + .internal - for internal links (links that link to other wiki pages) + .present - for internal links that exist (normal color) +*/ +#template a.absent { + color: #d00 !important; +} + #template a:hover, #template a:visited { text-decoration: underline; } From 9004e21d933128982592f17296506fcac1c553b0 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 13 Dec 2010 14:35:05 -0800 Subject: [PATCH 215/393] Goodbye, scratch directory --- scratch/TODO | 18 - scratch/css/editor.css | 303 - scratch/css/gollum.css | 442 -- scratch/css/page.css | 0 scratch/css/template.css | 146 - scratch/edit.html | 77 - scratch/history.html | 73 - scratch/images/icon-sprite.png | Bin 7876 -> 0 bytes scratch/js/gollum-editor/gollum.editor.js | 603 -- scratch/js/gollum-editor/langs/asciidoc.js | 107 - scratch/js/gollum-editor/langs/creole.js | 103 - scratch/js/gollum-editor/langs/markdown.js | 136 - scratch/js/gollum-editor/langs/textile.js | 111 - scratch/js/gollum.fx.js | 0 scratch/js/gollum.js | 70 - scratch/js/jquery.color.js | 123 - scratch/js/jquery.js | 6883 -------------------- scratch/page.html | 126 - 18 files changed, 9321 deletions(-) delete mode 100755 scratch/TODO delete mode 100644 scratch/css/editor.css delete mode 100644 scratch/css/gollum.css delete mode 100644 scratch/css/page.css delete mode 100644 scratch/css/template.css delete mode 100644 scratch/edit.html delete mode 100644 scratch/history.html delete mode 100644 scratch/images/icon-sprite.png delete mode 100644 scratch/js/gollum-editor/gollum.editor.js delete mode 100644 scratch/js/gollum-editor/langs/asciidoc.js delete mode 100644 scratch/js/gollum-editor/langs/creole.js delete mode 100644 scratch/js/gollum-editor/langs/markdown.js delete mode 100644 scratch/js/gollum-editor/langs/textile.js delete mode 100644 scratch/js/gollum.fx.js delete mode 100644 scratch/js/gollum.js delete mode 100644 scratch/js/jquery.color.js delete mode 100644 scratch/js/jquery.js delete mode 100644 scratch/page.html diff --git a/scratch/TODO b/scratch/TODO deleted file mode 100755 index bbba778a..00000000 --- a/scratch/TODO +++ /dev/null @@ -1,18 +0,0 @@ -* Editor - * Get MathJax running - * Fix up regexes -* Figure out why Dialogs won't fire in IE7 (likely a css issue) - - -HIERARCHY - _Footer.md - _Sidebar.md - Page1.md - projects/ - Page2.md (uses root sidebar) - _Footer.md - experiments/ - _Sidebar.md - Page3.md (uses footer.md) - -Images work the same way. You can keep similar pages in a directory with their own images. \ No newline at end of file diff --git a/scratch/css/editor.css b/scratch/css/editor.css deleted file mode 100644 index 6d99045b..00000000 --- a/scratch/css/editor.css +++ /dev/null @@ -1,303 +0,0 @@ -/* - editor.css - Wiki editor formatting -*/ - -#gollum-editor { - border: 1px solid #e4e4e4; - background: #f9f9f9; - margin: 1em 0 5em; - overflow: hidden; - padding: 1em; - - border-radius: 1em; - -moz-border-radius: 1em; - -webkit-border-radius: 1em; -} - -#gollum-editor form fieldset { - border: 0; - margin: 0; - padding: 0; - width: 100%; -} - -/* @control editor-view-tab */ -#gollum-editor #gollum-editor-type-switcher { - display: none; -} - -/* @control function-bar */ -#gollum-editor #gollum-editor-function-bar { - border-bottom: 1px solid #ddd; - overflow: hidden; - padding: 0 0 0.5em 0; - display: none; -} - -#gollum-editor #gollum-editor-function-bar.active { - display: block; -} - -#gollum-editor #gollum-editor-function-bar a.function-button { - background: #f7f7f7; - border: 1px solid #ddd; - color: #333; - display: block; - float: left; - height: 25px; - overflow: hidden; - margin: 0.2em 0.5em 0 0; - /* text-indent: -5000px; */ - text-shadow: 0 1px 0 #fff; - width: 25px; - - border-radius: 0.3em; - -moz-border-radius: 0.3em; - -webkit-border-radius: 0.3em; - - filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f4f4f4', endColorstr='#ececec'); - background: -webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#ececec)); - background: -moz-linear-gradient(top, #f4f4f4, #ececec); -} - -#gollum-editor #gollum-editor-function-bar a.function-button:hover { - color: #fff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); - text-decoration: none; - - filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#599bdc', endColorstr='#3072b3'); - background: -webkit-gradient(linear, left top, left bottom, from(#599bdc), to(#3072b3)); - background: -moz-linear-gradient(top, #599bdc, #3072b3); -} - -#gollum-editor #gollum-editor-function-bar a span { - background-image: url(../images/icon-sprite.png); - background-repeat: no-repeat; - display: block; - height: 25px; - overflow: hidden; - text-indent: -5000px; - width: 25px; -} - -a#function-bold span { background-position: 0 0; } -a#function-italic span { background-position: -27px 0; } -a#function-underline span { background-position: -54px 0; } -a#function-code span { background-position: -82px 0; } -a#function-ul span { background-position: -109px 0; } -a#function-ol span { background-position: -136px 0; } -a#function-blockquote span { background-position: -163px 0; } -a#function-hr span { background-position: -190px 0; } -a#function-h1 span { background-position: -217px 0; } -a#function-h2 span { background-position: -244px 0; } -a#function-h3 span { background-position: -271px 0; } -a#function-link span { background-position: -298px 0; } -a#function-image span { background-position: -324px 0; } - -a#function-bold:hover span { background-position: 0 -28px; } -a#function-italic:hover span { background-position: -27px -28px; } -a#function-underline:hover span { background-position: -54px -28px; } -a#function-code:hover span { background-position: -82px -28px; } -a#function-ul:hover span { background-position: -109px -28px; } -a#function-ol:hover span { background-position: -136px -28px; } -a#function-blockquote:hover span { background-position: -163px -28px; } -a#function-hr:hover span { background-position: -190px -28px; } -a#function-h1:hover span { background-position: -217px -28px; } -a#function-h2:hover span { background-position: -244px -28px; } -a#function-h3:hover span { background-position: -271px -28px; } -a#function-link:hover span { background-position: -298px -28px; } -a#function-image:hover span { background-position: -324px -28px; } - - -#gollum-editor #gollum-editor-function-bar a.disabled { - display: none; -} - -#gollum-editor #gollum-editor-function-bar span.function-divider { - display: block; - float: left; - width: 0.5em; -} - -#gollum-editor #gollum-editor-function-bar - #gollum-editor-format-selector select { - background-color: #f7f7f7; - border: 1px solid transparent; - - float: right; - font-size: 1.1em; - font-weight: bold; - line-height: 1.6em; - padding: 0.5em 0.7em; - margin-bottom: 0; - - - border-radius: 0.5em; - -moz-border-radius: 0.5em; - -webkit-border-radius: 0.5em; - - -moz-outline: none; -} - -#gollum-editor #gollum-editor-function-bar - #gollum-editor-format-selector select:hover { - background-color: #fff; - border: 1px solid #ddd; - -moz-outline: none; -} - - -/* @section form-fields */ - -#gollum-editor textarea#gollum-editor-body { - background: #fff; - border: 1px solid #ddd; - font-size: 1.3em; - font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; - line-height: 1.8em; - margin: 0.5em 0; - padding: 0.5em; /* I don't really like mixing pct & em here… */ - width: 98%; - height: 20em; -} - -#gollum-editor input#gollum-editor-submit, -#gollum-editor-dialog a.minibutton, -#gollum-editor-dialog a.minibutton:visited { - background-color: #f7f7f7; - border: 1px solid #d4d4d4; - color: #333; - cursor: pointer; - display: block; - font-size: 1.2em; - font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; - font-weight: bold; - margin: 0; - padding: 0.4em 1em; - - text-shadow: 0 1px 0 #fff; - - filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f4f4f4', endColorstr='#ececec'); - background: -webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#ececec)); - background: -moz-linear-gradient(top, #f4f4f4, #ececec); - - border-radius: 3px; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; -} - -#gollum-editor input#gollum-editor-submit:hover, -#gollum-editor-dialog a.minibutton:hover { - background: #3072b3; - border-color: #518cc6 #518cc6 #2a65a0; - color: #fff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); - text-decoration: none; - - filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#599bdc', endColorstr='#3072b3'); - background: -webkit-gradient(linear, left top, left bottom, from(#599bdc), to(#3072b3)); - background: -moz-linear-gradient(top, #599bdc, #3072b3); -} - - - -/* @control dialog */ - -#gollum-editor-dialog { - display: none; - top: 50%; - left: 50%; - position: absolute; -} - -#gollum-editor-dialog.active { - display: block; -} - -#gollum-editor-dialog-inner { - background: transparent; - margin: 0 0 0 -225px; - overflow: hidden; - position: relative; - width: 450px; - - border: 7px solid rgba(0, 0, 0, 0.3); - border-radius: 5px; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; -} - -#gollum-editor-dialog-bg { - background-color: #fff; - overflow: hidden; - padding: 1em; - - filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f7f7f7', endColorstr='#ffffff'); - background: -webkit-gradient(linear, left top, left bottom, from(#f7f7f7), to(#ffffff)); - background: -moz-linear-gradient(top, #f7f7f7, #ffffff); -} - -#gollum-editor-dialog-inner h4 { - border-bottom: 1px solid #ddd; - color: #000; - font-size: 1.8em; - line-height: normal; - font-weight: bold; - margin: 0 0 0.75em 0; - padding: 0 0 0.3em 0; -} - -#gollum-editor-dialog-body fieldset { - border: 0; - margin: 0; - padding: 0; -} - -#gollum-editor-dialog-body fieldset .field { - margin: 0 0 1.5em 0; - padding: 0; -} - - #gollum-editor-dialog-body fieldset .field label { - color: #000; - display: block; - font-size: 1.2em; - font-weight: bold; - line-height: 1.6em; - margin: 0; - padding: 0; - min-width: 80px; - } - - #gollum-editor-dialog-body fieldset .field input[type="text"] { - border: 1px solid #ddd; - display: block; - font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; - font-size: 1.2em; - line-height: 1.6em; - margin: 0.3em 0 0 0; - padding: 0.3em 0.5em; - width: 96.5%; - } - - #gollum-editor-dialog-body fieldset .field input.code { - font-family: 'Monaco', 'Courier New', Courier, monospace; - } - -#gollum-editor-dialog-body fieldset .field:last-child { - margin: 0 0 1em 0; -} - -#gollum-editor-dialog-buttons { - border-top: 1px solid #ddd; - overflow: hidden; - margin: 1.5em 0 0 0; - padding: 1em 0 0 0; -} - -#gollum-editor-dialog a.minibutton { - float: right; - margin-right: 0.5em; - width: auto; -} \ No newline at end of file diff --git a/scratch/css/gollum.css b/scratch/css/gollum.css deleted file mode 100644 index 6282cf3b..00000000 --- a/scratch/css/gollum.css +++ /dev/null @@ -1,442 +0,0 @@ -/* - gollum.css - A basic stylesheet for Gollum -*/ - -/* @section core */ -body, html { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 10px; /* -> 1em */ - margin: 0; - padding: 0; -} - -#wiki-wrapper { - margin: 0 auto; - overflow: visible; - width: 80%; -} - -a:link { - color: #4183c4; - text-decoration: none; -} - -a:hover, a:visited { - text-decoration: underline; -} - - -/* @section head */ -#head { - border-bottom: 1px solid #ccc; - margin: 4.5em 0 0.5em; - padding: 0.5em 0; - overflow: hidden; -} - - #head h1 { - font-size: 3.3em; - float: left; - line-height: normal; - margin: 0; - padding: 0.08em 0 0 0; - } - - #head ul.actions { - float: right; - } - - -/* @section content */ -#wiki-content { - height: 1%; - overflow: visible; -} - - /* @section comments */ - #wiki-body #inline-comment { - display: none; /* todo */ - } - - /* @section body */ - #wiki-body { - float: left; - margin-right: 3%; - width: 70%; - } - - /* @section rightbar */ - #wiki-rightbar { - float: right; - width: 27%; - } - - #wiki-rightbar #nav { - background-color: #f7f7f7; - border: 1px solid #ddd; - margin-top: 1.5em; - padding: 1em; - - border-radius: 0.5em; - -moz-border-radius: 0.5em; - -webkit-border-radius: 0.5em; - } - - #wiki-rightbar #nav { - font-size: 1.2em; - line-height: 1.5em; - } - - #wiki-rightbar #nav p.parent { - border-bottom: 1px solid #bbb; - font-weight: bold; - margin: 0 0 0.5em 0; - padding: 0 0 0.5em 0; - text-shadow: 0 1px 0 #fff; - } - - /* Back arrow */ - #wiki-rightbar #nav p.parent:before { - color: #666; - content: "← "; - } - - #wiki-rightbar #nav h3 { - font-size: 1.2em; - color: #333; - margin: 1.2em 0 0; - padding: 0; - text-shadow: 0 1px 0 #fff; - } - - #wiki-rightbar #nav ul { - margin: 0.5em 0 1em; - padding: 0; - } - - #wiki-rightbar #nav ul li { - color: #bbb; - list-style-position: outside; - list-style-type: none; - margin: 0 0 0 1em; - padding: 0; - line-height: 1.75em; - } - - #wiki-rightbar #nav ul li:hover { - list-style-type: square; - } - - #wiki-rightbar #nav ul li a { - font-weight: bold; - text-shadow: 0 1px 0 #fff; - } - - /* @section footer */ - #wiki-footer { - clear: both; - margin: 2em 0 5em; - } - - .has-rightbar #wiki-footer { - width: 70%; - } - - #wiki-footer #footer-content { - background-color: #f7f7f7; - border: 1px solid #ddd; - font-size: 1.2em; - line-height: 1.5em; - margin-top: 1.5em; - padding: 1em; - - border-radius: 0.5em; - -moz-border-radius: 0.5em; - -webkit-border-radius: 0.5em; - } - - #wiki-footer #footer-content h3 { - font-size: 1.2em; - color: #333; - margin: 0; - padding: 0 0 0.2em; - text-shadow: 0 1px 0 #fff; - } - - #wiki-footer #footer-content p { - margin: 0.5em 0 0; - padding: 0; - } - - #wiki-footer #footer-content ul.links { - margin: 0.5em 0 0; - overflow: hidden; - padding: 0; - } - - #wiki-footer #footer-content ul.links li { - color: #999; - float: left; - list-style-position: inside; - list-style-type: square; - padding: 0; - margin-left: 0.75em; - } - - #wiki-footer #footer-content ul.links li a { - font-weight: bold; - text-shadow: 0 1px 0 #fff; - } - - #wiki-footer #footer-content ul.links li:first-child { - list-style-type: none; - margin: 0; - } - - .ff #wiki-footer #footer-content ul.links li:first-child { - margin: 0 -0.75em 0 0; - } - - /* @section page-footer */ - .page #footer { - border-top: 1px solid #ccc; - margin: 1em 0 7em; - } - - #footer p#last-edit { - font-size: 1.2em; - line-height: 1.6em; - color: #999; - margin: 0.9em 0; - } - - #footer p#last-edit span.username { - font-weight: bold; - } - - -/* @section history */ -.history h1 { - color: #999; - font-weight: normal; -} - - .history h1 strong { - color: #000; - font-weight: bold; - } - -#wiki-history { - margin-top: 3em; -} - - #wiki-history fieldset { - border: 0; - margin: 2em 0; - padding: 0; - } - - #wiki-history table, #wiki-history tbody { - border-collapse: collapse; - padding: 0; - margin: 0; - width: 100%; - } - - #wiki-history table tr { - padding: 0; - margin: 0; - } - - #wiki-history table tr { - background-color: #ebf2f6; - } - - #wiki-history table tr td { - border: 1px solid #c0dce9; - font-size: 1.2em; - line-height: 1.6em; - margin: 0; - padding: 0.3em 0.7em; - } - - #wiki-history table tr td.checkbox { - padding: 0.3em; - } - - #wiki-history table tr td.checkbox input { - cursor: pointer; - display: block; - padding-right: 0; - padding-top: 0.4em; - margin-right: -0.2em; - } - - #wiki-history table tr:nth-child(2n), - #wiki-history table tr.alt-row { - background-color: #f3f7fa; - } - - #wiki-history table tr.selected { - background-color: #ffffea !important; - z-index: 100; - } - - #wiki-history table tr td.commit-name { - border-right: none; - } - - #wiki-history table tr td.commit-name span.time-elapsed { - color: #999; - } - - #wiki-history table tr td.author { - width: 20%; - } - - #wiki-history table tr td.author a { - color: #000; - font-weight: bold; - } - - #wiki-history table tr td.author a span.username { - display: block; - padding-top: 3px; - } - - #wiki-history table tr td img { - background-color: #fff; - border: 1px solid #999; - display: block; - float: left; - height: 18px; - overflow: hidden; - margin: 0 0.5em 0 0; - width: 18px; - padding: 2px; - } - - #wiki-history table tr td.commit-name a { - font-size: 0.9em; - font-family: 'Monaco', 'Andale Mono', Consolas, 'Courier New', monospace; - padding: 0 0.2em; - } - - #wiki-history table tr td.revert-action { - border-left: 0; - text-align: right; - } - - #wiki-history table tr td.revert-action a { - font-weight: bold; - } - - #wiki-history table tr td.revert-action a span { - font-size: 0.9em; - font-family: 'Monaco', 'Andale Mono', Consolas, 'Courier New', monospace; - } - -.history #wiki-history ul.actions li, -.history #footer ul.actions li { - margin: 0 0.6em 0 0; -} - - -/* @section edit */ -.edit h1 { - color: #999; - font-weight: normal; -} - - .edit h1 strong { - color: #000; - font-weight: bold; - } - - - -/* @control minibutton */ -ul.actions { - display: block; - list-style-type: none; - overflow: hidden; - padding: 0; - } - - ul.actions li { - float: left; - font-size: 1.2em; - margin-left: 0.6em; - } - -.minibutton a { - background-color: #f7f7f7; - border: 1px solid #d4d4d4; - color: #333; - display: block; - font-weight: bold; - margin: 0; - padding: 0.4em 1em; - - text-shadow: 0 1px 0 #fff; - - filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#f4f4f4', endColorstr='#ececec'); - background: -webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#ececec)); - background: -moz-linear-gradient(top, #f4f4f4, #ececec); - - border-radius: 3px; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; -} - -.minibutton a:hover { - background: #3072b3; - border-color: #518cc6 #518cc6 #2a65a0; - color: #fff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); - text-decoration: none; - - filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#599bdc', endColorstr='#3072b3'); - background: -webkit-gradient(linear, left top, left bottom, from(#599bdc), to(#3072b3)); - background: -moz-linear-gradient(top, #599bdc, #3072b3); -} - - -/* @special error */ -#wiki-wrapper.error { - height: 1px; - position: absolute; - overflow: visible; - top: 50%; - width: 100%; -} - -#error { - background-color: #f9f9f9; - border: 1px solid #e4e4e4; - left: 50%; - overflow: hidden; - padding: 2%; - margin: -10% 0 0 -35%; - position: absolute; - width: 70%; - - border-radius: 0.5em; - -moz-border-radius: 0.5em; - -webkit-border-radius: 0.5em; -} - -#error h1 { - font-size: 3em; - line-height: normal; - margin: 0; - padding: 0; -} - -#error p { - font-size: 1.2em; - line-height: 1.6em; - margin: 1em 0 0.5em; - padding: 0; -} \ No newline at end of file diff --git a/scratch/css/page.css b/scratch/css/page.css deleted file mode 100644 index e69de29b..00000000 diff --git a/scratch/css/template.css b/scratch/css/template.css deleted file mode 100644 index 882877ff..00000000 --- a/scratch/css/template.css +++ /dev/null @@ -1,146 +0,0 @@ -/* - template.css - Wiki content formatting - Keeping this file separate so it can be easily swapped out if you - want to format your wiki content differently from the default. -*/ - -#template { - margin-bottom: 4em; /* Give it some breathing room */ -} - -.has-footer #template { - margin: 0; -} - -#template p { - font-size: 1.4em; - line-height: 1.6em; -} - - /* See http://webtypography.net/Rhythm_and_Proportion/ */ - #template p + p { - margin: -0.75em 0 0; - text-indent: 1em; - } - - /* Everybody loves type ornaments */ - #template p:last-child:after { - color: #999; - content: " ❈"; - font-size: 0.8em; - } - - #template blockquote p:last-child:after { - content: none; - } - -#template a:link { - color: #4183c4; - text-decoration: none; -} - -#template a:hover, #template a:visited { - text-decoration: underline; -} - -#template ul, #template ol { - margin: 1.0em 0 0 2.0em; - list-style-position: outside; - padding: 0; - -} - -#template p + ul, #template p + ol, -#template ul li > ul, #template ol li > ol { - margin-top: 0; -} - -#template ul li > ul, #template ol li > ol { - margin-left: 0; -} - - #template ul { - list-style-type: square; - } - - #template ol li > ol li { - font-size: 1.0em !important; - list-style-type: lower-roman; - list-style-position: inside; - } - - #template ol li > ol li > ol li { - list-style-type: lower-alpha; - } - - #template ol li > ol li > ol li > ol li { - list-style-type: lower-greek; - } - -#template ul li, #template ol li { - font-size: 1.4em; - line-height: 1.6em; - padding-top: 0.1em; /* Line up ordinals */ -} - -#template blockquote { - margin: 0 4.0em 0 2.0em; - padding: 0; -} - - #template blockquote p { - color: #888; - font-style: italic; - } - - -/* Headings */ -#template h1, #template h2, #template h3, -#template h4, #template h5, #template h6 { - margin: 0; - padding: 0.5em 0 0; -} - -#template h1 { - font-size: 2.6em; - font-weight: bold; -} - -#template h2 { - font-size: 2.2em; - font-weight: bold; -} - -#template h3 { - font-size: 2.0em; - font-weight: bold; -} - -#template h4 { - font-size: 1.8em; - font-weight: bold; -} - -#template h5 { - font-size: 1.6em; - font-weight: bold; - -} - -#template h6 { - font-size: 1.4em; - font-weight: bold; - margin-top: 1.0em; - text-transform: uppercase; /* all caps */ -} - - -/* Code-related */ -#template p code { - background-color: #f7f7f7; - border: 1px solid #ddd; - color: #222; /* This is a little heavy when #000 */ - font-family: Consolas, Monaco, "Courier New", monospace; - padding: 0.15em 0.3em; -} \ No newline at end of file diff --git a/scratch/edit.html b/scratch/edit.html deleted file mode 100644 index 8ea5edd7..00000000 --- a/scratch/edit.html +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - Page Name — Site Name - - -
    - - -
    - - - - - - - \ No newline at end of file diff --git a/scratch/history.html b/scratch/history.html deleted file mode 100644 index d2467db0..00000000 --- a/scratch/history.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - - Page Name — Site Name - - -
    - -
    - - - -
    -
    - - - - - - - - - - - - -
    - - - - avatar: username - username - - - 3 days ago:  - Rewrote home page as Markdown… - [a45719f…] - - Revert to a45719f… -
    -
    -
    -
    - -
    - - - - - - - \ No newline at end of file diff --git a/scratch/images/icon-sprite.png b/scratch/images/icon-sprite.png deleted file mode 100644 index 6ed7ee6c0de6266ce0e5148c150ef155407b5e48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7876 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'; - } - - html += ''; - } - - return html; - }, - - createMarkup: function( title, body ) { - Dialog.markupCreated = true; - return '
    ' + - '
    ' + - '
    ' + - '

    ' + - title +'

    ' + - '
    ' + body + '
    ' + - '
    ' + - 'Cancel' + - 'OK' + - '
    ' + - '
    ' + - '
    '; - }, - - eventCancel: function( e ) { - e.preventDefault(); - debug('Cancelled dialog.'); - Dialog.hide(); - }, - - eventOK: function( e, evtOK ) { - e.preventDefault(); - - var results = []; - // get the results from each field and build them into the object - $('#gollum-editor-dialog-body input').each(function() { - results[$(this).attr('name')] = $(this).val(); - }); - - // pass them to evtOK if it exists (which it should) - if ( evtOK && - typeof evtOK == 'function' ) { - evtOK( results ); - } - Dialog.hide(); - }, - - hide: function() { - $('#gollum-editor-dialog').animate({ opacity: 0 }, { - duration: 200, - complete: function() { - $('#gollum-editor-dialog').removeClass('active'); - } - }); - }, - - init: function( argObject ) { - var title = ''; - var body = ''; - - // bail out if necessary - if ( !argObject || - typeof argObject != 'object' ) { - debug('Editor Dialog: Cannot init; invalid init object'); - return; - } - - // alright, build out fields - if ( argObject.fields && typeof argObject.fields == 'object' ) { - body = Dialog.createFieldMarkup( argObject.fields ); - } - - if ( argObject.title && typeof argObject.title == 'string' ) { - title = argObject.title; - } - - if ( Dialog.markupCreated ) { - $('#gollum-editor-dialog').remove(); - } - var $dialog = $( Dialog.createMarkup( title, body ) ); - $('body').append( $dialog ); - if ( argObject.OK && - typeof argObject.OK == 'function' ) { - Dialog.attachEvents( argObject.OK ); - } - Dialog.show(); - }, - - show: function() { - if ( !Dialog.markupCreated ) { - debug('Dialog: No markup to show. Please use init first.') - } else { - debug('Showing dialog'); - $('#gollum-editor-dialog').animate({ opacity: 0 }, { - duration: 1, - complete: function() { - $('#gollum-editor-dialog').addClass('active'); - Dialog.position(); // position this thing - $('#gollum-editor-dialog').animate({ opacity: 1 }, { - duration: 500 - }); - } - }); - } - }, - - position: function() { - var dialogHeight = $('#gollum-editor-dialog-inner').height(); - debug(dialogHeight); - $('#gollum-editor-dialog-inner') - .css('height', dialogHeight + 'px') - .css('margin-top', -1 * parseInt( dialogHeight / 2 )); - } - - }; - - - /** - * $.GollumEditor.Dialog - * Used in exec() to display dialogs with dynamic fields. - * - */ - $.GollumEditor.Dialog = Dialog; - $.GollumEditor.replaceSelection = function( repText ) { - FunctionBar.replaceFieldSelection( $('#gollum-editor-body'), repText ); - } - -// })(jQuery); - -jQuery(document).ready(function() { - $.GollumEditor(); -}); \ No newline at end of file diff --git a/scratch/js/gollum-editor/langs/asciidoc.js b/scratch/js/gollum-editor/langs/asciidoc.js deleted file mode 100644 index 0d32ca03..00000000 --- a/scratch/js/gollum-editor/langs/asciidoc.js +++ /dev/null @@ -1,107 +0,0 @@ -/** - * ASCIIDoc Language Definition - * - */ - -(function() { - -var ASCIIDoc = { - - 'function-bold' : { - search: /([^\n]+)([\n]*)/gi, - replace: "*$1*$2" - }, - - 'function-italic' : { - search: /([^\n]+)([\n]*)/gi, - replace: "_$1_$2" - }, - - 'function-code' : { - search: /([^\n]+)([\n]*)/gi, - replace: "+$1+$2" - }, - - 'function-ul' : { - search: /(.+)([\n]?)/gi, - replace: "* $1$2" - }, - - /* This looks silly but is completely valid Markdown */ - 'function-ol' : { - search: /(.+)([\n]?)/gi, - replace: ". $1$2" - }, - - 'function-blockquote' : { - search: /(.+)([\n]?)/gi, - replace: "----\n$1$2\n----\n" - }, - - 'function-link' : { - exec: function( txt, selText, $field ) { - var results = null; - $.GollumEditor.Dialog.init({ - title: 'Insert Link', - fields: [ - { - id: 'text', - name: 'Link Text', - type: 'text', - help: 'The text to display to the user.' - }, - { - id: 'href', - name: 'URL', - type: 'text', - help: 'The URL to link to.' - } - ], - OK: function( res ) { - var h = ''; - if ( res['text'] && res['href'] ) { - h = res['href'] + '[' + - res['text'] + ']'; - } - $.GollumEditor.replaceSelection( h ); - } - }); - - - } - }, - - 'function-image' : { - exec: function( txt, selText, $field ) { - var results = null; - $.GollumEditor.Dialog.init({ - title: 'Insert Image', - fields: [ - { - id: 'url', - name: 'Image URL', - type: 'text' - }, - { - id: 'alt', - name: 'Alt Text', - type: 'text' - } - ], - OK: function( res ) { - var h = ''; - if ( res['url'] && res['alt'] ) { - h = 'image::' + res['url'] + - '[' + res['alt'] + ']'; - } - $.GollumEditor.replaceSelection( h ); - } - }); - } - } - -}; - -jQuery.GollumEditor.defineLanguage('asciidoc', ASCIIDoc); - -})(); diff --git a/scratch/js/gollum-editor/langs/creole.js b/scratch/js/gollum-editor/langs/creole.js deleted file mode 100644 index 86e2cf25..00000000 --- a/scratch/js/gollum-editor/langs/creole.js +++ /dev/null @@ -1,103 +0,0 @@ -/** - * Creole Language Definition - * - */ -(function() { - -var Creole = { - - 'function-bold' : { - search: /([^\n]+)([\n]*)/gi, - replace: "**$1**$2" - }, - - 'function-italic' : { - search: /([^\n]+)([\n]*)/gi, - replace: "//$1//$2" - }, - - 'function-code' : { - search: /([^\n]+)([\n]*)/gi, - replace: "{{{$1}}}$2" - }, - - 'function-hr' : { - append: "\n\n----\n\n"; - }, - - 'function-ul' : { - search: /(.+)([\n]?)/gi, - replace: "* $1$2" - }, - - /* This looks silly but is completely valid Markdown */ - 'function-ol' : { - search: /(.+)([\n]?)/gi, - replace: "# $1$2" - }, - - 'function-link' : { - exec: function( txt, selText, $field ) { - var results = null; - $.GollumEditor.Dialog.init({ - title: 'Insert Link', - fields: [ - { - id: 'text', - name: 'Link Text', - type: 'text', - help: 'The text to display to the user.' - }, - { - id: 'href', - name: 'URL', - type: 'text', - help: 'The URL to link to.' - } - ], - OK: function( res ) { - var h = '[[' + res['href'] + '|' + - res['text'] + ']]'; - $.GollumEditor.replaceSelection( h ); - } - }); - - - } - }, - - 'function-image' : { - exec: function( txt, selText, $field ) { - var results = null; - $.GollumEditor.Dialog.init({ - title: 'Insert Image', - fields: [ - { - id: 'url', - name: 'Image URL', - type: 'text' - }, - { - id: 'alt', - name: 'Alt Text', - type: 'text' - } - ], - OK: function( res ) { - if ( res['url'] && res['alt'] ) { - var h = '{{' + res['url']; - if ( res['alt'] != '' ) { - h += '|' + res['alt'] + '}}'; - } - } - $.GollumEditor.replaceSelection( h ); - } - }); - } - } - -}; - -jQuery.GollumEditor.defineLanguage('creole', Creole); - -})(); \ No newline at end of file diff --git a/scratch/js/gollum-editor/langs/markdown.js b/scratch/js/gollum-editor/langs/markdown.js deleted file mode 100644 index cd8975f9..00000000 --- a/scratch/js/gollum-editor/langs/markdown.js +++ /dev/null @@ -1,136 +0,0 @@ -/** - * Markdown Language Definition - * - * A language definition for string manipulation operations, in this case - * for the Markdown, uh, markup language. Uses regexes for various functions - * by default. If regexes won't do and you need to do some serious - * manipulation, you can declare a function in the object instead. - * - * Code example: - * 'functionbar-id' : { - * exec: function(text, selectedText) { - * functionStuffHere(); - * }, - * search: /somesearchregex/gi, - * replace: 'replace text for RegExp.replace', - * append: "just add this where the cursor is" - * } - * -**/ -(function() { - -var MarkDown = { - - 'function-bold' : { - search: /([^\n]+)([\n]*)/gi, - replace: "**$1**$2" - }, - - 'function-italic' : { - search: /([^\n]+)([\n]*)/gi, - replace: "_$1_$2" - }, - - 'function-code' : { - search: /([^\n]+)([\n]*)/gi, - replace: "`$1`$2" - }, - - 'function-hr' : { - append: "\n***\n" - }, - - 'function-ul' : { - search: /(.+)([\n]?)/gi, - replace: "* $1$2" - }, - - /* This looks silly but is completely valid Markdown */ - 'function-ol' : { - search: /(.+)([\n]?)/gi, - replace: "1. $1$2" - }, - - 'function-blockquote' : { - search: /(.+)([\n]?)/gi, - replace: "> $1$2" - }, - - 'function-h1' : { - search: /(.+)([\n]?)/gi, - replace: "# $1$2" - }, - - 'function-h2' : { - search: /(.+)([\n]?)/gi, - replace: "## $1$2" - }, - - 'function-h3' : { - search: /(.+)([\n]?)/gi, - replace: "### $1$2" - }, - - 'function-link' : { - exec: function( txt, selText, $field ) { - var results = null; - $.GollumEditor.Dialog.init({ - title: 'Insert Link', - fields: [ - { - id: 'text', - name: 'Link Text', - type: 'text' - }, - { - id: 'href', - name: 'URL', - type: 'text' - } - ], - OK: function( res ) { - var rep = ''; - if ( res['text'] && res['href'] ) { - rep = '[' + res['text'] + '](' - + res['href'] + ')'; - } - $.GollumEditor.replaceSelection( rep ); - } - }); - } - }, - - 'function-image' : { - exec: function( txt, selText, $field ) { - var results = null; - $.GollumEditor.Dialog.init({ - title: 'Insert Image', - fields: [ - { - id: 'url', - name: 'Image URL', - type: 'code' - }, - { - id: 'alt', - name: 'Alt Text', - type: 'text' - } - ], - OK: function( res ) { - var rep = ''; - if ( res['url'] && res['alt'] ) { - rep = '![' + res['alt'] + ']' + - '(' + res['url'] + ')'; - } - $.GollumEditor.replaceSelection( rep ); - } - }); - } - } - -}; - -jQuery.GollumEditor.defineLanguage('markdown', MarkDown); - -})(); diff --git a/scratch/js/gollum-editor/langs/textile.js b/scratch/js/gollum-editor/langs/textile.js deleted file mode 100644 index 81639840..00000000 --- a/scratch/js/gollum-editor/langs/textile.js +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Textile Language Definition - */ -(function() { - -var Textile = { - - 'function-bold' : { - search: /([^\n]+)([\n]*)/gi, - replace: "*$1*$2" - }, - - 'function-italic' : { - search: /([^\n]+)([\n]*)/gi, - replace: "_$1_$2" - }, - - 'function-hr' : { - append: "\n***\n" - }, - - 'function-code' : { - search: /([^\n]+)([\n]*)/gi, - replace: "
    $1
    $2" - }, - - 'function-ul' : { - search: /(.+)([\n]?)/gi, - replace: "* $1$2" - }, - - /* This looks silly but is completely valid Markdown */ - 'function-ol' : { - search: /(.+)([\n]?)/gi, - replace: "# $1$2" - }, - - 'function-blockquote' : { - search: /(.+)([\n]?)/gi, - replace: "bq. $1$2" - }, - - 'function-link' : { - exec: function( txt, selText, $field ) { - var results = null; - $.GollumEditor.Dialog.init({ - title: 'Insert Link', - fields: [ - { - id: 'text', - name: 'Link Text', - type: 'text', - help: 'The text to display to the user.' - }, - { - id: 'href', - name: 'URL', - type: 'text', - help: 'The URL to link to.' - } - ], - OK: function( res ) { - var h = ''; - if ( res['text'] && res['href'] ) { - h = '"' + res['text'] + '":' + - res['href']; - } - $.GollumEditor.replaceSelection( h ); - } - }); - - - } - }, - - 'function-image' : { - exec: function( txt, selText, $field ) { - var results = null; - $.GollumEditor.Dialog.init({ - title: 'Insert Image', - fields: [ - { - id: 'url', - name: 'Image URL', - type: 'text' - }, - { - id: 'alt', - name: 'Alt Text', - type: 'text' - } - ], - OK: function( res ) { - if ( res['url'] ) { - var h = '!' + res['url']; - if ( res['alt'] != '' ) { - h += '(' + res['alt'] + ')'; - } - h += '!'; - %.GollumEditor.replaceSelection( h ); - } - } - }); - } - } - -}; - -jQuery.GollumEditor.defineLanguage('textile', Textile); - -})(); diff --git a/scratch/js/gollum.fx.js b/scratch/js/gollum.fx.js deleted file mode 100644 index e69de29b..00000000 diff --git a/scratch/js/gollum.js b/scratch/js/gollum.js deleted file mode 100644 index 73b104d8..00000000 --- a/scratch/js/gollum.js +++ /dev/null @@ -1,70 +0,0 @@ -// ua -$(document).ready(function() { - - // ua detection - if ($.browser.mozilla) { - $('body').addClass('ff'); - } else if ($.browser.webkit) { - $('body').addClass('webkit'); - } else if ($.browser.msie) { - $('body').addClass('ie'); - if ($.browser.version == "7.0") { - $('body').addClass('ie7'); - } else if ($.browser.version == "8.0") { - $('body').addClass('ie8'); - } - } - - // no widows in wiki body - if ($('#wiki-wrapper').hasClass('page')) { - $('#template h1, #template h2, #template h3, #template h4, #template h5, #template h6, #template li, #template p').each( - function(){ - $(this).html($(this).html().replace(/\s([^\s<]+)\s*$/,' $1')); - } - ); - } - - if ($('#wiki-wrapper').hasClass('history')) { - $('#wiki-history td.checkbox input').each(highlightChecked); - $('#wiki-history td.checkbox input').click(highlightChecked); - - $('#wiki-history td.revert-action a').mouseenter(highlightOn); - $('#wiki-history td.revert-action a').mouseleave(highlightOff); - - $('li.minibutton a.action-compare-revision').click(function( e ) { - e.preventDefault(); - $('#version-form').submit(); - }); - $('li.minibutton a.action-back-to-top').click(function( e ) { - e.preventDefault(); - $('body').scrollTop = 0; - }); - }; - -}); - -function highlightOn() { - $(this).parent().parent().animate({ - backgroundColor: '#ffffea', - duration: 400 - }); -} - -function highlightOff() { - var color = '#ebf2f6'; - if ($(this).parent().parent().hasClass('alt-row')) { - color = '#f3f7fa'; - } - $(this).parent().parent().animate({ - backgroundColor: color, - duration: 400 - }); -} - -function highlightChecked() { - if ($(this).is(':checked')) { - $(this).parent().parent().addClass('selected'); - } else { - $(this).parent().parent().removeClass('selected'); - } -} \ No newline at end of file diff --git a/scratch/js/jquery.color.js b/scratch/js/jquery.color.js deleted file mode 100644 index 634719d3..00000000 --- a/scratch/js/jquery.color.js +++ /dev/null @@ -1,123 +0,0 @@ -/* - * jQuery Color Animations - * Copyright 2007 John Resig - * Released under the MIT and GPL licenses. - */ - -(function(jQuery){ - - // We override the animation for all of these color styles - jQuery.each(['backgroundColor', 'borderBottomColor', 'borderLeftColor', 'borderRightColor', 'borderTopColor', 'color', 'outlineColor'], function(i,attr){ - jQuery.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]), 255), 0), - Math.max(Math.min( parseInt((fx.pos * (fx.end[1] - fx.start[1])) + fx.start[1]), 255), 0), - Math.max(Math.min( parseInt((fx.pos * (fx.end[2] - fx.start[2])) + fx.start[2]), 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]), parseInt(result[2]), parseInt(result[3])]; - - // 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)]; - - // Otherwise, we're most likely dealing with a named color - return colors[jQuery.trim(color).toLowerCase()]; - } - - function getColor(elem, attr) { - var color; - - do { - color = jQuery.curCSS(elem, attr); - - // Keep going until we find an element that has color, or we hit the body - if ( color != '' && color != 'transparent' || jQuery.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] - }; - -})(jQuery); diff --git a/scratch/js/jquery.js b/scratch/js/jquery.js deleted file mode 100644 index b027e9e4..00000000 --- a/scratch/js/jquery.js +++ /dev/null @@ -1,6883 +0,0 @@ -/*! - * jQuery JavaScript Library v1.4.3 - * http://jquery.com/ - * - * Copyright 2010, John Resig - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * Copyright 2010, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * - * Date: Thu Oct 14 23:10:06 2010 -0400 - */ -(function( window, undefined ) { - -// Use the correct document accordingly with window argument (sandbox) -var document = window.document; -var jQuery = (function() { - -// Define a local copy of jQuery -var jQuery = function( selector, context ) { - // The jQuery object is actually just the init constructor 'enhanced' - return new jQuery.fn.init( selector, context ); - }, - - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$, - - // A central reference to the root jQuery(document) - rootjQuery, - - // A simple way to check for HTML strings or ID strings - // (both of which we optimize for) - quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/, - - // Is it a simple selector - isSimple = /^.[^:#\[\.,]*$/, - - // Check if a string has a non-whitespace character in it - rnotwhite = /\S/, - rwhite = /\s/, - - // Used for trimming whitespace - trimLeft = /^\s+/, - trimRight = /\s+$/, - - // Check for non-word characters - rnonword = /\W/, - - // Check for digits - rdigit = /\d/, - - // Match a standalone tag - rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, - - // JSON RegExp - rvalidchars = /^[\],:{}\s]*$/, - rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, - rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, - rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, - - // Useragent RegExp - rwebkit = /(webkit)[ \/]([\w.]+)/, - ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, - rmsie = /(msie) ([\w.]+)/, - rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, - - // Keep a UserAgent string for use with jQuery.browser - userAgent = navigator.userAgent, - - // For matching the engine and version of the browser - browserMatch, - - // Has the ready events already been bound? - readyBound = false, - - // The functions to execute on DOM ready - readyList = [], - - // The ready event handler - DOMContentLoaded, - - // Save a reference to some core methods - toString = Object.prototype.toString, - hasOwn = Object.prototype.hasOwnProperty, - push = Array.prototype.push, - slice = Array.prototype.slice, - trim = String.prototype.trim, - indexOf = Array.prototype.indexOf, - - // [[Class]] -> type pairs - class2type = {}; - -jQuery.fn = jQuery.prototype = { - init: function( selector, context ) { - var match, elem, ret, doc; - - // Handle $(""), $(null), or $(undefined) - if ( !selector ) { - return this; - } - - // Handle $(DOMElement) - if ( selector.nodeType ) { - this.context = this[0] = selector; - this.length = 1; - return this; - } - - // The body element only exists once, optimize finding it - if ( selector === "body" && !context && document.body ) { - this.context = document; - this[0] = document.body; - this.selector = "body"; - this.length = 1; - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - // Are we dealing with HTML string or an ID? - match = quickExpr.exec( selector ); - - // Verify a match, and that no context was specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - doc = (context ? context.ownerDocument || context : document); - - // If a single string is passed in and it's a single tag - // just do a createElement and skip the rest - ret = rsingleTag.exec( selector ); - - if ( ret ) { - if ( jQuery.isPlainObject( context ) ) { - selector = [ document.createElement( ret[1] ) ]; - jQuery.fn.attr.call( selector, context, true ); - - } else { - selector = [ doc.createElement( ret[1] ) ]; - } - - } else { - ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); - selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes; - } - - return jQuery.merge( this, selector ); - - // HANDLE: $("#id") - } else { - elem = document.getElementById( match[2] ); - - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - if ( elem && elem.parentNode ) { - // Handle the case where IE and Opera return items - // by name instead of ID - if ( elem.id !== match[2] ) { - return rootjQuery.find( selector ); - } - - // Otherwise, we inject the element directly into the jQuery object - this.length = 1; - this[0] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $("TAG") - } else if ( !context && !rnonword.test( selector ) ) { - this.selector = selector; - this.context = document; - selector = document.getElementsByTagName( selector ); - return jQuery.merge( this, selector ); - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return (context || rootjQuery).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return jQuery( context ).find( selector ); - } - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( jQuery.isFunction( selector ) ) { - return rootjQuery.ready( selector ); - } - - if (selector.selector !== undefined) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }, - - // Start with an empty selector - selector: "", - - // The current version of jQuery being used - jquery: "1.4.3", - - // The default length of a jQuery object is 0 - length: 0, - - // The number of elements contained in the matched element set - size: function() { - return this.length; - }, - - toArray: function() { - return slice.call( this, 0 ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num == null ? - - // Return a 'clean' array - this.toArray() : - - // Return just the object - ( num < 0 ? this.slice(num)[ 0 ] : this[ num ] ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems, name, selector ) { - // Build a new jQuery matched element set - var ret = jQuery(); - - if ( jQuery.isArray( elems ) ) { - push.apply( ret, elems ); - - } else { - jQuery.merge( ret, elems ); - } - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - ret.context = this.context; - - if ( name === "find" ) { - ret.selector = this.selector + (this.selector ? " " : "") + selector; - } else if ( name ) { - ret.selector = this.selector + "." + name + "(" + selector + ")"; - } - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); - }, - - ready: function( fn ) { - // Attach the listeners - jQuery.bindReady(); - - // If the DOM is already ready - if ( jQuery.isReady ) { - // Execute the function immediately - fn.call( document, jQuery ); - - // Otherwise, remember the function for later - } else if ( readyList ) { - // Add the function to the wait list - readyList.push( fn ); - } - - return this; - }, - - eq: function( i ) { - return i === -1 ? - this.slice( i ) : - this.slice( i, +i + 1 ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ), - "slice", slice.call(arguments).join(",") ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - end: function() { - return this.prevObject || jQuery(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: [].sort, - splice: [].splice -}; - -// Give the init function the jQuery prototype for later instantiation -jQuery.fn.init.prototype = jQuery.fn; - -jQuery.extend = jQuery.fn.extend = function() { - // copy reference to target object - var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options, name, src, copy, copyIsArray; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - target = arguments[1] || {}; - // skip the boolean and the target - i = 2; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { - target = {}; - } - - // extend jQuery itself if only one argument is passed - if ( length === i ) { - target = this; - --i; - } - - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray(src) ? src : []; - - } else { - clone = src && jQuery.isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend({ - noConflict: function( deep ) { - window.$ = _$; - - if ( deep ) { - window.jQuery = _jQuery; - } - - return jQuery; - }, - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - // A third-party is pushing the ready event forwards - if ( wait === true ) { - jQuery.readyWait--; - } - - // Make sure that the DOM is not already loaded - if ( !jQuery.readyWait || (wait !== true && !jQuery.isReady) ) { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( !document.body ) { - return setTimeout( jQuery.ready, 1 ); - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - if ( readyList ) { - // Execute all of them - var fn, i = 0; - while ( (fn = readyList[ i++ ]) ) { - fn.call( document, jQuery ); - } - - // Reset the list of functions - readyList = null; - } - - // Trigger any bound ready events - if ( jQuery.fn.triggerHandler ) { - jQuery( document ).triggerHandler( "ready" ); - } - } - }, - - bindReady: function() { - if ( readyBound ) { - return; - } - - readyBound = true; - - // Catch cases where $(document).ready() is called after the - // browser event has already occurred. - if ( document.readyState === "complete" ) { - // Handle it asynchronously to allow scripts the opportunity to delay ready - return setTimeout( jQuery.ready, 1 ); - } - - // Mozilla, Opera and webkit nightlies currently support this event - if ( document.addEventListener ) { - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", jQuery.ready, false ); - - // If IE event model is used - } else if ( document.attachEvent ) { - // ensure firing before onload, - // maybe late but safe also for iframes - document.attachEvent("onreadystatechange", DOMContentLoaded); - - // A fallback to window.onload, that will always work - window.attachEvent( "onload", jQuery.ready ); - - // If IE and not a frame - // continually check to see if the document is ready - var toplevel = false; - - try { - toplevel = window.frameElement == null; - } catch(e) {} - - if ( document.documentElement.doScroll && toplevel ) { - doScrollCheck(); - } - } - }, - - // See test/unit/core.js for details concerning isFunction. - // Since version 1.3, DOM methods and functions like alert - // aren't supported. They return false on IE (#2968). - isFunction: function( obj ) { - return jQuery.type(obj) === "function"; - }, - - isArray: Array.isArray || function( obj ) { - return jQuery.type(obj) === "array"; - }, - - // A crude way of determining if an object is a window - isWindow: function( obj ) { - return obj && typeof obj === "object" && "setInterval" in obj; - }, - - isNaN: function( obj ) { - return obj == null || !rdigit.test( obj ) || isNaN( obj ); - }, - - type: function( obj ) { - return obj == null ? - String( obj ) : - class2type[ toString.call(obj) ] || "object"; - }, - - isPlainObject: function( obj ) { - // Must be an Object. - // Because of IE, we also have to check the presence of the constructor property. - // Make sure that DOM nodes and window objects don't pass through, as well - if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - // Not own constructor property must be Object - if ( obj.constructor && - !hasOwn.call(obj, "constructor") && - !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { - return false; - } - - // Own properties are enumerated firstly, so to speed up, - // if last one is own, then all properties are own. - - var key; - for ( key in obj ) {} - - return key === undefined || hasOwn.call( obj, key ); - }, - - isEmptyObject: function( obj ) { - for ( var name in obj ) { - return false; - } - return true; - }, - - error: function( msg ) { - throw msg; - }, - - parseJSON: function( data ) { - if ( typeof data !== "string" || !data ) { - return null; - } - - // Make sure leading/trailing whitespace is removed (IE can't handle it) - data = jQuery.trim( data ); - - // Make sure the incoming data is actual JSON - // Logic borrowed from http://json.org/json2.js - if ( rvalidchars.test(data.replace(rvalidescape, "@") - .replace(rvalidtokens, "]") - .replace(rvalidbraces, "")) ) { - - // Try to use the native JSON parser first - return window.JSON && window.JSON.parse ? - window.JSON.parse( data ) : - (new Function("return " + data))(); - - } else { - jQuery.error( "Invalid JSON: " + data ); - } - }, - - noop: function() {}, - - // Evalulates a script in a global context - globalEval: function( data ) { - if ( data && rnotwhite.test(data) ) { - // Inspired by code by Andrea Giammarchi - // http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html - var head = document.getElementsByTagName("head")[0] || document.documentElement, - script = document.createElement("script"); - - script.type = "text/javascript"; - - if ( jQuery.support.scriptEval ) { - script.appendChild( document.createTextNode( data ) ); - } else { - script.text = data; - } - - // Use insertBefore instead of appendChild to circumvent an IE6 bug. - // This arises when a base node is used (#2709). - head.insertBefore( script, head.firstChild ); - head.removeChild( script ); - } - }, - - nodeName: function( elem, name ) { - return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); - }, - - // args is for internal usage only - each: function( object, callback, args ) { - var name, i = 0, - length = object.length, - isObj = length === undefined || jQuery.isFunction(object); - - if ( args ) { - if ( isObj ) { - for ( name in object ) { - if ( callback.apply( object[ name ], args ) === false ) { - break; - } - } - } else { - for ( ; i < length; ) { - if ( callback.apply( object[ i++ ], args ) === false ) { - break; - } - } - } - - // A special, fast, case for the most common use of each - } else { - if ( isObj ) { - for ( name in object ) { - if ( callback.call( object[ name ], name, object[ name ] ) === false ) { - break; - } - } - } else { - for ( var value = object[0]; - i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {} - } - } - - return object; - }, - - // Use native String.trim function wherever possible - trim: trim ? - function( text ) { - return text == null ? - "" : - trim.call( text ); - } : - - // Otherwise use our own trimming functionality - function( text ) { - return text == null ? - "" : - text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); - }, - - // results is for internal usage only - makeArray: function( array, results ) { - var ret = results || []; - - if ( array != null ) { - // The window, strings (and functions) also have 'length' - // The extra typeof function check is to prevent crashes - // in Safari 2 (See: #3039) - // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 - var type = jQuery.type(array); - - if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { - push.call( ret, array ); - } else { - jQuery.merge( ret, array ); - } - } - - return ret; - }, - - inArray: function( elem, array ) { - if ( array.indexOf ) { - return array.indexOf( elem ); - } - - for ( var i = 0, length = array.length; i < length; i++ ) { - if ( array[ i ] === elem ) { - return i; - } - } - - return -1; - }, - - merge: function( first, second ) { - var i = first.length, j = 0; - - if ( typeof second.length === "number" ) { - for ( var l = second.length; j < l; j++ ) { - first[ i++ ] = second[ j ]; - } - - } else { - while ( second[j] !== undefined ) { - first[ i++ ] = second[ j++ ]; - } - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, inv ) { - var ret = [], retVal; - inv = !!inv; - - // Go through the array, only saving the items - // that pass the validator function - for ( var i = 0, length = elems.length; i < length; i++ ) { - retVal = !!callback( elems[ i ], i ); - if ( inv !== retVal ) { - ret.push( elems[ i ] ); - } - } - - return ret; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var ret = [], value; - - // Go through the array, translating each of the items to their - // new value (or values). - for ( var i = 0, length = elems.length; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret[ ret.length ] = value; - } - } - - return ret.concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - proxy: function( fn, proxy, thisObject ) { - if ( arguments.length === 2 ) { - if ( typeof proxy === "string" ) { - thisObject = fn; - fn = thisObject[ proxy ]; - proxy = undefined; - - } else if ( proxy && !jQuery.isFunction( proxy ) ) { - thisObject = proxy; - proxy = undefined; - } - } - - if ( !proxy && fn ) { - proxy = function() { - return fn.apply( thisObject || this, arguments ); - }; - } - - // Set the guid of unique handler to the same of original handler, so it can be removed - if ( fn ) { - proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; - } - - // So proxy can be declared as an argument - return proxy; - }, - - // Mutifunctional method to get and set values to a collection - // The value/s can be optionally by executed if its a function - access: function( elems, key, value, exec, fn, pass ) { - var length = elems.length; - - // Setting many attributes - if ( typeof key === "object" ) { - for ( var k in key ) { - jQuery.access( elems, k, key[k], exec, fn, value ); - } - return elems; - } - - // Setting one attribute - if ( value !== undefined ) { - // Optionally, function values get executed if exec is true - exec = !pass && exec && jQuery.isFunction(value); - - for ( var i = 0; i < length; i++ ) { - fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); - } - - return elems; - } - - // Getting an attribute - return length ? fn( elems[0], key ) : undefined; - }, - - now: function() { - return (new Date()).getTime(); - }, - - // Use of jQuery.browser is frowned upon. - // More details: http://docs.jquery.com/Utilities/jQuery.browser - uaMatch: function( ua ) { - ua = ua.toLowerCase(); - - var match = rwebkit.exec( ua ) || - ropera.exec( ua ) || - rmsie.exec( ua ) || - ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || - []; - - return { browser: match[1] || "", version: match[2] || "0" }; - }, - - browser: {} -}); - -// Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); - -browserMatch = jQuery.uaMatch( userAgent ); -if ( browserMatch.browser ) { - jQuery.browser[ browserMatch.browser ] = true; - jQuery.browser.version = browserMatch.version; -} - -// Deprecated, use jQuery.browser.webkit instead -if ( jQuery.browser.webkit ) { - jQuery.browser.safari = true; -} - -if ( indexOf ) { - jQuery.inArray = function( elem, array ) { - return indexOf.call( array, elem ); - }; -} - -// Verify that \s matches non-breaking spaces -// (IE fails on this test) -if ( !rwhite.test( "\xA0" ) ) { - trimLeft = /^[\s\xA0]+/; - trimRight = /[\s\xA0]+$/; -} - -// All jQuery objects should point back to these -rootjQuery = jQuery(document); - -// Cleanup functions for the document ready method -if ( document.addEventListener ) { - DOMContentLoaded = function() { - document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); - jQuery.ready(); - }; - -} else if ( document.attachEvent ) { - DOMContentLoaded = function() { - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( document.readyState === "complete" ) { - document.detachEvent( "onreadystatechange", DOMContentLoaded ); - jQuery.ready(); - } - }; -} - -// The DOM ready check for Internet Explorer -function doScrollCheck() { - if ( jQuery.isReady ) { - return; - } - - try { - // If IE is used, use the trick by Diego Perini - // http://javascript.nwbox.com/IEContentLoaded/ - document.documentElement.doScroll("left"); - } catch(e) { - setTimeout( doScrollCheck, 1 ); - return; - } - - // and execute any waiting functions - jQuery.ready(); -} - -// Expose jQuery to the global object -return (window.jQuery = window.$ = jQuery); - -})(); - - -(function() { - - jQuery.support = {}; - - var root = document.documentElement, - script = document.createElement("script"), - div = document.createElement("div"), - id = "script" + jQuery.now(); - - div.style.display = "none"; - div.innerHTML = "
    a"; - - var all = div.getElementsByTagName("*"), - a = div.getElementsByTagName("a")[0], - select = document.createElement("select"), - opt = select.appendChild( document.createElement("option") ); - - // Can't get basic test support - if ( !all || !all.length || !a ) { - return; - } - - jQuery.support = { - // IE strips leading whitespace when .innerHTML is used - leadingWhitespace: div.firstChild.nodeType === 3, - - // Make sure that tbody elements aren't automatically inserted - // IE will insert them into empty tables - tbody: !div.getElementsByTagName("tbody").length, - - // Make sure that link elements get serialized correctly by innerHTML - // This requires a wrapper element in IE - htmlSerialize: !!div.getElementsByTagName("link").length, - - // Get the style information from getAttribute - // (IE uses .cssText insted) - style: /red/.test( a.getAttribute("style") ), - - // Make sure that URLs aren't manipulated - // (IE normalizes it by default) - hrefNormalized: a.getAttribute("href") === "/a", - - // Make sure that element opacity exists - // (IE uses filter instead) - // Use a regex to work around a WebKit issue. See #5145 - opacity: /^0.55$/.test( a.style.opacity ), - - // Verify style float existence - // (IE uses styleFloat instead of cssFloat) - cssFloat: !!a.style.cssFloat, - - // Make sure that if no value is specified for a checkbox - // that it defaults to "on". - // (WebKit defaults to "" instead) - checkOn: div.getElementsByTagName("input")[0].value === "on", - - // Make sure that a selected-by-default option has a working selected property. - // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) - optSelected: opt.selected, - - // Will be defined later - optDisabled: false, - checkClone: false, - scriptEval: false, - noCloneEvent: true, - boxModel: null, - inlineBlockNeedsLayout: false, - shrinkWrapBlocks: false, - reliableHiddenOffsets: true - }; - - // Make sure that the options inside disabled selects aren't marked as disabled - // (WebKit marks them as diabled) - select.disabled = true; - jQuery.support.optDisabled = !opt.disabled; - - script.type = "text/javascript"; - try { - script.appendChild( document.createTextNode( "window." + id + "=1;" ) ); - } catch(e) {} - - root.insertBefore( script, root.firstChild ); - - // Make sure that the execution of code works by injecting a script - // tag with appendChild/createTextNode - // (IE doesn't support this, fails, and uses .text instead) - if ( window[ id ] ) { - jQuery.support.scriptEval = true; - delete window[ id ]; - } - - root.removeChild( script ); - - if ( div.attachEvent && div.fireEvent ) { - div.attachEvent("onclick", function click() { - // Cloning a node shouldn't copy over any - // bound event handlers (IE does this) - jQuery.support.noCloneEvent = false; - div.detachEvent("onclick", click); - }); - div.cloneNode(true).fireEvent("onclick"); - } - - div = document.createElement("div"); - div.innerHTML = ""; - - var fragment = document.createDocumentFragment(); - fragment.appendChild( div.firstChild ); - - // WebKit doesn't clone checked state correctly in fragments - jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked; - - // Figure out if the W3C box model works as expected - // document.body must exist before we can do this - jQuery(function() { - var div = document.createElement("div"); - div.style.width = div.style.paddingLeft = "1px"; - - document.body.appendChild( div ); - jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2; - - if ( "zoom" in div.style ) { - // Check if natively block-level elements act like inline-block - // elements when setting their display to 'inline' and giving - // them layout - // (IE < 8 does this) - div.style.display = "inline"; - div.style.zoom = 1; - jQuery.support.inlineBlockNeedsLayout = div.offsetWidth === 2; - - // Check if elements with layout shrink-wrap their children - // (IE 6 does this) - div.style.display = ""; - div.innerHTML = "
    "; - jQuery.support.shrinkWrapBlocks = div.offsetWidth !== 2; - } - - div.innerHTML = "
    t
    "; - var tds = div.getElementsByTagName("td"); - - // Check if table cells still have offsetWidth/Height when they are set - // to display:none and there are still other visible table cells in a - // table row; if so, offsetWidth/Height are not reliable for use when - // determining if an element has been hidden directly using - // display:none (it is still safe to use offsets if a parent element is - // hidden; don safety goggles and see bug #4512 for more information). - // (only IE 8 fails this test) - jQuery.support.reliableHiddenOffsets = tds[0].offsetHeight === 0; - - tds[0].style.display = ""; - tds[1].style.display = "none"; - - // Check if empty table cells still have offsetWidth/Height - // (IE < 8 fail this test) - jQuery.support.reliableHiddenOffsets = jQuery.support.reliableHiddenOffsets && tds[0].offsetHeight === 0; - div.innerHTML = ""; - - document.body.removeChild( div ).style.display = "none"; - div = tds = null; - }); - - // Technique from Juriy Zaytsev - // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/ - var eventSupported = function( eventName ) { - var el = document.createElement("div"); - eventName = "on" + eventName; - - var isSupported = (eventName in el); - if ( !isSupported ) { - el.setAttribute(eventName, "return;"); - isSupported = typeof el[eventName] === "function"; - } - el = null; - - return isSupported; - }; - - jQuery.support.submitBubbles = eventSupported("submit"); - jQuery.support.changeBubbles = eventSupported("change"); - - // release memory in IE - root = script = div = all = a = null; -})(); - -jQuery.props = { - "for": "htmlFor", - "class": "className", - readonly: "readOnly", - maxlength: "maxLength", - cellspacing: "cellSpacing", - rowspan: "rowSpan", - colspan: "colSpan", - tabindex: "tabIndex", - usemap: "useMap", - frameborder: "frameBorder" -}; - - - - -var windowData = {}, - rbrace = /^(?:\{.*\}|\[.*\])$/; - -jQuery.extend({ - cache: {}, - - // Please use with caution - uuid: 0, - - // Unique for each copy of jQuery on the page - expando: "jQuery" + jQuery.now(), - - // The following elements throw uncatchable exceptions if you - // attempt to add expando properties to them. - noData: { - "embed": true, - // Ban all objects except for Flash (which handle expandos) - "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", - "applet": true - }, - - data: function( elem, name, data ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - elem = elem == window ? - windowData : - elem; - - var isNode = elem.nodeType, - id = isNode ? elem[ jQuery.expando ] : null, - cache = jQuery.cache, thisCache; - - if ( isNode && !id && typeof name === "string" && data === undefined ) { - return; - } - - // Get the data from the object directly - if ( !isNode ) { - cache = elem; - - // Compute a unique ID for the element - } else if ( !id ) { - elem[ jQuery.expando ] = id = ++jQuery.uuid; - } - - // Avoid generating a new cache unless none exists and we - // want to manipulate it. - if ( typeof name === "object" ) { - if ( isNode ) { - cache[ id ] = jQuery.extend(cache[ id ], name); - - } else { - jQuery.extend( cache, name ); - } - - } else if ( isNode && !cache[ id ] ) { - cache[ id ] = {}; - } - - thisCache = isNode ? cache[ id ] : cache; - - // Prevent overriding the named cache with undefined values - if ( data !== undefined ) { - thisCache[ name ] = data; - } - - return typeof name === "string" ? thisCache[ name ] : thisCache; - }, - - removeData: function( elem, name ) { - if ( !jQuery.acceptData( elem ) ) { - return; - } - - elem = elem == window ? - windowData : - elem; - - var isNode = elem.nodeType, - id = isNode ? elem[ jQuery.expando ] : elem, - cache = jQuery.cache, - thisCache = isNode ? cache[ id ] : id; - - // If we want to remove a specific section of the element's data - if ( name ) { - if ( thisCache ) { - // Remove the section of cache data - delete thisCache[ name ]; - - // If we've removed all the data, remove the element's cache - if ( isNode && jQuery.isEmptyObject(thisCache) ) { - jQuery.removeData( elem ); - } - } - - // Otherwise, we want to remove all of the element's data - } else { - if ( isNode && jQuery.support.deleteExpando ) { - delete elem[ jQuery.expando ]; - - } else if ( elem.removeAttribute ) { - elem.removeAttribute( jQuery.expando ); - - // Completely remove the data cache - } else if ( isNode ) { - delete cache[ id ]; - - // Remove all fields from the object - } else { - for ( var n in elem ) { - delete elem[ n ]; - } - } - } - }, - - // A method for determining if a DOM node can handle the data expando - acceptData: function( elem ) { - if ( elem.nodeName ) { - var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; - - if ( match ) { - return !(match === true || elem.getAttribute("classid") !== match); - } - } - - return true; - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - if ( typeof key === "undefined" ) { - return this.length ? jQuery.data( this[0] ) : null; - - } else if ( typeof key === "object" ) { - return this.each(function() { - jQuery.data( this, key ); - }); - } - - var parts = key.split("."); - parts[1] = parts[1] ? "." + parts[1] : ""; - - if ( value === undefined ) { - var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); - - // Try to fetch any internally stored data first - if ( data === undefined && this.length ) { - data = jQuery.data( this[0], key ); - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && this[0].nodeType === 1 ) { - data = this[0].getAttribute( "data-" + key ); - - if ( typeof data === "string" ) { - try { - data = data === "true" ? true : - data === "false" ? false : - data === "null" ? null : - !jQuery.isNaN( data ) ? parseFloat( data ) : - rbrace.test( data ) ? jQuery.parseJSON( data ) : - data; - } catch( e ) {} - - } else { - data = undefined; - } - } - } - - return data === undefined && parts[1] ? - this.data( parts[0] ) : - data; - - } else { - return this.each(function() { - var $this = jQuery( this ), args = [ parts[0], value ]; - - $this.triggerHandler( "setData" + parts[1] + "!", args ); - jQuery.data( this, key, value ); - $this.triggerHandler( "changeData" + parts[1] + "!", args ); - }); - } - }, - - removeData: function( key ) { - return this.each(function() { - jQuery.removeData( this, key ); - }); - } -}); - - - - -jQuery.extend({ - queue: function( elem, type, data ) { - if ( !elem ) { - return; - } - - type = (type || "fx") + "queue"; - var q = jQuery.data( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( !data ) { - return q || []; - } - - if ( !q || jQuery.isArray(data) ) { - q = jQuery.data( elem, type, jQuery.makeArray(data) ); - - } else { - q.push( data ); - } - - return q; - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), fn = queue.shift(); - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - } - - if ( fn ) { - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift("inprogress"); - } - - fn.call(elem, function() { - jQuery.dequeue(elem, type); - }); - } - } -}); - -jQuery.fn.extend({ - queue: function( type, data ) { - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - } - - if ( data === undefined ) { - return jQuery.queue( this[0], type ); - } - return this.each(function( i ) { - var queue = jQuery.queue( this, type, data ); - - if ( type === "fx" && queue[0] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - return this.each(function() { - jQuery.dequeue( this, type ); - }); - }, - - // Based off of the plugin by Clint Helfers, with permission. - // http://blindsignals.com/index.php/2009/07/jquery-delay/ - delay: function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[time] || time : time; - type = type || "fx"; - - return this.queue( type, function() { - var elem = this; - setTimeout(function() { - jQuery.dequeue( elem, type ); - }, time ); - }); - }, - - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - } -}); - - - - -var rclass = /[\n\t]/g, - rspaces = /\s+/, - rreturn = /\r/g, - rspecialurl = /^(?:href|src|style)$/, - rtype = /^(?:button|input)$/i, - rfocusable = /^(?:button|input|object|select|textarea)$/i, - rclickable = /^a(?:rea)?$/i, - rradiocheck = /^(?:radio|checkbox)$/i; - -jQuery.fn.extend({ - attr: function( name, value ) { - return jQuery.access( this, name, value, true, jQuery.attr ); - }, - - removeAttr: function( name, fn ) { - return this.each(function(){ - jQuery.attr( this, name, "" ); - if ( this.nodeType === 1 ) { - this.removeAttribute( name ); - } - }); - }, - - addClass: function( value ) { - if ( jQuery.isFunction(value) ) { - return this.each(function(i) { - var self = jQuery(this); - self.addClass( value.call(this, i, self.attr("class")) ); - }); - } - - if ( value && typeof value === "string" ) { - var classNames = (value || "").split( rspaces ); - - for ( var i = 0, l = this.length; i < l; i++ ) { - var elem = this[i]; - - if ( elem.nodeType === 1 ) { - if ( !elem.className ) { - elem.className = value; - - } else { - var className = " " + elem.className + " ", setClass = elem.className; - for ( var c = 0, cl = classNames.length; c < cl; c++ ) { - if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) { - setClass += " " + classNames[c]; - } - } - elem.className = jQuery.trim( setClass ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - if ( jQuery.isFunction(value) ) { - return this.each(function(i) { - var self = jQuery(this); - self.removeClass( value.call(this, i, self.attr("class")) ); - }); - } - - if ( (value && typeof value === "string") || value === undefined ) { - var classNames = (value || "").split( rspaces ); - - for ( var i = 0, l = this.length; i < l; i++ ) { - var elem = this[i]; - - if ( elem.nodeType === 1 && elem.className ) { - if ( value ) { - var className = (" " + elem.className + " ").replace(rclass, " "); - for ( var c = 0, cl = classNames.length; c < cl; c++ ) { - className = className.replace(" " + classNames[c] + " ", " "); - } - elem.className = jQuery.trim( className ); - - } else { - elem.className = ""; - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, isBool = typeof stateVal === "boolean"; - - if ( jQuery.isFunction( value ) ) { - return this.each(function(i) { - var self = jQuery(this); - self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal ); - }); - } - - return this.each(function() { - if ( type === "string" ) { - // toggle individual class names - var className, i = 0, self = jQuery(this), - state = stateVal, - classNames = value.split( rspaces ); - - while ( (className = classNames[ i++ ]) ) { - // check each className given, space seperated list - state = isBool ? state : !self.hasClass( className ); - self[ state ? "addClass" : "removeClass" ]( className ); - } - - } else if ( type === "undefined" || type === "boolean" ) { - if ( this.className ) { - // store className if set - jQuery.data( this, "__className__", this.className ); - } - - // toggle whole className - this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || ""; - } - }); - }, - - hasClass: function( selector ) { - var className = " " + selector + " "; - for ( var i = 0, l = this.length; i < l; i++ ) { - if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { - return true; - } - } - - return false; - }, - - val: function( value ) { - if ( !arguments.length ) { - var elem = this[0]; - - if ( elem ) { - if ( jQuery.nodeName( elem, "option" ) ) { - // attributes.value is undefined in Blackberry 4.7 but - // uses .value. See #6932 - var val = elem.attributes.value; - return !val || val.specified ? elem.value : elem.text; - } - - // We need to handle select boxes special - if ( jQuery.nodeName( elem, "select" ) ) { - var index = elem.selectedIndex, - values = [], - options = elem.options, - one = elem.type === "select-one"; - - // Nothing was selected - if ( index < 0 ) { - return null; - } - - // Loop through all the selected options - for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { - var option = options[ i ]; - - // Don't return options that are disabled or in a disabled optgroup - if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && - (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { - - // Get the specific value for the option - value = jQuery(option).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - } - - // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified - if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) { - return elem.getAttribute("value") === null ? "on" : elem.value; - } - - - // Everything else, we just grab the value - return (elem.value || "").replace(rreturn, ""); - - } - - return undefined; - } - - var isFunction = jQuery.isFunction(value); - - return this.each(function(i) { - var self = jQuery(this), val = value; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call(this, i, self.val()); - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - } else if ( typeof val === "number" ) { - val += ""; - } else if ( jQuery.isArray(val) ) { - val = jQuery.map(val, function (value) { - return value == null ? "" : value + ""; - }); - } - - if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) { - this.checked = jQuery.inArray( self.val(), val ) >= 0; - - } else if ( jQuery.nodeName( this, "select" ) ) { - var values = jQuery.makeArray(val); - - jQuery( "option", this ).each(function() { - this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; - }); - - if ( !values.length ) { - this.selectedIndex = -1; - } - - } else { - this.value = val; - } - }); - } -}); - -jQuery.extend({ - attrFn: { - val: true, - css: true, - html: true, - text: true, - data: true, - width: true, - height: true, - offset: true - }, - - attr: function( elem, name, value, pass ) { - // don't set attributes on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { - return undefined; - } - - if ( pass && name in jQuery.attrFn ) { - return jQuery(elem)[name](value); - } - - var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ), - // Whether we are setting (or getting) - set = value !== undefined; - - // Try to normalize/fix the name - name = notxml && jQuery.props[ name ] || name; - - // Only do all the following if this is a node (faster for style) - if ( elem.nodeType === 1 ) { - // These attributes require special treatment - var special = rspecialurl.test( name ); - - // Safari mis-reports the default selected property of an option - // Accessing the parent's selectedIndex property fixes it - if ( name === "selected" && !jQuery.support.optSelected ) { - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - // Make sure that it also works with optgroups, see #5701 - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - - // If applicable, access the attribute via the DOM 0 way - // 'in' checks fail in Blackberry 4.7 #6931 - if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) { - if ( set ) { - // We can't allow the type property to be changed (since it causes problems in IE) - if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) { - jQuery.error( "type property can't be changed" ); - } - - if ( value === null ) { - if ( elem.nodeType === 1 ) { - elem.removeAttribute( name ); - } - - } else { - elem[ name ] = value; - } - } - - // browsers index elements by id/name on forms, give priority to attributes. - if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) { - return elem.getAttributeNode( name ).nodeValue; - } - - // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set - // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - if ( name === "tabIndex" ) { - var attributeNode = elem.getAttributeNode( "tabIndex" ); - - return attributeNode && attributeNode.specified ? - attributeNode.value : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - undefined; - } - - return elem[ name ]; - } - - if ( !jQuery.support.style && notxml && name === "style" ) { - if ( set ) { - elem.style.cssText = "" + value; - } - - return elem.style.cssText; - } - - if ( set ) { - // convert the value to a string (all browsers do this but IE) see #1070 - elem.setAttribute( name, "" + value ); - } - - // Ensure that missing attributes return undefined - // Blackberry 4.7 returns "" from getAttribute #6938 - if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) { - return undefined; - } - - var attr = !jQuery.support.hrefNormalized && notxml && special ? - // Some attributes require a special call on IE - elem.getAttribute( name, 2 ) : - elem.getAttribute( name ); - - // Non-existent attributes return null, we normalize to undefined - return attr === null ? undefined : attr; - } - } -}); - - - - -var rnamespaces = /\.(.*)$/, - rformElems = /^(?:textarea|input|select)$/i, - rperiod = /\./g, - rspace = / /g, - rescape = /[^\w\s.|`]/g, - fcleanup = function( nm ) { - return nm.replace(rescape, "\\$&"); - }, - focusCounts = { focusin: 0, focusout: 0 }; - -/* - * A number of helper functions used for managing events. - * Many of the ideas behind this code originated from - * Dean Edwards' addEvent library. - */ -jQuery.event = { - - // Bind an event to an element - // Original by Dean Edwards - add: function( elem, types, handler, data ) { - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // For whatever reason, IE has trouble passing the window object - // around, causing it to be cloned in the process - if ( jQuery.isWindow( elem ) && ( elem !== window && !elem.frameElement ) ) { - elem = window; - } - - if ( handler === false ) { - handler = returnFalse; - } - - var handleObjIn, handleObj; - - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - } - - // Make sure that the function being executed has a unique ID - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure - var elemData = jQuery.data( elem ); - - // If no elemData is found then we must be trying to bind to one of the - // banned noData elements - if ( !elemData ) { - return; - } - - // Use a key less likely to result in collisions for plain JS objects. - // Fixes bug #7150. - var eventKey = elem.nodeType ? "events" : "__events__", - events = elemData[ eventKey ], - eventHandle = elemData.handle; - - if ( typeof events === "function" ) { - // On plain objects events is a fn that holds the the data - // which prevents this data from being JSON serialized - // the function does not need to be called, it just contains the data - eventHandle = events.handle; - events = events.events; - - } else if ( !events ) { - if ( !elem.nodeType ) { - // On plain objects, create a fn that acts as the holder - // of the values to avoid JSON serialization of event data - elemData[ eventKey ] = elemData = function(){}; - } - - elemData.events = events = {}; - } - - if ( !eventHandle ) { - elemData.handle = eventHandle = function() { - // Handle the second event of a trigger and when - // an event is called after a page has unloaded - return typeof jQuery !== "undefined" && !jQuery.event.triggered ? - jQuery.event.handle.apply( eventHandle.elem, arguments ) : - undefined; - }; - } - - // Add elem as a property of the handle function - // This is to prevent a memory leak with non-native events in IE. - eventHandle.elem = elem; - - // Handle multiple events separated by a space - // jQuery(...).bind("mouseover mouseout", fn); - types = types.split(" "); - - var type, i = 0, namespaces; - - while ( (type = types[ i++ ]) ) { - handleObj = handleObjIn ? - jQuery.extend({}, handleObjIn) : - { handler: handler, data: data }; - - // Namespaced event handlers - if ( type.indexOf(".") > -1 ) { - namespaces = type.split("."); - type = namespaces.shift(); - handleObj.namespace = namespaces.slice(0).sort().join("."); - - } else { - namespaces = []; - handleObj.namespace = ""; - } - - handleObj.type = type; - if ( !handleObj.guid ) { - handleObj.guid = handler.guid; - } - - // Get the current list of functions bound to this event - var handlers = events[ type ], - special = jQuery.event.special[ type ] || {}; - - // Init the event handler queue - if ( !handlers ) { - handlers = events[ type ] = []; - - // Check for a special event handler - // Only use addEventListener/attachEvent if the special - // events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - // Bind the global event handler to the element - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - - } else if ( elem.attachEvent ) { - elem.attachEvent( "on" + type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add the function to the element's handler list - handlers.push( handleObj ); - - // Keep track of which events have been used, for global triggering - jQuery.event.global[ type ] = true; - } - - // Nullify elem to prevent memory leaks in IE - elem = null; - }, - - global: {}, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, pos ) { - // don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - if ( handler === false ) { - handler = returnFalse; - } - - var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType, - eventKey = elem.nodeType ? "events" : "__events__", - elemData = jQuery.data( elem ), - events = elemData && elemData[ eventKey ]; - - if ( !elemData || !events ) { - return; - } - - if ( typeof events === "function" ) { - elemData = events; - events = events.events; - } - - // types is actually an event object here - if ( types && types.type ) { - handler = types.handler; - types = types.type; - } - - // Unbind all events for the element - if ( !types || typeof types === "string" && types.charAt(0) === "." ) { - types = types || ""; - - for ( type in events ) { - jQuery.event.remove( elem, type + types ); - } - - return; - } - - // Handle multiple events separated by a space - // jQuery(...).unbind("mouseover mouseout", fn); - types = types.split(" "); - - while ( (type = types[ i++ ]) ) { - origType = type; - handleObj = null; - all = type.indexOf(".") < 0; - namespaces = []; - - if ( !all ) { - // Namespaced event handlers - namespaces = type.split("."); - type = namespaces.shift(); - - namespace = new RegExp("(^|\\.)" + - jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)"); - } - - eventType = events[ type ]; - - if ( !eventType ) { - continue; - } - - if ( !handler ) { - for ( j = 0; j < eventType.length; j++ ) { - handleObj = eventType[ j ]; - - if ( all || namespace.test( handleObj.namespace ) ) { - jQuery.event.remove( elem, origType, handleObj.handler, j ); - eventType.splice( j--, 1 ); - } - } - - continue; - } - - special = jQuery.event.special[ type ] || {}; - - for ( j = pos || 0; j < eventType.length; j++ ) { - handleObj = eventType[ j ]; - - if ( handler.guid === handleObj.guid ) { - // remove the given handler for the given type - if ( all || namespace.test( handleObj.namespace ) ) { - if ( pos == null ) { - eventType.splice( j--, 1 ); - } - - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - - if ( pos != null ) { - break; - } - } - } - - // remove generic event handler if no more handlers exist - if ( eventType.length === 0 || pos != null && eventType.length === 1 ) { - if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - ret = null; - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - var handle = elemData.handle; - if ( handle ) { - handle.elem = null; - } - - delete elemData.events; - delete elemData.handle; - - if ( typeof elemData === "function" ) { - jQuery.removeData( elem, eventKey ); - - } else if ( jQuery.isEmptyObject( elemData ) ) { - jQuery.removeData( elem ); - } - } - }, - - // bubbling is internal - trigger: function( event, data, elem /*, bubbling */ ) { - // Event object or event type - var type = event.type || event, - bubbling = arguments[3]; - - if ( !bubbling ) { - event = typeof event === "object" ? - // jQuery.Event object - event[ jQuery.expando ] ? event : - // Object literal - jQuery.extend( jQuery.Event(type), event ) : - // Just the event type (string) - jQuery.Event(type); - - if ( type.indexOf("!") >= 0 ) { - event.type = type = type.slice(0, -1); - event.exclusive = true; - } - - // Handle a global trigger - if ( !elem ) { - // Don't bubble custom events when global (to avoid too much overhead) - event.stopPropagation(); - - // Only trigger if we've ever bound an event for it - if ( jQuery.event.global[ type ] ) { - jQuery.each( jQuery.cache, function() { - if ( this.events && this.events[type] ) { - jQuery.event.trigger( event, data, this.handle.elem ); - } - }); - } - } - - // Handle triggering a single element - - // don't do events on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) { - return undefined; - } - - // Clean up in case it is reused - event.result = undefined; - event.target = elem; - - // Clone the incoming data, if any - data = jQuery.makeArray( data ); - data.unshift( event ); - } - - event.currentTarget = elem; - - // Trigger the event, it is assumed that "handle" is a function - var handle = elem.nodeType ? - jQuery.data( elem, "handle" ) : - (jQuery.data( elem, "__events__" ) || {}).handle; - - if ( handle ) { - handle.apply( elem, data ); - } - - var parent = elem.parentNode || elem.ownerDocument; - - // Trigger an inline bound script - try { - if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) { - if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) { - event.result = false; - event.preventDefault(); - } - } - - // prevent IE from throwing an error for some elements with some event types, see #3533 - } catch (inlineError) {} - - if ( !event.isPropagationStopped() && parent ) { - jQuery.event.trigger( event, data, parent, true ); - - } else if ( !event.isDefaultPrevented() ) { - var target = event.target, old, targetType = type.replace(rnamespaces, ""), - isClick = jQuery.nodeName(target, "a") && targetType === "click", - special = jQuery.event.special[ targetType ] || {}; - - if ( (!special._default || special._default.call( elem, event ) === false) && - !isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) { - - try { - if ( target[ targetType ] ) { - // Make sure that we don't accidentally re-trigger the onFOO events - old = target[ "on" + targetType ]; - - if ( old ) { - target[ "on" + targetType ] = null; - } - - jQuery.event.triggered = true; - target[ targetType ](); - } - - // prevent IE from throwing an error for some elements with some event types, see #3533 - } catch (triggerError) {} - - if ( old ) { - target[ "on" + targetType ] = old; - } - - jQuery.event.triggered = false; - } - } - }, - - handle: function( event ) { - var all, handlers, namespaces, namespace_sort = [], namespace_re, events, args = jQuery.makeArray( arguments ); - - event = args[0] = jQuery.event.fix( event || window.event ); - event.currentTarget = this; - - // Namespaced event handlers - all = event.type.indexOf(".") < 0 && !event.exclusive; - - if ( !all ) { - namespaces = event.type.split("."); - event.type = namespaces.shift(); - namespace_sort = namespaces.slice(0).sort(); - namespace_re = new RegExp("(^|\\.)" + namespace_sort.join("\\.(?:.*\\.)?") + "(\\.|$)"); - } - - event.namespace = event.namespace || namespace_sort.join("."); - - events = jQuery.data(this, this.nodeType ? "events" : "__events__"); - - if ( typeof events === "function" ) { - events = events.events; - } - - handlers = (events || {})[ event.type ]; - - if ( events && handlers ) { - // Clone the handlers to prevent manipulation - handlers = handlers.slice(0); - - for ( var j = 0, l = handlers.length; j < l; j++ ) { - var handleObj = handlers[ j ]; - - // Filter the functions by class - if ( all || namespace_re.test( handleObj.namespace ) ) { - // Pass in a reference to the handler function itself - // So that we can later remove it - event.handler = handleObj.handler; - event.data = handleObj.data; - event.handleObj = handleObj; - - var ret = handleObj.handler.apply( this, args ); - - if ( ret !== undefined ) { - event.result = ret; - if ( ret === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - - if ( event.isImmediatePropagationStopped() ) { - break; - } - } - } - } - - return event.result; - }, - - props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "), - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // store a copy of the original event object - // and "clone" to set read-only properties - var originalEvent = event; - event = jQuery.Event( originalEvent ); - - for ( var i = this.props.length, prop; i; ) { - prop = this.props[ --i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Fix target property, if necessary - if ( !event.target ) { - event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either - } - - // check if target is a textnode (safari) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - // Add relatedTarget, if necessary - if ( !event.relatedTarget && event.fromElement ) { - event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement; - } - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && event.clientX != null ) { - var doc = document.documentElement, body = document.body; - event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0); - event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0); - } - - // Add which for key events - if ( event.which == null && (event.charCode != null || event.keyCode != null) ) { - event.which = event.charCode != null ? event.charCode : event.keyCode; - } - - // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) - if ( !event.metaKey && event.ctrlKey ) { - event.metaKey = event.ctrlKey; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && event.button !== undefined ) { - event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); - } - - return event; - }, - - // Deprecated, use jQuery.guid instead - guid: 1E8, - - // Deprecated, use jQuery.proxy instead - proxy: jQuery.proxy, - - special: { - ready: { - // Make sure the ready event is setup - setup: jQuery.bindReady, - teardown: jQuery.noop - }, - - live: { - add: function( handleObj ) { - jQuery.event.add( this, - liveConvert( handleObj.origType, handleObj.selector ), - jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) ); - }, - - remove: function( handleObj ) { - jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj ); - } - }, - - beforeunload: { - setup: function( data, namespaces, eventHandle ) { - // We only want to do this special case on windows - if ( jQuery.isWindow( this ) ) { - this.onbeforeunload = eventHandle; - } - }, - - teardown: function( namespaces, eventHandle ) { - if ( this.onbeforeunload === eventHandle ) { - this.onbeforeunload = null; - } - } - } - } -}; - -jQuery.removeEvent = document.removeEventListener ? - function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } - } : - function( elem, type, handle ) { - if ( elem.detachEvent ) { - elem.detachEvent( "on" + type, handle ); - } - }; - -jQuery.Event = function( src ) { - // Allow instantiation without the 'new' keyword - if ( !this.preventDefault ) { - return new jQuery.Event( src ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - // Event type - } else { - this.type = src; - } - - // timeStamp is buggy for some events on Firefox(#3843) - // So we won't rely on the native value - this.timeStamp = jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -function returnFalse() { - return false; -} -function returnTrue() { - return true; -} - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - preventDefault: function() { - this.isDefaultPrevented = returnTrue; - - var e = this.originalEvent; - if ( !e ) { - return; - } - - // if preventDefault exists run it on the original event - if ( e.preventDefault ) { - e.preventDefault(); - - // otherwise set the returnValue property of the original event to false (IE) - } else { - e.returnValue = false; - } - }, - stopPropagation: function() { - this.isPropagationStopped = returnTrue; - - var e = this.originalEvent; - if ( !e ) { - return; - } - // if stopPropagation exists run it on the original event - if ( e.stopPropagation ) { - e.stopPropagation(); - } - // otherwise set the cancelBubble property of the original event to true (IE) - e.cancelBubble = true; - }, - stopImmediatePropagation: function() { - this.isImmediatePropagationStopped = returnTrue; - this.stopPropagation(); - }, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse -}; - -// Checks if an event happened on an element within another element -// Used in jQuery.event.special.mouseenter and mouseleave handlers -var withinElement = function( event ) { - // Check if mouse(over|out) are still within the same parent element - var parent = event.relatedTarget; - - // Firefox sometimes assigns relatedTarget a XUL element - // which we cannot access the parentNode property of - try { - // Traverse up the tree - while ( parent && parent !== this ) { - parent = parent.parentNode; - } - - if ( parent !== this ) { - // set the correct event type - event.type = event.data; - - // handle event if we actually just moused on to a non sub-element - jQuery.event.handle.apply( this, arguments ); - } - - // assuming we've left the element since we most likely mousedover a xul element - } catch(e) { } -}, - -// In case of event delegation, we only need to rename the event.type, -// liveHandler will take care of the rest. -delegate = function( event ) { - event.type = event.data; - jQuery.event.handle.apply( this, arguments ); -}; - -// Create mouseenter and mouseleave events -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - setup: function( data ) { - jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig ); - }, - teardown: function( data ) { - jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement ); - } - }; -}); - -// submit delegation -if ( !jQuery.support.submitBubbles ) { - - jQuery.event.special.submit = { - setup: function( data, namespaces ) { - if ( this.nodeName.toLowerCase() !== "form" ) { - jQuery.event.add(this, "click.specialSubmit", function( e ) { - var elem = e.target, type = elem.type; - - if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { - e.liveFired = undefined; - return trigger( "submit", this, arguments ); - } - }); - - jQuery.event.add(this, "keypress.specialSubmit", function( e ) { - var elem = e.target, type = elem.type; - - if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { - e.liveFired = undefined; - return trigger( "submit", this, arguments ); - } - }); - - } else { - return false; - } - }, - - teardown: function( namespaces ) { - jQuery.event.remove( this, ".specialSubmit" ); - } - }; - -} - -// change delegation, happens here so we have bind. -if ( !jQuery.support.changeBubbles ) { - - var changeFilters, - - getVal = function( elem ) { - var type = elem.type, val = elem.value; - - if ( type === "radio" || type === "checkbox" ) { - val = elem.checked; - - } else if ( type === "select-multiple" ) { - val = elem.selectedIndex > -1 ? - jQuery.map( elem.options, function( elem ) { - return elem.selected; - }).join("-") : - ""; - - } else if ( elem.nodeName.toLowerCase() === "select" ) { - val = elem.selectedIndex; - } - - return val; - }, - - testChange = function testChange( e ) { - var elem = e.target, data, val; - - if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) { - return; - } - - data = jQuery.data( elem, "_change_data" ); - val = getVal(elem); - - // the current data will be also retrieved by beforeactivate - if ( e.type !== "focusout" || elem.type !== "radio" ) { - jQuery.data( elem, "_change_data", val ); - } - - if ( data === undefined || val === data ) { - return; - } - - if ( data != null || val ) { - e.type = "change"; - e.liveFired = undefined; - return jQuery.event.trigger( e, arguments[1], elem ); - } - }; - - jQuery.event.special.change = { - filters: { - focusout: testChange, - - beforedeactivate: testChange, - - click: function( e ) { - var elem = e.target, type = elem.type; - - if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) { - return testChange.call( this, e ); - } - }, - - // Change has to be called before submit - // Keydown will be called before keypress, which is used in submit-event delegation - keydown: function( e ) { - var elem = e.target, type = elem.type; - - if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") || - (e.keyCode === 32 && (type === "checkbox" || type === "radio")) || - type === "select-multiple" ) { - return testChange.call( this, e ); - } - }, - - // Beforeactivate happens also before the previous element is blurred - // with this event you can't trigger a change event, but you can store - // information - beforeactivate: function( e ) { - var elem = e.target; - jQuery.data( elem, "_change_data", getVal(elem) ); - } - }, - - setup: function( data, namespaces ) { - if ( this.type === "file" ) { - return false; - } - - for ( var type in changeFilters ) { - jQuery.event.add( this, type + ".specialChange", changeFilters[type] ); - } - - return rformElems.test( this.nodeName ); - }, - - teardown: function( namespaces ) { - jQuery.event.remove( this, ".specialChange" ); - - return rformElems.test( this.nodeName ); - } - }; - - changeFilters = jQuery.event.special.change.filters; - - // Handle when the input is .focus()'d - changeFilters.focus = changeFilters.beforeactivate; -} - -function trigger( type, elem, args ) { - args[0].type = type; - return jQuery.event.handle.apply( elem, args ); -} - -// Create "bubbling" focus and blur events -if ( document.addEventListener ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { - jQuery.event.special[ fix ] = { - setup: function() { - if ( focusCounts[fix]++ === 0 ) { - document.addEventListener( orig, handler, true ); - } - }, - teardown: function() { - if ( --focusCounts[fix] === 0 ) { - document.removeEventListener( orig, handler, true ); - } - } - }; - - function handler( e ) { - e = jQuery.event.fix( e ); - e.type = fix; - return jQuery.event.trigger( e, null, e.target ); - } - }); -} - -jQuery.each(["bind", "one"], function( i, name ) { - jQuery.fn[ name ] = function( type, data, fn ) { - // Handle object literals - if ( typeof type === "object" ) { - for ( var key in type ) { - this[ name ](key, data, type[key], fn); - } - return this; - } - - if ( jQuery.isFunction( data ) || data === false ) { - fn = data; - data = undefined; - } - - var handler = name === "one" ? jQuery.proxy( fn, function( event ) { - jQuery( this ).unbind( event, handler ); - return fn.apply( this, arguments ); - }) : fn; - - if ( type === "unload" && name !== "one" ) { - this.one( type, data, fn ); - - } else { - for ( var i = 0, l = this.length; i < l; i++ ) { - jQuery.event.add( this[i], type, handler, data ); - } - } - - return this; - }; -}); - -jQuery.fn.extend({ - unbind: function( type, fn ) { - // Handle object literals - if ( typeof type === "object" && !type.preventDefault ) { - for ( var key in type ) { - this.unbind(key, type[key]); - } - - } else { - for ( var i = 0, l = this.length; i < l; i++ ) { - jQuery.event.remove( this[i], type, fn ); - } - } - - return this; - }, - - delegate: function( selector, types, data, fn ) { - return this.live( types, data, fn, selector ); - }, - - undelegate: function( selector, types, fn ) { - if ( arguments.length === 0 ) { - return this.unbind( "live" ); - - } else { - return this.die( types, null, fn, selector ); - } - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - - triggerHandler: function( type, data ) { - if ( this[0] ) { - var event = jQuery.Event( type ); - event.preventDefault(); - event.stopPropagation(); - jQuery.event.trigger( event, data, this[0] ); - return event.result; - } - }, - - toggle: function( fn ) { - // Save reference to arguments for access in closure - var args = arguments, i = 1; - - // link all the functions, so any of them can unbind this click handler - while ( i < args.length ) { - jQuery.proxy( fn, args[ i++ ] ); - } - - return this.click( jQuery.proxy( fn, function( event ) { - // Figure out which function to execute - var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i; - jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 ); - - // Make sure that clicks stop - event.preventDefault(); - - // and execute the function - return args[ lastToggle ].apply( this, arguments ) || false; - })); - }, - - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - } -}); - -var liveMap = { - focus: "focusin", - blur: "focusout", - mouseenter: "mouseover", - mouseleave: "mouseout" -}; - -jQuery.each(["live", "die"], function( i, name ) { - jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) { - var type, i = 0, match, namespaces, preType, - selector = origSelector || this.selector, - context = origSelector ? this : jQuery( this.context ); - - if ( typeof types === "object" && !types.preventDefault ) { - for ( var key in types ) { - context[ name ]( key, data, types[key], selector ); - } - - return this; - } - - if ( jQuery.isFunction( data ) ) { - fn = data; - data = undefined; - } - - types = (types || "").split(" "); - - while ( (type = types[ i++ ]) != null ) { - match = rnamespaces.exec( type ); - namespaces = ""; - - if ( match ) { - namespaces = match[0]; - type = type.replace( rnamespaces, "" ); - } - - if ( type === "hover" ) { - types.push( "mouseenter" + namespaces, "mouseleave" + namespaces ); - continue; - } - - preType = type; - - if ( type === "focus" || type === "blur" ) { - types.push( liveMap[ type ] + namespaces ); - type = type + namespaces; - - } else { - type = (liveMap[ type ] || type) + namespaces; - } - - if ( name === "live" ) { - // bind live handler - for ( var j = 0, l = context.length; j < l; j++ ) { - jQuery.event.add( context[j], "live." + liveConvert( type, selector ), - { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } ); - } - - } else { - // unbind live handler - context.unbind( "live." + liveConvert( type, selector ), fn ); - } - } - - return this; - }; -}); - -function liveHandler( event ) { - var stop, maxLevel, elems = [], selectors = [], - related, match, handleObj, elem, j, i, l, data, close, namespace, ret, - events = jQuery.data( this, this.nodeType ? "events" : "__events__" ); - - if ( typeof events === "function" ) { - events = events.events; - } - - // Make sure we avoid non-left-click bubbling in Firefox (#3861) - if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) { - return; - } - - if ( event.namespace ) { - namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)"); - } - - event.liveFired = this; - - var live = events.live.slice(0); - - for ( j = 0; j < live.length; j++ ) { - handleObj = live[j]; - - if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) { - selectors.push( handleObj.selector ); - - } else { - live.splice( j--, 1 ); - } - } - - match = jQuery( event.target ).closest( selectors, event.currentTarget ); - - for ( i = 0, l = match.length; i < l; i++ ) { - close = match[i]; - - for ( j = 0; j < live.length; j++ ) { - handleObj = live[j]; - - if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) ) { - elem = close.elem; - related = null; - - // Those two events require additional checking - if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) { - event.type = handleObj.preType; - related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0]; - } - - if ( !related || related !== elem ) { - elems.push({ elem: elem, handleObj: handleObj, level: close.level }); - } - } - } - } - - for ( i = 0, l = elems.length; i < l; i++ ) { - match = elems[i]; - - if ( maxLevel && match.level > maxLevel ) { - break; - } - - event.currentTarget = match.elem; - event.data = match.handleObj.data; - event.handleObj = match.handleObj; - - ret = match.handleObj.origHandler.apply( match.elem, arguments ); - - if ( ret === false || event.isPropagationStopped() ) { - maxLevel = match.level; - - if ( ret === false ) { - stop = false; - } - } - } - - return stop; -} - -function liveConvert( type, selector ) { - return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspace, "&"); -} - -jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup error").split(" "), function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - if ( fn == null ) { - fn = data; - data = null; - } - - return arguments.length > 0 ? - this.bind( name, data, fn ) : - this.trigger( name ); - }; - - if ( jQuery.attrFn ) { - jQuery.attrFn[ name ] = true; - } -}); - -// Prevent memory leaks in IE -// Window isn't included so as not to unbind existing unload events -// More info: -// - http://isaacschlueter.com/2006/10/msie-memory-leaks/ -if ( window.attachEvent && !window.addEventListener ) { - jQuery(window).bind("unload", function() { - for ( var id in jQuery.cache ) { - if ( jQuery.cache[ id ].handle ) { - // Try/Catch is to handle iframes being unloaded, see #4280 - try { - jQuery.event.remove( jQuery.cache[ id ].handle.elem ); - } catch(e) {} - } - } - }); -} - - -/*! - * Sizzle CSS Selector Engine - v1.0 - * Copyright 2009, The Dojo Foundation - * Released under the MIT, BSD, and GPL Licenses. - * More information: http://sizzlejs.com/ - */ -(function(){ - -var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, - done = 0, - toString = Object.prototype.toString, - hasDuplicate = false, - baseHasDuplicate = true; - -// Here we check if the JavaScript engine is using some sort of -// optimization where it does not always call our comparision -// function. If that is the case, discard the hasDuplicate value. -// Thus far that includes Google Chrome. -[0, 0].sort(function(){ - baseHasDuplicate = false; - return 0; -}); - -var Sizzle = function(selector, context, results, seed) { - results = results || []; - context = context || document; - - var origContext = context; - - if ( context.nodeType !== 1 && context.nodeType !== 9 ) { - return []; - } - - if ( !selector || typeof selector !== "string" ) { - return results; - } - - var parts = [], m, set, checkSet, extra, prune = true, contextXML = Sizzle.isXML(context), - soFar = selector, ret, cur, pop, i; - - // Reset the position of the chunker regexp (start from head) - do { - chunker.exec(""); - m = chunker.exec(soFar); - - if ( m ) { - soFar = m[3]; - - parts.push( m[1] ); - - if ( m[2] ) { - extra = m[3]; - break; - } - } - } while ( m ); - - if ( parts.length > 1 && origPOS.exec( selector ) ) { - if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { - set = posProcess( parts[0] + parts[1], context ); - } else { - set = Expr.relative[ parts[0] ] ? - [ context ] : - Sizzle( parts.shift(), context ); - - while ( parts.length ) { - selector = parts.shift(); - - if ( Expr.relative[ selector ] ) { - selector += parts.shift(); - } - - set = posProcess( selector, set ); - } - } - } else { - // Take a shortcut and set the context if the root selector is an ID - // (but not if it'll be faster if the inner selector is an ID) - if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && - Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { - ret = Sizzle.find( parts.shift(), context, contextXML ); - context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; - } - - if ( context ) { - ret = seed ? - { expr: parts.pop(), set: makeArray(seed) } : - Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); - set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set; - - if ( parts.length > 0 ) { - checkSet = makeArray(set); - } else { - prune = false; - } - - while ( parts.length ) { - cur = parts.pop(); - pop = cur; - - if ( !Expr.relative[ cur ] ) { - cur = ""; - } else { - pop = parts.pop(); - } - - if ( pop == null ) { - pop = context; - } - - Expr.relative[ cur ]( checkSet, pop, contextXML ); - } - } else { - checkSet = parts = []; - } - } - - if ( !checkSet ) { - checkSet = set; - } - - if ( !checkSet ) { - Sizzle.error( cur || selector ); - } - - if ( toString.call(checkSet) === "[object Array]" ) { - if ( !prune ) { - results.push.apply( results, checkSet ); - } else if ( context && context.nodeType === 1 ) { - for ( i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { - results.push( set[i] ); - } - } - } else { - for ( i = 0; checkSet[i] != null; i++ ) { - if ( checkSet[i] && checkSet[i].nodeType === 1 ) { - results.push( set[i] ); - } - } - } - } else { - makeArray( checkSet, results ); - } - - if ( extra ) { - Sizzle( extra, origContext, results, seed ); - Sizzle.uniqueSort( results ); - } - - return results; -}; - -Sizzle.uniqueSort = function(results){ - if ( sortOrder ) { - hasDuplicate = baseHasDuplicate; - results.sort(sortOrder); - - if ( hasDuplicate ) { - for ( var i = 1; i < results.length; i++ ) { - if ( results[i] === results[i-1] ) { - results.splice(i--, 1); - } - } - } - } - - return results; -}; - -Sizzle.matches = function(expr, set){ - return Sizzle(expr, null, null, set); -}; - -Sizzle.matchesSelector = function(node, expr){ - return Sizzle(expr, null, null, [node]).length > 0; -}; - -Sizzle.find = function(expr, context, isXML){ - var set; - - if ( !expr ) { - return []; - } - - for ( var i = 0, l = Expr.order.length; i < l; i++ ) { - var type = Expr.order[i], match; - - if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { - var left = match[1]; - match.splice(1,1); - - if ( left.substr( left.length - 1 ) !== "\\" ) { - match[1] = (match[1] || "").replace(/\\/g, ""); - set = Expr.find[ type ]( match, context, isXML ); - if ( set != null ) { - expr = expr.replace( Expr.match[ type ], "" ); - break; - } - } - } - } - - if ( !set ) { - set = context.getElementsByTagName("*"); - } - - return {set: set, expr: expr}; -}; - -Sizzle.filter = function(expr, set, inplace, not){ - var old = expr, result = [], curLoop = set, match, anyFound, - isXMLFilter = set && set[0] && Sizzle.isXML(set[0]); - - while ( expr && set.length ) { - for ( var type in Expr.filter ) { - if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { - var filter = Expr.filter[ type ], found, item, left = match[1]; - anyFound = false; - - match.splice(1,1); - - if ( left.substr( left.length - 1 ) === "\\" ) { - continue; - } - - if ( curLoop === result ) { - result = []; - } - - if ( Expr.preFilter[ type ] ) { - match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); - - if ( !match ) { - anyFound = found = true; - } else if ( match === true ) { - continue; - } - } - - if ( match ) { - for ( var i = 0; (item = curLoop[i]) != null; i++ ) { - if ( item ) { - found = filter( item, match, i, curLoop ); - var pass = not ^ !!found; - - if ( inplace && found != null ) { - if ( pass ) { - anyFound = true; - } else { - curLoop[i] = false; - } - } else if ( pass ) { - result.push( item ); - anyFound = true; - } - } - } - } - - if ( found !== undefined ) { - if ( !inplace ) { - curLoop = result; - } - - expr = expr.replace( Expr.match[ type ], "" ); - - if ( !anyFound ) { - return []; - } - - break; - } - } - } - - // Improper expression - if ( expr === old ) { - if ( anyFound == null ) { - Sizzle.error( expr ); - } else { - break; - } - } - - old = expr; - } - - return curLoop; -}; - -Sizzle.error = function( msg ) { - throw "Syntax error, unrecognized expression: " + msg; -}; - -var Expr = Sizzle.selectors = { - order: [ "ID", "NAME", "TAG" ], - match: { - ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, - CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, - NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, - ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, - TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, - CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/, - POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, - PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ - }, - leftMatch: {}, - attrMap: { - "class": "className", - "for": "htmlFor" - }, - attrHandle: { - href: function(elem){ - return elem.getAttribute("href"); - } - }, - relative: { - "+": function(checkSet, part){ - var isPartStr = typeof part === "string", - isTag = isPartStr && !/\W/.test(part), - isPartStrNotTag = isPartStr && !isTag; - - if ( isTag ) { - part = part.toLowerCase(); - } - - for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { - if ( (elem = checkSet[i]) ) { - while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} - - checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? - elem || false : - elem === part; - } - } - - if ( isPartStrNotTag ) { - Sizzle.filter( part, checkSet, true ); - } - }, - ">": function(checkSet, part){ - var isPartStr = typeof part === "string", - elem, i = 0, l = checkSet.length; - - if ( isPartStr && !/\W/.test(part) ) { - part = part.toLowerCase(); - - for ( ; i < l; i++ ) { - elem = checkSet[i]; - if ( elem ) { - var parent = elem.parentNode; - checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; - } - } - } else { - for ( ; i < l; i++ ) { - elem = checkSet[i]; - if ( elem ) { - checkSet[i] = isPartStr ? - elem.parentNode : - elem.parentNode === part; - } - } - - if ( isPartStr ) { - Sizzle.filter( part, checkSet, true ); - } - } - }, - "": function(checkSet, part, isXML){ - var doneName = done++, checkFn = dirCheck, nodeCheck; - - if ( typeof part === "string" && !/\W/.test(part) ) { - part = part.toLowerCase(); - nodeCheck = part; - checkFn = dirNodeCheck; - } - - checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); - }, - "~": function(checkSet, part, isXML){ - var doneName = done++, checkFn = dirCheck, nodeCheck; - - if ( typeof part === "string" && !/\W/.test(part) ) { - part = part.toLowerCase(); - nodeCheck = part; - checkFn = dirNodeCheck; - } - - checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); - } - }, - find: { - ID: function(match, context, isXML){ - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - return m && m.parentNode ? [m] : []; - } - }, - NAME: function(match, context){ - if ( typeof context.getElementsByName !== "undefined" ) { - var ret = [], results = context.getElementsByName(match[1]); - - for ( var i = 0, l = results.length; i < l; i++ ) { - if ( results[i].getAttribute("name") === match[1] ) { - ret.push( results[i] ); - } - } - - return ret.length === 0 ? null : ret; - } - }, - TAG: function(match, context){ - return context.getElementsByTagName(match[1]); - } - }, - preFilter: { - CLASS: function(match, curLoop, inplace, result, not, isXML){ - match = " " + match[1].replace(/\\/g, "") + " "; - - if ( isXML ) { - return match; - } - - for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { - if ( elem ) { - if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) { - if ( !inplace ) { - result.push( elem ); - } - } else if ( inplace ) { - curLoop[i] = false; - } - } - } - - return false; - }, - ID: function(match){ - return match[1].replace(/\\/g, ""); - }, - TAG: function(match, curLoop){ - return match[1].toLowerCase(); - }, - CHILD: function(match){ - if ( match[1] === "nth" ) { - // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' - var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( - match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || - !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); - - // calculate the numbers (first)n+(last) including if they are negative - match[2] = (test[1] + (test[2] || 1)) - 0; - match[3] = test[3] - 0; - } - - // TODO: Move to normal caching system - match[0] = done++; - - return match; - }, - ATTR: function(match, curLoop, inplace, result, not, isXML){ - var name = match[1].replace(/\\/g, ""); - - if ( !isXML && Expr.attrMap[name] ) { - match[1] = Expr.attrMap[name]; - } - - if ( match[2] === "~=" ) { - match[4] = " " + match[4] + " "; - } - - return match; - }, - PSEUDO: function(match, curLoop, inplace, result, not){ - if ( match[1] === "not" ) { - // If we're dealing with a complex expression, or a simple one - if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { - match[3] = Sizzle(match[3], null, null, curLoop); - } else { - var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); - if ( !inplace ) { - result.push.apply( result, ret ); - } - return false; - } - } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { - return true; - } - - return match; - }, - POS: function(match){ - match.unshift( true ); - return match; - } - }, - filters: { - enabled: function(elem){ - return elem.disabled === false && elem.type !== "hidden"; - }, - disabled: function(elem){ - return elem.disabled === true; - }, - checked: function(elem){ - return elem.checked === true; - }, - selected: function(elem){ - // Accessing this property makes selected-by-default - // options in Safari work properly - elem.parentNode.selectedIndex; - return elem.selected === true; - }, - parent: function(elem){ - return !!elem.firstChild; - }, - empty: function(elem){ - return !elem.firstChild; - }, - has: function(elem, i, match){ - return !!Sizzle( match[3], elem ).length; - }, - header: function(elem){ - return (/h\d/i).test( elem.nodeName ); - }, - text: function(elem){ - return "text" === elem.type; - }, - radio: function(elem){ - return "radio" === elem.type; - }, - checkbox: function(elem){ - return "checkbox" === elem.type; - }, - file: function(elem){ - return "file" === elem.type; - }, - password: function(elem){ - return "password" === elem.type; - }, - submit: function(elem){ - return "submit" === elem.type; - }, - image: function(elem){ - return "image" === elem.type; - }, - reset: function(elem){ - return "reset" === elem.type; - }, - button: function(elem){ - return "button" === elem.type || elem.nodeName.toLowerCase() === "button"; - }, - input: function(elem){ - return (/input|select|textarea|button/i).test(elem.nodeName); - } - }, - setFilters: { - first: function(elem, i){ - return i === 0; - }, - last: function(elem, i, match, array){ - return i === array.length - 1; - }, - even: function(elem, i){ - return i % 2 === 0; - }, - odd: function(elem, i){ - return i % 2 === 1; - }, - lt: function(elem, i, match){ - return i < match[3] - 0; - }, - gt: function(elem, i, match){ - return i > match[3] - 0; - }, - nth: function(elem, i, match){ - return match[3] - 0 === i; - }, - eq: function(elem, i, match){ - return match[3] - 0 === i; - } - }, - filter: { - PSEUDO: function(elem, match, i, array){ - var name = match[1], filter = Expr.filters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - } else if ( name === "contains" ) { - return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0; - } else if ( name === "not" ) { - var not = match[3]; - - for ( var j = 0, l = not.length; j < l; j++ ) { - if ( not[j] === elem ) { - return false; - } - } - - return true; - } else { - Sizzle.error( "Syntax error, unrecognized expression: " + name ); - } - }, - CHILD: function(elem, match){ - var type = match[1], node = elem; - switch (type) { - case 'only': - case 'first': - while ( (node = node.previousSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - if ( type === "first" ) { - return true; - } - node = elem; - case 'last': - while ( (node = node.nextSibling) ) { - if ( node.nodeType === 1 ) { - return false; - } - } - return true; - case 'nth': - var first = match[2], last = match[3]; - - if ( first === 1 && last === 0 ) { - return true; - } - - var doneName = match[0], - parent = elem.parentNode; - - if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { - var count = 0; - for ( node = parent.firstChild; node; node = node.nextSibling ) { - if ( node.nodeType === 1 ) { - node.nodeIndex = ++count; - } - } - parent.sizcache = doneName; - } - - var diff = elem.nodeIndex - last; - if ( first === 0 ) { - return diff === 0; - } else { - return ( diff % first === 0 && diff / first >= 0 ); - } - } - }, - ID: function(elem, match){ - return elem.nodeType === 1 && elem.getAttribute("id") === match; - }, - TAG: function(elem, match){ - return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match; - }, - CLASS: function(elem, match){ - return (" " + (elem.className || elem.getAttribute("class")) + " ") - .indexOf( match ) > -1; - }, - ATTR: function(elem, match){ - var name = match[1], - result = Expr.attrHandle[ name ] ? - Expr.attrHandle[ name ]( elem ) : - elem[ name ] != null ? - elem[ name ] : - elem.getAttribute( name ), - value = result + "", - type = match[2], - check = match[4]; - - return result == null ? - type === "!=" : - type === "=" ? - value === check : - type === "*=" ? - value.indexOf(check) >= 0 : - type === "~=" ? - (" " + value + " ").indexOf(check) >= 0 : - !check ? - value && result !== false : - type === "!=" ? - value !== check : - type === "^=" ? - value.indexOf(check) === 0 : - type === "$=" ? - value.substr(value.length - check.length) === check : - type === "|=" ? - value === check || value.substr(0, check.length + 1) === check + "-" : - false; - }, - POS: function(elem, match, i, array){ - var name = match[2], filter = Expr.setFilters[ name ]; - - if ( filter ) { - return filter( elem, i, match, array ); - } - } - } -}; - -var origPOS = Expr.match.POS, - fescape = function(all, num){ - return "\\" + (num - 0 + 1); - }; - -for ( var type in Expr.match ) { - Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); - Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); -} - -var makeArray = function(array, results) { - array = Array.prototype.slice.call( array, 0 ); - - if ( results ) { - results.push.apply( results, array ); - return results; - } - - return array; -}; - -// Perform a simple check to determine if the browser is capable of -// converting a NodeList to an array using builtin methods. -// Also verifies that the returned array holds DOM nodes -// (which is not the case in the Blackberry browser) -try { - Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; - -// Provide a fallback method if it does not work -} catch(e){ - makeArray = function(array, results) { - var ret = results || [], i = 0; - - if ( toString.call(array) === "[object Array]" ) { - Array.prototype.push.apply( ret, array ); - } else { - if ( typeof array.length === "number" ) { - for ( var l = array.length; i < l; i++ ) { - ret.push( array[i] ); - } - } else { - for ( ; array[i]; i++ ) { - ret.push( array[i] ); - } - } - } - - return ret; - }; -} - -var sortOrder, siblingCheck; - -if ( document.documentElement.compareDocumentPosition ) { - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { - return a.compareDocumentPosition ? -1 : 1; - } - - return a.compareDocumentPosition(b) & 4 ? -1 : 1; - }; -} else { - sortOrder = function( a, b ) { - var ap = [], bp = [], aup = a.parentNode, bup = b.parentNode, - cur = aup, al, bl; - - // The nodes are identical, we can exit early - if ( a === b ) { - hasDuplicate = true; - return 0; - - // If the nodes are siblings (or identical) we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - - // If no parents were found then the nodes are disconnected - } else if ( !aup ) { - return -1; - - } else if ( !bup ) { - return 1; - } - - // Otherwise they're somewhere else in the tree so we need - // to build up a full list of the parentNodes for comparison - while ( cur ) { - ap.unshift( cur ); - cur = cur.parentNode; - } - - cur = bup; - - while ( cur ) { - bp.unshift( cur ); - cur = cur.parentNode; - } - - al = ap.length; - bl = bp.length; - - // Start walking down the tree looking for a discrepancy - for ( var i = 0; i < al && i < bl; i++ ) { - if ( ap[i] !== bp[i] ) { - return siblingCheck( ap[i], bp[i] ); - } - } - - // We ended someplace up the tree so do a sibling check - return i === al ? - siblingCheck( a, bp[i], -1 ) : - siblingCheck( ap[i], b, 1 ); - }; - - siblingCheck = function( a, b, ret ) { - if ( a === b ) { - return ret; - } - - var cur = a.nextSibling; - - while ( cur ) { - if ( cur === b ) { - return -1; - } - - cur = cur.nextSibling; - } - - return 1; - }; -} - -// Utility function for retreiving the text value of an array of DOM nodes -Sizzle.getText = function( elems ) { - var ret = "", elem; - - for ( var i = 0; elems[i]; i++ ) { - elem = elems[i]; - - // Get the text from text nodes and CDATA nodes - if ( elem.nodeType === 3 || elem.nodeType === 4 ) { - ret += elem.nodeValue; - - // Traverse everything else, except comment nodes - } else if ( elem.nodeType !== 8 ) { - ret += Sizzle.getText( elem.childNodes ); - } - } - - return ret; -}; - -// Check to see if the browser returns elements by name when -// querying by getElementById (and provide a workaround) -(function(){ - // We're going to inject a fake input element with a specified name - var form = document.createElement("div"), - id = "script" + (new Date()).getTime(); - form.innerHTML = ""; - - // Inject it into the root element, check its status, and remove it quickly - var root = document.documentElement; - root.insertBefore( form, root.firstChild ); - - // The workaround has to do additional checks after a getElementById - // Which slows things down for other browsers (hence the branching) - if ( document.getElementById( id ) ) { - Expr.find.ID = function(match, context, isXML){ - if ( typeof context.getElementById !== "undefined" && !isXML ) { - var m = context.getElementById(match[1]); - return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; - } - }; - - Expr.filter.ID = function(elem, match){ - var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); - return elem.nodeType === 1 && node && node.nodeValue === match; - }; - } - - root.removeChild( form ); - root = form = null; // release memory in IE -})(); - -(function(){ - // Check to see if the browser returns only elements - // when doing getElementsByTagName("*") - - // Create a fake element - var div = document.createElement("div"); - div.appendChild( document.createComment("") ); - - // Make sure no comments are found - if ( div.getElementsByTagName("*").length > 0 ) { - Expr.find.TAG = function(match, context){ - var results = context.getElementsByTagName(match[1]); - - // Filter out possible comments - if ( match[1] === "*" ) { - var tmp = []; - - for ( var i = 0; results[i]; i++ ) { - if ( results[i].nodeType === 1 ) { - tmp.push( results[i] ); - } - } - - results = tmp; - } - - return results; - }; - } - - // Check to see if an attribute returns normalized href attributes - div.innerHTML = ""; - if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && - div.firstChild.getAttribute("href") !== "#" ) { - Expr.attrHandle.href = function(elem){ - return elem.getAttribute("href", 2); - }; - } - - div = null; // release memory in IE -})(); - -if ( document.querySelectorAll ) { - (function(){ - var oldSizzle = Sizzle, div = document.createElement("div"); - div.innerHTML = "

    "; - - // Safari can't handle uppercase or unicode characters when - // in quirks mode. - if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { - return; - } - - Sizzle = function(query, context, extra, seed){ - context = context || document; - - // Only use querySelectorAll on non-XML documents - // (ID selectors don't work in non-HTML documents) - if ( !seed && !Sizzle.isXML(context) ) { - if ( context.nodeType === 9 ) { - try { - return makeArray( context.querySelectorAll(query), extra ); - } catch(qsaError) {} - - // qSA works strangely on Element-rooted queries - // We can work around this by specifying an extra ID on the root - // and working up from there (Thanks to Andrew Dupont for the technique) - // IE 8 doesn't work on object elements - } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { - var old = context.id, id = context.id = "__sizzle__"; - - try { - return makeArray( context.querySelectorAll( "#" + id + " " + query ), extra ); - - } catch(pseudoError) { - } finally { - if ( old ) { - context.id = old; - - } else { - context.removeAttribute( "id" ); - } - } - } - } - - return oldSizzle(query, context, extra, seed); - }; - - for ( var prop in oldSizzle ) { - Sizzle[ prop ] = oldSizzle[ prop ]; - } - - div = null; // release memory in IE - })(); -} - -(function(){ - var html = document.documentElement, - matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector, - pseudoWorks = false; - - try { - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( document.documentElement, ":sizzle" ); - - } catch( pseudoError ) { - pseudoWorks = true; - } - - if ( matches ) { - Sizzle.matchesSelector = function( node, expr ) { - try { - if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) ) { - return matches.call( node, expr ); - } - } catch(e) {} - - return Sizzle(expr, null, null, [node]).length > 0; - }; - } -})(); - -(function(){ - var div = document.createElement("div"); - - div.innerHTML = "
    "; - - // Opera can't find a second classname (in 9.6) - // Also, make sure that getElementsByClassName actually exists - if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { - return; - } - - // Safari caches class attributes, doesn't catch changes (in 3.2) - div.lastChild.className = "e"; - - if ( div.getElementsByClassName("e").length === 1 ) { - return; - } - - Expr.order.splice(1, 0, "CLASS"); - Expr.find.CLASS = function(match, context, isXML) { - if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { - return context.getElementsByClassName(match[1]); - } - }; - - div = null; // release memory in IE -})(); - -function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - if ( elem ) { - elem = elem[dir]; - var match = false; - - while ( elem ) { - if ( elem.sizcache === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 && !isXML ){ - elem.sizcache = doneName; - elem.sizset = i; - } - - if ( elem.nodeName.toLowerCase() === cur ) { - match = elem; - break; - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} - -function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { - for ( var i = 0, l = checkSet.length; i < l; i++ ) { - var elem = checkSet[i]; - if ( elem ) { - elem = elem[dir]; - var match = false; - - while ( elem ) { - if ( elem.sizcache === doneName ) { - match = checkSet[elem.sizset]; - break; - } - - if ( elem.nodeType === 1 ) { - if ( !isXML ) { - elem.sizcache = doneName; - elem.sizset = i; - } - if ( typeof cur !== "string" ) { - if ( elem === cur ) { - match = true; - break; - } - - } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { - match = elem; - break; - } - } - - elem = elem[dir]; - } - - checkSet[i] = match; - } - } -} - -Sizzle.contains = document.documentElement.contains ? function(a, b){ - return a !== b && (a.contains ? a.contains(b) : true); -} : function(a, b){ - return !!(a.compareDocumentPosition(b) & 16); -}; - -Sizzle.isXML = function(elem){ - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -var posProcess = function(selector, context){ - var tmpSet = [], later = "", match, - root = context.nodeType ? [context] : context; - - // Position selectors must be done after the filter - // And so must :not(positional) so we move all PSEUDOs to the end - while ( (match = Expr.match.PSEUDO.exec( selector )) ) { - later += match[0]; - selector = selector.replace( Expr.match.PSEUDO, "" ); - } - - selector = Expr.relative[selector] ? selector + "*" : selector; - - for ( var i = 0, l = root.length; i < l; i++ ) { - Sizzle( selector, root[i], tmpSet ); - } - - return Sizzle.filter( later, tmpSet ); -}; - -// EXPOSE -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.filters; -jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; - - -})(); - - -var runtil = /Until$/, - rparentsprev = /^(?:parents|prevUntil|prevAll)/, - // Note: This RegExp should be improved, or likely pulled from Sizzle - rmultiselector = /,/, - isSimple = /^.[^:#\[\.,]*$/, - slice = Array.prototype.slice, - POS = jQuery.expr.match.POS; - -jQuery.fn.extend({ - find: function( selector ) { - var ret = this.pushStack( "", "find", selector ), length = 0; - - for ( var i = 0, l = this.length; i < l; i++ ) { - length = ret.length; - jQuery.find( selector, this[i], ret ); - - if ( i > 0 ) { - // Make sure that the results are unique - for ( var n = length; n < ret.length; n++ ) { - for ( var r = 0; r < length; r++ ) { - if ( ret[r] === ret[n] ) { - ret.splice(n--, 1); - break; - } - } - } - } - } - - return ret; - }, - - has: function( target ) { - var targets = jQuery( target ); - return this.filter(function() { - for ( var i = 0, l = targets.length; i < l; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - not: function( selector ) { - return this.pushStack( winnow(this, selector, false), "not", selector); - }, - - filter: function( selector ) { - return this.pushStack( winnow(this, selector, true), "filter", selector ); - }, - - is: function( selector ) { - return !!selector && jQuery.filter( selector, this ).length > 0; - }, - - closest: function( selectors, context ) { - var ret = [], i, l, cur = this[0]; - - if ( jQuery.isArray( selectors ) ) { - var match, matches = {}, selector, level = 1; - - if ( cur && selectors.length ) { - for ( i = 0, l = selectors.length; i < l; i++ ) { - selector = selectors[i]; - - if ( !matches[selector] ) { - matches[selector] = jQuery.expr.match.POS.test( selector ) ? - jQuery( selector, context || this.context ) : - selector; - } - } - - while ( cur && cur.ownerDocument && cur !== context ) { - for ( selector in matches ) { - match = matches[selector]; - - if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) { - ret.push({ selector: selector, elem: cur, level: level }); - } - } - - cur = cur.parentNode; - level++; - } - } - - return ret; - } - - var pos = POS.test( selectors ) ? - jQuery( selectors, context || this.context ) : null; - - for ( i = 0, l = this.length; i < l; i++ ) { - cur = this[i]; - - while ( cur ) { - if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { - ret.push( cur ); - break; - - } else { - cur = cur.parentNode; - if ( !cur || !cur.ownerDocument || cur === context ) { - break; - } - } - } - } - - ret = ret.length > 1 ? jQuery.unique(ret) : ret; - - return this.pushStack( ret, "closest", selectors ); - }, - - // Determine the position of an element within - // the matched set of elements - index: function( elem ) { - if ( !elem || typeof elem === "string" ) { - return jQuery.inArray( this[0], - // If it receives a string, the selector is used - // If it receives nothing, the siblings are used - elem ? jQuery( elem ) : this.parent().children() ); - } - // Locate the position of the desired element - return jQuery.inArray( - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[0] : elem, this ); - }, - - add: function( selector, context ) { - var set = typeof selector === "string" ? - jQuery( selector, context || this.context ) : - jQuery.makeArray( selector ), - all = jQuery.merge( this.get(), set ); - - return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? - all : - jQuery.unique( all ) ); - }, - - andSelf: function() { - return this.add( this.prevObject ); - } -}); - -// A painfully simple check to see if an element is disconnected -// from a document (should be improved, where feasible). -function isDisconnected( node ) { - return !node || !node.parentNode || node.parentNode.nodeType === 11; -} - -jQuery.each({ - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return jQuery.dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return jQuery.nth( elem, 2, "nextSibling" ); - }, - prev: function( elem ) { - return jQuery.nth( elem, 2, "previousSibling" ); - }, - nextAll: function( elem ) { - return jQuery.dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return jQuery.dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return jQuery.sibling( elem.parentNode.firstChild, elem ); - }, - children: function( elem ) { - return jQuery.sibling( elem.firstChild ); - }, - contents: function( elem ) { - return jQuery.nodeName( elem, "iframe" ) ? - elem.contentDocument || elem.contentWindow.document : - jQuery.makeArray( elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var ret = jQuery.map( this, fn, until ); - - if ( !runtil.test( name ) ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - ret = jQuery.filter( selector, ret ); - } - - ret = this.length > 1 ? jQuery.unique( ret ) : ret; - - if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { - ret = ret.reverse(); - } - - return this.pushStack( ret, name, slice.call(arguments).join(",") ); - }; -}); - -jQuery.extend({ - filter: function( expr, elems, not ) { - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 ? - jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : - jQuery.find.matches(expr, elems); - }, - - dir: function( elem, dir, until ) { - var matched = [], cur = elem[dir]; - while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { - if ( cur.nodeType === 1 ) { - matched.push( cur ); - } - cur = cur[dir]; - } - return matched; - }, - - nth: function( cur, result, dir, elem ) { - result = result || 1; - var num = 0; - - for ( ; cur; cur = cur[dir] ) { - if ( cur.nodeType === 1 && ++num === result ) { - break; - } - } - - return cur; - }, - - sibling: function( n, elem ) { - var r = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - r.push( n ); - } - } - - return r; - } -}); - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, keep ) { - if ( jQuery.isFunction( qualifier ) ) { - return jQuery.grep(elements, function( elem, i ) { - var retVal = !!qualifier.call( elem, i, elem ); - return retVal === keep; - }); - - } else if ( qualifier.nodeType ) { - return jQuery.grep(elements, function( elem, i ) { - return (elem === qualifier) === keep; - }); - - } else if ( typeof qualifier === "string" ) { - var filtered = jQuery.grep(elements, function( elem ) { - return elem.nodeType === 1; - }); - - if ( isSimple.test( qualifier ) ) { - return jQuery.filter(qualifier, filtered, !keep); - } else { - qualifier = jQuery.filter( qualifier, filtered ); - } - } - - return jQuery.grep(elements, function( elem, i ) { - return (jQuery.inArray( elem, qualifier ) >= 0) === keep; - }); -} - - - - -var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, - rleadingWhitespace = /^\s+/, - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, - rtagName = /<([\w:]+)/, - rtbody = /\s]+\/)>/g, - wrapMap = { - option: [ 1, "" ], - legend: [ 1, "
    ", "
    " ], - thead: [ 1, "", "
    " ], - tr: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - col: [ 2, "", "
    " ], - area: [ 1, "", "" ], - _default: [ 0, "", "" ] - }; - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// IE can't serialize and - - - - \ No newline at end of file From 3a6d98aa373d18474b59e449cbcb6cac85706cef Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Tue, 21 Dec 2010 02:33:20 -0800 Subject: [PATCH 216/393] Fix font size in sidebar --- lib/gollum/frontend/public/css/gollum.css | 5 +++++ lib/gollum/frontend/templates/page.mustache | 13 ------------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/lib/gollum/frontend/public/css/gollum.css b/lib/gollum/frontend/public/css/gollum.css index 01ca9b41..10a58737 100755 --- a/lib/gollum/frontend/public/css/gollum.css +++ b/lib/gollum/frontend/public/css/gollum.css @@ -139,6 +139,11 @@ a:hover, a:visited { text-shadow: 0 1px 0 #fff; } + #wiki-rightbar p { + font-size: 1.2em; + line-height: 1.6em; + } + /* @section footer */ #wiki-footer { clear: both; diff --git a/lib/gollum/frontend/templates/page.mustache b/lib/gollum/frontend/templates/page.mustache index aec101e0..3d7589fa 100755 --- a/lib/gollum/frontend/templates/page.mustache +++ b/lib/gollum/frontend/templates/page.mustache @@ -20,19 +20,6 @@
    {{#has_sidebar}}
    - {{{sidebar_content}}}
    {{/has_sidebar}} From ed38357ac8e3fda9c7c5a31decd83b3c60eb7721 Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Tue, 21 Dec 2010 02:33:57 -0800 Subject: [PATCH 217/393] Reset type size for syntax highlighting --- lib/gollum/frontend/public/css/template.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gollum/frontend/public/css/template.css b/lib/gollum/frontend/public/css/template.css index 9cde6b98..03d573aa 100755 --- a/lib/gollum/frontend/public/css/template.css +++ b/lib/gollum/frontend/public/css/template.css @@ -323,7 +323,7 @@ #template .data tr td { font-family: "Consolas", "Monaco", "Andale Mono", "Courier New", monospace; - font-size: 1.2em; + font-size: 1.0em; /* reset size */ line-height: 1.8em; margin: 0; padding: 0; From 491eee7ebdcbfe69e2818ceaa1a9c5a709af1704 Mon Sep 17 00:00:00 2001 From: rick Date: Tue, 21 Dec 2010 10:37:04 -0800 Subject: [PATCH 218/393] each test file that clones a repo gets its own repo path --- test/helper.rb | 11 ++++++----- test/test_page_revert.rb | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/test/helper.rb b/test/helper.rb index a69fe485..ee413666 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -22,11 +22,12 @@ def testpath(path) end def cloned_testpath(path) - path = testpath(path) - cloned = path.chomp('.git') - FileUtils.rm_rf cloned - Dir.chdir(File.expand_path(File.dirname(path))) do - %x{git clone #{File.basename(path)}} + repo = File.expand_path(testpath(path)) + path = File.dirname(repo) + cloned = File.join(path, self.class.name) + FileUtils.rm_rf(cloned) + Dir.chdir(path) do + %x{git clone #{File.basename(repo)} #{self.class.name}} end cloned end diff --git a/test/test_page_revert.rb b/test/test_page_revert.rb index 9b32401d..9f96852f 100644 --- a/test/test_page_revert.rb +++ b/test/test_page_revert.rb @@ -8,7 +8,7 @@ context "Page Reverting" do end teardown do - FileUtils.rm_rf @path + FileUtils.rm_rf(@path) end test "reverts single commit" do From 096edd20dae1cfea2233fc02fe890b6202b63353 Mon Sep 17 00:00:00 2001 From: jondot Date: Fri, 31 Dec 2010 19:21:54 +0200 Subject: [PATCH 219/393] fixing dir normalization under windows --- lib/gollum/blob_entry.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/gollum/blob_entry.rb b/lib/gollum/blob_entry.rb index cbadc01c..9f30d4c3 100644 --- a/lib/gollum/blob_entry.rb +++ b/lib/gollum/blob_entry.rb @@ -60,6 +60,7 @@ module Gollum # normalize_dir("foo") # => "/foo" # normalize_dir("/foo/") # => "/foo" # normalize_dir("/") # => "" + # normalize_dir("c:/") # => "" # # dir - String directory name. # @@ -68,7 +69,7 @@ module Gollum def self.normalize_dir(dir) if dir dir = ::File.expand_path(dir, '/') - dir = '' if dir == '/' + dir = '' if (dir == '/' || dir =~ /^.:\/$/) end dir end From e641f69589242d602f7274e986acdd26ad1d53ea Mon Sep 17 00:00:00 2001 From: rick Date: Fri, 31 Dec 2010 12:25:18 -0600 Subject: [PATCH 220/393] add test for BlobEntry.normalize_dir --- test/test_page.rb | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/test_page.rb b/test/test_page.rb index e7e5f8c5..1d9bdbbc 100644 --- a/test/test_page.rb +++ b/test/test_page.rb @@ -134,4 +134,12 @@ context "Page" do assert_equal '', Gollum::Page.cname(nil) assert_equal '', Gollum::Page.cname(3) end + + test "normalize_dir" do + assert_equal "", Gollum::BlobEntry.normalize_dir("") + assert_equal "", Gollum::BlobEntry.normalize_dir(".") + assert_equal "", Gollum::BlobEntry.normalize_dir("/") + assert_equal "/foo", Gollum::BlobEntry.normalize_dir("foo") + assert_equal "/foo", Gollum::BlobEntry.normalize_dir("/foo") + end end \ No newline at end of file From 4fa39517186f3f0e1df652fb7bd141b2c35a2e19 Mon Sep 17 00:00:00 2001 From: rick Date: Fri, 31 Dec 2010 12:30:23 -0600 Subject: [PATCH 221/393] fix tests for normalize_dir --- lib/gollum/blob_entry.rb | 9 +++++---- test/test_page.rb | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/gollum/blob_entry.rb b/lib/gollum/blob_entry.rb index 9f30d4c3..535f16c7 100644 --- a/lib/gollum/blob_entry.rb +++ b/lib/gollum/blob_entry.rb @@ -32,7 +32,7 @@ module Gollum # # Returns an unbaked Grit::Blob instance. def blob(repo) - @blob ||= Grit::Blob.create(repo, + @blob ||= Grit::Blob.create(repo, :id => @sha, :name => name, :size => @size) end @@ -53,7 +53,7 @@ module Gollum end # Normalizes a given directory name for searching through tree paths. - # Ensures that a directory begins with a slash, or + # Ensures that a directory begins with a slash, or # # normalize_dir("") # => "" # normalize_dir(".") # => "" @@ -64,12 +64,13 @@ module Gollum # # dir - String directory name. # - # Returns a normalized String directory name, or nil if no directory + # Returns a normalized String directory name, or nil if no directory # is given. def self.normalize_dir(dir) + return '' if dir =~ /^.:\/$/ if dir dir = ::File.expand_path(dir, '/') - dir = '' if (dir == '/' || dir =~ /^.:\/$/) + dir = '' if dir == '/' end dir end diff --git a/test/test_page.rb b/test/test_page.rb index 1d9bdbbc..0a2631b3 100644 --- a/test/test_page.rb +++ b/test/test_page.rb @@ -139,6 +139,7 @@ context "Page" do assert_equal "", Gollum::BlobEntry.normalize_dir("") assert_equal "", Gollum::BlobEntry.normalize_dir(".") assert_equal "", Gollum::BlobEntry.normalize_dir("/") + assert_equal "", Gollum::BlobEntry.normalize_dir("c:/") assert_equal "/foo", Gollum::BlobEntry.normalize_dir("foo") assert_equal "/foo", Gollum::BlobEntry.normalize_dir("/foo") end From 87da1eaa6dd1f8943cd5e2aca51dc6c88b1aff7a Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 3 Jan 2011 14:54:51 -0600 Subject: [PATCH 222/393] apparently gemfile.lock is baddd --- .gitignore | 1 + Gemfile.lock | 58 ---------------------------------------------------- 2 files changed, 1 insertion(+), 58 deletions(-) delete mode 100644 Gemfile.lock diff --git a/.gitignore b/.gitignore index 1beac75b..bd43e951 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ coverage pkg .DS_Store .bundle +Gemfile.lock diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 50e67278..00000000 --- a/Gemfile.lock +++ /dev/null @@ -1,58 +0,0 @@ -PATH - remote: . - specs: - gollum (1.1.0) - albino (~> 1.0) - github-markup (>= 0.4.0, < 1.0.0) - grit (~> 2.3) - mustache (>= 0.11.2, < 1.0.0) - nokogiri (~> 1.4) - sanitize (~> 1.1) - sinatra (~> 1.0) - -GEM - remote: http://rubygems.org/ - specs: - RedCloth (4.2.3) - albino (1.0) - diff-lcs (1.1.2) - github-markup (0.5.0) - grit (2.3.0) - diff-lcs (~> 1.1) - mime-types (~> 1.15) - mime-types (1.16) - mocha (0.9.9) - rake - mustache (0.11.2) - nokogiri (1.4.3.1) - org-ruby (0.5.3) - rubypants (>= 0.2.0) - rack (1.2.1) - rake (0.8.7) - rdiscount (1.6.5) - rubypants (0.2.0) - sanitize (1.2.1) - nokogiri (~> 1.4.1) - shoulda (2.11.3) - sinatra (1.1.0) - rack (~> 1.1) - tilt (~> 1.1) - tilt (1.1) - -PLATFORMS - ruby - -DEPENDENCIES - RedCloth - albino (~> 1.0) - github-markup (>= 0.4.0, < 1.0.0) - gollum! - grit (~> 2.3) - mocha - mustache (>= 0.11.2, < 1.0.0) - nokogiri (~> 1.4) - org-ruby - rdiscount - sanitize (~> 1.1) - shoulda - sinatra (~> 1.0) From f7b7d0d96594d21caba71177885530f13c2007a9 Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 3 Jan 2011 15:52:13 -0800 Subject: [PATCH 223/393] add mediawiki support --- lib/gollum/page.rb | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/lib/gollum/page.rb b/lib/gollum/page.rb index 5b888964..7a71fbdc 100644 --- a/lib/gollum/page.rb +++ b/lib/gollum/page.rb @@ -4,15 +4,16 @@ module Gollum Wiki.page_class = self - VALID_PAGE_RE = /^(.+)\.(md|mkdn?|mdown|markdown|textile|rdoc|org|creole|re?st(\.txt)?|asciidoc|pod)$/i - FORMAT_NAMES = { :markdown => "Markdown", - :textile => "Textile", - :rdoc => "RDoc", - :org => "Org-mode", - :creole => "Creole", - :rest => "reStructuredText", - :asciidoc => "AsciiDoc", - :pod => "Pod" } + VALID_PAGE_RE = /^(.+)\.(md|mkdn?|mdown|markdown|textile|rdoc|org|creole|re?st(\.txt)?|asciidoc|pod|(media)?wiki)$/i + FORMAT_NAMES = { :markdown => "Markdown", + :textile => "Textile", + :rdoc => "RDoc", + :org => "Org-mode", + :creole => "Creole", + :rest => "reStructuredText", + :asciidoc => "AsciiDoc", + :mediawiki => "MediaWiki", + :pod => "Pod" } # Sets a Boolean determing whether this page is a historical version. # @@ -161,6 +162,8 @@ module Gollum :pod when /\.(\d)$/i :roff + when /\.(media)?wiki$/i + :mediawiki else nil end @@ -244,14 +247,15 @@ module Gollum # Returns the String extension (no leading period). def self.format_to_ext(format) case format - when :markdown then 'md' - when :textile then 'textile' - when :rdoc then 'rdoc' - when :org then 'org' - when :creole then 'creole' - when :rest then 'rest' - when :asciidoc then 'asciidoc' - when :pod then 'pod' + when :markdown then 'md' + when :textile then 'textile' + when :rdoc then 'rdoc' + when :org then 'org' + when :creole then 'creole' + when :rest then 'rest' + when :asciidoc then 'asciidoc' + when :pod then 'pod' + when :mediawiki then 'mediawiki' end end From 21332010aba92c040d04a72f9fb4dc6f824ac9a1 Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 3 Jan 2011 15:52:27 -0800 Subject: [PATCH 224/393] new textmate whitespace killa --- lib/gollum/page.rb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/gollum/page.rb b/lib/gollum/page.rb index 7a71fbdc..faa5f1a1 100644 --- a/lib/gollum/page.rb +++ b/lib/gollum/page.rb @@ -66,7 +66,7 @@ module Gollum @blob && @blob.name end - # Public: The canonical page name without extension, and dashes converted + # Public: The canonical page name without extension, and dashes converted # to spaces. # # Returns the String name. @@ -179,7 +179,7 @@ module Gollum # options - The options Hash: # :page - The Integer page number (default: 1). # :per_page - The Integer max count of items to return. - # :follow - Follow's a file across renames, but falls back + # :follow - Follow's a file across renames, but falls back # to a slower Grit native call. (default: false) # # Returns an Array of Grit::Commit. @@ -209,7 +209,7 @@ module Gollum @sidebar ||= find_sub_page(:sidebar) end - # Gets a Boolean determining whether this page is a historical version. + # Gets a Boolean determining whether this page is a historical version. # Historical pages are pulled using exact SHA hashes and format all links # with rel="nofollow" # @@ -284,7 +284,7 @@ module Gollum def find(name, version) map = @wiki.tree_map_for(version.to_s) if page = find_page_in_tree(map, name) - page.version = version.is_a?(Grit::Commit) ? + page.version = version.is_a?(Grit::Commit) ? version : @wiki.commit_for(version) page.historical = page.version.to_s == version.to_s page @@ -297,7 +297,7 @@ module Gollum # map - The Array tree map from Wiki#tree_map. # name - The canonical String page name. # checked_dir - Optional String of the directory a matching page needs - # to be in. The string should + # to be in. The string should # # Returns a Gollum::Page or nil if the page could not be found. def find_page_in_tree(map, name, checked_dir = nil) @@ -356,7 +356,7 @@ module Gollum end end - # Loads a sub page. Sub page nanes (footers) are prefixed with + # Loads a sub page. Sub page nanes (footers) are prefixed with # an underscore to distinguish them from other Pages. # # name - String page name. From ea49ef806b3f9c6a0e7e82508f551cd2d48043ae Mon Sep 17 00:00:00 2001 From: Eston Bond Date: Mon, 3 Jan 2011 16:48:42 -0800 Subject: [PATCH 225/393] Fail nicely with a malformed language definition, play by Crockford's rules --- .../javascript/gollum-editor/gollum.editor.js | 116 ++++++++++-------- 1 file changed, 68 insertions(+), 48 deletions(-) diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js index d1401280..9f63a3b8 100755 --- a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js @@ -107,11 +107,12 @@ * Used by the definitions in langs/ to register language definitions. */ $.GollumEditor.defineLanguage = function( language_name, languageObject ) { - if ( typeof languageObject == 'object' ) + if ( typeof languageObject == 'object' ) { LanguageDefinition.define( language_name, languageObject ); - else - debug('GollumEditor.defineLanguage: definition for ' + language_name - + ' is not an object'); + } else { + debug('GollumEditor.defineLanguage: definition for ' + language_name + + ' is not an object'); + } }; @@ -123,8 +124,8 @@ * @return void */ var debug = function(m) { - if ( ActiveOptions.Debug - && typeof console != 'undefined' ) { + if ( ActiveOptions.Debug && + typeof console != 'undefined' ) { console.log( m ); } }; @@ -164,15 +165,19 @@ LanguageDefinition.loadFor( name, function(x, t) { if ( t != 'success' ) { debug('Failed to load language definition for ' + name); + // well, fake it and turn everything off for this one + LanguageDefinition.define( name, {} ); return; } // update features that rely on the language definition - if ( EditorHas.functionBar() ) + if ( EditorHas.functionBar() ) { FunctionBar.refresh(); + } - if ( LanguageDefinition.isValid() && EditorHas.formatSelector() ) + if ( LanguageDefinition.isValid() && EditorHas.formatSelector() ) { FormatSelector.updateSelected(); + } } ); } else { @@ -236,11 +241,14 @@ * @return boolean */ isLoadedFor: function( markup_name ) { - if ( LanguageDefinition._LOADED_LANGS.length == 0 ) return false; + if ( LanguageDefinition._LOADED_LANGS.length === 0 ) { + return false; + } for ( var i=0; i < LanguageDefinition._LOADED_LANGS.length; i++ ) { - if ( LanguageDefinition._LOADED_LANGS[i] == markup_name ) - return true; + if ( LanguageDefinition._LOADED_LANGS[i] == markup_name ) { + return true; + } } return false; }, @@ -406,8 +414,9 @@ $(this).click( FunctionBar.evtFunctionButtonClick ); $(this).removeClass('disabled'); } - else if ( $(this).attr('id') != 'function-help' ) + else if ( $(this).attr('id') != 'function-help' ) { $(this).addClass('disabled'); + } }); // show bar as active @@ -458,7 +467,7 @@ // execute a replacement function if one exists if ( definitionObject.exec && typeof definitionObject.exec == 'function' ) { - definitionObject.exec ( txt, selText, $('#gollum-editor-body') ); + definitionObject.exec( txt, selText, $('#gollum-editor-body') ); return; } @@ -487,11 +496,11 @@ // remove any excess backreferences from the replace string rt = rt.replace( /\$[\d]/g, '' ); repText = rt; - } else if ( repText == '' ) { + } else if ( repText === '' ) { debug('Search string is empty'); // find position of $1 - this is where we will place the cursor - var cursor = rt.indexOf('$1'); + cursor = rt.indexOf('$1'); // we have an empty string, so just remove backreferences repText = rt.replace( /\$[\d]/g, '' ); @@ -513,9 +522,10 @@ repText += definitionObject.append; } - if ( repText ) + if ( repText ) { FunctionBar.replaceFieldSelection( $('#gollum-editor-body'), repText, reselect, cursor ); + } }, @@ -536,22 +546,25 @@ start = el.selectionStart; end = el.selectionEnd; } else { - var range = document.selection.createRange(); - var stored_range = range.duplicate(); - stored_range.moveToElementText( el ); - stored_range.setEndPoint( 'EndToEnd', range ); - start = stored_range.text.length - range.text.length; - end = start + range.text.length; - - // so, uh, we're close, but we need to search for line breaks and - // adjust the start/end points accordingly since IE counts them as - // 2 characters in TextRange. - var s = start; - var lb = 0; - debug('IE: start position is currently ' + s); - for ( var i=0; i < s; i++ ) - if ( el.value.charAt(i).match(/\r/) ) - ++lb; + var range = document.selection.createRange(); + var stored_range = range.duplicate(); + stored_range.moveToElementText( el ); + stored_range.setEndPoint( 'EndToEnd', range ); + start = stored_range.text.length - range.text.length; + end = start + range.text.length; + + // so, uh, we're close, but we need to search for line breaks and + // adjust the start/end points accordingly since IE counts them as + // 2 characters in TextRange. + var s = start; + var lb = 0; + var i; + debug('IE: start position is currently ' + s); + for ( i=0; i < s; i++ ) { + if ( el.value.charAt(i).match(/\r/) ) { + ++lb; + } + } if ( lb ) { debug('IE start: compensating for ' + lb + ' line breaks'); @@ -560,10 +573,12 @@ } var e = end; - for ( var i=0; i < e; i++ ) - if ( el.value.charAt(i).match(/\r/) ) - ++lb; - + for ( i=0; i < e; i++ ) { + if ( el.value.charAt(i).match(/\r/) ) { + ++lb; + } + } + if ( lb ) { debug('IE end: compensating for ' + lb + ' line breaks'); end = end - lb; @@ -592,8 +607,8 @@ if ( $field.length ) { selPos = FunctionBar.getFieldSelectionPosition( $field ); selStr = $field.val().substring( selPos.start, selPos.end ); - debug('Selected: ' + selStr + ' (' + selPos.start + ', ' - + selPos.end + ')'); + debug('Selected: ' + selStr + ' (' + selPos.start + ', ' + + selPos.end + ')'); return selStr; } return false; @@ -609,8 +624,9 @@ if ( LanguageDefinition.isValid() ) { $('#gollum-editor-function-bar a.function-button').unbind('click'); FunctionBar.activate(); - if ( Help ) + if ( Help ) { Help.setActiveHelp( LanguageDefinition.getActiveLanguage() ); + } } else { debug('Language definition is invalid.'); if ( FunctionBar.isShown() ) { @@ -639,7 +655,7 @@ var fullStr = $field.val(); var selectNew = true; if ( reselect === false) { - var selectNew = false; + selectNew = false; } var scrollTop = null; @@ -819,12 +835,14 @@ // go go inefficient algorithm for ( var i=0; i < helpData.length; i++ ) { - if ( typeof helpData[i] != 'object' ) break; + if ( typeof helpData[i] != 'object' ) { + break; + } var $newLi = $('
  • ' + helpData[i].menuName + '
  • '); $('#gollum-editor-help-parent').append( $newLi ); - if ( i == 0 ) { + if ( i === 0 ) { // select on first run $newLi.children('a').addClass('selected'); } @@ -851,7 +869,9 @@ $('#gollum-editor-help-list').html(''); $('#gollum-editor-help-content').html(''); for ( var i=0; i < subData.content.length; i++ ) { - if ( typeof subData.content[i] != 'object' ) break; + if ( typeof subData.content[i] != 'object' ) { + break; + } var $subLi = $('
  • ' + subData.content[i].menuName + '
  • '); @@ -986,8 +1006,8 @@ */ evtHelpButtonClick: function( e ) { e.preventDefault(); - if ( Help.isShown() ) Help.hide(); - else Help.show(); + if ( Help.isShown() ) { Help.hide(); } + else { Help.show(); } }, @@ -1003,7 +1023,7 @@ evtParentMenuClick: function( e ) { e.preventDefault(); // short circuit if we've selected this already - if ( $(this).hasClass('selected') ) return; + if ( $(this).hasClass('selected') ) { return; } // populate from help data for this var helpIndex = $(this).attr('rel'); @@ -1026,7 +1046,7 @@ */ evtSubMenuClick: function( e ) { e.preventDefault(); - if ( $(this).hasClass('selected') ) return; + if ( $(this).hasClass('selected') ) { return; } // split index rel data var rawIndex = $(this).attr('rel').split(':'); @@ -1044,7 +1064,7 @@ $.GollumEditor.Dialog = $.GollumDialog; $.GollumEditor.replaceSelection = function( repText ) { FunctionBar.replaceFieldSelection( $('#gollum-editor-body'), repText ); - } + }; // Placeholder exists as its own thing now $.GollumEditor.Placeholder = $.GollumPlaceholder; From 74a58ce8b5151721ab099f6ad7eb7c404ede12fd Mon Sep 17 00:00:00 2001 From: eston Date: Tue, 4 Jan 2011 17:10:42 -0800 Subject: [PATCH 226/393] Turn off debug mode in editor by default --- .../frontend/public/javascript/gollum-editor/gollum.editor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js index 9f63a3b8..d0776f47 100755 --- a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js @@ -13,7 +13,7 @@ EditorMode: 'code', NewFile: false, HasFunctionBar: true, - Debug: true + Debug: false }; var ActiveOptions = {}; From cc85879810066e74b606567b48e914aa8794df92 Mon Sep 17 00:00:00 2001 From: eston Date: Tue, 4 Jan 2011 17:15:13 -0800 Subject: [PATCH 227/393] Don't short circuit now --- .../frontend/public/javascript/gollum-editor/gollum.editor.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js index d0776f47..33129efd 100755 --- a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js @@ -167,7 +167,6 @@ debug('Failed to load language definition for ' + name); // well, fake it and turn everything off for this one LanguageDefinition.define( name, {} ); - return; } // update features that rely on the language definition From 32d1f9eb2f3da8eb8ddbb8fb5915b38171683545 Mon Sep 17 00:00:00 2001 From: Hugo Duncan Date: Fri, 7 Jan 2011 23:59:36 -0500 Subject: [PATCH 228/393] Add parsing of org-mode [[file:path.org][label]] links --- lib/gollum/markup.rb | 13 ++++++++++++- test/test_markup.rb | 6 ++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 6b8a4582..9617d3dd 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -120,7 +120,18 @@ module Gollum if $1 == "'" && $3 != "'" "[[#{$2}]]#{$3}" elsif $2.include?('][') - $& + if $2[0..4] == 'file:' + pre = $1 + post = $3 + parts = $2.split('][') + parts[0][0..4] = "" + link = "#{parts[1]}|#{parts[0].sub(/\.org/,'')}" + id = Digest::SHA1.hexdigest(link) + @tagmap[id] = link + "#{pre}#{id}#{post}" + else + $& + end else id = Digest::SHA1.hexdigest($2) @tagmap[id] = $2 diff --git a/test/test_markup.rb b/test/test_markup.rb index 098b9512..fa420c79 100644 --- a/test/test_markup.rb +++ b/test/test_markup.rb @@ -414,6 +414,12 @@ context "Markup" do compare(content, output, 'org') end + test "org mode style double file links" do + content = "a [[file:f.org][Google]] b" + output = "

    a Google b

    " + compare(content, output, 'org') + end + ######################################################################### # # TeX From 0fd639a149cedaf26f976562361253752026f7a0 Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 10 Jan 2011 16:44:07 -0800 Subject: [PATCH 229/393] whitespace plugin --- lib/gollum/frontend/app.rb | 2 +- lib/gollum/markup.rb | 18 ++++++++-------- lib/gollum/wiki.rb | 43 ++++++++++++++++++++------------------ 3 files changed, 33 insertions(+), 30 deletions(-) diff --git a/lib/gollum/frontend/app.rb b/lib/gollum/frontend/app.rb index 0d0b540e..617c432a 100644 --- a/lib/gollum/frontend/app.rb +++ b/lib/gollum/frontend/app.rb @@ -59,7 +59,7 @@ module Precious page = wiki.page(params[:splat].first) name = params[:rename] || page.name msg = commit_message - update_wiki_page(wiki, page, params[:content], msg, name, + update_wiki_page(wiki, page, params[:content], msg, name, params[:format]) update_wiki_page(wiki, page.footer, params[:footer], msg) if params[:footer] update_wiki_page(wiki, page.sidebar, params[:sidebar], msg) if params[:sidebar] diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 6b8a4582..b57e5adf 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -28,8 +28,8 @@ module Gollum # # Returns the formatted String content. def render(no_follow = false) - sanitize = no_follow ? - @wiki.history_sanitizer : + sanitize = no_follow ? + @wiki.history_sanitizer : @wiki.sanitizer data = extract_tex(@data.dup) @@ -147,7 +147,7 @@ module Gollum # Process a single tag into its final HTML form. # - # tag - The String tag contents (the stuff inside the double + # tag - The String tag contents (the stuff inside the double # brackets). # no_follow - Boolean that determines if rel="nofollow" is added to all # tags. @@ -252,7 +252,7 @@ module Gollum # Attempt to process the tag as a file link tag. # - # tag - The String tag contents (the stuff inside the double + # tag - The String tag contents (the stuff inside the double # brackets). # no_follow - Boolean that determines if rel="nofollow" is added to all # tags. @@ -286,7 +286,7 @@ module Gollum # Attempt to process the tag as a page link tag. # - # tag - The String tag contents (the stuff inside the double + # tag - The String tag contents (the stuff inside the double # brackets). # no_follow - Boolean that determines if rel="nofollow" is added to all # tags. @@ -335,7 +335,7 @@ module Gollum # # cname - The String canonical page name. # - # Returns a Gollum::Page instance if a page is found, or an Array of + # Returns a Gollum::Page instance if a page is found, or an Array of # [Gollum::Page, String extra] if a page without the extra anchor data # is found. def find_page_from_name(cname) @@ -362,8 +362,8 @@ module Gollum data.gsub!(/^``` ?(.+?)\r?\n(.+?)\r?\n```\r?$/m) do id = Digest::SHA1.hexdigest($2) cached = check_cache(:code, id) - @codemap[id] = cached ? - { :output => cached } : + @codemap[id] = cached ? + { :output => cached } : { :lang => $1, :code => $2 } id end @@ -393,7 +393,7 @@ module Gollum data end - # Hook for getting the formatted value of extracted tag data. + # Hook for getting the formatted value of extracted tag data. # # type - Symbol value identifying what type of data is being extracted. # id - String SHA1 hash of original extracted tag data. diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index d5ce1e84..a93e0e83 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -59,7 +59,7 @@ module Gollum end end - # Gets the default sanitization options for current pages used by + # Gets the default sanitization options for current pages used by # instances of this Wiki. def sanitization if @sanitization.nil? @@ -68,7 +68,7 @@ module Gollum @sanitization end - # Gets the default sanitization options for older page revisions used by + # Gets the default sanitization options for older page revisions used by # instances of this Wiki. def history_sanitization if @history_sanitization.nil? @@ -120,7 +120,7 @@ module Gollum @markup_class = options[:markup_class] || self.class.markup_class @repo = @access.repo @sanitization = options[:sanitization] || self.class.sanitization - @history_sanitization = options[:history_sanitization] || + @history_sanitization = options[:history_sanitization] || self.class.history_sanitization end @@ -266,7 +266,7 @@ module Gollum tree_list(treeish || 'master') end - # Public: Returns the number of pages accessible from a commit + # Public: Returns the number of pages accessible from a commit # # ref - A String ref that is either a commit SHA or references one. # @@ -340,7 +340,7 @@ module Gollum @access.refresh end - # Public: Creates a Sanitize instance using the Wiki's sanitization + # Public: Creates a Sanitize instance using the Wiki's sanitization # options. # # Returns a Sanitize instance. @@ -350,7 +350,7 @@ module Gollum end end - # Public: Creates a Sanitize instance using the Wiki's history sanitization + # Public: Creates a Sanitize instance using the Wiki's history sanitization # options. # # Returns a Sanitize instance. @@ -536,6 +536,12 @@ module Gollum index.add(fullpath, normalize(data)) end + # Commits to the repo. This is a common method used by Gollum for + # creating, updating, and deleting pages. There are typically three steps: + # building an index with the current tree, yielding the index for + # modification, and then writing the commit. + # + # options - Hash of option def commit_index(options = {}) normalize_commit(options) parents = [options[:parent] || @repo.commit('master')] @@ -549,6 +555,8 @@ module Gollum end yield index if block_given? + options[:name] = default_committer_name if options[:name].to_s.empty? + options[:email] = default_committer_email if options[:email].to_s.empty? actor = Grit::Actor.new(options[:name], options[:email]) index.commit(options[:message], parents, actor) end @@ -558,32 +566,27 @@ module Gollum repo.git.native(:diff, {:R => true}, sha1, sha2, '--', page.path) end - # Ensures a commit hash has all the required fields for a commit. - # - # commit - The commit Hash details: - # :message - The String commit message. - # :name - The String author full name. - # :email - The String email address. - # - # Returns the commit Hash - def normalize_commit(commit = {}) - commit[:name] = default_committer_name if commit[:name].to_s.empty? - commit[:email] = default_committer_email if commit[:email].to_s.empty? - commit - end - # Gets the default name for commits. + # + # Returns the String name. def default_committer_name @default_committer_name ||= \ @repo.config['user.name'] || self.class.default_committer_name end # Gets the default email for commits. + # + # Returns the String email address. def default_committer_email @default_committer_email ||= \ @repo.config['user.email'] || self.class.default_committer_email end + # Gets the commit object for the given ref or sha. + # + # ref - A string ref or SHA pointing to a valid commit. + # + # Returns a Grit::Commit instance. def commit_for(ref) @access.commit(ref) rescue Grit::GitRuby::Repository::NoSuchShaFound From 41a21efe9febe6b3eef96545be9541b4264c78ef Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 10 Jan 2011 16:44:20 -0800 Subject: [PATCH 230/393] don't attempt to serve public assets from sinatra --- lib/gollum/frontend/app.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/gollum/frontend/app.rb b/lib/gollum/frontend/app.rb index 617c432a..06329494 100644 --- a/lib/gollum/frontend/app.rb +++ b/lib/gollum/frontend/app.rb @@ -141,6 +141,10 @@ module Precious mustache :compare end + get %r{^/(javascript|css|images)} do + halt 404 + end + get %r{/(.+?)/([0-9a-f]{40})} do name = params[:captures][0] wiki = Gollum::Wiki.new(settings.gollum_path) From 992ec36295854dd3ad61b634ce2faeb6fdccfb22 Mon Sep 17 00:00:00 2001 From: rick Date: Tue, 11 Jan 2011 00:04:38 -0800 Subject: [PATCH 231/393] accidental removal --- lib/gollum/wiki.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index a93e0e83..d736b6da 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -566,6 +566,20 @@ module Gollum repo.git.native(:diff, {:R => true}, sha1, sha2, '--', page.path) end + # Ensures a commit hash has all the required fields for a commit. + # + # commit - The commit Hash details: + # :message - The String commit message. + # :name - The String author full name. + # :email - The String email address. + # + # Returns the commit Hash + def normalize_commit(commit = {}) + commit[:name] = default_committer_name if commit[:name].to_s.empty? + commit[:email] = default_committer_email if commit[:email].to_s.empty? + commit + end + # Gets the default name for commits. # # Returns the String name. From 45765eb161119a56815e57c9912ce4a81c4eb18d Mon Sep 17 00:00:00 2001 From: rick Date: Tue, 11 Jan 2011 00:30:22 -0800 Subject: [PATCH 232/393] add proper shell escaping for Albino --- lib/gollum/albino.rb | 13 +++++++++++++ test/test_markup.rb | 12 ++++++++++++ 2 files changed, 25 insertions(+) diff --git a/lib/gollum/albino.rb b/lib/gollum/albino.rb index c3a18a27..03725e47 100644 --- a/lib/gollum/albino.rb +++ b/lib/gollum/albino.rb @@ -14,4 +14,17 @@ class Gollum::Albino < Albino html.sub!(%r{
    \Z}, "\n
    ") html end + + # Hotfix for vulnerable versions of Albino + if !instance_methods.include?('shell_escape') + def convert_options(options = {}) + @options.merge(options).inject('') do |string, (flag, value)| + string + " -#{flag} #{shell_escape value}" + end + end + + def shell_escape(str) + str.to_s.gsub("'", "\\\\'").gsub(";", '\\;') + end + end end \ No newline at end of file diff --git a/test/test_markup.rb b/test/test_markup.rb index 098b9512..83f71e2f 100644 --- a/test/test_markup.rb +++ b/test/test_markup.rb @@ -387,6 +387,18 @@ context "Markup" do compare(content, output) end + test "code block with invalid lang" do + content = "a\n\n``` ls -al;\n\tbooya\n\tboom\n```\n\nb" + output = "

    a

    \n\n\n\n

    b

    " + compare(content, output) + end + + test "code block with no lang" do + content = "a\n\n```\n\tls -al;\n\tbooya\n```\n\nb" + output = "

    a

    \n\n\n\n

    b

    " + compare(content, output) + end + ######################################################################### # # Various From c5e4935e85d820c01267a6e8e333232d7add4288 Mon Sep 17 00:00:00 2001 From: rick Date: Tue, 11 Jan 2011 00:47:46 -0800 Subject: [PATCH 233/393] tweak code markup parser so that blocks without a language are just output in pre tags --- lib/gollum/markup.rb | 9 ++++++--- test/test_markup.rb | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index b57e5adf..7a521ed8 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -359,7 +359,7 @@ module Gollum # # Returns the placeholder'd String data. def extract_code(data) - data.gsub!(/^``` ?(.+?)\r?\n(.+?)\r?\n```\r?$/m) do + data.gsub!(/^``` ?([^\r\n]+)?\r?\n(.+?)\r?\n```\r?$/m) do id = Digest::SHA1.hexdigest($2) cached = check_cache(:code, id) @codemap[id] = cached ? @@ -379,12 +379,15 @@ module Gollum def process_code(data) @codemap.each do |id, spec| formatted = spec[:output] || begin - lang = spec[:lang] code = spec[:code] if code.lines.all? { |line| line =~ /\A\r?\n\Z/ || line =~ /^( |\t)/ } code.gsub!(/^( |\t)/m, '') end - formatted = Gollum::Albino.new(code, lang).colorize + formatted = if lang = spec[:lang] + Gollum::Albino.new(code, lang).colorize + else + "
    #{CGI.escapeHTML(code)}
    " + end update_cache(:code, id, formatted) formatted end diff --git a/test/test_markup.rb b/test/test_markup.rb index 83f71e2f..7d729aba 100644 --- a/test/test_markup.rb +++ b/test/test_markup.rb @@ -394,8 +394,8 @@ context "Markup" do end test "code block with no lang" do - content = "a\n\n```\n\tls -al;\n\tbooya\n```\n\nb" - output = "

    a

    \n\n\n\n

    b

    " + content = "a\n\n```\n\tls -al;\n\t\n```\n\nb" + output = "

    a

    \n\n
    ls -al;\n<booya>
    \n\n

    b

    " compare(content, output) end From e4103e6181b69b46a3af3eba9a615f787e70ab79 Mon Sep 17 00:00:00 2001 From: Douglas Campos Date: Tue, 11 Jan 2011 22:50:59 -0200 Subject: [PATCH 234/393] testing link labeling current behavior --- test/test_markup.rb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/test_markup.rb b/test/test_markup.rb index 7d729aba..3664bc5a 100644 --- a/test/test_markup.rb +++ b/test/test_markup.rb @@ -162,6 +162,13 @@ context "Markup" do assert_equal "

    a http://example.com b

    ", page.formatted_data end + test "page link with different text" do + @wiki.write_page("Potato", :markdown, "a [[Potato Heaad|Potato]] ", commit_details) + page = @wiki.page("Potato") + output = page.formatted_data + assert_equal "

    a Potato Heaad

    ", output + end + ######################################################################### # # Images From 2dbb4e9fa7d5b1f8175249a2f51c028332de1f4f Mon Sep 17 00:00:00 2001 From: Douglas Campos Date: Tue, 11 Jan 2011 23:57:22 -0200 Subject: [PATCH 235/393] fixed mediawiki link handling --- lib/gollum/markup.rb | 37 +++++++++++++++++++++---------------- test/test_markup.rb | 7 +++++++ 2 files changed, 28 insertions(+), 16 deletions(-) diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 7a521ed8..236c0fc2 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -13,6 +13,7 @@ module Gollum @name = page.filename @data = page.text_data @version = page.version.id + @format = page.format @dir = ::File.dirname(page.path) @tagmap = {} @codemap = {} @@ -294,22 +295,26 @@ module Gollum # Returns the String HTML if the tag is a valid page link tag or nil # if it is not. def process_page_link_tag(tag, no_follow = false) - parts = tag.split('|') - name = parts[0].strip - cname = @wiki.page_class.cname((parts[1] || parts[0]).strip) - tag = if name =~ %r{^https?://} && parts[1].nil? - %{#{name}} - else - presence = "absent" - link_name = cname - page, extra = find_page_from_name(cname) - if page - link_name = @wiki.page_class.cname(page.name) - presence = "present" - end - link = ::File.join(@wiki.base_path, CGI.escape(link_name)) - %{#{name}} - end + parts = if @format == :mediawiki + tag.split('|').reverse + else + tag.split('|') + end + name, page_name = *parts.compact.map(&:strip) + cname = @wiki.page_class.cname(page_name || name) + tag = if name =~ %r{^https?://} && page_name.nil? + %{#{name}} + else + presence = "absent" + link_name = cname + page, extra = find_page_from_name(cname) + if page + link_name = @wiki.page_class.cname(page.name) + presence = "present" + end + link = ::File.join(@wiki.base_path, CGI.escape(link_name)) + %{#{name}} + end if tag && no_follow tag.sub! /^a Potato Heaad

    ", output end + test "page link with different text on mediawiki" do + @wiki.write_page("Potato", :mediawiki, "a [[Potato|Potato Heaad]] ", commit_details) + page = @wiki.page("Potato") + output = page.formatted_data + assert_equal "

    \na Potato Heaad \n

    ", output + end + ######################################################################### # # Images From 0a1ecde7b61ade23400d89756c6cba06a094315b Mon Sep 17 00:00:00 2001 From: Douglas Campos Date: Wed, 12 Jan 2011 01:00:01 -0200 Subject: [PATCH 236/393] typo --- lib/gollum/markup.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 236c0fc2..5f2adf7e 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -316,7 +316,7 @@ module Gollum %{#{name}} end if tag && no_follow - tag.sub! /^ Date: Wed, 12 Jan 2011 15:00:58 -0800 Subject: [PATCH 237/393] update albino to 1.2.3, handle bad code blocks gracefully --- gollum.gemspec | 2 +- lib/gollum/albino.rb | 22 ++-------------------- lib/gollum/markup.rb | 12 ++++++++---- test/test_markup.rb | 10 +++++----- 4 files changed, 16 insertions(+), 30 deletions(-) diff --git a/gollum.gemspec b/gollum.gemspec index 74ae1c28..73290aca 100644 --- a/gollum.gemspec +++ b/gollum.gemspec @@ -25,7 +25,7 @@ Gem::Specification.new do |s| s.add_dependency('grit', "~> 2.3") s.add_dependency('github-markup', [">= 0.4.0", "< 1.0.0"]) - s.add_dependency('albino', "~> 1.0") + s.add_dependency('albino', "~> 1.2.3") s.add_dependency('sinatra', "~> 1.0") s.add_dependency('mustache', [">= 0.11.2", "< 1.0.0"]) s.add_dependency('sanitize', "~> 1.1") diff --git a/lib/gollum/albino.rb b/lib/gollum/albino.rb index 03725e47..b731ae9d 100644 --- a/lib/gollum/albino.rb +++ b/lib/gollum/albino.rb @@ -1,30 +1,12 @@ require 'albino' class Gollum::Albino < Albino - def self.bin - Albino.bin - end - - def bin - Albino.bin - end + self.bin = ::Albino.bin + self.default_encoding = ::Albino.default_encoding def colorize(options = {}) html = super.to_s html.sub!(%r{
    \Z}, "\n
    ") html end - - # Hotfix for vulnerable versions of Albino - if !instance_methods.include?('shell_escape') - def convert_options(options = {}) - @options.merge(options).inject('') do |string, (flag, value)| - string + " -#{flag} #{shell_escape value}" - end - end - - def shell_escape(str) - str.to_s.gsub("'", "\\\\'").gsub(";", '\\;') - end - end end \ No newline at end of file diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 7a521ed8..93909649 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -380,14 +380,18 @@ module Gollum @codemap.each do |id, spec| formatted = spec[:output] || begin code = spec[:code] + lang = spec[:lang] + if code.lines.all? { |line| line =~ /\A\r?\n\Z/ || line =~ /^( |\t)/ } code.gsub!(/^( |\t)/m, '') end - formatted = if lang = spec[:lang] - Gollum::Albino.new(code, lang).colorize - else - "
    #{CGI.escapeHTML(code)}
    " + + formatted = begin + lang && Gollum::Albino.colorize(code, lang) + rescue ::Albino::ShellArgumentError, ::Albino::Process::TimeoutExceeded, + ::Albino::Process::MaximumOutputExceeded end + formatted ||= "
    #{CGI.escapeHTML(code)}
    " update_cache(:code, id, formatted) formatted end diff --git a/test/test_markup.rb b/test/test_markup.rb index 7d729aba..4ee8bb28 100644 --- a/test/test_markup.rb +++ b/test/test_markup.rb @@ -343,7 +343,7 @@ context "Markup" do content = "a\n\n```ruby\nx = 1\n```\n\nb" output = "

    a

    \n\n
    " +
                  "x = " +
    -             "1\n
    \n
    \n\n

    b

    " + "1\n\n
    \n\n\n

    b

    " index = @wiki.repo.index index.add("Bilbo-Baggins.md", content) @@ -358,7 +358,7 @@ context "Markup" do content = "a\r\n\r\n```ruby\r\nx = 1\r\n```\r\n\r\nb" output = "

    a

    \n\n
    " +
                  "x = " +
    -             "1\n
    \n
    \n\n

    b

    " + "1\n\n
    \n\n\n

    b

    " index = @wiki.repo.index index.add("Bilbo-Baggins.md", content) @@ -374,7 +374,7 @@ context "Markup" do output = "

    a

    \n\n
    " +
                  "x = 1" +
                  "\n\ny =" +
    -             " 2\n
    \n
    \n\n

    b

    " + " 2\n\n
    + + + + +
    +
    \n\n\n

    b

    " compare(content, output) end @@ -383,13 +383,13 @@ context "Markup" do output = "

    a

    \n\n
    " +
                  "x = 1" +
                  "\n\ny =" +
    -             " 2\n
    \n
    \n\n

    b

    " + " 2\n\n
    \n\n\n

    b

    " compare(content, output) end test "code block with invalid lang" do content = "a\n\n``` ls -al;\n\tbooya\n\tboom\n```\n\nb" - output = "

    a

    \n\n\n\n

    b

    " + output = "

    a

    \n\n
    booya\nboom
    \n\n

    b

    " compare(content, output) end From daa07326dff699384718a1ed9caef0f241f54466 Mon Sep 17 00:00:00 2001 From: rick Date: Thu, 13 Jan 2011 13:21:14 -0800 Subject: [PATCH 238/393] docs for some of the diffing methods --- lib/gollum/wiki.rb | 69 +++++++++++++++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 22 deletions(-) diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index d736b6da..68ecfbb2 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -257,6 +257,43 @@ module Gollum sha1 end + # Public: Reverts a reverse diff for a given page. If only 1 SHA is given, + # the reverse diff will be taken from its parent (^SHA...SHA). If two SHAs + # are given, the reverse diff is taken from SHA1...SHA2. + # + # page - The Gollum::Page to delete. + # sha1 - String SHA1 of the earlier parent if two SHAs are given, + # or the child. + # sha2 - Optional String SHA1 of the child. + # commit - The commit Hash details: + # :message - The String commit message. + # :name - The String author full name. + # :email - The String email address. + # + # Returns a String SHA1 of the new commit, or nil if the reverse diff does + # not apply. + def revert_page(page, sha1, sha2 = nil, commit = {}) + if sha2.is_a?(Hash) + commit = sha2 + sha2 = nil + end + + pcommit = @repo.commit('master') + patch = full_reverse_diff_for(page, sha1, sha2) + commit[:parent] = [pcommit] + commit[:tree] = @repo.git.apply_patch(pcommit.sha, patch) + return false unless commit[:tree] + + index = nil + sha1 = commit_index(commit) { |i| index = i } + dir = ::File.dirname(page.path) + dir = '' if dir == '.' + + @access.refresh + update_working_dir(index, dir, page.name, page.format) + sha1 + end + # Public: Lists all pages for this wiki. # # treeish - The String commit ID or ref to find (default: master) @@ -310,28 +347,6 @@ module Gollum @repo.log('master', nil, log_pagination_options(options)) end - def revert_page(page, sha1, sha2 = nil, commit = {}) - if sha2.is_a?(Hash) - commit = sha2 - sha2 = nil - end - - pcommit = @repo.commit('master') - patch = full_reverse_diff_for(page, sha1, sha2) - commit[:parent] = [pcommit] - commit[:tree] = @repo.git.apply_patch(pcommit.sha, patch) - return false unless commit[:tree] - - index = nil - sha1 = commit_index(commit) { |i| index = i } - dir = ::File.dirname(page.path) - dir = '' if dir == '.' - - @access.refresh - update_working_dir(index, dir, page.name, page.format) - sha1 - end - # Public: Refreshes just the cached Git reference data. This should # be called after every Gollum update. # @@ -542,6 +557,8 @@ module Gollum # modification, and then writing the commit. # # options - Hash of option + # + # Returns the String SHA of the new Commit. def commit_index(options = {}) normalize_commit(options) parents = [options[:parent] || @repo.commit('master')] @@ -561,6 +578,14 @@ module Gollum index.commit(options[:message], parents, actor) end + # Creates a reverse diff for the given SHAs on the given Gollum::Page. + # + # page - The Gollum::Page to scope the patch to. + # sha1 - String SHA1 of the earlier parent if two SHAs are given, + # or the child. + # sha2 - Optional String SHA1 of the child. + # + # Returns a String of the reverse Diff to apply. def full_reverse_diff_for(page, sha1, sha2 = nil) sha1, sha2 = "#{sha1}^", sha1 if sha2.nil? repo.git.native(:diff, {:R => true}, sha1, sha2, '--', page.path) From 710741813b01616c8349b11bf92887f2b220ed06 Mon Sep 17 00:00:00 2001 From: rick Date: Thu, 13 Jan 2011 13:22:36 -0800 Subject: [PATCH 239/393] upgrade to grit ~2.4.0 to take advantage of Grit::Process --- gollum.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gollum.gemspec b/gollum.gemspec index 73290aca..22764d55 100644 --- a/gollum.gemspec +++ b/gollum.gemspec @@ -23,7 +23,7 @@ Gem::Specification.new do |s| s.rdoc_options = ["--charset=UTF-8"] s.extra_rdoc_files = %w[README.md LICENSE] - s.add_dependency('grit', "~> 2.3") + s.add_dependency('grit', "~> 2.4.0") s.add_dependency('github-markup', [">= 0.4.0", "< 1.0.0"]) s.add_dependency('albino', "~> 1.2.3") s.add_dependency('sinatra', "~> 1.0") From 002fe8d409849ad655c7e3930bdc359945fe2294 Mon Sep 17 00:00:00 2001 From: rick Date: Thu, 13 Jan 2011 13:32:15 -0800 Subject: [PATCH 240/393] add method for getting the reverse diff without a page path --- lib/gollum/wiki.rb | 19 +++++++++++++++++-- test/test_wiki.rb | 37 +++++++++++++------------------------ 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 68ecfbb2..7840c1c1 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -580,7 +580,7 @@ module Gollum # Creates a reverse diff for the given SHAs on the given Gollum::Page. # - # page - The Gollum::Page to scope the patch to. + # page - The Gollum::Page to scope the patch to, or a String Path. # sha1 - String SHA1 of the earlier parent if two SHAs are given, # or the child. # sha2 - Optional String SHA1 of the child. @@ -588,7 +588,22 @@ module Gollum # Returns a String of the reverse Diff to apply. def full_reverse_diff_for(page, sha1, sha2 = nil) sha1, sha2 = "#{sha1}^", sha1 if sha2.nil? - repo.git.native(:diff, {:R => true}, sha1, sha2, '--', page.path) + args = [{:R => true}, sha1, sha2] + if page + args << '--' << (page.respond_to?(:path) ? page.path : page.to_s) + end + repo.git.native(:diff, *args) + end + + # Creates a reverse diff for the given SHAs. + # + # sha1 - String SHA1 of the earlier parent if two SHAs are given, + # or the child. + # sha2 - Optional String SHA1 of the child. + # + # Returns a String of the reverse Diff to apply. + def full_reverse_diff(sha1, sha2 = nil) + full_reverse_diff_for(nil, sha1, sha2) end # Ensures a commit hash has all the required fields for a commit. diff --git a/test/test_wiki.rb b/test/test_wiki.rb index b4766ca2..0702ccc3 100644 --- a/test/test_wiki.rb +++ b/test/test_wiki.rb @@ -61,30 +61,6 @@ context "Wiki" do @wiki.normalize_commit(commit.dup)) end - #test "#tree_map_for caches ref and tree" do - # assert @wiki.ref_map.empty? - # assert @wiki.tree_map.empty? - # @wiki.tree_map_for 'master' - # assert_equal({"master"=>"60f12f4254f58801b9ee7db7bca5fa8aeefaa56b"}, @wiki.ref_map) - # - # map = @wiki.tree_map['60f12f4254f58801b9ee7db7bca5fa8aeefaa56b'] - # assert_equal 'Bilbo-Baggins.md', map[0].path - # assert_equal '', map[0].dir - # assert_equal map[0].path, map[0].name - # assert_equal 'Mordor/Eye-Of-Sauron.md', map[3].path - # assert_equal '/Mordor', map[3].dir - # assert_equal 'Eye-Of-Sauron.md', map[3].name - #end - # - #test "#tree_map_for only caches tree for commit" do - # assert @wiki.tree_map.empty? - # @wiki.tree_map_for '60f12f4254f58801b9ee7db7bca5fa8aeefaa56b' - # assert @wiki.ref_map.empty? - # - # entry = @wiki.tree_map['60f12f4254f58801b9ee7db7bca5fa8aeefaa56b'][0] - # assert_equal 'Bilbo-Baggins.md', entry.path - #end - test "text_data" do wiki = Gollum::Wiki.new(testpath("examples/yubiwa.git")) if String.instance_methods.include?(:encoding) @@ -97,6 +73,19 @@ context "Wiki" do assert_equal page.raw_data, page.text_data end end + + test "gets reverse diff" do + diff = @wiki.full_reverse_diff('a8ad3c09dd842a3517085bfadd37718856dee813') + assert_match "b/Mordor/_Sidebar.md", diff + assert_match "b/_Sidebar.md", diff + end + + test "gets reverse diff for a page" do + diff = @wiki.full_reverse_diff_for('_Sidebar.md', 'a8ad3c09dd842a3517085bfadd37718856dee813') + regex = /b\/Mordor\/\_Sidebar\.md/ + assert_match "b/_Sidebar.md", diff + assert_no_match regex, diff + end end context "Wiki page previewing" do From e2a4514be56b7d8a18c692323734d47a92260c07 Mon Sep 17 00:00:00 2001 From: rick Date: Thu, 13 Jan 2011 15:50:35 -0800 Subject: [PATCH 241/393] add the ability to revert whole commits that touch multiple files --- HISTORY.md | 5 ++-- lib/gollum/page.rb | 59 ++++++++++++++++++++++++---------------- lib/gollum/wiki.rb | 49 +++++++++++++++++++++++++++++---- test/test_page_revert.rb | 17 ++++++++++-- 4 files changed, 96 insertions(+), 34 deletions(-) diff --git a/HISTORY.md b/HISTORY.md index e4f977dc..ba09e875 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -2,12 +2,13 @@ * Major Enhancements * Add Page sidebars, similar to Page footers. + * Add the ability to revert commits to the wiki. * Minor Enhancements - * Add `:sanitization` and `:history_sanitization` options for customizing + * Add `:sanitization` and `:history_sanitization` options for customizing how `Sanitize.clean` modifies formatted wiki content. * Add `--config` option for the command line, to specify a ruby file that is run during startup. - * Provide access to a parsed Nokogiri::DocumentFragment during markup + * Provide access to a parsed Nokogiri::DocumentFragment during markup rendering for added customization. * Bug Fixes * Use `@wiki.page_class` in Gollum::Markup where appropriate (#63). diff --git a/lib/gollum/page.rb b/lib/gollum/page.rb index faa5f1a1..61d04484 100644 --- a/lib/gollum/page.rb +++ b/lib/gollum/page.rb @@ -41,6 +41,40 @@ module Gollum filename =~ /^_/ ? false : match end + # Public: The format of a given filename. + # + # filename - The String filename. + # + # Returns the Symbol format of the page. One of: + # [ :markdown | :textile | :rdoc | :org | :rest | :asciidoc | :pod | + # :roff ] + def self.format_for(filename) + case filename.to_s + when /\.(md|mkdn?|mdown|markdown)$/i + :markdown + when /\.(textile)$/i + :textile + when /\.(rdoc)$/i + :rdoc + when /\.(org)$/i + :org + when /\.(creole)$/i + :creole + when /\.(re?st(\.txt)?)$/i + :rest + when /\.(asciidoc)$/i + :asciidoc + when /\.(pod)$/i + :pod + when /\.(\d)$/i + :roff + when /\.(media)?wiki$/i + :mediawiki + else + nil + end + end + # Reusable filter to turn a filename (without path) into a canonical name. # Strips extension, converts spaces to dashes. # @@ -143,30 +177,7 @@ module Gollum # [ :markdown | :textile | :rdoc | :org | :rest | :asciidoc | :pod | # :roff ] def format - case @blob.name - when /\.(md|mkdn?|mdown|markdown)$/i - :markdown - when /\.(textile)$/i - :textile - when /\.(rdoc)$/i - :rdoc - when /\.(org)$/i - :org - when /\.(creole)$/i - :creole - when /\.(re?st(\.txt)?)$/i - :rest - when /\.(asciidoc)$/i - :asciidoc - when /\.(pod)$/i - :pod - when /\.(\d)$/i - :roff - when /\.(media)?wiki$/i - :mediawiki - else - nil - end + self.class.format_for(@blob.name) end # Public: The current version of the page. diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 7840c1c1..c94973eb 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -257,7 +257,7 @@ module Gollum sha1 end - # Public: Reverts a reverse diff for a given page. If only 1 SHA is given, + # Public: Applies a reverse diff for a given page. If only 1 SHA is given, # the reverse diff will be taken from its parent (^SHA...SHA). If two SHAs # are given, the reverse diff is taken from SHA1...SHA2. # @@ -286,14 +286,53 @@ module Gollum index = nil sha1 = commit_index(commit) { |i| index = i } - dir = ::File.dirname(page.path) - dir = '' if dir == '.' - @access.refresh - update_working_dir(index, dir, page.name, page.format) + + files = [] + if page + files << [page.path, page.name, page.format] + else + # Grit::Diff can't parse reverse diffs.... yet + lines = patch.split("\n") + while line = lines.shift + if line =~ %r{^diff --git b/.+? a/(.+)$} + path = $1 + ext = ::File.extname(path) + name = ::File.basename(path, ext) + if format = ::Gollum::Page.format_for(ext) + files << [path, name, format] + end + end + end + end + + files.each do |(path, name, format)| + dir = ::File.dirname(path) + dir = '' if dir == '.' + update_working_dir(index, dir, name, format) + end + sha1 end + # Public: Applies a reverse diff to the repo. If only 1 SHA is given, + # the reverse diff will be taken from its parent (^SHA...SHA). If two SHAs + # are given, the reverse diff is taken from SHA1...SHA2. + # + # sha1 - String SHA1 of the earlier parent if two SHAs are given, + # or the child. + # sha2 - Optional String SHA1 of the child. + # commit - The commit Hash details: + # :message - The String commit message. + # :name - The String author full name. + # :email - The String email address. + # + # Returns a String SHA1 of the new commit, or nil if the reverse diff does + # not apply. + def revert_commit(sha1, sha2 = nil, commit = {}) + revert_page(nil, sha1, sha2, commit) + end + # Public: Lists all pages for this wiki. # # treeish - The String commit ID or ref to find (default: master) diff --git a/test/test_page_revert.rb b/test/test_page_revert.rb index 9f96852f..6dcb4bde 100644 --- a/test/test_page_revert.rb +++ b/test/test_page_revert.rb @@ -12,19 +12,30 @@ context "Page Reverting" do end test "reverts single commit" do + page1 = @wiki.page("B") + sha = @wiki.revert_commit('7c45b5f16ff3bae2a0063191ef832701214d4df5') + page2 = @wiki.page("B") + assert_equal sha, page2.version.sha + assert_equal "INITIAL", body=page2.raw_data.strip + assert_equal body, File.read(File.join(@path, "B.md")).strip + end + + test "reverts single commit for a page" do page1 = @wiki.page('B') sha = @wiki.revert_page(page1, '7c45b5f16ff3bae2a0063191ef832701214d4df5') page2 = @wiki.page('B') assert_equal sha, page2.version.sha - assert_equal "INITIAL", page2.raw_data.strip + assert_equal "INITIAL", body=page2.raw_data.strip + assert_equal body, File.read(File.join(@path, "B.md")).strip end - test "reverts multiple commits" do + test "reverts multiple commits for a page" do page1 = @wiki.page('A') sha = @wiki.revert_page(page1, '302a5491a9a5ba12c7652ac831a44961afa312d2^', 'b26b791cb7917c4f37dd9cb4d1e0efb24ac4d26f') page2 = @wiki.page('A') assert_equal sha, page2.version.sha - assert_equal "INITIAL", page2.raw_data.strip + assert_equal "INITIAL", body=page2.raw_data.strip + assert_equal body, File.read(File.join(@path, "A.md")).strip end test "cannot revert conflicting commit" do From dda8a7374f0113e0a5afc3a4b90103570e3c6459 Mon Sep 17 00:00:00 2001 From: Nathan Long Date: Fri, 14 Jan 2011 13:55:49 -0500 Subject: [PATCH 242/393] Clarified a couple of points in the documentation --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 5100bb18..acc4b79c 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,8 @@ Gollum wikis are simply Git repositories that adhere to a specific format. Gollum pages may be written in a variety of formats and can be edited in a number of ways depending on your needs. You can edit your wiki locally: -* With your favorite text editor or IDE. +* With your favorite text editor or IDE (changes will be visible after +* committing). * With the built-in web interface. * With the Gollum Ruby API. @@ -268,8 +269,8 @@ This is useful for writing about the link syntax in your wiki pages. ## SYNTAX HIGHLIGHTING In page files you can get automatic syntax highlighting for a wide range of -languages (courtesy of [Pygments](http://pygments.org/)) by using the -following syntax: +languages (courtesy of [Pygments](http://pygments.org/) - must install +separately) by using the following syntax: ```ruby def foo @@ -432,4 +433,4 @@ your changes merged back into core is as follows: 1. Do not change the version number, I will do that on my end 1. If necessary, rebase your commits into logical chunks, without errors 1. Push the branch up to GitHub -1. Send me (mojombo) a pull request for your branch \ No newline at end of file +1. Send me (mojombo) a pull request for your branch From a1876ccd7a007c43539d77d144d80c83c669da22 Mon Sep 17 00:00:00 2001 From: Nathan Long Date: Fri, 14 Jan 2011 13:59:03 -0500 Subject: [PATCH 243/393] Fixed formatting mistake (auto-wrap in vim) --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index acc4b79c..9a5fdaca 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,7 @@ Gollum wikis are simply Git repositories that adhere to a specific format. Gollum pages may be written in a variety of formats and can be edited in a number of ways depending on your needs. You can edit your wiki locally: -* With your favorite text editor or IDE (changes will be visible after -* committing). +* With your favorite text editor or IDE (changes will be visible after committing). * With the built-in web interface. * With the Gollum Ruby API. From 11fcf0c784267ab3bc2b4d50321c4694da103304 Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 17 Jan 2011 09:09:00 -0800 Subject: [PATCH 244/393] fix whitespace, remove old no_follow code (nokogiri to the rescue) --- lib/gollum/markup.rb | 67 +++++++++++++++++--------------------------- 1 file changed, 25 insertions(+), 42 deletions(-) diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 7fad4911..5de24de6 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -135,13 +135,11 @@ module Gollum # final markup. # # data - The String data (with placeholders). - # no_follow - Boolean that determines if rel="nofollow" is added to all - #
    tags. # # Returns the marked up String data. - def process_tags(data, no_follow = false) + def process_tags(data) @tagmap.each do |id, tag| - data.gsub!(id, process_tag(tag, no_follow)) + data.gsub!(id, process_tag(tag)) end data end @@ -150,17 +148,15 @@ module Gollum # # tag - The String tag contents (the stuff inside the double # brackets). - # no_follow - Boolean that determines if rel="nofollow" is added to all - # tags. # # Returns the String HTML version of the tag. - def process_tag(tag, no_follow = false) + def process_tag(tag) if html = process_image_tag(tag) html - elsif html = process_file_link_tag(tag, no_follow) + elsif html = process_file_link_tag(tag) html else - process_page_link_tag(tag, no_follow) + process_page_link_tag(tag) end end @@ -255,12 +251,10 @@ module Gollum # # tag - The String tag contents (the stuff inside the double # brackets). - # no_follow - Boolean that determines if rel="nofollow" is added to all - # tags. # # Returns the String HTML if the tag is a valid file link tag or nil # if it is not. - def process_file_link_tag(tag, no_follow = false) + def process_file_link_tag(tag) parts = tag.split('|') name = parts[0].strip path = parts[1] && parts[1].strip @@ -272,53 +266,42 @@ module Gollum nil end - tag = if name && path && file + if name && path && file %{#{name}} elsif name && path %{#{name}} else nil end - if tag && no_follow - tag.sub! /^ tags. # # Returns the String HTML if the tag is a valid page link tag or nil # if it is not. - def process_page_link_tag(tag, no_follow = false) - parts = if @format == :mediawiki - tag.split('|').reverse - else - tag.split('|') - end + def process_page_link_tag(tag) + parts = tag.split('|') + parts.reverse! if @format == :mediawiki + name, page_name = *parts.compact.map(&:strip) cname = @wiki.page_class.cname(page_name || name) - tag = if name =~ %r{^https?://} && page_name.nil? - %{#{name}} - else - presence = "absent" - link_name = cname - page, extra = find_page_from_name(cname) - if page - link_name = @wiki.page_class.cname(page.name) - presence = "present" - end - link = ::File.join(@wiki.base_path, CGI.escape(link_name)) - %{#{name}} - end - if tag && no_follow - tag.sub! /^#{name}} + else + presence = "absent" + link_name = cname + page, extra = find_page_from_name(cname) + if page + link_name = @wiki.page_class.cname(page.name) + presence = "present" + end + link = ::File.join(@wiki.base_path, CGI.escape(link_name)) + %{#{name}} end - tag end # Find the given file in the repo. @@ -393,7 +376,7 @@ module Gollum formatted = begin lang && Gollum::Albino.colorize(code, lang) - rescue ::Albino::ShellArgumentError, ::Albino::Process::TimeoutExceeded, + rescue ::Albino::ShellArgumentError, ::Albino::Process::TimeoutExceeded, ::Albino::Process::MaximumOutputExceeded end formatted ||= "
    #{CGI.escapeHTML(code)}
    " From e77cba96fd2ecf51564121d9e7c48c5ee286bc81 Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 17 Jan 2011 10:08:58 -0800 Subject: [PATCH 245/393] add git test fixture for page_file_dir tests --- test/examples/page_file_dir.git/COMMIT_EDITMSG | 1 + test/examples/page_file_dir.git/HEAD | 1 + test/examples/page_file_dir.git/config | 6 ++++++ test/examples/page_file_dir.git/description | 1 + test/examples/page_file_dir.git/index | Bin 0 -> 184 bytes test/examples/page_file_dir.git/info/exclude | 6 ++++++ test/examples/page_file_dir.git/logs/HEAD | 1 + .../page_file_dir.git/logs/refs/heads/master | 1 + .../0c/7d27db1f575263efdcab3dc650f4502a2dbcbf | Bin 0 -> 51 bytes .../22/b404803c966dd92865614d86ff22ca12e50c1e | Bin 0 -> 125 bytes .../25/7cc5642cb1a054f08cc83f2d943e56fd3ebe99 | Bin 0 -> 19 bytes .../57/16ca5987cbf97d6bb54920bea6adde242d87e6 | Bin 0 -> 19 bytes .../5b/43e14e0a15fb6f08feab1773d1c0991e9f71e2 | Bin 0 -> 81 bytes test/examples/page_file_dir.git/refs/heads/master | 1 + test/test_wiki.rb | 13 ++----------- 15 files changed, 20 insertions(+), 11 deletions(-) create mode 100644 test/examples/page_file_dir.git/COMMIT_EDITMSG create mode 100644 test/examples/page_file_dir.git/HEAD create mode 100644 test/examples/page_file_dir.git/config create mode 100644 test/examples/page_file_dir.git/description create mode 100644 test/examples/page_file_dir.git/index create mode 100644 test/examples/page_file_dir.git/info/exclude create mode 100644 test/examples/page_file_dir.git/logs/HEAD create mode 100644 test/examples/page_file_dir.git/logs/refs/heads/master create mode 100644 test/examples/page_file_dir.git/objects/0c/7d27db1f575263efdcab3dc650f4502a2dbcbf create mode 100644 test/examples/page_file_dir.git/objects/22/b404803c966dd92865614d86ff22ca12e50c1e create mode 100644 test/examples/page_file_dir.git/objects/25/7cc5642cb1a054f08cc83f2d943e56fd3ebe99 create mode 100644 test/examples/page_file_dir.git/objects/57/16ca5987cbf97d6bb54920bea6adde242d87e6 create mode 100644 test/examples/page_file_dir.git/objects/5b/43e14e0a15fb6f08feab1773d1c0991e9f71e2 create mode 100644 test/examples/page_file_dir.git/refs/heads/master diff --git a/test/examples/page_file_dir.git/COMMIT_EDITMSG b/test/examples/page_file_dir.git/COMMIT_EDITMSG new file mode 100644 index 00000000..80260766 --- /dev/null +++ b/test/examples/page_file_dir.git/COMMIT_EDITMSG @@ -0,0 +1 @@ +initial commit diff --git a/test/examples/page_file_dir.git/HEAD b/test/examples/page_file_dir.git/HEAD new file mode 100644 index 00000000..cb089cd8 --- /dev/null +++ b/test/examples/page_file_dir.git/HEAD @@ -0,0 +1 @@ +ref: refs/heads/master diff --git a/test/examples/page_file_dir.git/config b/test/examples/page_file_dir.git/config new file mode 100644 index 00000000..af107929 --- /dev/null +++ b/test/examples/page_file_dir.git/config @@ -0,0 +1,6 @@ +[core] + repositoryformatversion = 0 + filemode = true + bare = false + logallrefupdates = true + ignorecase = true diff --git a/test/examples/page_file_dir.git/description b/test/examples/page_file_dir.git/description new file mode 100644 index 00000000..498b267a --- /dev/null +++ b/test/examples/page_file_dir.git/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/test/examples/page_file_dir.git/index b/test/examples/page_file_dir.git/index new file mode 100644 index 0000000000000000000000000000000000000000..85640369ae5c970ee4d03af38fcc72706d9533fd GIT binary patch literal 184 zcmZ?q402{*U|<4aUz1i*Ak6@y`9R`w6V5X*G%jIaVEhV{5&>eCaIsU7?Wcd%W^eUW z*tcx$Jr&*dXAEpfiA8$3DNy|~$TZZP2k7Rg)*MaI*|;F&L(d6&-6?iqf9>|oWZ+K8 kPcGI^%g=`z1~h0%^ol?07OpuhH$y(+#*Fq#! 1295287591 -0800 commit (initial): initial commit diff --git a/test/examples/page_file_dir.git/logs/refs/heads/master b/test/examples/page_file_dir.git/logs/refs/heads/master new file mode 100644 index 00000000..60cde1b1 --- /dev/null +++ b/test/examples/page_file_dir.git/logs/refs/heads/master @@ -0,0 +1 @@ +0000000000000000000000000000000000000000 22b404803c966dd92865614d86ff22ca12e50c1e rick 1295287591 -0800 commit (initial): initial commit diff --git a/test/examples/page_file_dir.git/objects/0c/7d27db1f575263efdcab3dc650f4502a2dbcbf b/test/examples/page_file_dir.git/objects/0c/7d27db1f575263efdcab3dc650f4502a2dbcbf new file mode 100644 index 0000000000000000000000000000000000000000..bffaebf088838d419fe6c782c8a8428975c607c8 GIT binary patch literal 51 zcmV-30L=e*0V^p=O;s>9VK6i>Ff%bxNXyUH%S~ZWtvQ;avvEPlhn^Gmx>M}J{@U%E J2>>0$56}JD7Tf>; literal 0 HcmV?d00001 diff --git a/test/examples/page_file_dir.git/objects/22/b404803c966dd92865614d86ff22ca12e50c1e b/test/examples/page_file_dir.git/objects/22/b404803c966dd92865614d86ff22ca12e50c1e new file mode 100644 index 0000000000000000000000000000000000000000..a52143a15a5d758e787842f20a42bf928bc7d223 GIT binary patch literal 125 zcmV-@0D}K`0hNtW3IZVzK>PL-bAiIqH5HcVDr#dpv?|C%*KeT{^!wnwS4L|rfZm>D z5`oK$C0s}+bTwbA4wX_y@9hJNju9zVk7QJO%QhxVE-zSx%GSq+s59N4E%AOSqul^a fbS8Kg5zabjtqywZg#H#4cNR`N{0iy|ok}?yi;y-< literal 0 HcmV?d00001 diff --git a/test/examples/page_file_dir.git/objects/25/7cc5642cb1a054f08cc83f2d943e56fd3ebe99 b/test/examples/page_file_dir.git/objects/25/7cc5642cb1a054f08cc83f2d943e56fd3ebe99 new file mode 100644 index 0000000000000000000000000000000000000000..bdcf704c9e663f3a11b3146b1b455bc2581b4761 GIT binary patch literal 19 acmb6WiT`_Ff%bxNJ=cy%S~Yj7dsW%e)?x^_Et}YeaqI~Q_*dI nW?}#Y3Mu)?#SA>P>bK>?gOcChS#5hP;7fp(?w @page_file_dir) end @@ -318,7 +309,7 @@ context "page_file_dir option" do end test "search results should be restricted in page filer dir" do - results = @wiki.search("Hello") + results = @wiki.search("foo") assert_equal 1, results.size assert_equal "foo", results[0][:name] end From a9d4e117aa8dd9f4919d4fc935090145ec64c104 Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 17 Jan 2011 10:17:14 -0800 Subject: [PATCH 246/393] fix markup formatting edge case --- lib/gollum/markup.rb | 4 ++++ test/test_markup.rb | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 0067d367..dbb6f4b8 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -179,6 +179,8 @@ module Gollum # if it is not. def process_image_tag(tag) parts = tag.split('|') + return if parts.size.zero? + name = parts[0].strip path = if file = find_file(name) ::File.join @wiki.base_path, file.path @@ -267,6 +269,8 @@ module Gollum # if it is not. def process_file_link_tag(tag) parts = tag.split('|') + return if parts.size.zero? + name = parts[0].strip path = parts[1] && parts[1].strip path = if path && file = find_file(path) diff --git a/test/test_markup.rb b/test/test_markup.rb index 9c52f4ac..4f759ca3 100644 --- a/test/test_markup.rb +++ b/test/test_markup.rb @@ -446,6 +446,18 @@ context "Markup" do compare(content, output, 'org') end + test "short double links" do + content = "a [[b]] c" + output = %(

    a b c

    ) + compare(content, output, 'org') + end + + test "double linked pipe" do + content = "a [[|]] b" + output = %(

    a b

    ) + compare(content, output, 'org') + end + ######################################################################### # # TeX From 1150303f77bd70c4cb11cd8e910fcab15556e1f3 Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 17 Jan 2011 10:21:22 -0800 Subject: [PATCH 247/393] update history --- HISTORY.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/HISTORY.md b/HISTORY.md index ba09e875..79c20873 100644 --- a/HISTORY.md +++ b/HISTORY.md @@ -3,6 +3,7 @@ * Major Enhancements * Add Page sidebars, similar to Page footers. * Add the ability to revert commits to the wiki. + * Add MediaWiki support. * Minor Enhancements * Add `:sanitization` and `:history_sanitization` options for customizing how `Sanitize.clean` modifies formatted wiki content. @@ -12,6 +13,7 @@ rendering for added customization. * Bug Fixes * Use `@wiki.page_class` in Gollum::Markup where appropriate (#63). + * Fix parsing of Org mode file links (#87). # 1.1.0 / 2010-10-28 From e1f92e3ca2c209ddfbcbf1e0d4f6cffe10e26e44 Mon Sep 17 00:00:00 2001 From: rick Date: Mon, 17 Jan 2011 10:30:26 -0800 Subject: [PATCH 248/393] update readme with new features --- README.md | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9a5fdaca..04685350 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ to install the dependencies for the formats that you plan to use. * [RDoc](http://rdoc.sourceforge.net/) * [ReStructuredText](http://docutils.sourceforge.net/rst.html) -- `easy_install docutils` * [Textile](http://www.textism.com/tools/textile/) -- `gem install RedCloth` +* [MediaWiki](http://www.mediawiki.org/wiki/Help:Formatting) -- `gem install wikicloth` ## RUNNING @@ -74,6 +75,7 @@ current list of formats and allowed extensions is: * RDoc: .rdoc * ReStructuredText: .rest.txt, .rst.txt, .rest, .rst * Textile: .textile +* MediaWiki: .mediawiki, .wiki Gollum detects the page file format via the extension, so files must have one of the supported extensions in order to be converted. @@ -90,13 +92,19 @@ The special page file `Home.ext` (where the extension is one of the supported formats) will be used as the entrance page to your wiki. If it is missing, an automatically generated table of contents will be shown instead. +## SIDEBAR FILES + +Sidebar files allow you to add a simple sidebar to your wiki. Sidebar files +are named `_Sidebar.ext` where the extension is one of the supported formats. +Sidebars affect all pages in their directory and any subdirectories that do not +have a sidebar file of their own. ## FOOTER FILES Footer files allow you to add a simple footer to your wiki. Footer files must be named `_Footer.ext` where the extension is one of the supported formats. -Footers affect all pages in their directory and any subdirectories that do not -have a footer file of their own. +Like sidebars, footers affect all pages in their directory and any +subdirectories that do not have a footer file of their own. ## HTML SANITIZATION @@ -124,6 +132,9 @@ the link text displayed on the page. If the tag is an embedded image, the first thing in the tag will be a path to an image file. Use this trick to easily remember which order things should appear in tags. +Some formats, such as MediaWiki, support the opposite syntax: + + [[Page Title|Link]] ## PAGE LINKS @@ -210,7 +221,7 @@ the pipe. ## IMAGES To display images that are contained in the Gollum repository you should use -the Gollum Image Tag. This will display the actual image on the page. +the Gollum Image Tag. This will display the actual image on the page. [[gollum.png]] @@ -432,4 +443,4 @@ your changes merged back into core is as follows: 1. Do not change the version number, I will do that on my end 1. If necessary, rebase your commits into logical chunks, without errors 1. Push the branch up to GitHub -1. Send me (mojombo) a pull request for your branch +1. Send a pull request to the github/gollum project. From 049d9d6d1f2c76ab2efa8d11b50587d070764962 Mon Sep 17 00:00:00 2001 From: eston Date: Tue, 18 Jan 2011 22:58:44 -0800 Subject: [PATCH 249/393] Remove widon't code --- lib/gollum/frontend/public/javascript/gollum.js | 9 --------- 1 file changed, 9 deletions(-) diff --git a/lib/gollum/frontend/public/javascript/gollum.js b/lib/gollum/frontend/public/javascript/gollum.js index 19d44b96..85836f3f 100755 --- a/lib/gollum/frontend/public/javascript/gollum.js +++ b/lib/gollum/frontend/public/javascript/gollum.js @@ -15,15 +15,6 @@ $(document).ready(function() { } } - // no widows in wiki body - if ($('#wiki-wrapper').hasClass('page')) { - $('#template h1, #template h2, #template h3, #template h4, #template h5, #template h6, #template li, #template p').each( - function(){ - $(this).html($(this).html().replace(/\s([^\s<]+)\s*$/,' $1')); - } - ); - } - if ($('#minibutton-new-page').length) { $('#minibutton-new-page').removeClass('jaws'); $('#minibutton-new-page').click(function(e) { From 05b53462df6fb9f32e656f044de825fe73beeb16 Mon Sep 17 00:00:00 2001 From: eston Date: Tue, 18 Jan 2011 23:08:08 -0800 Subject: [PATCH 250/393] Fix backreferencing/replacement issues Add in a way to short-circuit missing language definitions --- .../javascript/gollum-editor/gollum.editor.js | 539 +++++++++--------- 1 file changed, 276 insertions(+), 263 deletions(-) diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js index 33129efd..0a1aabe9 100755 --- a/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/gollum.editor.js @@ -6,34 +6,35 @@ * $.GollumEditor(); on DOM ready. */ (function($) { - + // Editor options var DefaultOptions = { MarkupType: 'markdown', EditorMode: 'code', NewFile: false, HasFunctionBar: true, - Debug: false + Debug: false, + NoDefinitionsFor: [] }; var ActiveOptions = {}; - - /** + + /** * $.GollumEditor * * You don't need to do anything. Just run this on DOM ready. */ $.GollumEditor = function( IncomingOptions ) { - - ActiveOptions = $.extend( DefaultOptions, IncomingOptions ); - + + ActiveOptions = $.extend( DefaultOptions, IncomingOptions ); + debug('GollumEditor loading'); - + if ( EditorHas.baseEditorMarkup() ) { - + if ( EditorHas.titleDisplayed() ) { $('#gollum-editor-title-field').addClass('active'); } - + if ( EditorHas.editSummaryMarkup() ) { $.GollumEditor.Placeholder.add($('#gollum-editor-edit-summary input')); $('#gollum-editor form[name="gollum-editor"]').submit(function( e ) { @@ -44,63 +45,64 @@ $(this).submit(); }); } - + if ( EditorHas.collapsibleInputs() ) { - $('#gollum-editor .collapsed a.button, ' + + $('#gollum-editor .collapsed a.button, ' + '#gollum-editor .expanded a.button').click(function( e ) { e.preventDefault(); $(this).parent().toggleClass('expanded'); $(this).parent().toggleClass('collapsed'); }); } - + if ( EditorHas.previewButton() ) { - var formAction = + var formAction = $('#gollum-editor #gollum-editor-preview').click(function() { // make a dummy form, submit to new target window // get form fields var oldAction = $('#gollum-editor form').attr('action'); var $form = $($('#gollum-editor form').get(0)); - $form.attr('action', '/preview'); + $form.attr('action', this.href); $form.attr('target', '_blank'); $form.submit(); - - + + $form.attr('action', oldAction); $form.removeAttr('target'); + return false; }); } - + // Initialize the function bar by loading proper definitions if ( EditorHas.functionBar() ) { - + var htmlSetMarkupLang = $('#gollum-editor-body').attr('data-markup-lang'); - + if ( htmlSetMarkupLang ) { ActiveOptions.MarkupType = htmlSetMarkupLang; } - + // load language definition LanguageDefinition.setActiveLanguage( ActiveOptions.MarkupType ); if ( EditorHas.formatSelector() ) { - FormatSelector.init( + FormatSelector.init( $('#gollum-editor-format-selector select') ); } - + if ( EditorHas.help() ) { $('#gollum-editor-help').hide(); $('#gollum-editor-help').removeClass('jaws'); } - - } + + } // EditorHas.functionBar - } + } // EditorHas.baseEditorMarkup }; - - - + + + /** * $.GollumEditor.defineLanguage * Defines a set of language actions that Gollum can use. @@ -109,42 +111,42 @@ $.GollumEditor.defineLanguage = function( language_name, languageObject ) { if ( typeof languageObject == 'object' ) { LanguageDefinition.define( language_name, languageObject ); - } else { - debug('GollumEditor.defineLanguage: definition for ' + language_name + + } else { + debug('GollumEditor.defineLanguage: definition for ' + language_name + ' is not an object'); } }; - - + + /** * debug * Prints debug information to console.log if debug output is enabled. - * + * * @param mixed Whatever you want to dump to console.log * @return void */ var debug = function(m) { - if ( ActiveOptions.Debug && + if ( ActiveOptions.Debug && typeof console != 'undefined' ) { console.log( m ); } }; - - - + + + /** * LanguageDefinition * Language definition file handler * Loads language definition files as necessary. */ var LanguageDefinition = { - + _ACTIVE_LANG: '', _LOADED_LANGS: [], _LANG: {}, - - /** - * Defines a language + + /** + * Defines a language * * @param name string The name of the language * @param name object The definition object @@ -154,11 +156,11 @@ LanguageDefinition._LOADED_LANGS.push( name ); LanguageDefinition._LANG[name] = definitionObject; }, - + getActiveLanguage: function() { return LanguageDefinition._ACTIVE_LANG; }, - + setActiveLanguage: function( name ) { if ( !LanguageDefinition.isLoadedFor(name) ) { LanguageDefinition._ACTIVE_LANG = null; @@ -168,27 +170,27 @@ // well, fake it and turn everything off for this one LanguageDefinition.define( name, {} ); } - + // update features that rely on the language definition if ( EditorHas.functionBar() ) { FunctionBar.refresh(); } - + if ( LanguageDefinition.isValid() && EditorHas.formatSelector() ) { FormatSelector.updateSelected(); } - + } ); } else { LanguageDefinition._ACTIVE_LANG = name; FunctionBar.refresh(); } }, - - + + /** * gets a definition object for a specified attribute - * + * * @param string attr The specified attribute. * @param string specified_lang The language to pull a definition for. * @return object if exists, null otherwise @@ -197,17 +199,17 @@ if ( !specified_lang ) { specified_lang = LanguageDefinition._ACTIVE_LANG; } - + if ( LanguageDefinition.isLoadedFor(specified_lang) && - LanguageDefinition._LANG[specified_lang][attr] && + LanguageDefinition._LANG[specified_lang][attr] && typeof LanguageDefinition._LANG[specified_lang][attr] == 'object' ) { return LanguageDefinition._LANG[specified_lang][attr]; } - + return null; }, - - + + /** * loadFor * Asynchronously loads a definition file for the current markup. @@ -217,23 +219,36 @@ * @return void */ loadFor: function( markup_name, on_complete ) { + // Keep us from hitting 404s on our site, check the definition blacklist + if ( ActiveOptions.NoDefinitionsFor.length ) { + for ( var i=0; i < ActiveOptions.NoDefinitionsFor.length; i++ ) { + if ( markup_name == ActiveOptions.NoDefinitionsFor[i] ) { + // we don't have this. get out. + if ( typeof on_complete == 'function' ) { + on_complete( null, 'error' ); + return; + } + } + } + } + // attempt to load the definition for this language - var script_uri = '/javascript/gollum-editor/langs/' + markup_name + '.js'; + var script_uri = '/javascripts/editor/langs/' + markup_name + '.js'; $.ajax({ - url: script_uri, + url: script_uri, dataType: 'script', - complete: function( xhr, textStatus ) { + complete: function( xhr, textStatus ) { if ( typeof on_complete == 'function' ) { on_complete( xhr, textStatus ); } } }); }, - - + + /** * isLoadedFor - * Checks to see if a definition file has been loaded for the + * Checks to see if a definition file has been loaded for the * specified markup language. * * @param string markup_name The name of the markup. @@ -243,7 +258,7 @@ if ( LanguageDefinition._LOADED_LANGS.length === 0 ) { return false; } - + for ( var i=0; i < LanguageDefinition._LOADED_LANGS.length; i++ ) { if ( LanguageDefinition._LOADED_LANGS[i] == markup_name ) { return true; @@ -251,24 +266,24 @@ } return false; }, - + isValid: function() { - return ( LanguageDefinition._ACTIVE_LANG && - typeof LanguageDefinition._LANG[LanguageDefinition._ACTIVE_LANG] == + return ( LanguageDefinition._ACTIVE_LANG && + typeof LanguageDefinition._LANG[LanguageDefinition._ACTIVE_LANG] == 'object' ); } - + }; - - + + /** * EditorHas * Various conditionals to check what features of the Gollum Editor are * active/operational. */ var EditorHas = { - - + + /** * EditorHas.baseEditorMarkup * True if the basic editor form is in place. @@ -276,14 +291,14 @@ * @return boolean */ baseEditorMarkup: function() { - return ( $('#gollum-editor').length && + return ( $('#gollum-editor').length && $('#gollum-editor-body').length ); }, - - + + /** * EditorHas.collapsibleInputs - * True if the editor contains collapsible inputs for things like the + * True if the editor contains collapsible inputs for things like the * sidebar or footer, false otherwise. * * @return boolean @@ -291,11 +306,11 @@ collapsibleInputs: function() { return $('#gollum-editor .collapsed, #gollum-editor .expanded').length; }, - - + + /** * EditorHas.formatSelector - * True if the editor has a format selector (for switching between + * True if the editor has a format selector (for switching between * language types), false otherwise. * * @return boolean @@ -303,8 +318,8 @@ formatSelector: function() { return $('#gollum-editor-format-selector select').length; }, - - + + /** * EditorHas.functionBar * True if the Function Bar markup exists. @@ -312,11 +327,11 @@ * @return boolean */ functionBar: function() { - return ( ActiveOptions.HasFunctionBar && + return ( ActiveOptions.HasFunctionBar && $('#gollum-editor-function-bar').length ); }, - - + + /** * EditorHas.ff4Environment * True if in a Firefox 4.0 Beta environment. @@ -327,11 +342,11 @@ var ua = new RegExp(/Firefox\/4.0b/); return ( ua.test( navigator.userAgent ) ); }, - - + + /** * EditorHas.editSummaryMarkup - * True if the editor has a summary field (Gollum's commit message), + * True if the editor has a summary field (Gollum's commit message), * false otherwise. * * @return boolean @@ -339,8 +354,8 @@ editSummaryMarkup: function() { return ( $('input#gollum-editor-message-field').length > 0 ); }, - - + + /** * EditorHas.help * True if the editor contains the inline help sector, false otherwise. @@ -348,11 +363,11 @@ * @return boolean */ help: function() { - return ( $('#gollum-editor #gollum-editor-help').length && + return ( $('#gollum-editor #gollum-editor-help').length && $('#gollum-editor #function-help').length ); }, - - + + /** * EditorHas.mathJax * True if the editor has MathJax enabled and running, false otherwise. @@ -362,8 +377,8 @@ mathJax: function() { return (typeof window.MathJax == 'object'); }, - - + + /** * EditorHas.previewButton * True if the editor has a preview button, false otherwise. @@ -373,8 +388,8 @@ previewButton: function() { return ( $('#gollum-editor #gollum-editor-preview').length ); }, - - + + /** * EditorHas.titleDisplayed * True if the editor is displaying a title field, false otherwise. @@ -384,29 +399,29 @@ titleDisplayed: function() { return ( ActiveOptions.NewFile ); } - + }; - - + + /** * FunctionBar * * Things the function bar does. */ var FunctionBar = { - + isActive: false, - - + + /** * FunctionBar.activate - * Activates the function bar, attaching all click events + * Activates the function bar, attaching all click events * and displaying the bar. * */ activate: function() { debug('Activating function bar'); - + // check these out $('#gollum-editor-function-bar a.function-button').each(function() { if ( LanguageDefinition.getDefinitionFor( $(this).attr('id') ) ) { @@ -422,18 +437,18 @@ $('#gollum-editor-function-bar').addClass( 'active' ); FunctionBar.isActive = true; }, - - + + deactivate: function() { $('#gollum-editor-function-bar a.function-button').unbind('click'); $('#gollum-editor-function-bar').removeClass( 'active' ); FunctionBar.isActive = false; }, - - + + /** * FunctionBar.evtFunctionButtonClick - * Event handler for the function buttons. Traps the click and + * Event handler for the function buttons. Traps the click and * executes the proper language action. * * @param jQuery.Event jQuery event object. @@ -445,8 +460,8 @@ FunctionBar.executeAction( def ); } }, - - + + /** * FunctionBar.executeAction * Executes a language-specific defined action for a function button. @@ -462,73 +477,67 @@ var repText = selText; var reselect = true; var cursor = null; - + // execute a replacement function if one exists - if ( definitionObject.exec && + if ( definitionObject.exec && typeof definitionObject.exec == 'function' ) { definitionObject.exec( txt, selText, $('#gollum-editor-body') ); return; } - + // execute a search/replace if they exist var searchExp = /([^\n]+)/gi; - if ( definitionObject.search && + if ( definitionObject.search && typeof definitionObject.search == 'object' ) { debug('Replacing search Regex'); - searchExp = definitionObject.search; + searchExp = null; + searchExp = new RegExp ( definitionObject.search ); debug( searchExp ); } - debug(repText); + debug('repText is ' + '"' + repText + '"'); // replace text if ( definitionObject.replace && typeof definitionObject.replace == 'string' ) { debug('Running replacement - using ' + definitionObject.replace); var rt = definitionObject.replace; - var matches = searchExp.exec( repText ); - if ( matches && matches.length > 1 ) { - debug(matches); - for ( var i = 1; i < matches.length; i++ ) { - var searchStr = '$' + i; - debug('searching for ' + searchStr + ' to replace with ' + matches[i]); - rt = rt.replace( searchStr, matches[i] ); - } - // remove any excess backreferences from the replace string - rt = rt.replace( /\$[\d]/g, '' ); - repText = rt; - } else if ( repText === '' ) { + repText = repText.replace( searchExp, rt ); + // remove backreferences + repText = repText.replace( /\$[\d]/g, '' ); + + if ( repText === '' ) { debug('Search string is empty'); - + // find position of $1 - this is where we will place the cursor - cursor = rt.indexOf('$1'); - + cursor = rt.indexOf('$1'); + // we have an empty string, so just remove backreferences repText = rt.replace( /\$[\d]/g, '' ); - - // if the position of $1 doesn't exist, stick the cursor in + + // if the position of $1 doesn't exist, stick the cursor in // the middle if ( cursor == -1 ) { cursor = Math.floor( rt.length / 2 ); - } + } } } - + // append if necessary - if ( definitionObject.append && + if ( definitionObject.append && typeof definitionObject.append == 'string' ) { if ( repText == selText ) { reselect = false; } repText += definitionObject.append; } - + if ( repText ) { - FunctionBar.replaceFieldSelection( $('#gollum-editor-body'), + FunctionBar.replaceFieldSelection( $('#gollum-editor-body'), repText, reselect, cursor ); } - + }, - - + + /** * getFieldSelectionPosition * Retrieves the selection range for the textarea. @@ -539,8 +548,8 @@ if ($field.length) { var start = 0, end = 0; var el = $field.get(0); - - if (typeof el.selectionStart == "number" && + + if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") { start = el.selectionStart; end = el.selectionEnd; @@ -551,9 +560,9 @@ stored_range.setEndPoint( 'EndToEnd', range ); start = stored_range.text.length - range.text.length; end = start + range.text.length; - - // so, uh, we're close, but we need to search for line breaks and - // adjust the start/end points accordingly since IE counts them as + + // so, uh, we're close, but we need to search for line breaks and + // adjust the start/end points accordingly since IE counts them as // 2 characters in TextRange. var s = start; var lb = 0; @@ -564,12 +573,12 @@ ++lb; } } - + if ( lb ) { debug('IE start: compensating for ' + lb + ' line breaks'); - start = start - lb; + start = start - lb; lb = 0; - } + } var e = end; for ( i=0; i < e; i++ ) { @@ -577,24 +586,24 @@ ++lb; } } - + if ( lb ) { debug('IE end: compensating for ' + lb + ' line breaks'); - end = end - lb; - } + end = end - lb; + } } - + return { start: start, end: end }; } // end if ($field.length) }, - - + + /** * getFieldSelection - * Returns the currently selected substring of the textarea. + * Returns the currently selected substring of the textarea. * * @param jQuery A jQuery object for the textarea. * @return string Selected string. @@ -602,24 +611,25 @@ getFieldSelection: function( $field ) { var selStr = ''; var selPos; - + if ( $field.length ) { selPos = FunctionBar.getFieldSelectionPosition( $field ); selStr = $field.val().substring( selPos.start, selPos.end ); - debug('Selected: ' + selStr + ' (' + selPos.start + ', ' + + debug('Selected: ' + selStr + ' (' + selPos.start + ', ' + selPos.end + ')'); return selStr; } return false; }, - - + + isShown: function() { return ($('#gollum-editor-function-bar').is(':visible')); }, - + refresh: function() { if ( EditorHas.functionBar() ) { + debug('Refreshing function bar'); if ( LanguageDefinition.isValid() ) { $('#gollum-editor-function-bar a.function-button').unbind('click'); FunctionBar.activate(); @@ -635,14 +645,14 @@ if ( Help.isShown() ) { Help.hide(); } - } + } } }, - - + + /** * replaceFieldSelection - * Replaces the currently selected substring of the textarea with + * Replaces the currently selected substring of the textarea with * a new string. * * @param jQuery A jQuery object for the textarea. @@ -656,26 +666,26 @@ if ( reselect === false) { selectNew = false; } - + var scrollTop = null; if ( $field[0].scrollTop ) { scrollTop = $field[0].scrollTop; } - - $field.val( fullStr.substring(0, selPos.start) + replaceText + + + $field.val( fullStr.substring(0, selPos.start) + replaceText + fullStr.substring(selPos.end) ); $field[0].focus(); - + if ( selectNew ) { if ( $field[0].setSelectionRange ) { if ( cursorOffset ) { - $field[0].setSelectionRange( + $field[0].setSelectionRange( selPos.start + cursorOffset, selPos.start + cursorOffset ); } else { - $field[0].setSelectionRange( selPos.start, - selPos.start + replaceText.length ); + $field[0].setSelectionRange( selPos.start, + selPos.start + replaceText.length ); } } else if ( $field[0].createTextRange ) { var range = $field[0].createTextRange(); @@ -683,14 +693,14 @@ if ( cursorOffset ) { range.moveEnd( selPos.start + cursorOffset ); range.moveStart( selPos.start + cursorOffset ); - } else { + } else { range.moveEnd( 'character', selPos.start + replaceText.length ); - range.moveStart( 'character', selPos.start ); + range.moveStart( 'character', selPos.start ); } range.select(); } } - + if ( scrollTop ) { // this jumps sometimes in FF $field[0].scrollTop = scrollTop; @@ -699,20 +709,20 @@ }; - + /** * FormatSelector * * Functions relating to the format selector (if it exists) */ var FormatSelector = { - + $_SELECTOR: null, - + /** * FormatSelector.evtChangeFormat - * Event handler for when a format has been changed by the format - * selector. Will automatically load a new language definition + * Event handler for when a format has been changed by the format + * selector. Will automatically load a new language definition * via JS if necessary. * * @return void @@ -721,8 +731,8 @@ var newMarkup = $(this).val(); LanguageDefinition.setActiveLanguage( newMarkup ); }, - - + + /** * FormatSelector.init * Initializes the format selector. @@ -731,21 +741,21 @@ */ init: function( $sel ) { debug('Initializing format selector'); - + // unbind events if init is being called twice for some reason if ( FormatSelector.$_SELECTOR && typeof FormatSelector.$_SELECTOR == 'object' ) { FormatSelector.$_SELECTOR.unbind( 'change' ); } - + FormatSelector.$_SELECTOR = $sel; - + // set format selector to the current language FormatSelector.updateSelected(); FormatSelector.$_SELECTOR.change( FormatSelector.evtChangeFormat ); }, - - + + /** * FormatSelector.update */ @@ -753,50 +763,50 @@ var currentLang = LanguageDefinition.getActiveLanguage(); FormatSelector.$_SELECTOR.val( currentLang ); } - + }; - - - + + + /** * Help - * - * Functions that manage the display and loading of inline help files. + * + * Functions that manage the display and loading of inline help files. */ var Help = { - + _ACTIVE_HELP: '', _LOADED_HELP_LANGS: [], _HELP: {}, - - + + /** - * Help.define + * Help.define * - * Defines a new help context and enables the help function if it + * Defines a new help context and enables the help function if it * exists in the Gollum Function Bar. * - * @param string name The name you're giving to this help context. + * @param string name The name you're giving to this help context. * Generally, this should match the language name. - * @param object definitionObject The definition object being loaded from a + * @param object definitionObject The definition object being loaded from a * language / help definition file. * @return void */ - define: function( name, definitionObject ) { + define: function( name, definitionObject ) { if ( Help.isValidHelpFormat( definitionObject ) ) { debug('help is a valid format'); - + Help._ACTIVE_HELP_LANG = name; Help._LOADED_HELP_LANGS.push( name ); Help._HELP[name] = definitionObject; - + if ( $("#function-help").length ) { if ( $('#function-help').hasClass('disabled') ) { $('#function-help').removeClass('disabled'); } $('#function-help').unbind('click'); $('#function-help').click( Help.evtHelpButtonClick ); - + // generate help menus Help.generateHelpMenuFor( name ); } @@ -806,13 +816,13 @@ } } }, - - + + /** * Help.generateHelpMenuFor * Generates the markup for the main help menu given a context name. - * - * @param string name The context name. + * + * @param string name The context name. * @return void */ generateHelpMenuFor: function( name ) { @@ -821,24 +831,24 @@ return false; } var helpData = Help._HELP[name]; - + if ( EditorHas.mathJax() && Help.isLoadedFor('mathjax') ) { debug('Adding MathJax support to help'); // TODO } - + // clear this shiz out $('#gollum-editor-help-parent').html(''); $('#gollum-editor-help-list').html(''); $('#gollum-editor-help-content').html(''); - + // go go inefficient algorithm for ( var i=0; i < helpData.length; i++ ) { if ( typeof helpData[i] != 'object' ) { break; } - - var $newLi = $('
  • ' + + + var $newLi = $('
  • ' + helpData[i].menuName + '
  • '); $('#gollum-editor-help-parent').append( $newLi ); if ( i === 0 ) { @@ -847,17 +857,17 @@ } $newLi.children('a').click( Help.evtParentMenuClick ); } - + // generate parent submenu on first run Help.generateSubMenu( helpData[0], 0 ); $($('#gollum-editor-help-list li a').get(0)).click(); - + }, - - + + /** * Help.generateSubMenu - * Generates the markup for the inline help sub-menu given the data + * Generates the markup for the inline help sub-menu given the data * object for the submenu and the array index to start at. * * @param object subData The data for the sub-menu. @@ -871,21 +881,21 @@ if ( typeof subData.content[i] != 'object' ) { break; } - + var $subLi = $('
  • ' + subData.content[i].menuName + '
  • '); - + $('#gollum-editor-help-list').append( $subLi ); $subLi.children('a').click( Help.evtSubMenuClick ); } }, - - + + hide: function() { if ( $.browser.msie ) { - $('#gollum-editor-help').css('display', 'none'); - } else { + $('#gollum-editor-help').css('display', 'none'); + } else { $('#gollum-editor-help').animate({ opacity: 0 }, 200, @@ -893,12 +903,12 @@ $('#gollum-editor-help') .animate({ height: 'hide' }, 200); }); - } + } }, - + show: function() { if ( $.browser.msie ) { - // bypass effects for internet explorer, since it does weird crap + // bypass effects for internet explorer, since it does weird crap // to text antialiasing with opacity animations $('#gollum-editor-help').css('display', 'block'); } else { @@ -909,13 +919,13 @@ $('#gollum-editor-help') .animate({ opacity: 1 }, 300); }); - } + } }, - - + + /** * Help.showHelpFor - * Displays the actual help content given the two menu indexes, which are + * Displays the actual help content given the two menu indexes, which are * rendered in the rel="" attributes of the help menus * * @param integer index1 parent index @@ -927,11 +937,11 @@ Help._HELP[Help._ACTIVE_HELP_LANG][index1].content[index2].data; $('#gollum-editor-help-content').html(html); }, - - + + /** * Help.isLoadedFor - * Returns true if help is loaded for a specific markup language, + * Returns true if help is loaded for a specific markup language, * false otherwise. * * @param string name The name of the markup language. @@ -945,17 +955,17 @@ } return false; }, - - + + isShown: function() { return ( $('#gollum-editor-help').is(':visible') ); }, - - + + /** * Help.isValidHelpFormat - * Does a quick check to make sure that the help definition isn't in a - * completely messed-up format. + * Does a quick check to make sure that the help definition isn't in a + * completely messed-up format. * * @param object (Array) helpArr The help definition array. * @return boolean @@ -967,11 +977,11 @@ typeof helpArr[0].content == 'object' && helpArr[0].content.length ); }, - - + + /** * Help.setActiveHelp - * Sets the active help definition to the one defined in the argument, + * Sets the active help definition to the one defined in the argument, * re-rendering the help menu to match the new definition. * * @param string name The name of the help definition. @@ -980,7 +990,10 @@ setActiveHelp: function( name ) { if ( !Help.isLoadedFor( name ) ) { if ( $('#function-help').length ) { - $('#function-help').addClass('disabled'); + $('#function-help').addClass('disabled'); + } + if ( Help.isShown() ) { + Help.hide(); } } else { Help._ACTIVE_HELP_LANG = name; @@ -991,11 +1004,11 @@ $('#function-help').unbind('click'); $('#function-help').click( Help.evtHelpButtonClick ); Help.generateHelpMenuFor( name ); - } + } } }, - - + + /** * Help.evtHelpButtonClick * Event handler for clicking the help button in the function bar. @@ -1008,12 +1021,12 @@ if ( Help.isShown() ) { Help.hide(); } else { Help.show(); } }, - - + + /** * Help.evtParentMenuClick - * Event handler for clicking on an item in the parent menu. Automatically - * renders the submenu for the parent menu as well as the first result for + * Event handler for clicking on an item in the parent menu. Automatically + * renders the submenu for the parent menu as well as the first result for * the actual plain text. * * @param jQuery.Event e The jQuery event object. @@ -1023,30 +1036,30 @@ e.preventDefault(); // short circuit if we've selected this already if ( $(this).hasClass('selected') ) { return; } - + // populate from help data for this var helpIndex = $(this).attr('rel'); var subData = Help._HELP[Help._ACTIVE_HELP_LANG][helpIndex]; - + $('#gollum-editor-help-parent li a').removeClass('selected'); $(this).addClass('selected'); Help.generateSubMenu( subData, helpIndex ); $($('#gollum-editor-help-list li a').get(0)).click(); }, - - + + /** * Help.evtSubMenuClick - * Event handler for clicking an item in a help submenu. Renders the + * Event handler for clicking an item in a help submenu. Renders the * appropriate text for the submenu link. * * @param jQuery.Event e The jQuery event object. - * @return void + * @return void */ evtSubMenuClick: function( e ) { e.preventDefault(); if ( $(this).hasClass('selected') ) { return; } - + // split index rel data var rawIndex = $(this).attr('rel').split(':'); $('#gollum-editor-help-list li a').removeClass('selected'); @@ -1054,18 +1067,18 @@ Help.showHelpFor( rawIndex[0], rawIndex[1] ); } }; - - + + // Publicly-accessible function to Help.define $.GollumEditor.defineHelp = Help.define; - + // Dialog exists as its own thing now $.GollumEditor.Dialog = $.GollumDialog; $.GollumEditor.replaceSelection = function( repText ) { FunctionBar.replaceFieldSelection( $('#gollum-editor-body'), repText ); }; - + // Placeholder exists as its own thing now $.GollumEditor.Placeholder = $.GollumPlaceholder; - -})(jQuery); + +})(jQuery); From aae9eb188332f3c34a2dff90892c21c415bf74e2 Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 19 Jan 2011 05:11:11 -0800 Subject: [PATCH 251/393] refactor wiki commit logic into Gollum::Committer class --- lib/gollum.rb | 1 + lib/gollum/committer.rb | 216 +++++++++++++++++++++++++ lib/gollum/wiki.rb | 347 +++++++++++++--------------------------- test/test_committer.rb | 27 ++++ test/test_wiki.rb | 17 -- 5 files changed, 357 insertions(+), 251 deletions(-) create mode 100644 lib/gollum/committer.rb create mode 100644 test/test_committer.rb diff --git a/lib/gollum.rb b/lib/gollum.rb index 6970d0be..2320b281 100644 --- a/lib/gollum.rb +++ b/lib/gollum.rb @@ -12,6 +12,7 @@ require 'gollum/ruby1.8' # internal require 'gollum/git_access' +require 'gollum/committer' require 'gollum/pagination' require 'gollum/blob_entry' require 'gollum/wiki' diff --git a/lib/gollum/committer.rb b/lib/gollum/committer.rb new file mode 100644 index 00000000..9038f2ff --- /dev/null +++ b/lib/gollum/committer.rb @@ -0,0 +1,216 @@ +module Gollum + # Responsible for handling the commit process for a Wiki. It sets up the + # Git index, provides methods for modifying the tree, and stores callbacks + # to be fired after the commit has been made. This is specifically + # designed to handle multiple updated pages in a single commit. + class Committer + # Gets the instance of the Gollum::Wiki that is being updated. + attr_reader :wiki + + # Gets a Hash of commit options. + attr_reader :options + + # Initializes the Committer. + # + # wiki - The Gollum::Wiki instance that is being updated. + # options - The commit Hash details: + # :message - The String commit message. + # :name - The String author full name. + # :email - The String email address. + # :parent - Optional Grit::Commit parent to this update. + # :tree - Optional String SHA of the tree to create the + # index from. + # :committer - Optional Gollum::Committer instance. If provided, + # assume that this operation is part of batch of + # updates and the commit happens later. + # + # Returns the Committer instance. + def initialize(wiki, options = {}) + @wiki = wiki + @options = options + @callbacks = [] + end + + # Public: References the Git index for this commit. + # + # Returns a Grit::Index. + def index + @index ||= begin + idx = @wiki.repo.index + if tree = options[:tree] + idx.read_tree(tree) + elsif parent = parents.first + idx.read_tree(parent.tree.id) + end + idx + end + end + + # Public: The committer for this commit. + # + # Returns a Grit::Actor. + def actor + @actor ||= begin + @options[:name] = @wiki.default_committer_name if @options[:name].to_s.empty? + @options[:email] = @wiki.default_committer_email if @options[:email].to_s.empty? + Grit::Actor.new(@options[:name], @options[:email]) + end + end + + # Public: The parent commits to this pending commit. + # + # Returns an array of Grit::Commit instances. + def parents + @parents ||= begin + arr = [@options[:parent] || @wiki.repo.commit('master')] + arr.flatten! + arr.compact! + arr + end + end + + # Adds a page to the given Index. + # + # dir - The String subdirectory of the Gollum::Page without any + # prefix or suffix slashes (e.g. "foo/bar"). + # name - The String Gollum::Page name. + # format - The Symbol Gollum::Page format. + # data - The String wiki data to store in the tree map. + # allow_same_ext - A Boolean determining if the tree map allows the same + # filename with the same extension. + # + # Raises Gollum::DuplicatePageError if a matching filename already exists. + # This way, pages are not inadvertently overwritten. + # + # Returns nothing (modifies the Index in place). + def add_to_index(dir, name, format, data, allow_same_ext = false) + path = @wiki.page_file_name(name, format) + + dir = '/' if dir.strip.empty? + + fullpath = ::File.join(*[@wiki.page_file_dir, dir, path].compact) + fullpath = fullpath[1..-1] if fullpath =~ /^\// + + if index.current_tree && tree = index.current_tree / dir + downpath = path.downcase.sub(/\.\w+$/, '') + + tree.blobs.each do |blob| + next if page_path_scheduled_for_deletion?(index.tree, fullpath) + file = blob.name.downcase.sub(/\.\w+$/, '') + file_ext = ::File.extname(blob.name).sub(/^\./, '') + if downpath == file && !(allow_same_ext && file_ext == ext) + raise DuplicatePageError.new(dir, blob.name, path) + end + end + end + + index.add(fullpath, @wiki.normalize(data)) + end + + # Update the given file in the repository's working directory if there + # is a working directory present. + # + # dir - The String directory in which the file lives. + # name - The String name of the page (may be in human format). + # format - The Symbol format of the page. + # + # Returns nothing. + def update_working_dir(dir, name, format) + unless @wiki.repo.bare + if @wiki.page_file_dir + dir = dir.size.zero? ? @wiki.page_file_dir : File.join(dir, @wiki.page_file_dir) + end + + path = + if dir == '' + @wiki.page_file_name(name, format) + else + ::File.join(dir, @wiki.page_file_name(name, format)) + end + + Dir.chdir(::File.join(@wiki.repo.path, '..')) do + if file_path_scheduled_for_deletion?(index.tree, path) + @wiki.repo.git.rm({'f' => true}, '--', path) + else + @wiki.repo.git.checkout({}, 'HEAD', '--', path) + end + end + end + end + + # Writes the commit to Git and runs the after_commit callbacks. + # + # Returns the String SHA1 of the new commit. + def commit + sha1 = index.commit(@options[:message], parents, actor) + @callbacks.each do |cb| + cb.call(self) + end + sha1 + end + + # Adds a callback to be fired after a commit. + # + # block - A block that expects this Committer instance as the argument. + # + # Returns nothing. + def after_commit(&block) + @callbacks << block + end + + # Determine if a given page (regardless of format) is scheduled to be + # deleted in the next commit for the given Index. + # + # map - The Hash map: + # key - The String directory or filename. + # val - The Hash submap or the String contents of the file. + # path - The String path of the page file. This may include the format + # extension in which case it will be ignored. + # + # Returns the Boolean response. + def page_path_scheduled_for_deletion?(map, path) + parts = path.split('/') + if parts.size == 1 + deletions = map.keys.select { |k| !map[k] } + downfile = parts.first.downcase.sub(/\.\w+$/, '') + deletions.any? { |d| d.downcase.sub(/\.\w+$/, '') == downfile } + else + part = parts.shift + if rest = map[part] + page_path_scheduled_for_deletion?(rest, parts.join('/')) + else + false + end + end + end + + # Determine if a given file is scheduled to be deleted in the next commit + # for the given Index. + # + # map - The Hash map: + # key - The String directory or filename. + # val - The Hash submap or the String contents of the file. + # path - The String path of the file including extension. + # + # Returns the Boolean response. + def file_path_scheduled_for_deletion?(map, path) + parts = path.split('/') + if parts.size == 1 + deletions = map.keys.select { |k| !map[k] } + deletions.any? { |d| d == parts.first } + else + part = parts.shift + if rest = map[part] + file_path_scheduled_for_deletion?(rest, parts.join('/')) + else + false + end + end + end + + # Proxies methods t + def method_missing(name, *args) + index.send(name, *args) + end + end +end \ No newline at end of file diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 76107586..211bbe66 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -181,22 +181,36 @@ module Gollum # format - The Symbol format of the page. # data - The new String contents of the page. # commit - The commit Hash details: - # :message - The String commit message. - # :name - The String author full name. - # :email - The String email address. + # :message - The String commit message. + # :name - The String author full name. + # :email - The String email address. + # :parent - Optional Grit::Commit parent to this update. + # :tree - Optional String SHA of the tree to create the + # index from. + # :committer - Optional Gollum::Committer instance. If provided, + # assume that this operation is part of batch of + # updates and the commit happens later. # - # Returns the String SHA1 of the newly written version. + # Returns the String SHA1 of the newly written version, or the + # Gollum::Committer instance if this is part of a batch update. def write_page(name, format, data, commit = {}) - index = nil - sha1 = commit_index(commit) do |idx| - index = idx - add_to_index(index, '', name, format, data) + multi_commit = false + + committer = if obj = commit[:committer] + multi_commit = true + obj + else + Committer.new(self, commit) end - @access.refresh - update_working_dir(index, '', name, format) + committer.add_to_index('', name, format, data) - sha1 + committer.after_commit do |index| + @access.refresh + index.update_working_dir('', name, format) + end + + multi_commit ? committer : committer.commit end # Public: Update an existing page with new content. The location of the @@ -209,57 +223,85 @@ module Gollum # format - The Symbol format of the page. # data - The new String contents of the page. # commit - The commit Hash details: - # :message - The String commit message. - # :name - The String author full name. - # :email - The String email address. + # :message - The String commit message. + # :name - The String author full name. + # :email - The String email address. + # :parent - Optional Grit::Commit parent to this update. + # :tree - Optional String SHA of the tree to create the + # index from. + # :committer - Optional Gollum::Committer instance. If provided, + # assume that this operation is part of batch of + # updates and the commit happens later. # - # Returns the String SHA1 of the newly written version. + # Returns the String SHA1 of the newly written version, or the + # Gollum::Committer instance if this is part of a batch update. def update_page(page, name, format, data, commit = {}) name ||= page.name format ||= page.format dir = ::File.dirname(page.path) dir = '' if dir == '.' - index = nil - sha1 = commit_index(commit) do |idx| - index = idx - if page.name == name && page.format == format - index.add(page.path, normalize(data)) - else - index.delete(page.path) - add_to_index(index, dir, name, format, data, :allow_same_ext) - end + multi_commit = false + + committer = if obj = commit[:committer] + multi_commit = true + obj + else + Committer.new(self, commit) end - @access.refresh - update_working_dir(index, dir, page.name, page.format) - update_working_dir(index, dir, name, format) + if page.name == name && page.format == format + committer.add(page.path, normalize(data)) + else + committer.delete(page.path) + committer.add_to_index(dir, name, format, data, :allow_same_ext) + end - sha1 + committer.after_commit do |index| + @access.refresh + index.update_working_dir(dir, page.name, page.format) + index.update_working_dir(dir, name, format) + end + + multi_commit ? committer : committer.commit end # Public: Delete a page. # # page - The Gollum::Page to delete. # commit - The commit Hash details: - # :message - The String commit message. - # :name - The String author full name. - # :email - The String email address. + # :message - The String commit message. + # :name - The String author full name. + # :email - The String email address. + # :parent - Optional Grit::Commit parent to this update. + # :tree - Optional String SHA of the tree to create the + # index from. + # :committer - Optional Gollum::Committer instance. If provided, + # assume that this operation is part of batch of + # updates and the commit happens later. # - # Returns the String SHA1 of the newly written version. + # Returns the String SHA1 of the newly written version, or the + # Gollum::Committer instance if this is part of a batch update. def delete_page(page, commit) - index = nil - sha1 = commit_index(commit) do |idx| - index = idx - index.delete(page.path) + multi_commit = false + + committer = if obj = commit[:committer] + multi_commit = true + obj + else + Committer.new(self, commit) + end + + committer.delete(page.path) + + committer.after_commit do |index| + dir = ::File.dirname(page.path) + dir = '' if dir == '.' + + @access.refresh + index.update_working_dir(dir, page.name, page.format) end - dir = ::File.dirname(page.path) - dir = '' if dir == '.' - - @access.refresh - update_working_dir(index, dir, page.name, page.format) - - sha1 + multi_commit ? committer : committer.commit end # Public: Applies a reverse diff for a given page. If only 1 SHA is given, @@ -274,6 +316,7 @@ module Gollum # :message - The String commit message. # :name - The String author full name. # :email - The String email address. + # :parent - Optional Grit::Commit parent to this update. # # Returns a String SHA1 of the new commit, or nil if the reverse diff does # not apply. @@ -283,41 +326,39 @@ module Gollum sha2 = nil end - pcommit = @repo.commit('master') - patch = full_reverse_diff_for(page, sha1, sha2) - commit[:parent] = [pcommit] - commit[:tree] = @repo.git.apply_patch(pcommit.sha, patch) - return false unless commit[:tree] + patch = full_reverse_diff_for(page, sha1, sha2) + committer = Committer.new(self, commit) + parent = committer.parents[0] + committer.options[:tree] = @repo.git.apply_patch(parent.sha, patch) + return false unless committer.options[:tree] + committer.after_commit do |index| + @access.refresh - index = nil - sha1 = commit_index(commit) { |i| index = i } - @access.refresh - - files = [] - if page - files << [page.path, page.name, page.format] - else - # Grit::Diff can't parse reverse diffs.... yet - lines = patch.split("\n") - while line = lines.shift - if line =~ %r{^diff --git b/.+? a/(.+)$} - path = $1 - ext = ::File.extname(path) - name = ::File.basename(path, ext) - if format = ::Gollum::Page.format_for(ext) - files << [path, name, format] + files = [] + if page + files << [page.path, page.name, page.format] + else + # Grit::Diff can't parse reverse diffs.... yet + patch.each_line do |line| + if line =~ %r{^diff --git b/.+? a/(.+)$} + path = $1 + ext = ::File.extname(path) + name = ::File.basename(path, ext) + if format = ::Gollum::Page.format_for(ext) + files << [path, name, format] + end end end end + + files.each do |(path, name, format)| + dir = ::File.dirname(path) + dir = '' if dir == '.' + index.update_working_dir(dir, name, format) + end end - files.each do |(path, name, format)| - dir = ::File.dirname(path) - dir = '' if dir == '.' - update_working_dir(index, dir, name, format) - end - - sha1 + committer.commit end # Public: Applies a reverse diff to the repo. If only 1 SHA is given, @@ -464,38 +505,6 @@ module Gollum @page_class.cname(name) + '.' + ext end - # Update the given file in the repository's working directory if there - # is a working directory present. - # - # index - The Grit::Index with which to sync. - # dir - The String directory in which the file lives. - # name - The String name of the page (may be in human format). - # format - The Symbol format of the page. - # - # Returns nothing. - def update_working_dir(index, dir, name, format) - unless @repo.bare - if @page_file_dir - dir = dir.size.zero? ? @page_file_dir : File.join(dir, @page_file_dir) - end - - path = - if dir == '' - page_file_name(name, format) - else - ::File.join(dir, page_file_name(name, format)) - end - - Dir.chdir(::File.join(@repo.path, '..')) do - if file_path_scheduled_for_deletion?(index.tree, path) - @repo.git.rm({'f' => true}, '--', path) - else - @repo.git.checkout({}, 'HEAD', '--', path) - end - end - end - end - # Fill an array with a list of pages. # # ref - A String ref that is either a commit SHA or references one. @@ -510,122 +519,6 @@ module Gollum end end - # Determine if a given file is scheduled to be deleted in the next commit - # for the given Index. - # - # map - The Hash map: - # key - The String directory or filename. - # val - The Hash submap or the String contents of the file. - # path - The String path of the file including extension. - # - # Returns the Boolean response. - def file_path_scheduled_for_deletion?(map, path) - parts = path.split('/') - if parts.size == 1 - deletions = map.keys.select { |k| !map[k] } - deletions.any? { |d| d == parts.first } - else - part = parts.shift - if rest = map[part] - file_path_scheduled_for_deletion?(rest, parts.join('/')) - else - false - end - end - end - - # Determine if a given page (regardless of format) is scheduled to be - # deleted in the next commit for the given Index. - # - # map - The Hash map: - # key - The String directory or filename. - # val - The Hash submap or the String contents of the file. - # path - The String path of the page file. This may include the format - # extension in which case it will be ignored. - # - # Returns the Boolean response. - def page_path_scheduled_for_deletion?(map, path) - parts = path.split('/') - if parts.size == 1 - deletions = map.keys.select { |k| !map[k] } - downfile = parts.first.downcase.sub(/\.\w+$/, '') - deletions.any? { |d| d.downcase.sub(/\.\w+$/, '') == downfile } - else - part = parts.shift - if rest = map[part] - page_path_scheduled_for_deletion?(rest, parts.join('/')) - else - false - end - end - end - - # Adds a page to the given Index. - # - # index - The Grit::Index to which the page will be added. - # dir - The String subdirectory of the Gollum::Page without any - # prefix or suffix slashes (e.g. "foo/bar"). - # name - The String Gollum::Page name. - # format - The Symbol Gollum::Page format. - # data - The String wiki data to store in the tree map. - # allow_same_ext - A Boolean determining if the tree map allows the same - # filename with the same extension. - # - # Raises Gollum::DuplicatePageError if a matching filename already exists. - # This way, pages are not inadvertently overwritten. - # - # Returns nothing (modifies the Index in place). - def add_to_index(index, dir, name, format, data, allow_same_ext = false) - path = page_file_name(name, format) - - dir = '/' if dir.strip.empty? - - fullpath = ::File.join(*[@page_file_dir, dir, path].compact) - fullpath = fullpath[1..-1] if fullpath =~ /^\// - - if index.current_tree && tree = index.current_tree / dir - downpath = path.downcase.sub(/\.\w+$/, '') - - tree.blobs.each do |blob| - next if page_path_scheduled_for_deletion?(index.tree, fullpath) - file = blob.name.downcase.sub(/\.\w+$/, '') - file_ext = ::File.extname(blob.name).sub(/^\./, '') - if downpath == file && !(allow_same_ext && file_ext == ext) - raise DuplicatePageError.new(dir, blob.name, path) - end - end - end - - index.add(fullpath, normalize(data)) - end - - # Commits to the repo. This is a common method used by Gollum for - # creating, updating, and deleting pages. There are typically three steps: - # building an index with the current tree, yielding the index for - # modification, and then writing the commit. - # - # options - Hash of option - # - # Returns the String SHA of the new Commit. - def commit_index(options = {}) - normalize_commit(options) - parents = [options[:parent] || @repo.commit('master')] - parents.flatten! - parents.compact! - index = self.repo.index - if tree = options[:tree] - index.read_tree(tree) - elsif parent = parents[0] - index.read_tree(parent.tree.id) - end - yield index if block_given? - - options[:name] = default_committer_name if options[:name].to_s.empty? - options[:email] = default_committer_email if options[:email].to_s.empty? - actor = Grit::Actor.new(options[:name], options[:email]) - index.commit(options[:message], parents, actor) - end - # Creates a reverse diff for the given SHAs on the given Gollum::Page. # # page - The Gollum::Page to scope the patch to, or a String Path. @@ -654,20 +547,6 @@ module Gollum full_reverse_diff_for(nil, sha1, sha2) end - # Ensures a commit hash has all the required fields for a commit. - # - # commit - The commit Hash details: - # :message - The String commit message. - # :name - The String author full name. - # :email - The String email address. - # - # Returns the commit Hash - def normalize_commit(commit = {}) - commit[:name] = default_committer_name if commit[:name].to_s.empty? - commit[:email] = default_committer_email if commit[:email].to_s.empty? - commit - end - # Gets the default name for commits. # # Returns the String name. diff --git a/test/test_committer.rb b/test/test_committer.rb new file mode 100644 index 00000000..f87a05a4 --- /dev/null +++ b/test/test_committer.rb @@ -0,0 +1,27 @@ +require File.expand_path(File.join(File.dirname(__FILE__), "helper")) + +context "Wiki" do + setup do + @wiki = Gollum::Wiki.new(testpath("examples/lotr.git")) + end + + test "normalizes commit hash" do + commit = {:message => 'abc'} + name = @wiki.repo.config['user.name'] + email = @wiki.repo.config['user.email'] + committer = Gollum::Committer.new(@wiki, commit) + assert_equal name, committer.actor.name + assert_equal email, committer.actor.email + + commit[:name] = 'bob' + commit[:email] = '' + committer = Gollum::Committer.new(@wiki, commit) + assert_equal 'bob', committer.actor.name + assert_equal email, committer.actor.email + + commit[:email] = 'foo@bar.com' + committer = Gollum::Committer.new(@wiki, commit) + assert_equal 'bob', committer.actor.name + assert_equal 'foo@bar.com', committer.actor.email + end +end \ No newline at end of file diff --git a/test/test_wiki.rb b/test/test_wiki.rb index 1f862dd0..4ac9aa4e 100644 --- a/test/test_wiki.rb +++ b/test/test_wiki.rb @@ -44,23 +44,6 @@ context "Wiki" do assert_equal 4, @wiki.size end - test "normalizes commit hash" do - commit = {:message => 'abc'} - name = @wiki.repo.config['user.name'] - email = @wiki.repo.config['user.email'] - assert_equal({:message => 'abc', :name => name, :email => email}, - @wiki.normalize_commit(commit.dup)) - - commit[:name] = 'bob' - commit[:email] = '' - assert_equal({:message => 'abc', :name => 'bob', :email => email}, - @wiki.normalize_commit(commit.dup)) - - commit[:email] = 'foo@bar.com' - assert_equal({:message => 'abc', :name => 'bob', :email => 'foo@bar.com'}, - @wiki.normalize_commit(commit.dup)) - end - test "text_data" do wiki = Gollum::Wiki.new(testpath("examples/yubiwa.git")) if String.instance_methods.include?(:encoding) From 2b1510af111ed3b2b8b053ee1462a805b6652d97 Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 19 Jan 2011 05:20:58 -0800 Subject: [PATCH 252/393] edit a page, sidebar, and footer all in one commit --- lib/gollum/frontend/app.rb | 23 ++++++++++++++--------- test/test_app.rb | 11 ++++++----- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/lib/gollum/frontend/app.rb b/lib/gollum/frontend/app.rb index 355cf826..6ee46f60 100644 --- a/lib/gollum/frontend/app.rb +++ b/lib/gollum/frontend/app.rb @@ -57,12 +57,15 @@ module Precious post '/edit/*' do wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options) page = wiki.page(params[:splat].first) - name = params[:rename] || page.name - msg = commit_message - update_wiki_page(wiki, page, params[:content], msg, name, + name = params[:rename] + committer = Gollum::Committer.new(wiki, commit_message) + commit = {:committer => committer} + + update_wiki_page(wiki, page, params[:content], commit, name, params[:format]) - update_wiki_page(wiki, page.footer, params[:footer], msg) if params[:footer] - update_wiki_page(wiki, page.sidebar, params[:sidebar], msg) if params[:sidebar] + update_wiki_page(wiki, page.footer, params[:footer], commit) if params[:footer] + update_wiki_page(wiki, page.sidebar, params[:sidebar], commit) if params[:sidebar] + committer.commit redirect "/#{CGI.escape(Gollum::Page.cname(name))}" end @@ -187,10 +190,12 @@ module Precious end def update_wiki_page(wiki, page, content, commit_message, name = nil, format = nil) - return if !page || !content || page.raw_data == content - name ||= page.name - format = (format || page.format).to_sym - wiki.update_page(page, name, format, content, commit_message) + return if !page || + ((!content || page.raw_data == content) && page.format == format) + name ||= page.name + format = (format || page.format).to_sym + content ||= page.raw_data + wiki.update_page(page, name, format, content.to_s, commit_message) end def commit_message diff --git a/test/test_app.rb b/test/test_app.rb index 96aa3f19..4380615b 100644 --- a/test/test_app.rb +++ b/test/test_app.rb @@ -30,13 +30,13 @@ context "Frontend" do end test "edits page footer and sidebar" do - page_1 = @wiki.page('A') - foot_1 = page_1.footer - side_1 = page_1.sidebar + commits = @wiki.repo.commits('master').size + page_1 = @wiki.page('A') + foot_1 = page_1.footer + side_1 = page_1.sidebar post "/edit/A", - :footer => 'footer', :sidebar => 'sidebar', - :format => page_1.format, :message => 'def' + :footer => 'footer', :sidebar => 'sidebar', :message => 'def' follow_redirect! assert last_response.ok? @@ -53,6 +53,7 @@ context "Frontend" do assert_equal 'sidebar', side_2.raw_data assert_equal 'def', side_2.version.message assert_not_equal side_1.version.sha, side_2.version.sha + assert_equal commits+1, @wiki.repo.commits('master').size end test "renames page" do From 8ddb78158887c61ccb18bcdc6522d7bb83af4ebe Mon Sep 17 00:00:00 2001 From: rick Date: Wed, 19 Jan 2011 05:51:16 -0800 Subject: [PATCH 253/393] yield the created SHA1 in the after_commit callback --- lib/gollum/committer.rb | 5 +++-- lib/gollum/wiki.rb | 8 ++++---- test/test_committer.rb | 23 +++++++++++++++++++++++ 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/lib/gollum/committer.rb b/lib/gollum/committer.rb index 9038f2ff..a8b73673 100644 --- a/lib/gollum/committer.rb +++ b/lib/gollum/committer.rb @@ -144,14 +144,15 @@ module Gollum def commit sha1 = index.commit(@options[:message], parents, actor) @callbacks.each do |cb| - cb.call(self) + cb.call(self, sha1) end sha1 end # Adds a callback to be fired after a commit. # - # block - A block that expects this Committer instance as the argument. + # block - A block that expects this Committer instance and the created + # commit's SHA1 as the arguments. # # Returns nothing. def after_commit(&block) diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 211bbe66..dd362572 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -205,7 +205,7 @@ module Gollum committer.add_to_index('', name, format, data) - committer.after_commit do |index| + committer.after_commit do |index, sha| @access.refresh index.update_working_dir('', name, format) end @@ -256,7 +256,7 @@ module Gollum committer.add_to_index(dir, name, format, data, :allow_same_ext) end - committer.after_commit do |index| + committer.after_commit do |index, sha| @access.refresh index.update_working_dir(dir, page.name, page.format) index.update_working_dir(dir, name, format) @@ -293,7 +293,7 @@ module Gollum committer.delete(page.path) - committer.after_commit do |index| + committer.after_commit do |index, sha| dir = ::File.dirname(page.path) dir = '' if dir == '.' @@ -331,7 +331,7 @@ module Gollum parent = committer.parents[0] committer.options[:tree] = @repo.git.apply_patch(parent.sha, patch) return false unless committer.options[:tree] - committer.after_commit do |index| + committer.after_commit do |index, sha| @access.refresh files = [] diff --git a/test/test_committer.rb b/test/test_committer.rb index f87a05a4..68157844 100644 --- a/test/test_committer.rb +++ b/test/test_committer.rb @@ -24,4 +24,27 @@ context "Wiki" do assert_equal 'bob', committer.actor.name assert_equal 'foo@bar.com', committer.actor.email end + + test "yield after_commit callback" do + @path = cloned_testpath('examples/lotr.git') + yielded = nil + begin + wiki = Gollum::Wiki.new(@path) + committer = Gollum::Committer.new(wiki) + committer.after_commit do |index, sha1| + yielded = sha1 + assert_equal committer, index + end + + res = wiki.write_page("Gollum", :markdown, "# Gollum", + :committer => committer) + + assert_equal committer, res + + sha1 = committer.commit + assert_equal sha1, yielded + ensure + FileUtils.rm_rf(@path) + end + end end \ No newline at end of file From a78964ae30d49928e848560e718963c2fbdc1f43 Mon Sep 17 00:00:00 2001 From: rick Date: Thu, 20 Jan 2011 14:03:27 -0800 Subject: [PATCH 254/393] upgrade to sanitize 2.0 --- gollum.gemspec | 4 ++-- lib/gollum/page.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gollum.gemspec b/gollum.gemspec index 22764d55..fab41920 100644 --- a/gollum.gemspec +++ b/gollum.gemspec @@ -23,12 +23,12 @@ Gem::Specification.new do |s| s.rdoc_options = ["--charset=UTF-8"] s.extra_rdoc_files = %w[README.md LICENSE] - s.add_dependency('grit', "~> 2.4.0") + s.add_dependency('grit', "~> 2.4.1") s.add_dependency('github-markup', [">= 0.4.0", "< 1.0.0"]) s.add_dependency('albino', "~> 1.2.3") s.add_dependency('sinatra', "~> 1.0") s.add_dependency('mustache', [">= 0.11.2", "< 1.0.0"]) - s.add_dependency('sanitize', "~> 1.1") + s.add_dependency('sanitize', "~> 2.0.0") s.add_dependency('nokogiri', "~> 1.4") s.add_development_dependency('RedCloth') diff --git a/lib/gollum/page.rb b/lib/gollum/page.rb index 61d04484..487700e2 100644 --- a/lib/gollum/page.rb +++ b/lib/gollum/page.rb @@ -136,7 +136,7 @@ module Gollum Sanitize.clean(header.to_html) else Sanitize.clean(name) - end + end.strip end # Public: The path of the page within the repo. From feef486f63b0b69423500ed6a6949c2babfe74e1 Mon Sep 17 00:00:00 2001 From: rick Date: Thu, 20 Jan 2011 14:37:35 -0800 Subject: [PATCH 255/393] add wikicloth as a dev gem dep --- gollum.gemspec | 1 + 1 file changed, 1 insertion(+) diff --git a/gollum.gemspec b/gollum.gemspec index fab41920..bcea6b4f 100644 --- a/gollum.gemspec +++ b/gollum.gemspec @@ -37,6 +37,7 @@ Gem::Specification.new do |s| s.add_development_dependency('rdiscount') s.add_development_dependency('shoulda') s.add_development_dependency('rack-test') + s.add_development_dependency('wikicloth') # = MANIFEST = s.files = %w[ From f708dc7002ba8c1569eeef521ff595b157765e87 Mon Sep 17 00:00:00 2001 From: Brian Lopez Date: Thu, 20 Jan 2011 15:06:21 -0800 Subject: [PATCH 256/393] fix bug due to the way Array#to_s works in 1.9 --- lib/gollum/git_access.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gollum/git_access.rb b/lib/gollum/git_access.rb index 808e4f2e..21444f68 100644 --- a/lib/gollum/git_access.rb +++ b/lib/gollum/git_access.rb @@ -221,7 +221,7 @@ module Gollum # Returns an Array of BlobEntry instances. def parse_tree_line(line) mode, type, sha, size, *name = line.split(/\s+/) - BlobEntry.new(sha, name.to_s, size.to_i) + BlobEntry.new(sha, name.join(' '), size.to_i) end # Decode octal sequences (\NNN) in tree path names. From 3c44205be7e7144538c786513cbcd6b2186fc4f4 Mon Sep 17 00:00:00 2001 From: Randy Merrill Date: Thu, 27 Jan 2011 11:24:15 -0800 Subject: [PATCH 257/393] Adding the logic to accept a command line flag for the branch to use to retrieve pages. --- bin/gollum | 4 ++++ lib/gollum/committer.rb | 2 +- lib/gollum/page.rb | 4 ++-- lib/gollum/wiki.rb | 35 ++++++++++++++++++++++++++--------- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/bin/gollum b/bin/gollum index 5ce8ce7e..7756831e 100755 --- a/bin/gollum +++ b/bin/gollum @@ -48,6 +48,10 @@ opts = OptionParser.new do |opts| opts.on("--page-file-dir [PATH]", "Specify the sub directory for all page files (default: repository root).") do |path| wiki_options[:page_file_dir] = path end + + opts.on("--branch [BRANCH]", "Specify the repository branch to use (default: working branch).") do |branch| + wiki_options[:branch] = branch + end end # Read command line options into `options` hash diff --git a/lib/gollum/committer.rb b/lib/gollum/committer.rb index a8b73673..947aab5f 100644 --- a/lib/gollum/committer.rb +++ b/lib/gollum/committer.rb @@ -62,7 +62,7 @@ module Gollum # Returns an array of Grit::Commit instances. def parents @parents ||= begin - arr = [@options[:parent] || @wiki.repo.commit('master')] + arr = [@options[:parent] || @wiki.repo.commit(@wiki.branch)] arr.flatten! arr.compact! arr diff --git a/lib/gollum/page.rb b/lib/gollum/page.rb index 487700e2..3a52a0e0 100644 --- a/lib/gollum/page.rb +++ b/lib/gollum/page.rb @@ -199,10 +199,10 @@ module Gollum options[:pretty] = 'raw' options.delete :max_count options.delete :skip - log = @wiki.repo.git.native "log", options, "master", "--", @path + log = @wiki.repo.git.native "log", options, @wiki.branch, "--", @path Grit::Commit.list_from_string(@wiki.repo, log) else - @wiki.repo.log('master', @path, log_pagination_options(options)) + @wiki.repo.log(@wiki.branch, @path, log_pagination_options(options)) end end diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index dd362572..6beb65c9 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -12,6 +12,9 @@ module Gollum # Sets the markup class used by all instances of this Wiki. attr_writer :markup_class + # Sets the default branch for the wiki. + attr_accessor :default_branch + # Sets the default name for commits. attr_accessor :default_committer_name @@ -80,6 +83,7 @@ module Gollum end end + self.default_branch = 'master' self.default_committer_name = 'Anonymous' self.default_committer_email = 'anon@anon.com' @@ -94,6 +98,9 @@ module Gollum # Gets the sanitization options for older page revisions used by this Wiki. attr_reader :history_sanitization + # Gets the String branch in which all page files reside. + attr_reader :branch + # Gets the String directory in which all page files reside. attr_reader :page_file_dir @@ -109,6 +116,7 @@ module Gollum # :markup_class - The markup Class. Default: Gollum::Markup # :sanitization - An instance of Sanitization. # :page_file_dir - String the directory in which all page files reside + # :branch - String the repository branch to retrieve pages from # # Returns a fresh Gollum::Repo. def initialize(path, options = {}) @@ -124,6 +132,7 @@ module Gollum @file_class = options[:file_class] || self.class.file_class @markup_class = options[:markup_class] || self.class.markup_class @repo = @access.repo + @branch = options[:branch] || self.class.default_branch @sanitization = options[:sanitization] || self.class.sanitization @history_sanitization = options[:history_sanitization] || self.class.history_sanitization @@ -139,20 +148,20 @@ module Gollum # Public: Get the formatted page for a given page name. # # name - The human or canonical String page name of the wiki page. - # version - The String version ID to find (default: "master"). + # version - The String version ID to find (default: @branch). # # Returns a Gollum::Page or nil if no matching page was found. - def page(name, version = 'master') + def page(name, version = @branch) @page_class.new(self).find(name, version) end # Public: Get the static file for a given name. # # name - The full String pathname to the file. - # version - The String version ID to find (default: "master"). + # version - The String version ID to find (default: @branch). # # Returns a Gollum::File or nil if no matching file was found. - def file(name, version = 'master') + def file(name, version = @branch) @file_class.new(self).find(name, version) end @@ -381,11 +390,11 @@ module Gollum # Public: Lists all pages for this wiki. # - # treeish - The String commit ID or ref to find (default: master) + # treeish - The String commit ID or ref to find (default: @branch) # # Returns an Array of Gollum::Page instances. def pages(treeish = nil) - tree_list(treeish || 'master') + tree_list(treeish || @branch) end # Public: Returns the number of pages accessible from a commit @@ -394,7 +403,7 @@ module Gollum # # Returns a Fixnum def size(ref = nil) - tree_map_for(ref || 'master').inject(0) do |num, entry| + tree_map_for(ref || @branch).inject(0) do |num, entry| num + (@page_class.valid_page_name?(entry.name) ? 1 : 0) end rescue Grit::GitRuby::Repository::NoSuchShaFound @@ -407,7 +416,7 @@ module Gollum # # Returns an Array with Objects of page name and count of matches def search(query) - args = [{:c => query}, 'master', '--'] + args = [{:c => query}, @branch, '--'] args << '--' << @page_file_dir if @page_file_dir @repo.git.grep(*args).split("\n").map! do |line| @@ -429,7 +438,7 @@ module Gollum # # Returns an Array of Grit::Commit. def log(options = {}) - @repo.log('master', nil, log_pagination_options(options)) + @repo.log(@branch, nil, log_pagination_options(options)) end # Public: Refreshes just the cached Git reference data. This should @@ -547,6 +556,14 @@ module Gollum full_reverse_diff_for(nil, sha1, sha2) end + # Gets the default branch for the wiki. + # + # Returns the String name. + def default_branch + @default_branch ||= \ + self.class.default_branch + end + # Gets the default name for commits. # # Returns the String name. From 2bb1937fa903e30dbc66af89e7cf530251ffbf95 Mon Sep 17 00:00:00 2001 From: Randy Merrill Date: Thu, 27 Jan 2011 11:29:21 -0800 Subject: [PATCH 258/393] Fixing the docs for the default branch. --- bin/gollum | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/gollum b/bin/gollum index 7756831e..efacca54 100755 --- a/bin/gollum +++ b/bin/gollum @@ -49,7 +49,7 @@ opts = OptionParser.new do |opts| wiki_options[:page_file_dir] = path end - opts.on("--branch [BRANCH]", "Specify the repository branch to use (default: working branch).") do |branch| + opts.on("--branch [BRANCH]", "Specify the repository branch to use (default: master).") do |branch| wiki_options[:branch] = branch end end From a71ab7c418ef8708bb3d2945287c662dbdeffd54 Mon Sep 17 00:00:00 2001 From: Randy Merrill Date: Thu, 27 Jan 2011 11:38:48 -0800 Subject: [PATCH 259/393] Changing from using `branch` as the variable to using `ref`. --- bin/gollum | 4 ++-- lib/gollum/committer.rb | 2 +- lib/gollum/page.rb | 4 ++-- lib/gollum/wiki.rb | 40 ++++++++++++++++++++-------------------- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/bin/gollum b/bin/gollum index efacca54..e45deff7 100755 --- a/bin/gollum +++ b/bin/gollum @@ -49,8 +49,8 @@ opts = OptionParser.new do |opts| wiki_options[:page_file_dir] = path end - opts.on("--branch [BRANCH]", "Specify the repository branch to use (default: master).") do |branch| - wiki_options[:branch] = branch + opts.on("--ref [REF]", "Specify the repository ref to use (default: master).") do |ref| + wiki_options[:ref] = ref end end diff --git a/lib/gollum/committer.rb b/lib/gollum/committer.rb index 947aab5f..fcf2a159 100644 --- a/lib/gollum/committer.rb +++ b/lib/gollum/committer.rb @@ -62,7 +62,7 @@ module Gollum # Returns an array of Grit::Commit instances. def parents @parents ||= begin - arr = [@options[:parent] || @wiki.repo.commit(@wiki.branch)] + arr = [@options[:parent] || @wiki.repo.commit(@wiki.ref)] arr.flatten! arr.compact! arr diff --git a/lib/gollum/page.rb b/lib/gollum/page.rb index 3a52a0e0..ad95e4da 100644 --- a/lib/gollum/page.rb +++ b/lib/gollum/page.rb @@ -199,10 +199,10 @@ module Gollum options[:pretty] = 'raw' options.delete :max_count options.delete :skip - log = @wiki.repo.git.native "log", options, @wiki.branch, "--", @path + log = @wiki.repo.git.native "log", options, @wiki.ref, "--", @path Grit::Commit.list_from_string(@wiki.repo, log) else - @wiki.repo.log(@wiki.branch, @path, log_pagination_options(options)) + @wiki.repo.log(@wiki.ref, @path, log_pagination_options(options)) end end diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index 6beb65c9..75941f7c 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -12,8 +12,8 @@ module Gollum # Sets the markup class used by all instances of this Wiki. attr_writer :markup_class - # Sets the default branch for the wiki. - attr_accessor :default_branch + # Sets the default ref for the wiki. + attr_accessor :default_ref # Sets the default name for commits. attr_accessor :default_committer_name @@ -83,7 +83,7 @@ module Gollum end end - self.default_branch = 'master' + self.default_ref = 'master' self.default_committer_name = 'Anonymous' self.default_committer_email = 'anon@anon.com' @@ -98,8 +98,8 @@ module Gollum # Gets the sanitization options for older page revisions used by this Wiki. attr_reader :history_sanitization - # Gets the String branch in which all page files reside. - attr_reader :branch + # Gets the String ref in which all page files reside. + attr_reader :ref # Gets the String directory in which all page files reside. attr_reader :page_file_dir @@ -116,7 +116,7 @@ module Gollum # :markup_class - The markup Class. Default: Gollum::Markup # :sanitization - An instance of Sanitization. # :page_file_dir - String the directory in which all page files reside - # :branch - String the repository branch to retrieve pages from + # :ref - String the repository ref to retrieve pages from # # Returns a fresh Gollum::Repo. def initialize(path, options = {}) @@ -132,7 +132,7 @@ module Gollum @file_class = options[:file_class] || self.class.file_class @markup_class = options[:markup_class] || self.class.markup_class @repo = @access.repo - @branch = options[:branch] || self.class.default_branch + @ref = options[:ref] || self.class.default_ref @sanitization = options[:sanitization] || self.class.sanitization @history_sanitization = options[:history_sanitization] || self.class.history_sanitization @@ -148,20 +148,20 @@ module Gollum # Public: Get the formatted page for a given page name. # # name - The human or canonical String page name of the wiki page. - # version - The String version ID to find (default: @branch). + # version - The String version ID to find (default: @ref). # # Returns a Gollum::Page or nil if no matching page was found. - def page(name, version = @branch) + def page(name, version = @ref) @page_class.new(self).find(name, version) end # Public: Get the static file for a given name. # # name - The full String pathname to the file. - # version - The String version ID to find (default: @branch). + # version - The String version ID to find (default: @ref). # # Returns a Gollum::File or nil if no matching file was found. - def file(name, version = @branch) + def file(name, version = @ref) @file_class.new(self).find(name, version) end @@ -390,11 +390,11 @@ module Gollum # Public: Lists all pages for this wiki. # - # treeish - The String commit ID or ref to find (default: @branch) + # treeish - The String commit ID or ref to find (default: @ref) # # Returns an Array of Gollum::Page instances. def pages(treeish = nil) - tree_list(treeish || @branch) + tree_list(treeish || @ref) end # Public: Returns the number of pages accessible from a commit @@ -403,7 +403,7 @@ module Gollum # # Returns a Fixnum def size(ref = nil) - tree_map_for(ref || @branch).inject(0) do |num, entry| + tree_map_for(ref || @ref).inject(0) do |num, entry| num + (@page_class.valid_page_name?(entry.name) ? 1 : 0) end rescue Grit::GitRuby::Repository::NoSuchShaFound @@ -416,7 +416,7 @@ module Gollum # # Returns an Array with Objects of page name and count of matches def search(query) - args = [{:c => query}, @branch, '--'] + args = [{:c => query}, @ref, '--'] args << '--' << @page_file_dir if @page_file_dir @repo.git.grep(*args).split("\n").map! do |line| @@ -438,7 +438,7 @@ module Gollum # # Returns an Array of Grit::Commit. def log(options = {}) - @repo.log(@branch, nil, log_pagination_options(options)) + @repo.log(@ref, nil, log_pagination_options(options)) end # Public: Refreshes just the cached Git reference data. This should @@ -556,12 +556,12 @@ module Gollum full_reverse_diff_for(nil, sha1, sha2) end - # Gets the default branch for the wiki. + # Gets the default ref for the wiki. # # Returns the String name. - def default_branch - @default_branch ||= \ - self.class.default_branch + def default_ref + @default_ref ||= \ + self.class.default_ref end # Gets the default name for commits. From 364b2b85aeb8980bd12daa601b088603866f09b5 Mon Sep 17 00:00:00 2001 From: Randy Merrill Date: Thu, 27 Jan 2011 12:46:29 -0800 Subject: [PATCH 260/393] Moving the `ref` to be an argument to the parents that defaults to the `@wiki.ref` --- lib/gollum/committer.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/gollum/committer.rb b/lib/gollum/committer.rb index fcf2a159..3f7df6d6 100644 --- a/lib/gollum/committer.rb +++ b/lib/gollum/committer.rb @@ -60,9 +60,9 @@ module Gollum # Public: The parent commits to this pending commit. # # Returns an array of Grit::Commit instances. - def parents + def parents(ref = @wiki.ref) @parents ||= begin - arr = [@options[:parent] || @wiki.repo.commit(@wiki.ref)] + arr = [@options[:parent] || @wiki.repo.commit(ref)] arr.flatten! arr.compact! arr From 7427ddd900db312d88a43ba4a94ebaefd4aa6f58 Mon Sep 17 00:00:00 2001 From: Randy Merrill Date: Thu, 27 Jan 2011 13:00:54 -0800 Subject: [PATCH 261/393] Adding some tests to test that the commiter can retrieve parents that are not the same as the wiki ref. Also testing that the default wiki ref works without passing a ref. --- test/test_committer.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/test_committer.rb b/test/test_committer.rb index 68157844..bbfc4617 100644 --- a/test/test_committer.rb +++ b/test/test_committer.rb @@ -47,4 +47,16 @@ context "Wiki" do FileUtils.rm_rf(@path) end end + + test "parents with default wiki ref" do + ref = 'a8ad3c09dd842a3517085bfadd37718856dee813' + committer = Gollum::Committer.new(@wiki) + assert_equal ref, committer.parents.first.sha + end + + test "parents with custom ref" do + ref = '60f12f4254f58801b9ee7db7bca5fa8aeefaa56b' + committer = Gollum::Committer.new(@wiki) + assert_equal ref, committer.parents(ref).first.sha + end end \ No newline at end of file From e3950d52c1edca9815b51567dba95499b17be797 Mon Sep 17 00:00:00 2001 From: Randy Merrill Date: Thu, 27 Jan 2011 13:59:39 -0800 Subject: [PATCH 262/393] Removing the `ref` as an argument to the `Committer#parents` and just using the `@wiki.ref`. Updated the test to reflect the change and to test creating a wiki with a custom ref returns the correct parent for the `Committer#parents`. --- lib/gollum/committer.rb | 4 ++-- test/test_committer.rb | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/gollum/committer.rb b/lib/gollum/committer.rb index 3f7df6d6..68161f83 100644 --- a/lib/gollum/committer.rb +++ b/lib/gollum/committer.rb @@ -60,9 +60,9 @@ module Gollum # Public: The parent commits to this pending commit. # # Returns an array of Grit::Commit instances. - def parents(ref = @wiki.ref) + def parents() @parents ||= begin - arr = [@options[:parent] || @wiki.repo.commit(ref)] + arr = [@options[:parent] || @wiki.repo.commit(@wiki.ref)] arr.flatten! arr.compact! arr diff --git a/test/test_committer.rb b/test/test_committer.rb index bbfc4617..45842a01 100644 --- a/test/test_committer.rb +++ b/test/test_committer.rb @@ -48,7 +48,7 @@ context "Wiki" do end end - test "parents with default wiki ref" do + test "parents with default master ref" do ref = 'a8ad3c09dd842a3517085bfadd37718856dee813' committer = Gollum::Committer.new(@wiki) assert_equal ref, committer.parents.first.sha @@ -56,7 +56,8 @@ context "Wiki" do test "parents with custom ref" do ref = '60f12f4254f58801b9ee7db7bca5fa8aeefaa56b' + @wiki = Gollum::Wiki.new(testpath("examples/lotr.git"), :ref => ref) committer = Gollum::Committer.new(@wiki) - assert_equal ref, committer.parents(ref).first.sha + assert_equal ref, committer.parents.first.sha end end \ No newline at end of file From 732e8a936191ca4dafa48218fa30ba5186f7e77a Mon Sep 17 00:00:00 2001 From: rick Date: Thu, 27 Jan 2011 16:34:29 -0800 Subject: [PATCH 263/393] fix bug where relative images in previews did not render --- lib/gollum/page.rb | 4 ++-- lib/gollum/wiki.rb | 8 ++++---- test/test_markup.rb | 21 +++++++++++++++++++++ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/lib/gollum/page.rb b/lib/gollum/page.rb index 487700e2..be6cc10e 100644 --- a/lib/gollum/page.rb +++ b/lib/gollum/page.rb @@ -333,9 +333,9 @@ module Gollum # path - The String directory path of the page file. # # Returns the populated Gollum::Page. - def populate(blob, path) + def populate(blob, path=nil) @blob = blob - @path = (path + '/' + blob.name)[1..-1] + @path = "#{path}/#{blob.name}"[1..-1] self end diff --git a/lib/gollum/wiki.rb b/lib/gollum/wiki.rb index dd362572..e8a65246 100644 --- a/lib/gollum/wiki.rb +++ b/lib/gollum/wiki.rb @@ -168,10 +168,10 @@ module Gollum def preview_page(name, data, format) page = @page_class.new(self) ext = @page_class.format_to_ext(format.to_sym) - path = @page_class.cname(name) + '.' + ext - blob = OpenStruct.new(:name => path, :data => data) - page.populate(blob, path) - page.version = @access.commit('HEAD') + name = @page_class.cname(name) + '.' + ext + blob = OpenStruct.new(:name => name, :data => data) + page.populate(blob) + page.version = @access.commit('master') page end diff --git a/test/test_markup.rb b/test/test_markup.rb index 4f759ca3..6c8db408 100644 --- a/test/test_markup.rb +++ b/test/test_markup.rb @@ -238,6 +238,27 @@ context "Markup" do assert_equal %{

    a a b

    }, output end + test "image with absolute path on a preview" do + @wiki = Gollum::Wiki.new(@path, :base_path => '/wiki') + index = @wiki.repo.index + index.add("alpha.jpg", "hi") + index.commit("Add alpha.jpg") + + page = @wiki.preview_page("Test", "a [[/alpha.jpg]] b", :markdown) + assert_equal %{

    a b

    }, page.formatted_data + end + + test "image with relative path on a preview" do + @wiki = Gollum::Wiki.new(@path, :base_path => '/wiki') + index = @wiki.repo.index + index.add("alpha.jpg", "hi") + index.add("greek/alpha.jpg", "hi") + index.commit("Add alpha.jpg") + + page = @wiki.preview_page("Test", "a [[alpha.jpg]] [[greek/alpha.jpg]] b", :markdown) + assert_equal %{

    a b

    }, page.formatted_data + end + test "image with alt" do content = "a [[alpha.jpg|alt=Alpha Dog]] b" output = %{

    a Alpha Dog b

    } From 46d70e0492c884f9677875175a0e468c0e315510 Mon Sep 17 00:00:00 2001 From: Puneeth Chaganti Date: Thu, 3 Feb 2011 03:22:35 +0530 Subject: [PATCH 264/393] Add support for Org-mode to the new editor --- .../javascript/gollum-editor/langs/org.js | 169 ++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 lib/gollum/frontend/public/javascript/gollum-editor/langs/org.js diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/langs/org.js b/lib/gollum/frontend/public/javascript/gollum-editor/langs/org.js new file mode 100644 index 00000000..2982a120 --- /dev/null +++ b/lib/gollum/frontend/public/javascript/gollum-editor/langs/org.js @@ -0,0 +1,169 @@ +/** + * Org-mode Language Definition +**/ +(function() { + +var OrgMode = { + + 'function-bold' : { + search: /([^\n]+)([\n\s]*)/g, + replace: "*$1*$2" + }, + + 'function-italic' : { + search: /([^\n]+)([\n\s]*)/g, + replace: "/$1/$2" + }, + + 'function-code' : { + search: /(^[\n]+)([\n\s]*)/g, + replace: "=$1=$2" + }, + + 'function-ul' : { + search: /(.+)([\n]?)/g, + replace: "* $1$2" + }, + + /* This works, just like it works for Markdown */ + 'function-ol' : { + search: /(.+)([\n]?)/g, + replace: "1. $1$2" + }, + + 'function-blockquote' : { + search: /(.+)([\n]?)/g, + replace: "#+BEGIN_QUOTE\n$1$2\n#+END_QUOTE\n" + }, + + 'function-h1' : { + search: /(.+)([\n]?)/g, + replace: "* $1$2" + }, + + 'function-h2' : { + search: /(.+)([\n]?)/g, + replace: "** $1$2" + }, + + 'function-h3' : { + search: /(.+)([\n]?)/g, + replace: "*** $1$2" + }, + + 'function-link' : { + exec: function( txt, selText, $field ) { + var results = null; + $.GollumEditor.Dialog.init({ + title: 'Insert Link', + fields: [ + { + id: 'text', + name: 'Link Text', + type: 'text' + }, + { + id: 'href', + name: 'URL', + type: 'text' + } + ], + OK: function( res ) { + var rep = ''; + if ( res['text'] && res['href'] ) { + rep = '[[' + res['href'] + '][' + + res['text'] + ']]'; + } + else if ( res['href'] ) { + rep = '[[' + res['href'] + ']]'; + } + $.GollumEditor.replaceSelection( rep ); + } + }); + } + }, + + 'function-image' : { + exec: function( txt, selText, $field ) { + var results = null; + $.GollumEditor.Dialog.init({ + title: 'Insert Image', + fields: [ + { + id: 'url', + name: 'Image URL', + type: 'text' + }, + ], + OK: function( res ) { + var rep = ''; + if ( res['url'] ) { + rep = '[[' + res['url'] + ']]'; + } + $.GollumEditor.replaceSelection( rep ); + } + }); + } + } + +}; + +var OrgModeHelp = [ + + { + menuName: 'Block Elements', + content: [ + { + menuName: 'Paragraphs & Breaks', + data: '

    To create a paragraph, simply create a block of text that is not separated by one or more blank lines. Blocks of text separated by one or more blank lines will be parsed as paragraphs.

    ' + }, + { + menuName: 'Headers', + data: '

    Simply prefix your header text with the number of * characters to specify heading depth. For example: * Header 1, ** Header 2 and *** Header 3 will be progressively smaller headers.

    ' + }, + { + menuName: 'Blockquotes', + data: '

    To create a blockquote, simple embed the text between #+BEGIN_QUOTE and #+END_QUOTE. An example quote block is displayed below:
    #+BEGIN_QUOTE
    This is my quote block. Quote something nice here, otherwise there is no point in quoting.
    #+END_QUOTE

    ' + }, + { + menuName: 'Lists', + data: '

    Markdown supports both ordered and unordered lists. To create an ordered list, simply prefix each line with a number (any number will do — this is why the editor only uses one number.) To create an unordered list, you can prefix each line with + or -.

    ' + }, + { + menuName: 'Code Blocks', + data: '

    Code Blocks are similar to blockquote, except that #+BEGIN_EXAMPLE and #+END_EXAMPLE are used.

    ' + }, + ] + }, + + { + menuName: 'Span Elements', + content: [ + { + menuName: 'Links', + data: '

    To create links to external pages, you need to enclose the URI in double square brackets. (i.e., [[http://github.com/]] will automatically be parsed to http://github.com/)If you want to add text, to be displayed to the user, you write the URI and the text next to each other, both enclosed in square brackets and both of them together enclosed in another pair of square brackets. For example, if you want your link to display the text “GitHub”, you write [[http://github.com][GitHub]].

    ' + }, + + { + menuName: 'Emphasis', + data: '

    Forward slashes (/) are treated as emphasis and are wrapped with an <i> tag. Asterisks (*) are treated as bold using the <b> tag.

    ' + }, + + { + menuName: 'Code', + data: '

    To create inline spans of code, simply wrap the code in equal signs (=). Markdown will turn =myFunction= into myFunction.

    ' + }, + + { + menuName: 'Images', + data: '

    Orgmode image syntax is exactly same as the syntax that you would use for a URI to link to itself. The image URI is enclosed in double square brackets. org-ruby doesn't yet support alt-text for images.

    ' + } + ] + }, +]; + + +jQuery.GollumEditor.defineLanguage('org', OrgMode); +jQuery.GollumEditor.defineHelp('org', OrgModeHelp); + +})(); From 2648e75328da60b45cb2b41fcbee037bb0dc3584 Mon Sep 17 00:00:00 2001 From: Puneeth Chaganti Date: Thu, 3 Feb 2011 05:11:13 +0530 Subject: [PATCH 265/393] Remove references to Markdown --- .../frontend/public/javascript/gollum-editor/langs/org.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/langs/org.js b/lib/gollum/frontend/public/javascript/gollum-editor/langs/org.js index 2982a120..736214ea 100644 --- a/lib/gollum/frontend/public/javascript/gollum-editor/langs/org.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/langs/org.js @@ -127,7 +127,7 @@ var OrgModeHelp = [ }, { menuName: 'Lists', - data: '

    Markdown supports both ordered and unordered lists. To create an ordered list, simply prefix each line with a number (any number will do — this is why the editor only uses one number.) To create an unordered list, you can prefix each line with + or -.

    ' + data: '

    Orgmode supports both ordered and unordered lists. To create an ordered list, simply prefix each line with a number (any number will do — this is why the editor only uses one number.) To create an unordered list, you can prefix each line with + or -.

    ' }, { menuName: 'Code Blocks', @@ -151,7 +151,7 @@ var OrgModeHelp = [ { menuName: 'Code', - data: '

    To create inline spans of code, simply wrap the code in equal signs (=). Markdown will turn =myFunction= into myFunction.

    ' + data: '

    To create inline spans of code, simply wrap the code in equal signs (=). Orgmode will turn =myFunction= into myFunction.

    ' }, { From c088cc0617a50c39def43169987a6bfb012bc1a9 Mon Sep 17 00:00:00 2001 From: Puneeth Chaganti Date: Thu, 3 Feb 2011 16:32:43 +0530 Subject: [PATCH 266/393] Add help for the use of tables in org-mode --- .../frontend/public/javascript/gollum-editor/langs/org.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/langs/org.js b/lib/gollum/frontend/public/javascript/gollum-editor/langs/org.js index 736214ea..8e7a9cb6 100644 --- a/lib/gollum/frontend/public/javascript/gollum-editor/langs/org.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/langs/org.js @@ -133,6 +133,10 @@ var OrgModeHelp = [ menuName: 'Code Blocks', data: '

    Code Blocks are similar to blockquote, except that #+BEGIN_EXAMPLE and #+END_EXAMPLE are used.

    ' }, + { + menuName: 'Tables', + data: '

    Orgmode supports simple tables (tables with equal number of cells in each row). To create a simple table, just separate the contents of each cell with a | character. For example,

    |one|two|three|
    |four|five|six|


    will appear as a table with two rows and three columns. Additionally,

    |one|two|three|
    |---+---+-----|
    |four|five|six|


    will also appear as a table, but the first row will be interpreted as a header row and the <th> tag will be used to render it.

    ' + }, ] }, From fb240fa79e0ade7021f380af834cf5572dfd935b Mon Sep 17 00:00:00 2001 From: eston Date: Thu, 3 Feb 2011 15:09:27 -0800 Subject: [PATCH 267/393] Fix Org-mode mismatched quotes; clean up syntax --- .../frontend/public/javascript/gollum-editor/langs/org.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/gollum/frontend/public/javascript/gollum-editor/langs/org.js b/lib/gollum/frontend/public/javascript/gollum-editor/langs/org.js index 8e7a9cb6..24d5aa21 100644 --- a/lib/gollum/frontend/public/javascript/gollum-editor/langs/org.js +++ b/lib/gollum/frontend/public/javascript/gollum-editor/langs/org.js @@ -127,7 +127,7 @@ var OrgModeHelp = [ }, { menuName: 'Lists', - data: '

    Orgmode supports both ordered and unordered lists. To create an ordered list, simply prefix each line with a number (any number will do — this is why the editor only uses one number.) To create an unordered list, you can prefix each line with + or -.

    ' + data: '

    Org-mode supports both ordered and unordered lists. To create an ordered list, simply prefix each line with a number (any number will do — this is why the editor only uses one number.) To create an unordered list, you can prefix each line with + or -.

    ' }, { menuName: 'Code Blocks', @@ -135,7 +135,7 @@ var OrgModeHelp = [ }, { menuName: 'Tables', - data: '

    Orgmode supports simple tables (tables with equal number of cells in each row). To create a simple table, just separate the contents of each cell with a | character. For example,

    |one|two|three|
    |four|five|six|


    will appear as a table with two rows and three columns. Additionally,

    |one|two|three|
    |---+---+-----|
    |four|five|six|


    will also appear as a table, but the first row will be interpreted as a header row and the <th> tag will be used to render it.

    ' + data: '

    Org-mode supports simple tables (tables with equal number of cells in each row). To create a simple table, just separate the contents of each cell with a | character. For example,

    |one|two|three|
    |four|five|six|


    will appear as a table with two rows and three columns. Additionally,

    |one|two|three|
    |---+---+-----|
    |four|five|six|


    will also appear as a table, but the first row will be interpreted as a header row and the <th> tag will be used to render it.

    ' }, ] }, @@ -160,7 +160,7 @@ var OrgModeHelp = [ { menuName: 'Images', - data: '

    Orgmode image syntax is exactly same as the syntax that you would use for a URI to link to itself. The image URI is enclosed in double square brackets. org-ruby doesn't yet support alt-text for images.

    ' + data: "

    Org-mode image syntax is exactly same as the syntax that you would use for a URI to link to itself. The image URI is enclosed in double square brackets. Alt text on images is not currently supported by Gollum's Org-mode parser.

    " } ] }, From db3d534ee53b952040c0d3d490a8ab11f2cabd9c Mon Sep 17 00:00:00 2001 From: Caleb Spare Date: Wed, 9 Feb 2011 13:06:00 -0800 Subject: [PATCH 268/393] [Frontend] Fixed bug that gave a bad redirect on page edit. --- lib/gollum/frontend/app.rb | 2 +- test/test_app.rb | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/gollum/frontend/app.rb b/lib/gollum/frontend/app.rb index 6ee46f60..4dac5b4f 100644 --- a/lib/gollum/frontend/app.rb +++ b/lib/gollum/frontend/app.rb @@ -57,7 +57,7 @@ module Precious post '/edit/*' do wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options) page = wiki.page(params[:splat].first) - name = params[:rename] + name = params[:rename] || params[:page] committer = Gollum::Committer.new(wiki, commit_message) commit = {:committer => committer} diff --git a/test/test_app.rb b/test/test_app.rb index 4380615b..b68c5da5 100644 --- a/test/test_app.rb +++ b/test/test_app.rb @@ -36,8 +36,9 @@ context "Frontend" do side_1 = page_1.sidebar post "/edit/A", - :footer => 'footer', :sidebar => 'sidebar', :message => 'def' + :footer => 'footer', :page => "A", :sidebar => 'sidebar', :message => 'def' follow_redirect! + assert_equal "/A", last_request.fullpath assert last_response.ok? @wiki.clear_cache @@ -62,6 +63,7 @@ context "Frontend" do :rename => "C", :format => page_1.format, :message => 'def' follow_redirect! + assert_equal "/C", last_request.fullpath assert last_response.ok? @wiki.clear_cache @@ -139,4 +141,4 @@ context "Frontend" do def app Precious::App end -end \ No newline at end of file +end From d76a40b1a82c56944ab575e6bb698195f405bf1e Mon Sep 17 00:00:00 2001 From: Caleb Spare Date: Wed, 9 Feb 2011 16:33:51 -0800 Subject: [PATCH 269/393] [Frontend] Small fix (no change in functionality) based on technoweenie's CR. --- lib/gollum/frontend/app.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gollum/frontend/app.rb b/lib/gollum/frontend/app.rb index 4dac5b4f..49687403 100644 --- a/lib/gollum/frontend/app.rb +++ b/lib/gollum/frontend/app.rb @@ -57,7 +57,7 @@ module Precious post '/edit/*' do wiki = Gollum::Wiki.new(settings.gollum_path, settings.wiki_options) page = wiki.page(params[:splat].first) - name = params[:rename] || params[:page] + name = params[:rename] || page.name committer = Gollum::Committer.new(wiki, commit_message) commit = {:committer => committer} From a0ba81c763f2c22e224d4aec6d9e18b6be661cab Mon Sep 17 00:00:00 2001 From: philc Date: Mon, 7 Feb 2011 20:00:04 -0800 Subject: [PATCH 270/393] Fix a bug where each time the editor is loaded, all of its existing content is indented by two spaces. Must've been caused by some markup restructuring. --- lib/gollum/frontend/templates/edit.mustache | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/lib/gollum/frontend/templates/edit.mustache b/lib/gollum/frontend/templates/edit.mustache index 23074b74..014c719a 100644 --- a/lib/gollum/frontend/templates/edit.mustache +++ b/lib/gollum/frontend/templates/edit.mustache @@ -8,9 +8,7 @@ class="action-page-history">Page History
    -
    - {{>editor}} -
    +
    {{>editor}}
    + src="/javascript/editor/gollum.editor.js"> {{title}} From 175408e6bd735b163f476701005bf5b3ddec8cc7 Mon Sep 17 00:00:00 2001 From: eston Date: Wed, 2 Mar 2011 17:32:42 -0800 Subject: [PATCH 281/393] Tweak definition lists some more --- lib/gollum/frontend/public/css/template.css | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/gollum/frontend/public/css/template.css b/lib/gollum/frontend/public/css/template.css index dd2b3915..38b372c0 100644 --- a/lib/gollum/frontend/public/css/template.css +++ b/lib/gollum/frontend/public/css/template.css @@ -120,9 +120,13 @@ font-weight: bold; line-height: normal; margin: 0; - padding: 14px 0 0; + padding: 20px 0 0; } + #template dl dt:first-child { + padding: 0; + } + #template dl dd { font-size: 13px; margin: 0; @@ -188,7 +192,6 @@ float: left; } - #template span.frame span span { clear: both; color: #333; @@ -259,7 +262,7 @@ /* Code */ -#template code { +#template code, #template tt { background-color: #f8f8f8; border: 1px solid #dedede; font-size: 13px; @@ -283,7 +286,7 @@ border-radius: 3px; } -#template pre code { +#template pre code, #template pre tt { background-color: transparent; border: none; } From d87750c39ddfe83c53ccd8b5f08e37a7ab1a1e5e Mon Sep 17 00:00:00 2001 From: eston Date: Wed, 2 Mar 2011 17:56:34 -0800 Subject: [PATCH 282/393] Fix up sidebar conditional --- lib/gollum/frontend/public/css/gollum.css | 50 +++++++++++---------- lib/gollum/frontend/public/css/template.css | 5 --- lib/gollum/frontend/templates/page.mustache | 4 +- 3 files changed, 29 insertions(+), 30 deletions(-) diff --git a/lib/gollum/frontend/public/css/gollum.css b/lib/gollum/frontend/public/css/gollum.css index 848ada7b..611a31f9 100755 --- a/lib/gollum/frontend/public/css/gollum.css +++ b/lib/gollum/frontend/public/css/gollum.css @@ -70,32 +70,40 @@ a:hover, a:visited { display: block; float: left; margin-right: 3%; - width: 70%; + width: 100%; + } + + .has-rightbar #wiki-body { + width: 68%; } /* @section rightbar */ #wiki-rightbar { - float: right; - width: 27%; - } - - #wiki-rightbar #nav { background-color: #f7f7f7; border: 1px solid #ddd; - margin-top: 1.5em; - padding: 1em; + float: right; + padding: 7px; + width: 25%; border-radius: 0.5em; -moz-border-radius: 0.5em; -webkit-border-radius: 0.5em; } - #wiki-rightbar #nav { - font-size: 1.2em; - line-height: 1.5em; + #wiki-rightbar { + font-size: 1.0em; + line-height: 1.3em; } - #wiki-rightbar #nav p.parent { + #wiki-rightbar p { + margin: 13px 0 0; + } + + #wiki-rightbar > p:first-child { + margin-top: 0; + } + + #wiki-rightbar p.parent { border-bottom: 1px solid #bbb; font-weight: bold; margin: 0 0 0.5em 0; @@ -104,12 +112,12 @@ a:hover, a:visited { } /* Back arrow */ - #wiki-rightbar #nav p.parent:before { + #wiki-rightbar p.parent:before { color: #666; content: "← "; } - #wiki-rightbar #nav h3 { + #wiki-rightbar h3 { font-size: 1.2em; color: #333; margin: 1.2em 0 0; @@ -117,23 +125,19 @@ a:hover, a:visited { text-shadow: 0 1px 0 #fff; } - #wiki-rightbar #nav ul { + #wiki-rightbar ul { margin: 0.5em 0 1em; padding: 0; } - #wiki-rightbar #nav ul li { + #wiki-rightbar ul li { color: #bbb; - list-style-position: outside; - list-style-type: none; margin: 0 0 0 1em; padding: 0; line-height: 1.75em; - } - - #wiki-rightbar #nav ul li:hover { - list-style-type: square; - } + list-style-position: inside; + list-style-type: round; + } #wiki-rightbar #nav ul li a { font-weight: bold; diff --git a/lib/gollum/frontend/public/css/template.css b/lib/gollum/frontend/public/css/template.css index 38b372c0..dde46172 100644 --- a/lib/gollum/frontend/public/css/template.css +++ b/lib/gollum/frontend/public/css/template.css @@ -159,11 +159,6 @@ padding: 6px 13px; } - -/* Pygments-Processed Code Blocks */ - - - /* Images & Stuff */ #template img { max-width: 100%; diff --git a/lib/gollum/frontend/templates/page.mustache b/lib/gollum/frontend/templates/page.mustache index 3d7589fa..a593b1a4 100755 --- a/lib/gollum/frontend/templates/page.mustache +++ b/lib/gollum/frontend/templates/page.mustache @@ -12,7 +12,7 @@ {{>searchbar}}
    -
    +
    {{{content}}} @@ -38,4 +38,4 @@
    - \ No newline at end of file + From 234f248b17a273119c71ed7d26a05e095db0f72d Mon Sep 17 00:00:00 2001 From: eston Date: Wed, 2 Mar 2011 18:09:24 -0800 Subject: [PATCH 283/393] More fixes --- lib/gollum/frontend/public/css/editor.css | 1 + lib/gollum/frontend/public/css/template.css | 44 ++++++++++----------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/lib/gollum/frontend/public/css/editor.css b/lib/gollum/frontend/public/css/editor.css index 11af4464..d0464362 100755 --- a/lib/gollum/frontend/public/css/editor.css +++ b/lib/gollum/frontend/public/css/editor.css @@ -381,6 +381,7 @@ a#function-help:hover span { background-position: -405px -28px; } } #gollum-editor .expanded textarea { + background-color: #fff; border: 1px solid #ddd; clear: both; display: block; diff --git a/lib/gollum/frontend/public/css/template.css b/lib/gollum/frontend/public/css/template.css index dde46172..aab320c1 100644 --- a/lib/gollum/frontend/public/css/template.css +++ b/lib/gollum/frontend/public/css/template.css @@ -286,26 +286,26 @@ border: none; } -#template .highlight { background: #ffffff; }; -#template .highlight .c { color: #999988; font-style: italic }; -#template .highlight .err { color: #a61717; background-color: #e3d2d2 }; -#template .highlight .k { font-weight: bold }; -#template .highlight .o { font-weight: bold }; -#template .highlight .cm { color: #999988; font-style: italic }; -#template .highlight .cp { color: #999999; font-weight: bold }; -#template .highlight .c1 { color: #999988; font-style: italic }; -#template .highlight .cs { color: #999999; font-weight: bold; font-style: italic }; -#template .highlight .gd { color: #000000; background-color: #ffdddd }; -#template .highlight .gd .x { color: #000000; background-color: #ffaaaa }; -#template .highlight .ge { font-style: italic }; -#template .highlight .gr { color: #aa0000 }; -#template .highlight .gh { color: #999999 }; -#template .highlight .gi { color: #000000; background-color: #ddffdd }; -#template .highlight .gi .x { color: #000000; background-color: #aaffaa }; -#template .highlight .gc { color: #999; background-color: #EAF2F5 }; -#template .highlight .go { color: #888888 }; -#template .highlight .gp { color: #555555 }; -#template .highlight .gs { font-weight: bold }; -#template .highlight .gu { color: #aaaaaa }; -#template .highlight .gt { color: #aa0000 }; +#template .highlight { background: #ffffff; } +#template .highlight .c { color: #999988; font-style: italic } +#template .highlight .err { color: #a61717; background-color: #e3d2d2 } +#template .highlight .k { font-weight: bold } +#template .highlight .o { font-weight: bold } +#template .highlight .cm { color: #999988; font-style: italic } +#template .highlight .cp { color: #999999; font-weight: bold } +#template .highlight .c1 { color: #999988; font-style: italic } +#template .highlight .cs { color: #999999; font-weight: bold; font-style: italic } +#template .highlight .gd { color: #000000; background-color: #ffdddd } +#template .highlight .gd .x { color: #000000; background-color: #ffaaaa } +#template .highlight .ge { font-style: italic } +#template .highlight .gr { color: #aa0000 } +#template .highlight .gh { color: #999999 } +#template .highlight .gi { color: #000000; background-color: #ddffdd } +#template .highlight .gi .x { color: #000000; background-color: #aaffaa } +#template .highlight .gc { color: #999; background-color: #EAF2F5 } +#template .highlight .go { color: #888888 } +#template .highlight .gp { color: #555555 } +#template .highlight .gs { font-weight: bold } +#template .highlight .gu { color: #aaaaaa } +#template .highlight .gt { color: #aa0000 } From 2468aa9350cb9d789571949338c35667f99ed95e Mon Sep 17 00:00:00 2001 From: eston Date: Wed, 2 Mar 2011 18:17:25 -0800 Subject: [PATCH 284/393] Stop this font scaling madness --- lib/gollum/frontend/public/css/gollum.css | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/lib/gollum/frontend/public/css/gollum.css b/lib/gollum/frontend/public/css/gollum.css index 611a31f9..612b27ae 100755 --- a/lib/gollum/frontend/public/css/gollum.css +++ b/lib/gollum/frontend/public/css/gollum.css @@ -81,6 +81,7 @@ a:hover, a:visited { #wiki-rightbar { background-color: #f7f7f7; border: 1px solid #ddd; + font-size: 13px; float: right; padding: 7px; width: 25%; @@ -90,11 +91,6 @@ a:hover, a:visited { -webkit-border-radius: 0.5em; } - #wiki-rightbar { - font-size: 1.0em; - line-height: 1.3em; - } - #wiki-rightbar p { margin: 13px 0 0; } @@ -144,11 +140,6 @@ a:hover, a:visited { text-shadow: 0 1px 0 #fff; } - #wiki-rightbar p { - font-size: 1.2em; - line-height: 1.6em; - } - /* @section footer */ #wiki-footer { clear: both; From aabed7a6cce09ec8cdbd330a955a229c594b18cb Mon Sep 17 00:00:00 2001 From: eston Date: Thu, 3 Mar 2011 13:48:13 -0800 Subject: [PATCH 285/393] Add absent links for wiki --- lib/gollum/frontend/public/css/template.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/gollum/frontend/public/css/template.css b/lib/gollum/frontend/public/css/template.css index aab320c1..025cc601 100644 --- a/lib/gollum/frontend/public/css/template.css +++ b/lib/gollum/frontend/public/css/template.css @@ -8,6 +8,11 @@ margin-bottom: 40px; } +/* Link Colors */ +a.absent { + color: #c00; +} + /* Primary Body Copy */ #template p { margin: 16px 0 0; From f8b25f44f79fbf30debe850c6460e63f957ead3f Mon Sep 17 00:00:00 2001 From: rick Date: Thu, 3 Mar 2011 15:22:31 -0800 Subject: [PATCH 286/393] i think ruby 1.9 needs this. can't live without it. --- test/test_committer.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/test_committer.rb b/test/test_committer.rb index 68157844..7a9b59c2 100644 --- a/test/test_committer.rb +++ b/test/test_committer.rb @@ -1,3 +1,4 @@ +# ~*~ encoding: utf-8 ~*~ require File.expand_path(File.join(File.dirname(__FILE__), "helper")) context "Wiki" do @@ -47,4 +48,4 @@ context "Wiki" do FileUtils.rm_rf(@path) end end -end \ No newline at end of file +end From 83c0dbaaf2b3ad07cb45837b6b1f43839e915e9b Mon Sep 17 00:00:00 2001 From: rick Date: Thu, 3 Mar 2011 15:22:46 -0800 Subject: [PATCH 287/393] update to albino v1.3.0 --- gollum.gemspec | 2 +- lib/gollum/markup.rb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gollum.gemspec b/gollum.gemspec index bcea6b4f..450667b5 100644 --- a/gollum.gemspec +++ b/gollum.gemspec @@ -25,7 +25,7 @@ Gem::Specification.new do |s| s.add_dependency('grit', "~> 2.4.1") s.add_dependency('github-markup', [">= 0.4.0", "< 1.0.0"]) - s.add_dependency('albino', "~> 1.2.3") + s.add_dependency('albino', "~> 1.3.0") s.add_dependency('sinatra', "~> 1.0") s.add_dependency('mustache', [">= 0.11.2", "< 1.0.0"]) s.add_dependency('sanitize', "~> 2.0.0") diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index dbb6f4b8..2c52d1f2 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -391,8 +391,8 @@ module Gollum formatted = begin lang && Gollum::Albino.colorize(code, lang) - rescue ::Albino::ShellArgumentError, ::Albino::Process::TimeoutExceeded, - ::Albino::Process::MaximumOutputExceeded + rescue ::Albino::ShellArgumentError, ::POSIX::Spawn::TimeoutExceeded, + ::POSIX::Spawn::MaximumOutputExceeded end formatted ||= "
    #{CGI.escapeHTML(code)}
    " update_cache(:code, id, formatted) From ecb44b50e13ad3f61d3737e697a308bd65b6205d Mon Sep 17 00:00:00 2001 From: rick Date: Thu, 3 Mar 2011 16:28:13 -0800 Subject: [PATCH 288/393] use Albino::Multi --- lib/gollum/albino.rb | 17 +++++++++++------ lib/gollum/markup.rb | 45 ++++++++++++++++++++++++++++---------------- test/test_markup.rb | 12 ------------ 3 files changed, 40 insertions(+), 34 deletions(-) diff --git a/lib/gollum/albino.rb b/lib/gollum/albino.rb index b731ae9d..db7aa73a 100644 --- a/lib/gollum/albino.rb +++ b/lib/gollum/albino.rb @@ -1,12 +1,17 @@ -require 'albino' +require 'albino/multi' -class Gollum::Albino < Albino - self.bin = ::Albino.bin - self.default_encoding = ::Albino.default_encoding +class Gollum::Albino < Albino::Multi + self.bin = ::Albino::Multi.bin def colorize(options = {}) - html = super.to_s + case out = super + when Array then out.each { |s| fix_html(s) } + else fix_html(out) + end + end + + def fix_html(html) html.sub!(%r{
    \Z}, "\n
    ") html end -end \ No newline at end of file +end diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 2c52d1f2..3bd60ebf 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -380,26 +380,39 @@ module Gollum # # Returns the marked up String data. def process_code(data) + return data if data.nil? || data.size.zero? || @codemap.size.zero? + + blocks = [] @codemap.each do |id, spec| - formatted = spec[:output] || begin - code = spec[:code] - lang = spec[:lang] + next if spec[:output] # cached - if code.lines.all? { |line| line =~ /\A\r?\n\Z/ || line =~ /^( |\t)/ } - code.gsub!(/^( |\t)/m, '') - end - - formatted = begin - lang && Gollum::Albino.colorize(code, lang) - rescue ::Albino::ShellArgumentError, ::POSIX::Spawn::TimeoutExceeded, - ::POSIX::Spawn::MaximumOutputExceeded - end - formatted ||= "
    #{CGI.escapeHTML(code)}
    " - update_cache(:code, id, formatted) - formatted + code = spec[:code] + if code.lines.all? { |line| line =~ /\A\r?\n\Z/ || line =~ /^( |\t)/ } + code.gsub!(/^( |\t)/m, '') end - data.gsub!(id, formatted) + + blocks << [spec[:lang], code] end + + highlighted = begin + blocks.size.zero? ? [] : Gollum::Albino.colorize(blocks) + rescue ::Albino::ShellArgumentError, ::POSIX::Spawn::TimeoutExceeded, + ::POSIX::Spawn::MaximumOutputExceeded + [] + end + + @codemap.each do |id, spec| + body = spec[:output] || begin + if (body = highlighted.shift.to_s).size > 0 + update_cache(:code, id, body) + body + else + "
    #{CGI.escapeHTML(spec[:code])}
    " + end + end + data.gsub!(id, body) + end + data end diff --git a/test/test_markup.rb b/test/test_markup.rb index 6c8db408..14bb4e71 100644 --- a/test/test_markup.rb +++ b/test/test_markup.rb @@ -422,18 +422,6 @@ context "Markup" do compare(content, output) end - test "code block with invalid lang" do - content = "a\n\n``` ls -al;\n\tbooya\n\tboom\n```\n\nb" - output = "

    a

    \n\n
    booya\nboom
    \n\n

    b

    " - compare(content, output) - end - - test "code block with no lang" do - content = "a\n\n```\n\tls -al;\n\t\n```\n\nb" - output = "

    a

    \n\n
    ls -al;\n<booya>
    \n\n

    b

    " - compare(content, output) - end - ######################################################################### # # Various From 32a33e0c156ea1c0df7e1612c8bcdd94edc473e6 Mon Sep 17 00:00:00 2001 From: rick Date: Thu, 10 Mar 2011 10:33:35 -0800 Subject: [PATCH 289/393] update to albino v1.3.2 --- gollum.gemspec | 2 +- lib/gollum/albino.rb | 12 ------------ lib/gollum/markup.rb | 4 ++-- 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/gollum.gemspec b/gollum.gemspec index 450667b5..e1861f6e 100644 --- a/gollum.gemspec +++ b/gollum.gemspec @@ -25,7 +25,7 @@ Gem::Specification.new do |s| s.add_dependency('grit', "~> 2.4.1") s.add_dependency('github-markup', [">= 0.4.0", "< 1.0.0"]) - s.add_dependency('albino', "~> 1.3.0") + s.add_dependency('albino', "~> 1.3.2") s.add_dependency('sinatra', "~> 1.0") s.add_dependency('mustache', [">= 0.11.2", "< 1.0.0"]) s.add_dependency('sanitize', "~> 2.0.0") diff --git a/lib/gollum/albino.rb b/lib/gollum/albino.rb index db7aa73a..fa9fbe4d 100644 --- a/lib/gollum/albino.rb +++ b/lib/gollum/albino.rb @@ -2,16 +2,4 @@ require 'albino/multi' class Gollum::Albino < Albino::Multi self.bin = ::Albino::Multi.bin - - def colorize(options = {}) - case out = super - when Array then out.each { |s| fix_html(s) } - else fix_html(out) - end - end - - def fix_html(html) - html.sub!(%r{
    \Z}, "\n") - html - end end diff --git a/lib/gollum/markup.rb b/lib/gollum/markup.rb index 3bd60ebf..e264f490 100644 --- a/lib/gollum/markup.rb +++ b/lib/gollum/markup.rb @@ -396,8 +396,8 @@ module Gollum highlighted = begin blocks.size.zero? ? [] : Gollum::Albino.colorize(blocks) - rescue ::Albino::ShellArgumentError, ::POSIX::Spawn::TimeoutExceeded, - ::POSIX::Spawn::MaximumOutputExceeded + rescue ::Albino::ShellArgumentError, ::Albino::TimeoutExceeded, + ::Albino::MaximumOutputExceeded [] end From 45a300c6bc6319da1bce1807c1acb0b885c8ae70 Mon Sep 17 00:00:00 2001 From: rick Date: Thu, 10 Mar 2011 10:54:32 -0800 Subject: [PATCH 290/393] add gollum-{{format}}}-content class names to rendered wiki body divs --- lib/gollum/frontend/templates/page.mustache | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/gollum/frontend/templates/page.mustache b/lib/gollum/frontend/templates/page.mustache index a593b1a4..b93dafd3 100755 --- a/lib/gollum/frontend/templates/page.mustache +++ b/lib/gollum/frontend/templates/page.mustache @@ -13,18 +13,18 @@
    -
    +
    {{{content}}}
    {{#has_sidebar}} -
    +
    {{{sidebar_content}}}
    {{/has_sidebar}} {{#has_footer}} -