\ No newline at end of file
diff --git a/_includes/season_tabs.html b/_includes/season_tabs.html
new file mode 100644
index 0000000..a4b4a42
--- /dev/null
+++ b/_includes/season_tabs.html
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/_includes/squad.html b/_includes/squad.html
new file mode 100644
index 0000000..9833234
--- /dev/null
+++ b/_includes/squad.html
@@ -0,0 +1,13 @@
+
+
+
+ {% for player in include.squad %}
+ {% if player.locator != nil %}
+
+
+
{{player.number}} {{player.name}}
+
+ {% endif %}
+ {% endfor %}
+
+
\ No newline at end of file
diff --git a/_includes/team_link.html b/_includes/team_link.html
new file mode 100644
index 0000000..9d7dd1a
--- /dev/null
+++ b/_includes/team_link.html
@@ -0,0 +1,6 @@
+{% if include.team != nil %}
+
+{{ include.team.display_name }}
+{% else %}
+
+{% endif %}
\ No newline at end of file
diff --git a/_layouts/game.html b/_layouts/game.html
new file mode 100644
index 0000000..2c0edcb
--- /dev/null
+++ b/_layouts/game.html
@@ -0,0 +1,71 @@
+---
+layout: page
+---
+
+
+
+
+ {% for player in page.team.players.starting %}
+ {% include player_table_line.html player=player %}
+ {% endfor %}
+
+ {% for player in page.team.players.subs %}
+ {% include player_table_line.html player=player %}
+ {% endfor %}
+
+
+
+
+
+
+
+
+ {% include squad.html squad=page.team.players.starting %}
+
+
+
+
+
+{% for game in page.team.games %}
+{% assign gk = game[0] %}
+{% assign g = game[1] %}
+{% include game_lines.html game_key=gk game=g season_base_url="../" %}
+{% endfor %}
+
+
+
+{% if page.team.image %}
+
+
+
+
+
+{% endif %}
\ No newline at end of file
diff --git a/_plugins/jekyll-multiple-languages-plugin/lib/jekyll-multiple-languages-plugin.rb b/_plugins/jekyll-multiple-languages-plugin/lib/jekyll-multiple-languages-plugin.rb
new file mode 100644
index 0000000..af716e9
--- /dev/null
+++ b/_plugins/jekyll-multiple-languages-plugin/lib/jekyll-multiple-languages-plugin.rb
@@ -0,0 +1,593 @@
+=begin
+
+Jekyll Multiple Languages is an internationalization plugin for Jekyll. It
+compiles your Jekyll site for one or more languages with a similar approach as
+Rails does. The different sites will be stored in sub folders with the same name
+as the language it contains.
+
+Please visit https://github.com/screeninteraction/jekyll-multiple-languages-plugin
+for more details.
+
+=end
+
+
+
+require_relative "plugin/version"
+
+module Jekyll
+
+ #*****************************************************************************
+ # :site, :post_render hook
+ #*****************************************************************************
+ Jekyll::Hooks.register :site, :pre_render do |site, payload|
+ lang = site.config['lang']
+ puts "Loading translation from file #{site.source}/_i18n/#{lang}.yml"
+ site.parsed_translations[lang] = YAML.load_file("#{site.source}/_i18n/#{lang}.yml")
+ end
+
+ #*****************************************************************************
+ # :site, :post_write hook
+ #*****************************************************************************
+ Jekyll::Hooks.register :site, :post_write do |site|
+
+ # Moves excluded paths from the default lang subfolder to the root folder
+ #===========================================================================
+ default_lang = site.config["default_lang"]
+ current_lang = site.config["lang"]
+ exclude_paths = site.config["exclude_from_localizations"]
+
+ if (default_lang == current_lang && site.config["default_locale_in_subfolder"])
+ files = Dir.glob(File.join("_site/" + current_lang + "/", "*"))
+ files.each do |file_path|
+ parts = file_path.split('/')
+ f_path = parts[2..-1].join('/')
+ if (f_path == 'base.html')
+ new_path = parts[0] + "/index.html"
+ puts "Moving '" + file_path + "' to '" + new_path + "'"
+ File.rename file_path, new_path
+ else
+ exclude_paths.each do |exclude_path|
+ if (exclude_path == f_path)
+ new_path = parts[0] + "/" + f_path
+ puts "Moving '" + file_path + "' to '" + new_path + "'"
+ if (Dir.exists?(new_path))
+ FileUtils.rm_r new_path
+ end
+ File.rename file_path, new_path
+ end
+ end
+ end
+ end
+ end
+
+ #===========================================================================
+
+ end
+
+ Jekyll::Hooks.register :site, :post_render do |site, payload|
+
+ # Removes all static files that should not be copied to translated sites.
+ #===========================================================================
+ default_lang = payload["site"]["default_lang"]
+ current_lang = payload["site"][ "lang"]
+
+ static_files = payload["site"]["static_files"]
+ exclude_paths = payload["site"]["exclude_from_localizations"]
+
+ default_locale_in_subfolder = site.config["default_locale_in_subfolder"]
+
+ if default_lang != current_lang
+ static_files.delete_if do |static_file|
+ next true if (static_file.name == 'base.html' && default_locale_in_subfolder)
+
+ # Remove "/" from beginning of static file relative path
+ if static_file.instance_variable_get(:@relative_path) != nil
+ static_file_r_path = static_file.instance_variable_get(:@relative_path).dup
+ if static_file_r_path
+ static_file_r_path[0] = ''
+
+ exclude_paths.any? do |exclude_path|
+ Pathname.new(static_file_r_path).descend do |static_file_path|
+ break(true) if (Pathname.new(exclude_path) <=> static_file_path) == 0
+ end
+ end
+ end
+ end
+ end
+ end
+
+ #===========================================================================
+
+ end
+
+
+
+ ##############################################################################
+ # class Site
+ ##############################################################################
+ class Site
+
+ attr_accessor :parsed_translations # Hash that stores parsed translations read from YAML files.
+
+ alias :process_org :process
+
+ #======================================
+ # process
+ #
+ # Reads Jekyll and plugin configuration parameters set on _config.yml, sets
+ # main parameters and processes the website for each language.
+ #======================================
+ def process
+ # Check if plugin settings are set, if not, set a default or quit.
+ #-------------------------------------------------------------------------
+ self.parsed_translations ||= {}
+
+ self.config['exclude_from_localizations'] ||= []
+
+ self.config['default_locale_in_subfolder'] ||= false
+
+ if ( !self.config['languages'] or
+ self.config['languages'].empty? or
+ !self.config['languages'].all?
+ )
+ puts 'You must provide at least one language using the "languages" setting on your _config.yml.'
+
+ exit
+ end
+
+
+ # Variables
+ #-------------------------------------------------------------------------
+
+ # Original Jekyll configurations
+ baseurl_org = self.config[ 'baseurl' ].to_s # Baseurl set on _config.yml
+ dest_org = self.dest # Destination folder where the website is generated
+
+ # Site building only variables
+ languages = self.config['languages'] # List of languages set on _config.yml
+
+ # Site wide plugin configurations
+ self.config['default_lang'] = languages.first # Default language (first language of array set on _config.yml)
+ self.config[ 'lang'] = languages.first # Current language being processed
+ self.config['baseurl_root'] = baseurl_org # Baseurl of website root (without the appended language code)
+ self.config['translations'] = self.parsed_translations # Hash that stores parsed translations read from YAML files. Exposes this hash to Liquid.
+
+ # Build the website for all languages
+ #-------------------------------------------------------------------------
+
+ # Remove .htaccess file from included files, so it wont show up on translations folders.
+ self.include -= [".htaccess"]
+
+ languages.each do |lang|
+
+ # Language specific config/variables
+ if lang != self.config['default_lang'] || self.config['default_locale_in_subfolder']
+ @dest = dest_org + "/" + lang
+ self.config['baseurl'] = baseurl_org + "/" + lang
+ self.config['lang'] = lang
+ end
+
+ puts "Building site for language: \"#{self.config['lang']}\" to: #{self.dest}"
+
+ process_org
+ end
+
+ # Revert to initial Jekyll configurations (necessary for regeneration)
+ self.config[ 'baseurl' ] = baseurl_org # Baseurl set on _config.yml
+ @dest = dest_org # Destination folder where the website is generated
+
+ puts 'Build complete'
+ end
+
+
+
+ if Gem::Version.new(Jekyll::VERSION) < Gem::Version.new("3.0.0")
+ alias :read_posts_org :read_posts
+
+ #======================================
+ # read_posts
+ #======================================
+ def read_posts(dir)
+ translate_posts = !self.config['exclude_from_localizations'].include?("_posts")
+
+ if dir == '' && translate_posts
+ read_posts("_i18n/#{self.config['lang']}/")
+ else
+ read_posts_org(dir)
+ end
+
+ end
+ end
+
+ end
+
+
+
+ ##############################################################################
+ # class PageReader
+ ##############################################################################
+ class PageReader
+ alias :read_org :read
+
+ #======================================
+ # read
+ #
+ # Monkey patched this method to remove excluded languages.
+ #======================================
+ def read(files)
+ read_org(files).reject do |page|
+ page.data['languages'] && !page.data['languages'].include?(site.config['lang'])
+ end
+ end
+ end
+
+
+
+ ##############################################################################
+ # class PostReader
+ ##############################################################################
+ class PostReader
+
+ if Gem::Version.new(Jekyll::VERSION) >= Gem::Version.new("3.0.0")
+ alias :read_posts_org :read_posts
+
+ #======================================
+ # read_posts
+ #======================================
+ def read_posts(dir)
+ translate_posts = !site.config['exclude_from_localizations'].include?("_posts")
+ if dir == '' && translate_posts
+ read_posts("_i18n/#{site.config['lang']}/")
+ else
+ read_posts_org(dir)
+ end
+ end
+ end
+ end
+
+
+
+ #-----------------------------------------------------------------------------
+ #
+ # Include (with priority—prepend)the translated
+ # permanent link for Page and document
+ #
+ #-----------------------------------------------------------------------------
+
+ module Permalink
+ #======================================
+ # permalink
+ #======================================
+ def permalink
+ return nil if data.nil? || data['permalink'].nil?
+
+ if site.config['relative_permalinks']
+ File.join(@dir, data['permalink'])
+ elsif site.config['lang']
+ # Look if there's a permalink overwrite specified for this lang
+ data['permalink_' + site.config['lang']] || data['permalink']
+ else
+ data['permalink']
+ end
+
+ end
+ end
+
+ Page.prepend(Permalink)
+ Document.prepend(Permalink)
+
+
+ ##############################################################################
+ # class Post
+ ##############################################################################
+ class Post
+
+ if Gem::Version.new(Jekyll::VERSION) < Gem::Version.new("3.0.0")
+ alias :populate_categories_org :populate_categories
+
+ #======================================
+ # populate_categories
+ #
+ # Monkey patched this method to remove unwanted strings
+ # ("_i18n" and language code) that are prepended to posts categories
+ # because of how the multilingual posts are arranged in subfolders.
+ #======================================
+ def populate_categories
+ categories_from_data = Utils.pluralized_array_from_hash(data, 'category', 'categories')
+ self.categories = (
+ Array(categories) + categories_from_data
+ ).map {|c| c.to_s.downcase}.flatten.uniq
+
+ self.categories.delete("_i18n")
+ self.categories.delete(site.config['lang'])
+
+ return self.categories
+ end
+ end
+ end
+
+
+
+ ##############################################################################
+ # class Document
+ ##############################################################################
+ class Document
+
+ if Gem::Version.new(Jekyll::VERSION) >= Gem::Version.new("3.0.0")
+ alias :populate_categories_org :populate_categories
+
+ #======================================
+ # populate_categories
+ #
+ # Monkey patched this method to remove unwanted strings
+ # ("_i18n" and language code) that are prepended to posts categories
+ # because of how the multilingual posts are arranged in subfolders.
+ #======================================
+ def populate_categories
+ data['categories'].delete("_i18n")
+ data['categories'].delete(site.config['lang'])
+
+ merge_data!({
+ 'categories' => (
+ Array(data['categories']) + Utils.pluralized_array_from_hash(data, 'category', 'categories')
+ ).map(&:to_s).flatten.uniq
+ })
+ end
+ end
+ end
+
+
+
+ #-----------------------------------------------------------------------------
+ #
+ # The next classes implements the plugin Liquid Tags and/or Filters
+ #
+ #-----------------------------------------------------------------------------
+
+
+ ##############################################################################
+ # class LocalizeTag
+ #
+ # Localization by getting localized text from YAML files.
+ # User must use the "t" or "translate" liquid tags.
+ ##############################################################################
+ class LocalizeTag < Liquid::Tag
+
+ #======================================
+ # initialize
+ #======================================
+ def initialize(tag_name, key, tokens)
+ super
+ @key = key.strip
+ end
+
+
+
+ #======================================
+ # render
+ #======================================
+ def render(context)
+ if "#{context[@key]}" != "" # Check for page variable
+ key = "#{context[@key]}"
+ else
+ key = @key
+ end
+
+ key = Liquid::Template.parse(key).render(context) # Parses and renders some Liquid syntax on arguments (allows expansions)
+
+ site = context.registers[:site] # Jekyll site object
+
+ lang = site.config['lang']
+
+ translation = site.parsed_translations[lang].access(key) if key.is_a?(String)
+
+ if translation.nil? or translation.empty?
+ translation = site.parsed_translations[site.config['default_lang']].access(key)
+
+ if site.config["verbose"]
+ puts "Missing i18n key: #{lang}:#{key}"
+ puts "Using translation '%s' from default language: %s" %[translation, site.config['default_lang']]
+ end
+ end
+
+ translation
+ end
+ end
+
+
+
+ ##############################################################################
+ # class LocalizeInclude
+ #
+ # Localization by including whole files that contain the localization text.
+ # User must use the "tf" or "translate_file" liquid tags.
+ ##############################################################################
+ module Tags
+ class LocalizeInclude < IncludeTag
+
+ #======================================
+ # render
+ #======================================
+ def render(context)
+ if "#{context[@file]}" != "" # Check for page variable
+ file = "#{context[@file]}"
+ else
+ file = @file
+ end
+
+ file = Liquid::Template.parse(file).render(context) # Parses and renders some Liquid syntax on arguments (allows expansions)
+
+ site = context.registers[:site] # Jekyll site object
+
+ default_lang = site.config['default_lang']
+
+ validate_file_name(file)
+
+ includes_dir = File.join(site.source, '_i18n/' + site.config['lang'])
+
+ # If directory doesn't exist, go to default lang
+ if !Dir.exist?(includes_dir)
+ includes_dir = File.join(site.source, '_i18n/' + default_lang)
+ elsif
+ # If file doesn't exist, go to default lang
+ Dir.chdir(includes_dir) do
+ choices = Dir['**/*'].reject { |x| File.symlink?(x) }
+ if !choices.include?( file)
+ includes_dir = File.join(site.source, '_i18n/' + default_lang)
+ end
+ end
+ end
+
+ Dir.chdir(includes_dir) do
+ choices = Dir['**/*'].reject { |x| File.symlink?(x) }
+
+ if choices.include?( file)
+ source = File.read(file)
+ partial = Liquid::Template.parse(source)
+
+ context.stack do
+ context['include'] = parse_params( context) if @params
+ contents = partial.render(context)
+ ext = File.extname(file)
+
+ converter = site.converters.find { |c| c.matches(ext) }
+ contents = converter.convert(contents) unless converter.nil?
+
+ contents
+ end
+ else
+ raise IOError.new "Included file '#{file}' not found in #{includes_dir} directory"
+ end
+
+ end
+ end
+ end
+
+ # Override of core Jekyll functionality, to get rid of deprecation
+ # warning. See https://github.com/jekyll/jekyll/pull/7117 for more
+ # details.
+ class PostComparer
+ def initialize(name)
+ @name = name
+
+ all, @path, @date, @slug = *name.sub(%r!^/!, "").match(MATCHER)
+ unless all
+ raise Jekyll::Errors::InvalidPostNameError,
+ "'#{name}' does not contain valid date and/or title."
+ end
+
+ escaped_slug = Regexp.escape(slug)
+ @name_regex = %r!_posts/#{path}#{date}-#{escaped_slug}\.[^.]+|
+ ^#{path}_posts/?#{date}-#{escaped_slug}\.[^.]+!x
+ end
+ end
+ end
+
+
+
+ ##############################################################################
+ # class LocalizeLink
+ #
+ # Creates links or permalinks for translated pages.
+ # User must use the "tl" or "translate_link" liquid tags.
+ ##############################################################################
+ class LocalizeLink < Liquid::Tag
+
+ #======================================
+ # initialize
+ #======================================
+ def initialize(tag_name, key, tokens)
+ super
+ @key = key
+ end
+
+
+
+ #======================================
+ # render
+ #======================================
+ def render(context)
+ if "#{context[@key]}" != "" # Check for page variable
+ key = "#{context[@key]}"
+ else
+ key = @key
+ end
+
+ key = Liquid::Template.parse(key).render(context) # Parses and renders some Liquid syntax on arguments (allows expansions)
+
+ site = context.registers[:site] # Jekyll site object
+
+ key = key.split
+ namespace = key[0]
+ lang = key[1] || site.config[ 'lang']
+ default_lang = site.config['default_lang']
+ baseurl = site.baseurl
+ pages = site.pages
+ url = "";
+
+ if default_lang != lang || site.config['default_locale_in_subfolder']
+ baseurl = baseurl + "/" + lang
+ end
+
+ collections = site.collections.values.collect{|x| x.docs}.flatten
+ pages = site.pages + collections
+
+ for p in pages
+ unless p['namespace'].nil?
+ page_namespace = p['namespace']
+
+ if namespace == page_namespace
+ permalink = p['permalink_'+lang] || p['permalink']
+ url = baseurl + permalink
+ end
+ end
+ end
+
+ url
+ end
+ end
+
+
+end # End module Jekyll
+
+
+
+################################################################################
+# class Hash
+################################################################################
+unless Hash.method_defined? :access
+ class Hash
+
+ #======================================
+ # access
+ #======================================
+ def access(path)
+ ret = self
+
+ path.split('.').each do |p|
+
+ if p.to_i.to_s == p
+ ret = ret[p.to_i]
+ else
+ ret = ret[p.to_s] || ret[p.to_sym]
+ end
+
+ break unless ret
+ end
+
+ ret
+ end
+ end
+end
+
+
+
+################################################################################
+# Liquid tags definitions
+
+Liquid::Template.register_tag('t', Jekyll::LocalizeTag )
+Liquid::Template.register_tag('translate', Jekyll::LocalizeTag )
+Liquid::Template.register_tag('tf', Jekyll::Tags::LocalizeInclude)
+Liquid::Template.register_tag('translate_file', Jekyll::Tags::LocalizeInclude)
+Liquid::Template.register_tag('tl', Jekyll::LocalizeLink )
+Liquid::Template.register_tag('translate_link', Jekyll::LocalizeLink )
diff --git a/_plugins/jekyll-multiple-languages-plugin/lib/plugin/version.rb b/_plugins/jekyll-multiple-languages-plugin/lib/plugin/version.rb
new file mode 100644
index 0000000..c46b7ae
--- /dev/null
+++ b/_plugins/jekyll-multiple-languages-plugin/lib/plugin/version.rb
@@ -0,0 +1,6 @@
+module Jekyll
+ module MultipleLanguagesPlugin
+ VERSION = "1.7.0"
+ end
+end
+
diff --git a/_plugins/league_generator.rb b/_plugins/league_generator.rb
new file mode 100644
index 0000000..2738c97
--- /dev/null
+++ b/_plugins/league_generator.rb
@@ -0,0 +1,442 @@
+require 'json'
+
+module League
+
+ class GoalScorerPage < Jekyll::Page
+ def initialize(site, base, dir, season_name, rank_table, team_hash)
+ @site = site
+ @base = base
+ @dir = dir
+ @name = 'goal_scorers.html'
+
+ self.process(@name)
+ self.read_yaml(File.join(base, '_layouts'), 'goal_scorers.html')
+
+ self.data['rank_table'] = rank_table
+ self.data['team_hash'] = team_hash
+ self.data['display_name'] = season_name
+ end
+ end
+
+ class TeamPage < Jekyll::Page
+ def initialize(site, base, dir, team_key, team, season_key, season)
+ @site = site
+ @base = base
+ @dir = dir
+ @name = 'index.html'
+
+ self.process(@name)
+ self.read_yaml(File.join(base, '_layouts'), 'team.html')
+
+
+ self.data['team_key'] = team_key
+ self.data['team'] = team
+ self.data['season_key'] = season_key
+ self.data['season'] = season
+ end
+ end
+
+ class GamePage < Jekyll::Page
+ def initialize(site, base, dir, game)
+ @site = site
+ @base = base
+ @dir = dir
+ @name = 'index.html'
+
+ self.process(@name)
+ self.read_yaml(File.join(base, '_layouts'), 'game.html')
+
+
+ self.data['game'] = game
+ # self.data['home_team'] = home_team
+ # self.data['away_team'] = away_team
+
+
+ end
+ end
+
+ def self.calculate_table (team_hash, games_pair, entry)
+ # Iterate games to calculate data
+
+ # clear data
+ for team in team_hash
+ team[1][entry] = {
+ 'games_played' => 0,
+ 'wins' => 0,
+ 'draws' => 0,
+ 'loses' => 0,
+ 'goals_for' => 0,
+ 'goals_against' => 0,
+ 'goals_diff' => 0,
+ 'points' => 0
+ }
+ end
+
+ for p in games_pair
+ key = p[0]
+ game = p[1]
+
+ t0 = team_hash[game['home']['key']][entry]
+ t0['games_played'] += 1;
+ t0['goals_for'] += game['home']['score'];
+ t0['goals_against'] += game['away']['score'];
+
+ t1 = team_hash[game['away']['key']][entry]
+ t1['games_played'] += 1;
+ t1['goals_for'] += game['away']['score'];
+ t1['goals_against'] += game['home']['score'];
+
+ if game['home']['score'] > game['away']['score']
+ t0['wins'] += 1;
+ t1['loses'] += 1;
+ elsif game['home']['score'] < game['away']['score']
+ t1['wins'] += 1;
+ t0['loses'] += 1;
+ else
+ t0['draws'] += 1;
+ t1['draws'] += 1;
+ end
+ end
+
+ # post process
+ for team in team_hash
+ t = team[1][entry]
+ t['goals_diff'] = t['goals_for'] - t['goals_against']
+ t['points'] = t['wins'] * 3 + t['draws']
+
+ t['avg_gf'] = t['games_played'] == 0 ? 0.0 : t['goals_for'].fdiv(t['games_played'])
+ t['avg_ga'] = t['games_played'] == 0 ? 0.0 : t['goals_against'].fdiv(t['games_played'])
+
+ t['avg_gf'] = sprintf("%0.1f", t['avg_gf'])
+ t['avg_ga'] = sprintf("%0.1f", t['avg_ga'])
+ end
+ end
+
+ # default SeasonPage (League table)
+ class LeagueSeasonPage < Jekyll::Page
+ # class LeagueSeasonPage < Jekyll::PageWithoutAFile
+ def initialize(site, base, dir, season, team_hash, games_pair, config, season_name)
+ @site = site
+ @base = base
+ @dir = dir
+ # @name = "#{season[0]}.html"
+ @name = "index.html"
+ # @layout = 'season.html'
+ # @path = if site.in_theme_dir(base) == base # we're in a theme
+ # site.in_theme_dir(base, dir, name)
+ # else
+ # site.in_source_dir(base, dir, name)
+ # end
+
+ # puts @path
+
+ self.process(@name)
+
+
+ # self.data = season[1]
+ # puts base
+ self.read_yaml(File.join(base, "_layouts"), "season.html")
+
+ # self.data = {}
+
+ # if config != nil and config['display_name'] != nil
+ # self.data['display_name'] = config['display_name']
+ # else
+ # self.data['display_name'] = season
+ # end
+ # self.data["title"] = self.data['display_name']
+
+ self.data['display_name'] = season_name
+ self.data["title"] = season_name
+ self.data['winner'] = config['winner'] ? team_hash[config['winner']] : nil
+
+
+ # League.calculate_table(team_hash, games_pair, 'table')
+ team_tables = team_hash.map{ |key, value| value }
+
+ # team_array = (season[1]['teams'].to_a).map{|key, team| team}
+
+ sorted = (team_tables.sort_by { |team| [ -team['table']['points'], -team['table']['goals_diff'], -team['table']['goals_for'], team['table']['goals_against'], team['table']['games_played'] ] })
+ # sorted = (team_array.sort_by { |team| [ -team['table']['points'], -team['table']['goals_for'] + team['table']['goals_against'], -team['table']['goals_for'] ] })
+ # puts sorted
+
+ self.data['table'] = sorted
+
+ self.data['games_pair'] = games_pair
+
+ end
+ end
+
+ # group + knockout for jxcup
+ class GroupAndKnockOutSeasonPage < Jekyll::Page
+ def initialize(site, base, dir, season, team_hash, games_hash, games_pair, config, season_name)
+ @site = site
+ @base = base
+ @dir = dir
+ @name = "index.html"
+ self.process(@name)
+ self.read_yaml(File.join(base, "_layouts"), "season_group_knockout.html")
+ # if self.data['display_name'] != nil
+ # self.data['display_name'] = config['display_name']
+ # else
+ # self.data['display_name'] = season
+ # end
+ # self.data["title"] = self.data['display_name']
+ self.data['display_name'] = season_name
+ self.data["title"] = season_name
+
+ knockout_stage = config['knockout_stage']
+ # puts knockout_stage
+
+ if config['display_name'] != nil
+ self.data['display_name'] = config['display_name']
+ end
+
+ # knock out stage
+
+ # make it in correct order
+ # self.data['knockout_teams']
+ knockout_array = Array.new(knockout_stage.length)
+
+ # puts knockout_stage.length
+
+ for i in 0..(knockout_stage.length-1)
+ round = knockout_stage[i]
+ round_array = Array.new(round.length)
+
+ for j in 0..(round.length-1)
+ game = round[j]
+ game_array = Array.new(3)
+
+ # there's team info in game
+ # but we still write team info
+ # because we display versus before game happens
+ game_array[0] = team_hash[game[0]]
+ game_array[1] = team_hash[game[1]]
+ game_array[2] = [game[2], games_hash[game[2]]]
+
+ round_array[j] = game_array
+ end
+
+ knockout_array[i] = round_array
+
+ # puts knockout_array[i]
+ # puts team_hash[round[0]]
+ # puts team_hash['613111']
+ end
+
+ # puts knockout_array
+
+ self.data['knockout_array'] = knockout_array
+ self.data['winner'] = config['winner'] ? team_hash[config['winner']] : nil
+
+
+ # group stage
+
+ groups = config['group_stage']
+
+ if groups != nil
+
+ ##############################################
+
+ # Iterate games to calculate data
+ group_games_pair = games_pair.select{|key, game| game['type'].include? 'group'}
+ League.calculate_table(team_hash, group_games_pair,'table')
+
+ ##############################################
+
+
+ # puts groups.count
+ group_tables = Hash.new
+ group_games = Hash.new
+
+ groups.each do |group_key, team_keys|
+ # simple not points version first
+ team_array = team_keys.map{|key| team_hash[key]}
+ team_keys_set = team_keys.to_set
+ sorted = (team_array.sort_by { |team| [ -team['table']['points'], -team['table']['goals_diff'], -team['table']['goals_for'], team['table']['goals_against'], team['table']['games_played'] ] })
+ group_tables[group_key] = sorted
+
+ # puts team_keys_set
+ cur_group_games_pair = group_games_pair.select{|key, game| team_keys_set.include?(game['home']['key'])}
+
+ group_games[group_key] = cur_group_games_pair
+ end
+
+ self.data['group_tables'] = group_tables
+ self.data['group_games'] = group_games
+
+ end
+
+
+
+ # self.data['games_pair'] = games_pair
+ self.data['rules'] = config['rules']
+
+ end
+ end
+
+ class SeasonPageGenerator < Jekyll::Generator
+ safe true
+
+ def generate(site)
+ # puts site.pages
+ site.data['seasons'].each do |season|
+ # convert nilClass to array
+
+ team_hash = season[1]['teams']
+ team_hash.each do |key, team|
+ team['games'] = Array.new
+ team['key'] = key
+
+ team['player_hash'] = Hash.new
+ if team['players'] != nil
+
+ starting = team['players']['starting']
+ if starting != nil
+ starting.each do |p|
+ p['goals'] = 0
+ p['penalty'] = 0
+ team['player_hash'][p['name']] = p
+ end
+ end
+
+ subs = team['players']['subs']
+ if subs != nil
+ subs.each do |p|
+ p['goals'] = 0
+ p['penalty'] = 0
+ team['player_hash'][p['name']] = p
+ end
+ end
+ end
+
+ # team['players']['starting'].each{|p| puts p}
+ end
+ # team_array = (team_hash.to_a).map{|key, team| team}
+
+
+
+ games_pair = season[1]['games'].to_a
+
+ # puts games_pair
+
+ games_hash = Hash.new
+
+
+ # generate each game page
+ games_pair.each do |p|
+ key = p[0]
+ game = p[1]
+ games_hash[key] = game
+ # puts key
+ # puts game
+
+ home_team = team_hash[game['home']['key']]
+ away_team = team_hash[game['away']['key']]
+
+ home_team['games'] << p
+ away_team['games'] << p
+
+ game['home']['display_name'] = home_team['display_name']
+ game['home']['logo'] = home_team['logo']
+ game['away']['display_name'] = away_team['display_name']
+ game['away']['logo'] = away_team['logo']
+
+ game['home']['events'].each do |e|
+ if e['type'] == 'goal' or e['type'] == 'penalty'
+ player = home_team['player_hash'][e['player']]
+ if player == nil
+ # puts e['player']
+ home_team['player_hash'][e['player']] = {'name' => e['player'], 'goals' => 0, 'penalty' => 0}
+ player = home_team['player_hash'][e['player']]
+ end
+
+ player['goals'] += 1
+ if e['type'] == 'penalty'
+ player['penalty'] += 1
+ end
+ end
+ end
+
+ game['away']['events'].each do |e|
+ if e['type'] == 'goal' or e['type'] == 'penalty'
+ player = away_team['player_hash'][e['player']]
+ if player == nil
+ # puts e['player']
+ away_team['player_hash'][e['player']] = {'name' => e['player'], 'goals' => 0, 'penalty' => 0}
+ player = away_team['player_hash'][e['player']]
+ end
+
+ player['goals'] += 1
+ if e['type'] == 'penalty'
+ player['penalty'] += 1
+ end
+ end
+ end
+
+ site.pages << GamePage.new(site, site.source, File.join('seasons', season[0], 'games', key), game)
+ end
+
+
+ goal_scorers = Array.new
+
+ # include all games (groups and knockout for tournament)
+ League.calculate_table(team_hash, games_pair, 'stats')
+
+ config = season[1]['config']
+ season_name = season[0]
+ if config != nil and config['display_name'] != nil
+ season_name = config['display_name']
+ end
+
+ stats_is_table = false
+ if config == nil or config['type'] == 'league'
+ stats_is_table = true
+ end
+
+
+ team_hash.each do |key, team|
+
+ team['player_hash'].each do |pk, p|
+ if p['goals'] > 0
+ p['teamkey'] = key
+ goal_scorers << p
+ end
+ end
+
+ if stats_is_table
+ team['table'] = team['stats']
+ end
+
+ site.pages << TeamPage.new(site, site.source, File.join('seasons', season[0], key), key, team, season[0], season[1])
+ end
+
+ sorted_goal_scorers = (goal_scorers.sort_by { |p| [ -p['goals'], p['penalty'] ] })
+
+
+ # puts games_hash
+
+
+
+
+ # puts config
+ if config == nil or config['type'] == 'league'
+ site.pages << LeagueSeasonPage.new(site, site.source, File.join('seasons', season[0]), season[0], team_hash, games_pair, config, season_name)
+ elsif config['type'] == 'group + knockout'
+ site.pages << GroupAndKnockOutSeasonPage.new(site, site.source, File.join('seasons', season[0]), season[0], team_hash, games_hash, games_pair, config, season_name)
+ end
+
+
+ site.pages << GoalScorerPage.new(site, site.source, File.join('seasons', season[0]), season_name, sorted_goal_scorers, team_hash)
+
+
+ # puts games_hash
+ # puts games_pair
+ # season table page
+
+ end
+ end
+ end
+
+end
\ No newline at end of file
diff --git a/_posts/2013-09-06-group-2.md b/_posts/2013-09-06-group-2.md
new file mode 100644
index 0000000..ea9438c
--- /dev/null
+++ b/_posts/2013-09-06-group-2.md
@@ -0,0 +1,33 @@
+---
+layout: game_post
+season_key: "2013"
+game_key: "2013-09-06-1"
+
+title: "雨战!---健雄杯A组第二轮,大三高工险胜大二机电联队"
+date: 2013-09-06
+categories: news
+---
+
+*文 Jumping*
+
+在刚刚结束的一场健雄杯A组第二轮小组赛中,大三高工以2:1险胜大二机电联队,机电核心胡煜明先下一城,高工尖刀邵帅连扳两球。下面是详细战报。
+
+随着健雄院“金哨”周林峰的一声哨响,比赛在绵雨刚停的橘园体育场展开了。由于天气比较冷,再加上湿滑的场地,双方球员一开场都表现的比较拘谨,失误也比较多,尤其是大三高工,没有了上一场9:0狂胜的凶猛气势,原以为一边倒的比赛也渐渐有了看头,一场激烈的拉锯战就此诞生。
+
+比赛稍显沉闷,但机电联队的球星胡煜明却率先苏醒,第10分钟,他在中场附近得球,用一连串令人眼花缭乱的拉球、盘球过了对方的两名后卫,接着又倚住对方的另一名后卫,突然转身,极其隐蔽地抽射。皮球如精确制导的导弹一般贴着地面滑入了球门的右下角。高工守门员王鸣轩被打了个措手不及,大三高工的其他队员则相顾无言,惟有泪千行。
+
+丢了球的大三高工此时才如梦方醒。实力占优的他们立马展开了有效的反扑,大二机电甚至难以逾越半场。大三高工的几位中前场队员陈晨、沙奔、邵帅、潘登、吉相冰一番狂轰滥炸,无奈机电守门员安旭犹如卡西附身,高接低挡,力保球门不失。就这样,尽管大三高工场面占优,但上半场结束领先的却是大二机电联队,这,就是足球的魅力。
+
+但下半场开始,风云突变,仅仅1分钟,大三高工便扳平了比分。进球的不是别人,正是大三高工的边路突破狂魔,“Dick”,邵帅。他接潘登开出的质量极高角球,头球轻轻一蹭,一个四两拨千斤的动作,皮球应声入网,1:1!进球后的邵帅左蹦右跳,挥舞双手,异常激动,好像此时他变身为了他的偶像——空霸克洛泽。
+
+仅仅8分钟过后,又是潘登开出了落点极佳的角球,邵帅力压对方防守后卫,如飞窜的猎豹一般,一个霸气十足的鱼跃冲顶,2:1! 这场比赛是邵帅同学第一次在比赛中攻入头球,但一下就进了两个,真是不可思议!
+
+不过,邵帅的表演并没有结束。利用速度优势,他又在边路频繁带球过人,大二机电的后防一时风声鹤唳、草木皆兵。不过幸好他们的守门员安旭又有出色发挥,挡住了邵帅一脚直去死角、势在必进的大力抽色,比分才没有被再次改写。
+
+丢球后的大二机电联队被逼上了绝路,他们没有放弃。在核心胡煜明、张凌翔的带领下,他们组织出了几次颇具威胁的反击。尤其是胡煜明,拿球从容不迫,颇具大将风范,对方几人联合夹抢,但他每次都能用他魔术师一般的双脚化险为夷,球就好像粘在了他的脚上一样,宛如伊涅斯塔,让人不禁感叹球星就是球星!
+
+不过一个人终究难敌一个队,大三高工的后防已经渐入佳境。中前场枢纽潘登、新人朱思宇、中卫吴瀚的出色发挥,让大二机电难以找到空挡。
+
+大三高工在比赛临近尾声时本有机会锁定胜局,无奈前锋吉相冰扣球过人后近在咫尺的单刀竟然放了离谱的高射炮,让人唏嘘不已,他也以这脚失败的射门结束了他本场失败的表演。
+
+最终,又是“金哨”周林峰的一声哨响,比赛结束,大三高工2:1险胜大二机电联队。大三高工在赢得本场比赛的同时也暂居小组第一,并且锁定了小组出线的名额;大二机电联队出线无望,不过他们顽强拼搏的精神赢得了在场每一个人包括对手的掌声,他们欠缺的仅仅是一点点运气,这场比赛没有失败者。
\ No newline at end of file
diff --git a/_posts/2013-10-15-knock-out.md b/_posts/2013-10-15-knock-out.md
new file mode 100644
index 0000000..d185264
--- /dev/null
+++ b/_posts/2013-10-15-knock-out.md
@@ -0,0 +1,28 @@
+---
+layout: game_post
+season_key: "2013"
+game_key: "2013-10-15-1"
+
+title: "最已阵?最强之人复出,魔翼破荒,大三机械爆冷1:2不敌大一电二"
+categories: news
+---
+
+最已阵?最强之人复出,魔翼破荒,大三机械爆冷1:2不敌大一电二
+
+在沉寂了一个多星期之后,今天,健雄杯终于迎来了淘汰赛的争夺。首场淘汰赛在大三机械和大一电二之间进行。由于之前的抽签形势极其有利(大三机械和三个大一的班级处在一个半区,避开了实力最强的大三高工和大三电二),大三机械被视为了决赛热门球队。反观大一电二,大家刚刚认识,相互之间的配合还比较生疏,面对以身体素质见长的大三机械的力量型打法,可谓是凶多吉少。可以说,大一电二是以一颗拼对手的心应对这场比赛的。也许连他们自己都没有料到,这场比赛他们能以2:1获胜。下面是详细战报。
+
+比赛在今天下午的3:45准时展开,大三机械排出了3-2-2的阵容。门将位置上依然是稳健的海哥:后防线上,中后卫,人称”赵一脚“的赵亮因事缺阵,顶替他出场的则是铁腰徐元,两个边后卫一左一右,分别为上场铁树开花的黄友益以及班长丁奕文。中场方面,大三机械最强之人、队长薛昊天解禁付出,大大增强了中前场实力,另一个位置则属于近来脚风不顺,回撤的“吴院马塔”李昱林;前锋线上,过人狂魔、黑旋风、“小热尔维尼奥”周林峰位于左路,吴傲占据右路。大一电二则在明星球员施祎辰的带领下列出了3-3-1的防守反击阵容,施祎辰作为单箭头突前。
+
+比赛刚开始,大三机械就占据了优势,皮球经常在大一电二的半场徘徊。但也许是有些慢热,大三机械的优势没有转化为进球,只开花不结果,后防线却时不时敲响警钟。果不其然,第15分钟,大一电二抓住了一次防守反击的机会,前锋施祎辰背身倚住对手,将球分给了插上的颜兵健,颜兵健一脚射门,球打在了防守队员黄友益的身上发生了折射,守门员海哥显然始料未及,尽管他奋力扑救,指尖蹭到了皮球,但还是无力改变皮球运行的轨迹,1:0!
+
+也许是这个运气球影响到了队员的士气,丢球后的大三机械在场上显得手足无措。还没等他们缓过神来, 又是一次防守反击的机会,第20分钟,大一电二的明星球员施祎辰上演助攻“梅开二度”,他再次利用身体倚住防守队员,巧妙地将球分给了后排插上的王凯,王凯一脚劲射,球擦着立柱飞进了球网,守门员海哥鞭长莫及。
+
+连丢两球的大三机械此时已经被逼上了绝路,展开了疯狂的反扑,他们的努力没过多久也便收到了回报。中场结束前(半场25分钟),大一电二的后卫队员经验不足,手球犯规,送给了大三机械一粒点球。队长薛昊天当仁不让地站在了点球点前。他助跑,对准皮球,猛地发力,皮球却放出了离谱的高射炮。此时的薛昊天一定会想起04年欧洲杯上的小贝,同样是队长,同样是自告奋勇站在球前,也同样放出了离谱的高射炮。
+
+罚球点球的大三机械并没有气馁,经过中场调整,下半场他们的攻势更加凶猛,将对方围在半场一番狂轰滥炸。前锋李昱林更是觅得多次射门良机,无奈本场比赛脚风依然不顺,大一电二门将李世钊高接低挡,有如神助,力保城门不失。
+
+时间在一分一秒的流逝,大三机械的出局看似已经不可避免,就在这时,周林峰站了出来,为大三机械延续了希望。下半场第18分钟,他一改往日如热尔维尼奥般只会过人不会射门的习惯,在大禁区外拔脚怒射,皮球在空中划出了一道诡异的弧线直飞球门死角,即使是本场比赛表现出色的门将李世钊也无可奈何,1:2!
+
+终场前,本场比赛最戏剧性的一刻诞生了。大一电二的后卫再次在禁区内手球,裁判一开始视而不见,但在大三机械球员的强烈抗议下改判,大三机械又获得了一个点球,脚感火热的周林峰取代队长薛昊天站在了点球点前。大三机械能完成自我救赎吗?命运又和他们开了个玩笑。也许是脚感太过火热,周林峰的点球过于追求角度,他的推射打在了立柱上弹出!大一电二死里逃生!
+
+最终,浪费了多次机会的大三机械爆冷1;2出局,最强之人的回归并没有拯救球队,这场比赛成为了他们在健雄杯上的绝唱。队长薛昊天和进球功臣周林峰赛后也难掩失望,对于志在决赛的他们来说,本场比赛的确是一个不小的打击。然而,这就是竞技体育,在把惋惜的掌声送给大三机械的同时,我们更应把更为热烈的掌声送给顽强拼搏的大一电二小伙子们,他们接下来的比赛值得期待!
\ No newline at end of file
diff --git a/_posts/2013-10-20-semi-final-1.md b/_posts/2013-10-20-semi-final-1.md
new file mode 100644
index 0000000..a2a2d9a
--- /dev/null
+++ b/_posts/2013-10-20-semi-final-1.md
@@ -0,0 +1,16 @@
+---
+layout: game_post
+season_key: "2013"
+game_key: "2013-10-20-1"
+
+title: "欧冠级享受,吉贝尔率队挺进4强"
+categories: news
+---
+
+*文 周林峰*
+
+运动会结束了,但是对于大三高工和大三电二,他们的战斗才刚刚开始,为了这场健雄杯焦点战,高工班在比赛之前,进行了多次的进攻战术演练。电二也毫不示弱,早上很早就到了梅园足球场进行传球配合。
+
+比赛在大家大关注之下开始了,刚开场,电二攻势很猛,一度获得多次角球机会,而有着小鲁尼称号的电二头号球星周健,更是生龙活虎。而坐拥三大巨星的高工班,进攻则略显沉闷。比赛的第6分钟,吉贝尔,吉球王在中路带球突破,过了第一个人,紧接着右脚一扣,扣过了第二个防守队员之后,直接一脚怒射,宛如大圣一般,可惜球射的太正,被对方门将挡了出去,但是门将扑的不远,胡梅尔Dick迅速补射,可惜仍被对方门将挡出,今天巨星们好像都没穿射门靴。过了大概五分钟,周健发出角球发了一个前点,陈策在前点抢到球,离门不到2米,可惜角度太小了,没有起脚的机会,球被对方开出去了。双方焦灼了一会儿,高工班角球的机会,潘登开出角球,开到后点被对方挡道前点,这时,大圣吉球王,在正确的时间站在了正确的位置,跳起用脚把球踢进。打破僵局。高工班顿时压力小了很多。也许是因为压力小了,高工班进攻越打越好。奔齐尔在后场将进攻组织的有条不紊。第二十分钟,Di教练抢断周健,一路狂奔,从右路突入对方腹地,两下假动作晃过防守队员,紧接着一脚怒射,球又进了。电二班貌似被打蒙了,进攻毫无起色。
+
+上半场的比赛结束了,双方调整了一下,交换场地,开始下半场的比赛。经过调整,电二班找到了对方的弱点,后场直接起高球,找中锋陈鑫,大概下半场过了5分钟,陈鑫接到了后场的传球,离门将仅有1米,打门打到门将身上,补射的刘畅也没能为班级首开记录,反倒是高工班的反击,可谓是稳,准,狠。无奈本队前锋多脚飞机,没有能够扩大优势。下半场大概第14分钟,吉球王过了几名防守队员后,起脚抽射,球偏出近门柱,打在边网上。球王懊恼不已,错失了梅开二度的机会,在之后的比赛中,双方各有机会,确始终没能够取得进球,最终,凭借着吉贝尔和胡梅尔Dick的进球,高工班取得了比赛的胜利,挺进四强。恭喜他们,当然十分顽强的电二版也值得大家的尊重。
\ No newline at end of file
diff --git a/_posts/2013-10-21-semi-final-2.md b/_posts/2013-10-21-semi-final-2.md
new file mode 100644
index 0000000..f2b4e4b
--- /dev/null
+++ b/_posts/2013-10-21-semi-final-2.md
@@ -0,0 +1,16 @@
+---
+layout: game_post
+season_key: "2013"
+game_key: "2013-10-21-1"
+
+title: "对决!大一电一VS大三电一!江南的表演赛!"
+categories: news
+---
+
+运动会刚一结束,在洋溢这兴奋气息的梅园田径场上炸开了大一电一和大三电一的新旧之决!面对这大三学长的华丽阵容,大一学弟并没有丝毫的胆怯。虽说在脚法上,大一电一的同学略显生疏,配合打的也并不是很好,但是他们他们的热情,为他们的防守带来不少加强!比赛刚一开始,战局一度陷入一边倒的局面,大三电一的胡江南带球直插地方腹部,大有单刀直入之势,面对个人能力如此出众的学长,大一学弟们可谓是草木皆兵,集体回防,却也难阻江南前进的脚步,只见,江南带球连晃五人之后,终于一脚打门,大一守门员预判失误,球漂亮进门,1:0!
+
+丢了一球的大一电一,阵脚被打乱不少,几度失误,导致仍然被大三电一,压在半场,然而进了一球的大三电一,配合在此略有失误,有些只指望胡江南个人能力的势头,江南孤身杀入地方禁区,心有余而力不足,若干次打门未果,加上大一电一守门员的预判准确起来,比赛进入僵局,迟迟没有进展。
+
+到了下半场的时候,大三电一的配合起来,胡江南带球连过大一禁区所有防守,一脚打门,2:0!
+
+最后,大三电一3:0战胜大一电一,获得晋级!
\ No newline at end of file
diff --git a/_posts/2013-11-17-final.md b/_posts/2013-11-17-final.md
new file mode 100644
index 0000000..000b3b6
--- /dev/null
+++ b/_posts/2013-11-17-final.md
@@ -0,0 +1,44 @@
+---
+layout: game_post
+season_key: "2013"
+game_key: "2013-11-17-1"
+
+title: "最强之人复苏,大三高工3年终夺冠"
+date: 2013-11-17
+categories: news
+---
+
+*纪大三高工问鼎2013赛季健雄杯冠军*
+
+*文 周林峰*
+
+
+足球比赛最大的意义似乎就在于永远有说不完的话题,结不清的恩怨。作为从大一开始就能闯进决赛的大三高工班的老男孩们来说,决赛似乎就是一个跨不过去的坎,2年前他们0:1负于了风头正劲的13届以吕力兢为核心的黄金一代;去年又1:2倒在了大四机械的学长脚下。决赛似乎成为了他们的阿喀琉斯之踵,隐隐作痛。
+
+时过境迁,光阴不再,他们已然成为对冠军最渴望的团队。队中阵容相比于前两年并无太大变化。前场的吉相冰是球队的核心,曾经单场轰进7球的他不愿再次复制前两年决赛时受伤的历史;邵帅作为边锋在淘汰赛阶段屡屡有精彩表现;中后场的熊宽晨,潘登更是院队的主力配置,他们力保后场稳健,球门不失;组织核心沙奔出球稳健,视野开阔,做为铁腰出现在了首发名单之中。
+
+今天他们面对的是一支新兴的球队。大一机械在刘明明的带领下,让人眼前一亮。开阔的视野,出色的盘带能力,他是未来院队的建队核心。队伍冲击能力强,没有太多弱点,年轻而有活力。高工的老男孩们是否从他们身上看到了自己第一次踏上决赛舞台时的稚嫩和紧张呢?世纪大战一触即发,气氛紧张的领人窒息。双方的队长吉相冰和刘明明对于决赛都做了大量的部署,他们希望打出自己的技战术水平,凭借顽强意志拿下胜利。
+
+让我们记住这个时间,2013.11.17,下午2点的橘园,双方的决赛正式开始。场边的观众中不乏薛昊天,胡江南这样的院队大牌明星,双方的的拉拉队更是此起彼伏,为球员加油。
+
+
+
+回到比赛。决赛终究是决赛,双方都不敢贸然进行大的出球,表现得颇为谨慎。中场的拼抢尤为激烈,球权几度易手。高工这边按照既定战术进行短传渗透,吉球王表现得尤为积极,奔跑冲刺不知疲倦,他知道这也许是他最后一次亮相健雄杯的赛场了。机械这边打起了他们擅长的防守反击,利用刘明明精准的长传来威胁对方球门。前10分钟的比赛颇为精彩。第10分钟比赛出现了转折,机械的队员或许是过于紧张在禁区内手球对方射门。裁判径直指向了12码点。点球!作为队内头号点球手,吉球王当然不让地站在了点球点。呼吸,奔跑,冲刺,应声入网!1:0!
+
+
+
+进球后的吉相冰很激动,对于最近脚风一直不顺的他来说,这粒进球犹如强心剂。大三高工取得梦幻开局!不得不提一下机械的中后卫孙一洲,在上半场此后的次赛中,高工占据了场上优势,多次作出威胁射门,孙一洲表现出了犹如拉莫斯一般的状态,拦断抢截,屡屡作出神奇解围。若不是他的精彩表现,比分恐怕早已改变!双方后来再无建树,1:0带入中场。
+
+易边再战。落后的机械球员开始发力,上场大四喜的李睿开始不惜体力奔跑,高工门前一度风声鹤唳!刘明明与李浩更是打出多次精彩2过1配合,只可惜始终难以越过王明轩的十指关。阵型的前压反而给了高工班更多机会,下半场20分钟,陈晨跑出位置向门前送出传中,吉球王敏锐插上,利用速度右脚抢点破门!2:0!吉球王梅开二度!他以实际行动征服了观众,吴院球王美名岂是浪得虚名!这粒进球也直接杀死了比赛,纵使刘明明有个人能力再也难以改写比分。
+
+终场哨声响,大三高工班终于等来了他们期待已久的健雄杯冠军!这是对他们3年来孜孜以求,努力付出的嘉奖。所谓苍天不负有心人,等待了3年,在离开九龙湖之际,他们终于得到了吴院足球的最高荣誉。凭借淘汰赛4粒进球,吉相冰也荣膺2013赛季最佳射手!但是对于他来说,团队的胜利超越一切,此刻他只想与队友们分享这份喜悦。高工队员高举奖杯的一瞬间,现场观众无不动容,这是一个团队的胜利,这是一份付出的胜利!
+
+
+
+
+
+至此,本年度的健雄杯足球赛也就落下了帷幕。在这历时3个月的鏖战中,健雄学子以不一样的方式展示了一样的风采,无论是传统的强队还是大一新军,都给我们以足球美好的享受。无论球技如何,这种班级凝聚,团结向上的精神需要我们带到学习和生活的每一个角落。老兵不死,老兵精神永存;初生牛犊不怕虎,我们需要这样的赛事,我们需要你们的参与!
+
+还在回味那一个个很值得称赞的进球时又不得不告诉自己要再等到另一个秋天。小学作文的时候总喜欢用“光阴荏苒,岁月如梭”来开始自己的长篇大论,估计明年到你们再回想的时候就会发出这样的感慨吧。
+
+尘埃已落定,唯等下一秋。
\ No newline at end of file
diff --git a/assets/css/custom-football-squad.css b/assets/css/custom-football-squad.css
new file mode 100644
index 0000000..8641a3d
--- /dev/null
+++ b/assets/css/custom-football-squad.css
@@ -0,0 +1,213 @@
+.row-game {
+ display: -ms-flex; display: -webkit-flex; display: flex;
+}
+
+.row-game:after {
+ content: "";
+ display: table;
+ clear: both;
+ float: none;
+}
+
+.column {
+ float: left;
+ width: 50%;
+
+ flex: 1;
+}
+
+
+@media all and (max-width: 600px) {
+ .column {
+ float: none;
+ width: 100%;
+ }
+}
+
+/* Clear floats after the columns */
+.row:after {
+ content: "";
+ display: table;
+ clear: both;
+ float: none;
+}
+
+
+.block {
+ float: none;
+ width: 100%;
+
+}
+
+
+.football_field_background {
+ background-image: url("../img/field.png")
+}
+
+.football_field {
+ position: relative;
+}
+
+.player {
+ position: absolute;
+ width: 20%;
+}
+
+.player img {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+ border-radius: 50%;
+ border: 2px solid #cccccc;
+ width: 50%;
+}
+
+.player p {
+ text-align: center;
+ font-size: 14px;
+}
+
+/* GK */
+.player.GK {
+ bottom: 2%;
+ left: 50%;
+ transform: translateX(-50%);
+}
+
+/* Defender */
+.player.LWB {
+ bottom: 35%;
+ left: 5%;
+}
+
+.player.LB {
+ bottom: 20%;
+ left: 8%;
+}
+
+.player.LCB {
+ bottom: 20%;
+ left: 30%;
+}
+
+.player.CB {
+ bottom: 20%;
+ left: 50%;
+ transform: translateX(-50%);
+}
+
+.player.RCB {
+ bottom: 20%;
+ right: 30%;
+}
+
+.player.RB {
+ bottom: 20%;
+ right: 8%;
+}
+
+.player.RWB {
+ bottom: 35%;
+ right: 5%;
+}
+
+/* Defending Midfielder */
+
+.player.LDM {
+ bottom: 35%;
+ left: 30%;
+}
+
+.player.CDM {
+ bottom: 35%;
+ left: 50%;
+ transform: translateX(-50%);
+}
+
+.player.RDM {
+ bottom: 35%;
+ right: 30%;
+}
+
+/* Midfielder */
+
+.player.LM {
+ bottom: 50%;
+ left: 8%;
+}
+
+.player.LCM {
+ bottom: 50%;
+ left: 30%;
+}
+
+.player.CM {
+ bottom: 50%;
+ left: 50%;
+ transform: translateX(-50%);
+}
+
+.player.RCM {
+ bottom: 50%;
+ right: 30%;
+}
+
+.player.RM {
+ bottom: 50%;
+ right: 8%;
+}
+
+/* Wingers, CAM */
+
+.player.LW {
+ bottom: 65%;
+ left: 10%;
+}
+
+.player.CAM {
+ bottom: 65%;
+ left: 50%;
+ transform: translateX(-50%);
+}
+
+.player.RW {
+ bottom: 65%;
+ right: 10%;
+}
+
+/* Strikers */
+
+.player.LS {
+ bottom: 79%;
+ left: 25%;
+}
+
+.player.ST {
+ bottom: 79%;
+ left: 50%;
+ transform: translateX(-50%);
+}
+
+.player.RS {
+ bottom: 79%;
+ right: 25%;
+}
+
+
+/* player list table */
+table {
+ text-align: center;
+}
+table.playerlist img {
+ width: 40px;
+}
+table.playerlist th {
+ padding: 0.3em;
+}
+table.playerlist td {
+ padding: 0.3em;
+}
+
+.team-logo {
+ width: 30px !important;
+}
\ No newline at end of file
diff --git a/assets/css/knockout-bracket.css b/assets/css/knockout-bracket.css
new file mode 100644
index 0000000..4073238
--- /dev/null
+++ b/assets/css/knockout-bracket.css
@@ -0,0 +1,66 @@
+/* p {
+ color: red;
+} */
+
+/*
+ * Flex Layout Specifics
+*/
+.tournament {
+ display:flex;
+ flex-direction:row;
+}
+.tournament .round{
+ display:flex;
+ flex-direction:column;
+ justify-content:center;
+ width:200px;
+ list-style:none;
+ padding:0;
+}
+.tournament .round .spacer{ flex-grow:1; }
+.tournament .round .spacer:first-child,
+.tournament .round .spacer:last-child{ flex-grow:.5; }
+
+.tournament .round .game-spacer{
+ flex-grow:1;
+ }
+
+/*
+ * General Styles
+*/
+/* body{
+ font-family:sans-serif;
+ font-size:small;
+ padding:10px;
+ line-height:1.4em;
+} */
+
+.tournament li.game{
+ padding-left:20px;
+}
+
+.tournament li.game.winner{
+ font-weight:bold;
+ }
+ .tournament li.game span{
+ float:right;
+ margin-right:5px;
+ }
+
+ .tournament li.game-top{ border-bottom:1px solid #aaa; }
+
+ .tournament li.game-spacer{
+ border-right:1px solid #aaa;
+ min-height: 10px;
+ text-align: center;
+ }
+
+ .tournament li.game-spacer-text{
+ border-right:1px solid #aaa;
+ text-align: center;
+ vertical-align: middle;
+ }
+
+ .tournament li.game-bottom{
+ border-top:1px solid #aaa;
+ }
diff --git a/assets/img/610111/hjn.jpg b/assets/img/610111/hjn.jpg
new file mode 100644
index 0000000..48ddbcf
Binary files /dev/null and b/assets/img/610111/hjn.jpg differ
diff --git a/assets/img/610112/dzx.jpg b/assets/img/610112/dzx.jpg
new file mode 100644
index 0000000..cc13958
Binary files /dev/null and b/assets/img/610112/dzx.jpg differ
diff --git a/assets/img/610112/dzx.jpg~ b/assets/img/610112/dzx.jpg~
new file mode 100644
index 0000000..ee8f780
Binary files /dev/null and b/assets/img/610112/dzx.jpg~ differ
diff --git a/assets/img/610112/lc.jpg b/assets/img/610112/lc.jpg
new file mode 100644
index 0000000..e00fcef
Binary files /dev/null and b/assets/img/610112/lc.jpg differ
diff --git a/assets/img/610112/lc.jpg~ b/assets/img/610112/lc.jpg~
new file mode 100644
index 0000000..7f6cad6
Binary files /dev/null and b/assets/img/610112/lc.jpg~ differ
diff --git a/assets/img/610112/zj.jpg b/assets/img/610112/zj.jpg
new file mode 100644
index 0000000..302644e
Binary files /dev/null and b/assets/img/610112/zj.jpg differ
diff --git a/assets/img/611111/hyy.jpg b/assets/img/611111/hyy.jpg
new file mode 100644
index 0000000..95ff2ea
Binary files /dev/null and b/assets/img/611111/hyy.jpg differ
diff --git a/assets/img/611111/jwh.jpg b/assets/img/611111/jwh.jpg
new file mode 100644
index 0000000..28ba41a
Binary files /dev/null and b/assets/img/611111/jwh.jpg differ
diff --git a/assets/img/611111/lyl.jpg b/assets/img/611111/lyl.jpg
new file mode 100644
index 0000000..24277b6
Binary files /dev/null and b/assets/img/611111/lyl.jpg differ
diff --git a/assets/img/611111/xht.jpg b/assets/img/611111/xht.jpg
new file mode 100644
index 0000000..4e97b78
Binary files /dev/null and b/assets/img/611111/xht.jpg differ
diff --git a/assets/img/611111/xy.jpg b/assets/img/611111/xy.jpg
new file mode 100644
index 0000000..9f72e8b
Binary files /dev/null and b/assets/img/611111/xy.jpg differ
diff --git a/assets/img/611111/zl.jpg b/assets/img/611111/zl.jpg
new file mode 100644
index 0000000..c34e20f
Binary files /dev/null and b/assets/img/611111/zl.jpg differ
diff --git a/assets/img/611111/zlf.jpg b/assets/img/611111/zlf.jpg
new file mode 100644
index 0000000..2daebc0
Binary files /dev/null and b/assets/img/611111/zlf.jpg differ
diff --git a/assets/img/611131/gz.jpg b/assets/img/611131/gz.jpg
new file mode 100644
index 0000000..5f9ee19
Binary files /dev/null and b/assets/img/611131/gz.jpg differ
diff --git a/assets/img/611131/lc.jpg b/assets/img/611131/lc.jpg
new file mode 100644
index 0000000..bc308ac
Binary files /dev/null and b/assets/img/611131/lc.jpg differ
diff --git a/assets/img/611131/lh.jpg b/assets/img/611131/lh.jpg
new file mode 100644
index 0000000..204e86e
Binary files /dev/null and b/assets/img/611131/lh.jpg differ
diff --git a/assets/img/611131/lmm.jpg b/assets/img/611131/lmm.jpg
new file mode 100644
index 0000000..e14ae03
Binary files /dev/null and b/assets/img/611131/lmm.jpg differ
diff --git a/assets/img/611131/lr.jpg b/assets/img/611131/lr.jpg
new file mode 100644
index 0000000..a994d3b
Binary files /dev/null and b/assets/img/611131/lr.jpg differ
diff --git a/assets/img/611131/syy.jpg b/assets/img/611131/syy.jpg
new file mode 100644
index 0000000..e24d1cf
Binary files /dev/null and b/assets/img/611131/syy.jpg differ
diff --git a/assets/img/611131/syz.jpg b/assets/img/611131/syz.jpg
new file mode 100644
index 0000000..91f76cb
Binary files /dev/null and b/assets/img/611131/syz.jpg differ
diff --git a/assets/img/611131/team.jpg b/assets/img/611131/team.jpg
new file mode 100644
index 0000000..4a9daa1
Binary files /dev/null and b/assets/img/611131/team.jpg differ
diff --git a/assets/img/611131/yyc.jpg b/assets/img/611131/yyc.jpg
new file mode 100644
index 0000000..5108813
Binary files /dev/null and b/assets/img/611131/yyc.jpg differ
diff --git a/assets/img/613111/cc.jpg b/assets/img/613111/cc.jpg
new file mode 100644
index 0000000..7e5445d
Binary files /dev/null and b/assets/img/613111/cc.jpg differ
diff --git a/assets/img/613111/jxb.jpg b/assets/img/613111/jxb.jpg
new file mode 100644
index 0000000..9b6ee50
Binary files /dev/null and b/assets/img/613111/jxb.jpg differ
diff --git a/assets/img/613111/lnz.jpg b/assets/img/613111/lnz.jpg
new file mode 100644
index 0000000..1d6d9d5
Binary files /dev/null and b/assets/img/613111/lnz.jpg differ
diff --git a/assets/img/613111/logo.png b/assets/img/613111/logo.png
new file mode 100644
index 0000000..0727bad
Binary files /dev/null and b/assets/img/613111/logo.png differ
diff --git a/assets/img/613111/pd.jpg b/assets/img/613111/pd.jpg
new file mode 100644
index 0000000..16c0503
Binary files /dev/null and b/assets/img/613111/pd.jpg differ
diff --git a/assets/img/613111/sb.jpg b/assets/img/613111/sb.jpg
new file mode 100644
index 0000000..ce71ba6
Binary files /dev/null and b/assets/img/613111/sb.jpg differ
diff --git a/assets/img/613111/sc.jpg b/assets/img/613111/sc.jpg
new file mode 100644
index 0000000..257f70a
Binary files /dev/null and b/assets/img/613111/sc.jpg differ
diff --git a/assets/img/613111/ss.jpg b/assets/img/613111/ss.jpg
new file mode 100644
index 0000000..ee84fa1
Binary files /dev/null and b/assets/img/613111/ss.jpg differ
diff --git a/assets/img/613111/team.jpg b/assets/img/613111/team.jpg
new file mode 100644
index 0000000..737409b
Binary files /dev/null and b/assets/img/613111/team.jpg differ
diff --git a/assets/img/613111/wh.jpg b/assets/img/613111/wh.jpg
new file mode 100644
index 0000000..2f4ae4d
Binary files /dev/null and b/assets/img/613111/wh.jpg differ
diff --git a/assets/img/613111/wmx.jpg b/assets/img/613111/wmx.jpg
new file mode 100644
index 0000000..c8d31d2
Binary files /dev/null and b/assets/img/613111/wmx.jpg differ
diff --git a/assets/img/613111/xkc.jpg b/assets/img/613111/xkc.jpg
new file mode 100644
index 0000000..a513b40
Binary files /dev/null and b/assets/img/613111/xkc.jpg differ
diff --git a/assets/img/613111/zwz.jpg b/assets/img/613111/zwz.jpg
new file mode 100644
index 0000000..fbf8c23
Binary files /dev/null and b/assets/img/613111/zwz.jpg differ
diff --git a/assets/img/field.svg b/assets/img/field.svg
new file mode 100644
index 0000000..2dcaf6d
--- /dev/null
+++ b/assets/img/field.svg
@@ -0,0 +1,200 @@
+
+
+
diff --git a/assets/img/games/2011-10-19-1/0.jpg b/assets/img/games/2011-10-19-1/0.jpg
new file mode 100644
index 0000000..0e158e4
Binary files /dev/null and b/assets/img/games/2011-10-19-1/0.jpg differ
diff --git a/assets/img/games/2011-10-19-1/1.jpg b/assets/img/games/2011-10-19-1/1.jpg
new file mode 100644
index 0000000..53b093c
Binary files /dev/null and b/assets/img/games/2011-10-19-1/1.jpg differ
diff --git a/assets/img/games/2011-10-19-1/10.jpg b/assets/img/games/2011-10-19-1/10.jpg
new file mode 100644
index 0000000..cf1a0a9
Binary files /dev/null and b/assets/img/games/2011-10-19-1/10.jpg differ
diff --git a/assets/img/games/2011-10-19-1/11.jpg b/assets/img/games/2011-10-19-1/11.jpg
new file mode 100644
index 0000000..7d477d0
Binary files /dev/null and b/assets/img/games/2011-10-19-1/11.jpg differ
diff --git a/assets/img/games/2011-10-19-1/12.jpg b/assets/img/games/2011-10-19-1/12.jpg
new file mode 100644
index 0000000..b993278
Binary files /dev/null and b/assets/img/games/2011-10-19-1/12.jpg differ
diff --git a/assets/img/games/2011-10-19-1/2.jpg b/assets/img/games/2011-10-19-1/2.jpg
new file mode 100644
index 0000000..44e91c7
Binary files /dev/null and b/assets/img/games/2011-10-19-1/2.jpg differ
diff --git a/assets/img/games/2011-10-19-1/3.jpg b/assets/img/games/2011-10-19-1/3.jpg
new file mode 100644
index 0000000..5611591
Binary files /dev/null and b/assets/img/games/2011-10-19-1/3.jpg differ
diff --git a/assets/img/games/2011-10-19-1/4.jpg b/assets/img/games/2011-10-19-1/4.jpg
new file mode 100644
index 0000000..e79e9ac
Binary files /dev/null and b/assets/img/games/2011-10-19-1/4.jpg differ
diff --git a/assets/img/games/2011-10-19-1/5.jpg b/assets/img/games/2011-10-19-1/5.jpg
new file mode 100644
index 0000000..3f293b1
Binary files /dev/null and b/assets/img/games/2011-10-19-1/5.jpg differ
diff --git a/assets/img/games/2011-10-19-1/6.jpg b/assets/img/games/2011-10-19-1/6.jpg
new file mode 100644
index 0000000..99b8553
Binary files /dev/null and b/assets/img/games/2011-10-19-1/6.jpg differ
diff --git a/assets/img/games/2011-10-19-1/7.jpg b/assets/img/games/2011-10-19-1/7.jpg
new file mode 100644
index 0000000..f3b279e
Binary files /dev/null and b/assets/img/games/2011-10-19-1/7.jpg differ
diff --git a/assets/img/games/2011-10-19-1/8.jpg b/assets/img/games/2011-10-19-1/8.jpg
new file mode 100644
index 0000000..299bf75
Binary files /dev/null and b/assets/img/games/2011-10-19-1/8.jpg differ
diff --git a/assets/img/games/2011-10-19-1/9.jpg b/assets/img/games/2011-10-19-1/9.jpg
new file mode 100644
index 0000000..23144c0
Binary files /dev/null and b/assets/img/games/2011-10-19-1/9.jpg differ
diff --git a/assets/img/games/2011-10-19-1/sc.jpg b/assets/img/games/2011-10-19-1/sc.jpg
new file mode 100644
index 0000000..f4271ca
Binary files /dev/null and b/assets/img/games/2011-10-19-1/sc.jpg differ
diff --git a/assets/img/games/2013-08-27-1/1.jpg b/assets/img/games/2013-08-27-1/1.jpg
new file mode 100644
index 0000000..5e1bf3e
Binary files /dev/null and b/assets/img/games/2013-08-27-1/1.jpg differ
diff --git a/assets/img/games/2013-08-27-1/2.jpg b/assets/img/games/2013-08-27-1/2.jpg
new file mode 100644
index 0000000..a316150
Binary files /dev/null and b/assets/img/games/2013-08-27-1/2.jpg differ
diff --git a/assets/img/games/2013-08-27-1/3.jpg b/assets/img/games/2013-08-27-1/3.jpg
new file mode 100644
index 0000000..c32f7a5
Binary files /dev/null and b/assets/img/games/2013-08-27-1/3.jpg differ
diff --git a/assets/img/games/2013-08-27-1/4.jpg b/assets/img/games/2013-08-27-1/4.jpg
new file mode 100644
index 0000000..6195373
Binary files /dev/null and b/assets/img/games/2013-08-27-1/4.jpg differ
diff --git a/assets/img/games/2013-08-29-1/1.jpg b/assets/img/games/2013-08-29-1/1.jpg
new file mode 100644
index 0000000..7d2f304
Binary files /dev/null and b/assets/img/games/2013-08-29-1/1.jpg differ
diff --git a/assets/img/games/2013-08-29-1/2.jpg b/assets/img/games/2013-08-29-1/2.jpg
new file mode 100644
index 0000000..11ff753
Binary files /dev/null and b/assets/img/games/2013-08-29-1/2.jpg differ
diff --git a/assets/img/games/2013-08-29-1/3.jpg b/assets/img/games/2013-08-29-1/3.jpg
new file mode 100644
index 0000000..6bd3c3d
Binary files /dev/null and b/assets/img/games/2013-08-29-1/3.jpg differ
diff --git a/assets/img/games/2013-08-29-1/4.jpg b/assets/img/games/2013-08-29-1/4.jpg
new file mode 100644
index 0000000..946e70e
Binary files /dev/null and b/assets/img/games/2013-08-29-1/4.jpg differ
diff --git a/assets/img/games/2013-08-31-1/1.jpg b/assets/img/games/2013-08-31-1/1.jpg
new file mode 100644
index 0000000..8fd5df4
Binary files /dev/null and b/assets/img/games/2013-08-31-1/1.jpg differ
diff --git a/assets/img/games/2013-08-31-1/2.jpg b/assets/img/games/2013-08-31-1/2.jpg
new file mode 100644
index 0000000..219ed63
Binary files /dev/null and b/assets/img/games/2013-08-31-1/2.jpg differ
diff --git a/assets/img/games/2013-08-31-1/3.jpg b/assets/img/games/2013-08-31-1/3.jpg
new file mode 100644
index 0000000..1103f20
Binary files /dev/null and b/assets/img/games/2013-08-31-1/3.jpg differ
diff --git a/assets/img/games/2013-08-31-1/4.jpg b/assets/img/games/2013-08-31-1/4.jpg
new file mode 100644
index 0000000..cb68cba
Binary files /dev/null and b/assets/img/games/2013-08-31-1/4.jpg differ
diff --git a/assets/img/games/2013-08-31-1/5.jpg b/assets/img/games/2013-08-31-1/5.jpg
new file mode 100644
index 0000000..3077ebb
Binary files /dev/null and b/assets/img/games/2013-08-31-1/5.jpg differ
diff --git a/assets/img/games/2013-08-31-1/6.jpg b/assets/img/games/2013-08-31-1/6.jpg
new file mode 100644
index 0000000..0ae4bad
Binary files /dev/null and b/assets/img/games/2013-08-31-1/6.jpg differ
diff --git a/assets/img/games/2013-09-01-1/1.jpg b/assets/img/games/2013-09-01-1/1.jpg
new file mode 100644
index 0000000..730a643
Binary files /dev/null and b/assets/img/games/2013-09-01-1/1.jpg differ
diff --git a/assets/img/games/2013-09-01-1/2.jpg b/assets/img/games/2013-09-01-1/2.jpg
new file mode 100644
index 0000000..906b757
Binary files /dev/null and b/assets/img/games/2013-09-01-1/2.jpg differ
diff --git a/assets/img/games/2013-09-01-1/3.jpg b/assets/img/games/2013-09-01-1/3.jpg
new file mode 100644
index 0000000..84f051b
Binary files /dev/null and b/assets/img/games/2013-09-01-1/3.jpg differ
diff --git a/assets/img/games/2013-09-08-1/1.jpg b/assets/img/games/2013-09-08-1/1.jpg
new file mode 100644
index 0000000..9da2fdd
Binary files /dev/null and b/assets/img/games/2013-09-08-1/1.jpg differ
diff --git a/assets/img/games/2013-09-08-1/2.jpg b/assets/img/games/2013-09-08-1/2.jpg
new file mode 100644
index 0000000..0a2de1a
Binary files /dev/null and b/assets/img/games/2013-09-08-1/2.jpg differ
diff --git a/assets/img/games/2013-09-08-1/3.jpg b/assets/img/games/2013-09-08-1/3.jpg
new file mode 100644
index 0000000..8351fd6
Binary files /dev/null and b/assets/img/games/2013-09-08-1/3.jpg differ
diff --git a/assets/img/games/2013-09-08-1/4.jpg b/assets/img/games/2013-09-08-1/4.jpg
new file mode 100644
index 0000000..cc5e3a7
Binary files /dev/null and b/assets/img/games/2013-09-08-1/4.jpg differ
diff --git a/assets/img/games/2013-09-08-1/5.jpg b/assets/img/games/2013-09-08-1/5.jpg
new file mode 100644
index 0000000..9ebdc55
Binary files /dev/null and b/assets/img/games/2013-09-08-1/5.jpg differ
diff --git a/assets/img/games/2013-09-15-1/1.jpg b/assets/img/games/2013-09-15-1/1.jpg
new file mode 100644
index 0000000..df67489
Binary files /dev/null and b/assets/img/games/2013-09-15-1/1.jpg differ
diff --git a/assets/img/games/2013-09-15-1/2.jpg b/assets/img/games/2013-09-15-1/2.jpg
new file mode 100644
index 0000000..a632459
Binary files /dev/null and b/assets/img/games/2013-09-15-1/2.jpg differ
diff --git a/assets/img/games/2013-09-26-1/1.jpg b/assets/img/games/2013-09-26-1/1.jpg
new file mode 100644
index 0000000..2847075
Binary files /dev/null and b/assets/img/games/2013-09-26-1/1.jpg differ
diff --git a/assets/img/games/2013-09-26-1/2.jpg b/assets/img/games/2013-09-26-1/2.jpg
new file mode 100644
index 0000000..2e1ef06
Binary files /dev/null and b/assets/img/games/2013-09-26-1/2.jpg differ
diff --git a/assets/img/games/2013-09-26-1/3.jpg b/assets/img/games/2013-09-26-1/3.jpg
new file mode 100644
index 0000000..29e71bf
Binary files /dev/null and b/assets/img/games/2013-09-26-1/3.jpg differ
diff --git a/assets/img/games/2013-09-26-1/4.jpg b/assets/img/games/2013-09-26-1/4.jpg
new file mode 100644
index 0000000..393f58c
Binary files /dev/null and b/assets/img/games/2013-09-26-1/4.jpg differ
diff --git a/assets/img/games/2013-09-26-1/5.jpg b/assets/img/games/2013-09-26-1/5.jpg
new file mode 100644
index 0000000..0a8ba0f
Binary files /dev/null and b/assets/img/games/2013-09-26-1/5.jpg differ
diff --git a/assets/img/games/2013-09-26-1/6.jpg b/assets/img/games/2013-09-26-1/6.jpg
new file mode 100644
index 0000000..6be4e85
Binary files /dev/null and b/assets/img/games/2013-09-26-1/6.jpg differ
diff --git a/assets/img/games/2013-09-26-2/1.jpg b/assets/img/games/2013-09-26-2/1.jpg
new file mode 100644
index 0000000..aaf31e0
Binary files /dev/null and b/assets/img/games/2013-09-26-2/1.jpg differ
diff --git a/assets/img/games/2013-09-26-2/2.jpg b/assets/img/games/2013-09-26-2/2.jpg
new file mode 100644
index 0000000..3187c6e
Binary files /dev/null and b/assets/img/games/2013-09-26-2/2.jpg differ
diff --git a/assets/img/games/2013-09-26-2/3.jpg b/assets/img/games/2013-09-26-2/3.jpg
new file mode 100644
index 0000000..5895a1e
Binary files /dev/null and b/assets/img/games/2013-09-26-2/3.jpg differ
diff --git a/assets/img/games/2013-11-17-1/1.jpg b/assets/img/games/2013-11-17-1/1.jpg
new file mode 100644
index 0000000..fff5189
Binary files /dev/null and b/assets/img/games/2013-11-17-1/1.jpg differ
diff --git a/assets/img/games/2013-11-17-1/2.jpg b/assets/img/games/2013-11-17-1/2.jpg
new file mode 100644
index 0000000..b4aaede
Binary files /dev/null and b/assets/img/games/2013-11-17-1/2.jpg differ
diff --git a/assets/img/games/2013-11-17-1/3.jpg b/assets/img/games/2013-11-17-1/3.jpg
new file mode 100644
index 0000000..dc41bf9
Binary files /dev/null and b/assets/img/games/2013-11-17-1/3.jpg differ
diff --git a/assets/img/games/2013-11-17-1/4.jpg b/assets/img/games/2013-11-17-1/4.jpg
new file mode 100644
index 0000000..62072ed
Binary files /dev/null and b/assets/img/games/2013-11-17-1/4.jpg differ
diff --git a/assets/img/grass2.png b/assets/img/grass2.png
new file mode 100644
index 0000000..f066196
Binary files /dev/null and b/assets/img/grass2.png differ
diff --git a/assets/img/icon/goal.png b/assets/img/icon/goal.png
new file mode 100644
index 0000000..5c49c8a
Binary files /dev/null and b/assets/img/icon/goal.png differ
diff --git a/assets/img/icon/off.png b/assets/img/icon/off.png
new file mode 100644
index 0000000..2c0c076
Binary files /dev/null and b/assets/img/icon/off.png differ
diff --git a/assets/img/icon/owngoal.png b/assets/img/icon/owngoal.png
new file mode 100644
index 0000000..cb6d8a6
Binary files /dev/null and b/assets/img/icon/owngoal.png differ
diff --git a/assets/img/icon/penalty.png b/assets/img/icon/penalty.png
new file mode 100644
index 0000000..5e83a35
Binary files /dev/null and b/assets/img/icon/penalty.png differ
diff --git a/assets/img/icon/red.png b/assets/img/icon/red.png
new file mode 100644
index 0000000..2588174
Binary files /dev/null and b/assets/img/icon/red.png differ
diff --git a/assets/img/icon/sub.png b/assets/img/icon/sub.png
new file mode 100644
index 0000000..a961586
Binary files /dev/null and b/assets/img/icon/sub.png differ
diff --git a/assets/img/icon/yellow.png b/assets/img/icon/yellow.png
new file mode 100644
index 0000000..cfb859f
Binary files /dev/null and b/assets/img/icon/yellow.png differ
diff --git a/assets/img/mud.png b/assets/img/mud.png
new file mode 100644
index 0000000..76282ba
Binary files /dev/null and b/assets/img/mud.png differ
diff --git a/assets/img/news/2013-11-17/1.jpg b/assets/img/news/2013-11-17/1.jpg
new file mode 100644
index 0000000..a84c57c
Binary files /dev/null and b/assets/img/news/2013-11-17/1.jpg differ
diff --git a/assets/img/news/2013-11-17/2.jpg b/assets/img/news/2013-11-17/2.jpg
new file mode 100644
index 0000000..d917a8a
Binary files /dev/null and b/assets/img/news/2013-11-17/2.jpg differ
diff --git a/assets/img/news/2013-11-17/3.jpg b/assets/img/news/2013-11-17/3.jpg
new file mode 100644
index 0000000..a210f8a
Binary files /dev/null and b/assets/img/news/2013-11-17/3.jpg differ
diff --git a/assets/img/news/2013-11-17/4.jpg b/assets/img/news/2013-11-17/4.jpg
new file mode 100644
index 0000000..737409b
Binary files /dev/null and b/assets/img/news/2013-11-17/4.jpg differ
diff --git a/assets/img/placeholder-club.jpg b/assets/img/placeholder-club.jpg
new file mode 100644
index 0000000..27f0cca
Binary files /dev/null and b/assets/img/placeholder-club.jpg differ
diff --git a/assets/img/placeholder-player.jpg b/assets/img/placeholder-player.jpg
new file mode 100644
index 0000000..893d3d5
Binary files /dev/null and b/assets/img/placeholder-player.jpg differ
diff --git a/docs/EN.md b/docs/EN.md
new file mode 100644
index 0000000..00b31ea
--- /dev/null
+++ b/docs/EN.md
@@ -0,0 +1,211 @@
+# Super Unprofessional League Website Generator
+
+By shrekshao狄学长
+
+[EN](#) | [简体中文](../README.md)
+
+[Demo](https://super-unprofessional-league.github.io/super-unprofessional-league-website/) (in Chinese)
+
+A Jekyll based static site generator for website of a unprofessional league.
+
+
+
+
+
+
+
+Features include:
+* Multiple seasons
+ - League (traditional table, with data auto calculated from game data)
+ - Tournament (group stage table + knockout stage bracket)
+* Game
+ - score
+ - info: date, round, etc.
+ - events
+ - goal
+ - penalty
+ - yellow card
+ - red card
+ - sub
+ - pictures
+ - video embed code
+* Player stats table
+ - goal scorer (goals auto calculated from game data)
+* Team page
+ - Starting and sub player list
+ - Formation of starting squad
+ - Pictures
+* Language translation support
+* News post
+
+
+It is suitable for college and community league since it can be hosted free on a number of place.
+
+## Getting Started (TODO: Refine)
+
+* install [Jekyll](https://jekyllrb.com/docs/) (More basic tutorials follow Jekyll)
+* `bundle install`
+* generate the site by running `bundle exec jekyll serve` during development.
+* build the site by running `bundle exec jekyll build` before publish.
+* init git in `_site` folder, push to the `gh_page` branch on github to host
+ * github cannot automatically built since we use customized jekyll plugin.
+
+
+## Add your data
+
+All league data (matches, squad, etc.) goes under `_data` folder. All static assets (photos, images) better goes under `assets`.
+
+### _data folder structures
+
+* _data
+ - seasons
+ - 2018-2019
+ - config.json (optional, default to League table style)
+ - teams
+ * bayern.json
+ * dortmund.json
+ - games
+ * 2018-11-10-1.json
+
+### Team json file example
+
+```json
+{
+ "key": "dortmund",
+ "display_name": "Borussia Dortmund",
+ "description": "blahblahblah...",
+ "logo": "bvb09.jpg",
+ "table": {
+ "games_played": 20,
+ "wins": 15,
+ "draws": 4,
+ "loses": 1,
+ "goals_for": 51,
+ "goals_against": 20,
+ "points": 49
+ },
+ "players": {
+ "starting": [
+ {
+ "number": 1,
+ "name": "Roman Burki",
+ "img": "placeholder-player.jpg",
+ "position": "GoalKeeper"
+ "goals": 0
+ }
+ ,{
+ "number": 28,
+ "name": "Axel Witsel",
+ "img": "placeholder-player.jpg",
+ "position": "Midfielder"
+ }
+ ,{
+ "number": 11,
+ "name": "Marco Reus",
+ "img": "placeholder-player.jpg",
+ "position": "Forward"
+ }
+ ],
+ "subs": [
+ {
+ "number": 22,
+ "name": "Christian Pulisic",
+ "img": "placeholder-player.jpg",
+ "position": "Midfielder"
+ }
+
+ ]
+ },
+ "squad": {
+ "GK": 1,
+ "CDM": 28,
+ "CF": 11
+ }
+}
+```
+
+* squad position (`GK`, `CM`, etc) abbreviations are correspond to predefined positions in css (take a look to see the full list [here](https://github.com/super-unprofessional-league/super-unprofessional-league-website/blob/master/assets/css/custom-football-squad.css#L70))
+
+### Game json file example
+
+```json
+{
+ "date": "2018/11/10/9:30",
+ "type": "round-11",
+ "home": {
+ "key": "dortmund",
+ "score": 3,
+ "events": [
+ {"type": "yellow", "time": 29, "player": "Weigl"},
+ {"type": "yellow", "time": 36, "player": "Akanji"},
+ {"type": "off", "time": 46, "player": "Weigl"},
+ {"type": "sub", "time": 46, "player": "Dahoud"},
+ {"type": "penalty", "time": 49, "player": "Reus"},
+ {"type": "goal", "time": 67, "player": "Reus"},
+ {"type": "goal", "time": 73, "player": "Paco Alcacer"}
+ ]
+ },
+ "away": {
+ "key": "bayern",
+ "score": 2,
+ "events": [
+ {"type": "goal", "time": 26, "player": "Lewandowski"},
+ {"type": "goal", "time": 52, "player": "Lewandowski"},
+ {"type": "yellow", "time": 55, "player": "Ribery"}
+ ]
+ }
+}
+```
+
+### config.json 联赛设置
+
+```json
+{
+ "display_name": "2013",
+ "type": "group + knockout",
+ "group_stage": {
+ "A": [
+ "613111",
+ "610122",
+ "610121",
+ "610111"
+ ],
+ "B": [
+ "611111",
+ "613121",
+ "610113",
+ "610112"
+ ]
+ },
+ "knockout_stage": [
+ [
+ ["610131", "610111", "2013-10-21-1"],
+
+ ["613111", "610112", "2013-10-20-1"],
+
+ ["613131", "611131", ""],
+
+ ["610132", "611111", "2013-10-15-1"]
+ ],
+ [
+ ["610111", "613111", "2013-11-14-1"],
+
+ ["611131", "610132", "2013-11-15-1"]
+ ],
+ [
+ ["613111","611131", "2013-11-17-1"]
+ ]
+ ],
+ "winner": "613111",
+ "rules": "*hahahah\n*hahha"
+}
+```
+
+* Season defaults to League type if this file doesn't exist
+* `type`
+ - `league`
+ - `group + knockout`
+* if `type = "group + knockout"`
+ * `group_stage` is `group name` => `team file name (without ext)`
+ * `knockout_stage` element length is power of 2,... 16, 8, 4, 2, 1
+ * `["home team file name (without ext)", "away team file name (without ext)", "game file name (without ext)"]`
\ No newline at end of file
diff --git a/docs/game-page.png b/docs/game-page.png
new file mode 100644
index 0000000..66d39d5
Binary files /dev/null and b/docs/game-page.png differ
diff --git a/docs/team-page.png b/docs/team-page.png
new file mode 100644
index 0000000..6734589
Binary files /dev/null and b/docs/team-page.png differ
diff --git a/docs/tournament-page.png b/docs/tournament-page.png
new file mode 100644
index 0000000..b893610
Binary files /dev/null and b/docs/tournament-page.png differ
diff --git a/favicon.png b/favicon.png
new file mode 100644
index 0000000..66ff504
Binary files /dev/null and b/favicon.png differ
diff --git a/index.md b/index.md
new file mode 100644
index 0000000..ce738f1
--- /dev/null
+++ b/index.md
@@ -0,0 +1,7 @@
+---
+# Feel free to add content and custom Front Matter to this file.
+# To modify the layout, see https://jekyllrb.com/docs/themes/#overriding-theme-defaults
+
+layout: home
+list_title: posts_title
+---