Now we can again deploy it with moden Jekyll and restore lorchess.ru archive.master
@@ -1,3 +0,0 @@ | |||
For information about action hooks supported by OpenShift, consult the documentation: | |||
http://openshift.github.io/documentation/oo_user_guide.html#the-openshift-directory |
@@ -1,12 +0,0 @@ | |||
#!/bin/bash | |||
# This is a simple build script and will be executed on your CI system if | |||
# available. Otherwise it will execute while your application is stopped | |||
# before the deploy step. This script gets executed directly, so it | |||
# could be python, php, ruby, etc. | |||
cd $OPENSHIFT_REPO_DIR | |||
# Fix the problem of jekyll-press with non-English language | |||
export LANG=ru_RU.UTF-8 | |||
bundle exec jekyll build |
@@ -1,23 +0,0 @@ | |||
Run scripts or jobs on a periodic basis | |||
======================================= | |||
Any scripts or jobs added to the minutely, hourly, daily, weekly or monthly | |||
directories will be run on a scheduled basis (frequency is as indicated by the | |||
name of the directory) using run-parts. | |||
run-parts ignores any files that are hidden or dotfiles (.*) or backup | |||
files (*~ or *,) or named *.{rpmsave,rpmorig,rpmnew,swp,cfsaved} | |||
The presence of two specially named files jobs.deny and jobs.allow controls | |||
how run-parts executes your scripts/jobs. | |||
jobs.deny ===> Prevents specific scripts or jobs from being executed. | |||
jobs.allow ===> Only execute the named scripts or jobs (all other/non-named | |||
scripts that exist in this directory are ignored). | |||
The principles of jobs.deny and jobs.allow are the same as those of cron.deny | |||
and cron.allow and are described in detail at: | |||
http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/ch-Automating_System_Tasks.html#s2-autotasks-cron-access | |||
See: man crontab or above link for more details and see the the weekly/ | |||
directory for an example. | |||
PLEASE NOTE: The Cron cartridge must be installed in order to run the configured jobs. |
@@ -1,16 +0,0 @@ | |||
Run scripts or jobs on a weekly basis | |||
===================================== | |||
Any scripts or jobs added to this directory will be run on a scheduled basis | |||
(weekly) using run-parts. | |||
run-parts ignores any files that are hidden or dotfiles (.*) or backup | |||
files (*~ or *,) or named *.{rpmsave,rpmorig,rpmnew,swp,cfsaved} and handles | |||
the files named jobs.deny and jobs.allow specially. | |||
In this specific example, the chronograph script is the only script or job file | |||
executed on a weekly basis (due to white-listing it in jobs.allow). And the | |||
README and chrono.dat file are ignored either as a result of being black-listed | |||
in jobs.deny or because they are NOT white-listed in the jobs.allow file. | |||
For more details, please see ../README.cron file. | |||
@@ -1 +0,0 @@ | |||
Time And Relative D...n In Execution (Open)Shift! |
@@ -1,3 +0,0 @@ | |||
#!/bin/bash | |||
echo "`date`: `cat $(dirname \"$0\")/chrono.dat`" |
@@ -1,12 +0,0 @@ | |||
# | |||
# Script or job files listed in here (one entry per line) will be | |||
# executed on a weekly-basis. | |||
# | |||
# Example: The chronograph script will be executed weekly but the README | |||
# and chrono.dat files in this directory will be ignored. | |||
# | |||
# The README file is actually ignored due to the entry in the | |||
# jobs.deny which is checked before jobs.allow (this file). | |||
# | |||
chronograph | |||
@@ -1,7 +0,0 @@ | |||
# | |||
# Any script or job files listed in here (one entry per line) will NOT be | |||
# executed (read as ignored by run-parts). | |||
# | |||
README | |||
@@ -1,9 +1,9 @@ | |||
source 'https://rubygems.org' | |||
gem 'jekyll', '~> 2.5' | |||
gem 'jekyll', '3.8.4' | |||
gem 'therubyracer' | |||
gem 'i18n' | |||
gem 'jekyll-press' | |||
gem "jekyll-assets", group: :jekyll_plugins | |||
group :development do | |||
# Automatically reload your browser when 'view' files are modified |
@@ -1,123 +1,127 @@ | |||
GEM | |||
remote: https://rubygems.org/ | |||
specs: | |||
blankslate (2.1.2.4) | |||
classifier-reborn (2.0.3) | |||
fast-stemmer (~> 1.0) | |||
coderay (1.1.0) | |||
coffee-script (2.4.1) | |||
coffee-script-source | |||
execjs | |||
coffee-script-source (1.9.1.1) | |||
colorator (0.1) | |||
css_press (0.3.2) | |||
csspool-st (= 3.1.2) | |||
json | |||
csspool-st (3.1.2) | |||
activesupport (5.2.1) | |||
concurrent-ruby (~> 1.0, >= 1.0.2) | |||
i18n (>= 0.7, < 2) | |||
minitest (~> 5.1) | |||
tzinfo (~> 1.1) | |||
addressable (2.5.2) | |||
public_suffix (>= 2.0.2, < 4.0) | |||
coderay (1.1.2) | |||
colorator (1.1.0) | |||
concurrent-ruby (1.0.5) | |||
em-websocket (0.5.1) | |||
eventmachine (>= 0.12.9) | |||
http_parser.rb (~> 0.6.0) | |||
eventmachine (1.0.8) | |||
execjs (2.6.0) | |||
fast-stemmer (1.0.2) | |||
ffi (1.9.10) | |||
eventmachine (1.2.7) | |||
execjs (2.7.0) | |||
extras (0.3.0) | |||
forwardable-extended (~> 2.5) | |||
fastimage (2.1.4) | |||
ffi (1.9.25) | |||
formatador (0.2.5) | |||
guard (2.13.0) | |||
forwardable-extended (2.6.0) | |||
guard (2.14.2) | |||
formatador (>= 0.2.4) | |||
listen (>= 2.7, <= 4.0) | |||
lumberjack (~> 1.0) | |||
listen (>= 2.7, < 4.0) | |||
lumberjack (>= 1.0.12, < 2.0) | |||
nenv (~> 0.1) | |||
notiffany (~> 0.0) | |||
pry (>= 0.9.12) | |||
shellany (~> 0.0) | |||
thor (>= 0.18.1) | |||
guard-livereload (2.4.0) | |||
guard-compat (1.2.1) | |||
guard-livereload (2.5.2) | |||
em-websocket (~> 0.5) | |||
guard (~> 2.8) | |||
guard-compat (~> 1.0) | |||
multi_json (~> 1.8) | |||
html_press (0.8.2) | |||
htmlentities | |||
multi_css (>= 0.1.0) | |||
multi_js (>= 0.1.0) | |||
htmlentities (4.3.4) | |||
http_parser.rb (0.6.0) | |||
i18n (0.7.0) | |||
jekyll (2.5.3) | |||
classifier-reborn (~> 2.0) | |||
colorator (~> 0.1) | |||
jekyll-coffeescript (~> 1.0) | |||
jekyll-gist (~> 1.0) | |||
jekyll-paginate (~> 1.0) | |||
i18n (0.9.5) | |||
concurrent-ruby (~> 1.0) | |||
jekyll (3.8.4) | |||
addressable (~> 2.4) | |||
colorator (~> 1.0) | |||
em-websocket (~> 0.5) | |||
i18n (~> 0.7) | |||
jekyll-sass-converter (~> 1.0) | |||
jekyll-watch (~> 1.1) | |||
kramdown (~> 1.3) | |||
liquid (~> 2.6.1) | |||
jekyll-watch (~> 2.0) | |||
kramdown (~> 1.14) | |||
liquid (~> 4.0) | |||
mercenary (~> 0.3.3) | |||
pygments.rb (~> 0.6.0) | |||
redcarpet (~> 3.1) | |||
pathutil (~> 0.9) | |||
rouge (>= 1.7, < 4) | |||
safe_yaml (~> 1.0) | |||
toml (~> 0.1.0) | |||
jekyll-coffeescript (1.0.1) | |||
coffee-script (~> 2.2) | |||
jekyll-gist (1.3.4) | |||
jekyll-paginate (1.1.0) | |||
jekyll-press (0.2.1) | |||
html_press (>= 0.8.2) | |||
jekyll | |||
multi_css (>= 0.1.0) | |||
multi_js (>= 0.1.0) | |||
jekyll-sass-converter (1.3.0) | |||
sass (~> 3.2) | |||
jekyll-watch (1.3.0) | |||
jekyll-assets (3.0.11) | |||
activesupport (~> 5.0) | |||
execjs (~> 2.7) | |||
extras (~> 0.2) | |||
fastimage (~> 2.0, >= 1.8) | |||
jekyll (>= 3.5, < 4.0) | |||
jekyll-sanity (~> 1.2) | |||
liquid-tag-parser (~> 1.0) | |||
nokogiri (~> 1.8) | |||
pathutil (~> 0.16) | |||
sprockets (>= 3.3, < 4.1.beta) | |||
jekyll-sanity (1.2.0) | |||
jekyll (~> 3.1) | |||
jekyll-sass-converter (1.5.2) | |||
sass (~> 3.4) | |||
jekyll-watch (2.1.2) | |||
listen (~> 3.0) | |||
json (1.8.3) | |||
kramdown (1.9.0) | |||
libv8 (3.16.14.11) | |||
liquid (2.6.3) | |||
listen (3.0.3) | |||
rb-fsevent (>= 0.9.3) | |||
rb-inotify (>= 0.9) | |||
lumberjack (1.0.9) | |||
mercenary (0.3.5) | |||
method_source (0.8.2) | |||
multi_css (0.1.0) | |||
css_press | |||
multi_js (0.1.0) | |||
uglifier (~> 2) | |||
multi_json (1.11.2) | |||
nenv (0.2.0) | |||
notiffany (0.0.8) | |||
kramdown (1.17.0) | |||
libv8 (3.16.14.19) | |||
liquid (4.0.1) | |||
liquid-tag-parser (1.9.0) | |||
extras (~> 0.3) | |||
liquid (>= 3.0, < 5.0) | |||
listen (3.1.5) | |||
rb-fsevent (~> 0.9, >= 0.9.4) | |||
rb-inotify (~> 0.9, >= 0.9.7) | |||
ruby_dep (~> 1.2) | |||
lumberjack (1.0.13) | |||
mercenary (0.3.6) | |||
method_source (0.9.0) | |||
mini_portile2 (2.3.0) | |||
minitest (5.11.3) | |||
multi_json (1.13.1) | |||
nenv (0.3.0) | |||
nokogiri (1.8.5) | |||
mini_portile2 (~> 2.3.0) | |||
notiffany (0.1.1) | |||
nenv (~> 0.1) | |||
shellany (~> 0.0) | |||
parslet (1.5.0) | |||
blankslate (~> 2.0) | |||
posix-spawn (0.3.11) | |||
pry (0.10.2) | |||
pathutil (0.16.1) | |||
forwardable-extended (~> 2.6) | |||
pry (0.11.3) | |||
coderay (~> 1.1.0) | |||
method_source (~> 0.8.1) | |||
slop (~> 3.4) | |||
pygments.rb (0.6.3) | |||
posix-spawn (~> 0.3.6) | |||
yajl-ruby (~> 1.2.0) | |||
rb-fsevent (0.9.6) | |||
rb-inotify (0.9.5) | |||
ffi (>= 0.5.0) | |||
redcarpet (3.3.3) | |||
method_source (~> 0.9.0) | |||
public_suffix (3.0.3) | |||
rack (2.0.5) | |||
rb-fsevent (0.10.3) | |||
rb-inotify (0.9.10) | |||
ffi (>= 0.5.0, < 2) | |||
ref (2.0.0) | |||
rouge (3.3.0) | |||
ruby_dep (1.5.0) | |||
safe_yaml (1.0.4) | |||
sass (3.4.18) | |||
sass (3.6.0) | |||
sass-listen (~> 4.0.0) | |||
sass-listen (4.0.0) | |||
rb-fsevent (~> 0.9, >= 0.9.4) | |||
rb-inotify (~> 0.9, >= 0.9.7) | |||
shellany (0.0.1) | |||
slop (3.6.0) | |||
therubyracer (0.12.2) | |||
libv8 (~> 3.16.14.0) | |||
sprockets (3.7.2) | |||
concurrent-ruby (~> 1.0) | |||
rack (> 1, < 3) | |||
therubyracer (0.12.3) | |||
libv8 (~> 3.16.14.15) | |||
ref | |||
thor (0.19.1) | |||
toml (0.1.2) | |||
parslet (~> 1.5.0) | |||
uglifier (2.7.2) | |||
execjs (>= 0.3.0) | |||
json (>= 1.8.0) | |||
yajl-ruby (1.2.1) | |||
thor (0.20.0) | |||
thread_safe (0.3.6) | |||
tzinfo (1.2.5) | |||
thread_safe (~> 0.1) | |||
PLATFORMS | |||
ruby | |||
@@ -125,6 +129,9 @@ PLATFORMS | |||
DEPENDENCIES | |||
guard-livereload | |||
i18n | |||
jekyll (~> 2.5) | |||
jekyll-press | |||
jekyll (= 3.8.4) | |||
jekyll-assets | |||
therubyracer | |||
BUNDLED WITH | |||
1.16.2 |
@@ -5,7 +5,7 @@ permalink: pretty | |||
destination: public | |||
exclude: ['assets/vendor', 'Gemfile*', 'Guardfile', 'README*', 'vendor'] | |||
keep_files: ['.gitkeep'] | |||
gems: ['jekyll-press'] | |||
plugins: ['jekyll-assets'] | |||
encoding: UTF-8 | |||
@@ -18,9 +18,3 @@ collections: | |||
sass: | |||
style: :compressed | |||
# | |||
# jekyll-press | |||
# | |||
jekyll-press: | |||
exclude: ['.htaccess', 'robots.txt'] |
@@ -32,12 +32,12 @@ | |||
<!-- Bootstrap core JavaScript | |||
================================================== --> | |||
<!-- Placed at the end of the document so the pages load faster --> | |||
<script src="https://code.jquery.com/jquery-1.10.2.min.js"></script> | |||
<script src="https://code.jquery.com/jquery-1.10.2.js"></script> | |||
<script src="/assets/js/bootstrap.min.js"></script> | |||
<script src="/assets/js/holder.js"></script> | |||
<!-- Tablesorter jQuery plugin --> | |||
<script src="/assets/js/jquery.tablesorter.min.js"></script> | |||
<script src="/assets/js/jquery.tablesorter.js"></script> | |||
<script src="/assets/js/jquery.metadata.js"></script> | |||
<script src="/assets/js/jquery.mousewheel.min.js"></script> | |||
@@ -43,7 +43,7 @@ module Jekyll | |||
@trn_hash = Hash[ path.zip(trn) ] | |||
# Creates review entries | |||
site.posts.reverse_each do |post| | |||
site.posts.docs.reverse_each do |post| | |||
review_entry(site, post) unless post.data['pgn'].nil? | |||
end | |||
end | |||
@@ -52,7 +52,7 @@ module Jekyll | |||
def review_entry(site, post) | |||
# Adds the link to post | |||
@buffer += "\n<p class=\"lead\" style=\"margin-bottom:0\">" | |||
@buffer += "<a href=\"#{site.baseurl}#{post.url}\">#{post.title}</a>" | |||
@buffer += "<a href=\"#{site.baseurl}#{post.url}\">#{post.data["title"]}</a>" | |||
@buffer += "</p>\n" | |||
@buffer += "<dl class=\"dl-horizontal\">\n" |
@@ -1 +0,0 @@ | |||
../vendor/bootstrap/docs/dist/css/bootstrap.min.css |
@@ -1 +0,0 @@ | |||
../vendor/tablesorter/css/theme.blue.css |
@@ -0,0 +1,217 @@ | |||
/************* | |||
Blue Theme | |||
*************/ | |||
/* overall */ | |||
.tablesorter-blue { | |||
width: 100%; | |||
background-color: #fff; | |||
margin: 10px 0 15px; | |||
text-align: left; | |||
border-spacing: 0; | |||
border: #cdcdcd 1px solid; | |||
border-width: 1px 0 0 1px; | |||
} | |||
.tablesorter-blue th, | |||
.tablesorter-blue td { | |||
border: #cdcdcd 1px solid; | |||
border-width: 0 1px 1px 0; | |||
} | |||
/* header */ | |||
.tablesorter-blue th, | |||
.tablesorter-blue thead td { | |||
font: bold 12px/18px Arial, Sans-serif; | |||
color: #000; | |||
background-color: #99bfe6; | |||
border-collapse: collapse; | |||
padding: 4px; | |||
text-shadow: 0 1px 0 rgba(204, 204, 204, 0.7); | |||
} | |||
.tablesorter-blue tbody td, | |||
.tablesorter-blue tfoot th, | |||
.tablesorter-blue tfoot td { | |||
padding: 4px; | |||
vertical-align: top; | |||
} | |||
.tablesorter-blue .header, | |||
.tablesorter-blue .tablesorter-header { | |||
/* black (unsorted) double arrow */ | |||
background-image: url(data:image/gif;base64,R0lGODlhFQAJAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAkAAAIXjI+AywnaYnhUMoqt3gZXPmVg94yJVQAAOw==); | |||
/* white (unsorted) double arrow */ | |||
/* background-image: url(data:image/gif;base64,R0lGODlhFQAJAIAAAP///////yH5BAEAAAEALAAAAAAVAAkAAAIXjI+AywnaYnhUMoqt3gZXPmVg94yJVQAAOw==); */ | |||
/* image */ | |||
/* background-image: url(images/black-unsorted.gif); */ | |||
background-repeat: no-repeat; | |||
background-position: center right; | |||
padding: 4px 18px 4px 4px; | |||
white-space: normal; | |||
cursor: pointer; | |||
} | |||
.tablesorter-blue .headerSortUp, | |||
.tablesorter-blue .tablesorter-headerSortUp, | |||
.tablesorter-blue .tablesorter-headerAsc { | |||
background-color: #9fbfdf; | |||
/* black asc arrow */ | |||
background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7); | |||
/* white asc arrow */ | |||
/* background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7); */ | |||
/* image */ | |||
/* background-image: url(images/black-asc.gif); */ | |||
} | |||
.tablesorter-blue .headerSortDown, | |||
.tablesorter-blue .tablesorter-headerSortDown, | |||
.tablesorter-blue .tablesorter-headerDesc { | |||
background-color: #8cb3d9; | |||
/* black desc arrow */ | |||
background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7); | |||
/* white desc arrow */ | |||
/* background-image: url(data:image/gif;base64,R0lGODlhFQAEAIAAAP///////yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7); */ | |||
/* image */ | |||
/* background-image: url(images/black-desc.gif); */ | |||
} | |||
.tablesorter-blue thead .sorter-false { | |||
background-image: none; | |||
cursor: default; | |||
padding: 4px; | |||
} | |||
/* tfoot */ | |||
.tablesorter-blue tfoot .tablesorter-headerSortUp, | |||
.tablesorter-blue tfoot .tablesorter-headerSortDown, | |||
.tablesorter-blue tfoot .tablesorter-headerAsc, | |||
.tablesorter-blue tfoot .tablesorter-headerDesc { | |||
/* remove sort arrows from footer */ | |||
background-image: none; | |||
} | |||
/* tbody */ | |||
.tablesorter-blue td { | |||
color: #3d3d3d; | |||
background-color: #fff; | |||
padding: 4px; | |||
vertical-align: top; | |||
} | |||
/* hovered row colors | |||
you'll need to add additional lines for | |||
rows with more than 2 child rows | |||
*/ | |||
.tablesorter-blue tbody > tr:hover > td, | |||
.tablesorter-blue tbody > tr:hover + tr.tablesorter-childRow > td, | |||
.tablesorter-blue tbody > tr:hover + tr.tablesorter-childRow + tr.tablesorter-childRow > td, | |||
.tablesorter-blue tbody > tr.even:hover > td, | |||
.tablesorter-blue tbody > tr.even:hover + tr.tablesorter-childRow > td, | |||
.tablesorter-blue tbody > tr.even:hover + tr.tablesorter-childRow + tr.tablesorter-childRow > td { | |||
background: #d9d9d9; | |||
} | |||
.tablesorter-blue tbody > tr.odd:hover > td, | |||
.tablesorter-blue tbody > tr.odd:hover + tr.tablesorter-childRow > td, | |||
.tablesorter-blue tbody > tr.odd:hover + tr.tablesorter-childRow + tr.tablesorter-childRow > td { | |||
background: #bfbfbf; | |||
} | |||
/* table processing indicator */ | |||
.tablesorter-blue .tablesorter-processing { | |||
background-position: center center !important; | |||
background-repeat: no-repeat !important; | |||
/* background-image: url(../addons/pager/icons/loading.gif) !important; */ | |||
background-image: url('data:image/gif;base64,R0lGODlhFAAUAKEAAO7u7lpaWgAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQBCgACACwAAAAAFAAUAAACQZRvoIDtu1wLQUAlqKTVxqwhXIiBnDg6Y4eyx4lKW5XK7wrLeK3vbq8J2W4T4e1nMhpWrZCTt3xKZ8kgsggdJmUFACH5BAEKAAIALAcAAAALAAcAAAIUVB6ii7jajgCAuUmtovxtXnmdUAAAIfkEAQoAAgAsDQACAAcACwAAAhRUIpmHy/3gUVQAQO9NetuugCFWAAAh+QQBCgACACwNAAcABwALAAACE5QVcZjKbVo6ck2AF95m5/6BSwEAIfkEAQoAAgAsBwANAAsABwAAAhOUH3kr6QaAcSrGWe1VQl+mMUIBACH5BAEKAAIALAIADQALAAcAAAIUlICmh7ncTAgqijkruDiv7n2YUAAAIfkEAQoAAgAsAAAHAAcACwAAAhQUIGmHyedehIoqFXLKfPOAaZdWAAAh+QQFCgACACwAAAIABwALAAACFJQFcJiXb15zLYRl7cla8OtlGGgUADs=') !important; | |||
} | |||
/* Zebra Widget - row alternating colors */ | |||
.tablesorter-blue tbody tr.odd td { | |||
background-color: #ebf2fa; | |||
} | |||
.tablesorter-blue tbody tr.even td { | |||
background-color: #fff; | |||
} | |||
/* Column Widget - column sort colors */ | |||
.tablesorter-blue td.primary, | |||
.tablesorter-blue tr.odd td.primary { | |||
background-color: #99b3e6; | |||
} | |||
.tablesorter-blue tr.even td.primary { | |||
background-color: #c2d1f0; | |||
} | |||
.tablesorter-blue td.secondary, | |||
.tablesorter-blue tr.odd td.secondary { | |||
background-color: #c2d1f0; | |||
} | |||
.tablesorter-blue tr.even td.secondary { | |||
background-color: #d6e0f5; | |||
} | |||
.tablesorter-blue td.tertiary, | |||
.tablesorter-blue tr.odd td.tertiary { | |||
background-color: #d6e0f5; | |||
} | |||
.tablesorter-blue tr.even td.tertiary { | |||
background-color: #ebf0fa; | |||
} | |||
/* caption */ | |||
caption { | |||
background: #fff; | |||
} | |||
/* filter widget */ | |||
.tablesorter-blue .tablesorter-filter-row td { | |||
background: #eee; | |||
line-height: normal; | |||
text-align: center; /* center the input */ | |||
-webkit-transition: line-height 0.1s ease; | |||
-moz-transition: line-height 0.1s ease; | |||
-o-transition: line-height 0.1s ease; | |||
transition: line-height 0.1s ease; | |||
} | |||
/* optional disabled input styling */ | |||
.tablesorter-blue .tablesorter-filter-row .disabled { | |||
opacity: 0.5; | |||
filter: alpha(opacity=50); | |||
cursor: not-allowed; | |||
} | |||
/* hidden filter row */ | |||
.tablesorter-blue .tablesorter-filter-row.hideme td { | |||
/*** *********************************************** ***/ | |||
/*** change this padding to modify the thickness ***/ | |||
/*** of the closed filter row (height = padding x 2) ***/ | |||
padding: 2px; | |||
/*** *********************************************** ***/ | |||
margin: 0; | |||
line-height: 0; | |||
cursor: pointer; | |||
} | |||
.tablesorter-blue .tablesorter-filter-row.hideme .tablesorter-filter { | |||
height: 1px; | |||
min-height: 0; | |||
border: 0; | |||
padding: 0; | |||
margin: 0; | |||
/* don't use visibility: hidden because it disables tabbing */ | |||
opacity: 0; | |||
filter: alpha(opacity=0); | |||
} | |||
/* filters */ | |||
.tablesorter-blue .tablesorter-filter { | |||
width: 98%; | |||
height: auto; | |||
margin: 0; | |||
padding: 4px; | |||
background-color: #fff; | |||
border: 1px solid #bbb; | |||
color: #333; | |||
-webkit-box-sizing: border-box; | |||
-moz-box-sizing: border-box; | |||
box-sizing: border-box; | |||
-webkit-transition: height 0.1s ease; | |||
-moz-transition: height 0.1s ease; | |||
-o-transition: height 0.1s ease; | |||
transition: height 0.1s ease; | |||
} | |||
/* ajax error row */ | |||
.tablesorter .tablesorter-errorRow td { | |||
text-align: center; | |||
cursor: pointer; | |||
background-color: #e6bf99; | |||
} |
@@ -1 +0,0 @@ | |||
../vendor/bootstrap/dist/js/bootstrap.min.js |
@@ -1 +0,0 @@ | |||
../vendor/bootstrap/docs/assets/js/vendor/holder.js |
@@ -0,0 +1,648 @@ | |||
/*! | |||
Holder - 2.3.1 - client side image placeholders | |||
(c) 2012-2014 Ivan Malopinsky / http://imsky.co | |||
Provided under the MIT License. | |||
Commercial use requires attribution. | |||
*/ | |||
var Holder = Holder || {}; | |||
(function (app, win) { | |||
var system_config = { | |||
use_svg: false, | |||
use_canvas: false, | |||
use_fallback: false | |||
}; | |||
var instance_config = {}; | |||
var preempted = false; | |||
canvas = document.createElement('canvas'); | |||
var dpr = 1, bsr = 1; | |||
var resizable_images = []; | |||
if (!canvas.getContext) { | |||
system_config.use_fallback = true; | |||
} else { | |||
if (canvas.toDataURL("image/png") | |||
.indexOf("data:image/png") < 0) { | |||
//Android doesn't support data URI | |||
system_config.use_fallback = true; | |||
} else { | |||
var ctx = canvas.getContext("2d"); | |||
} | |||
} | |||
if(!!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect){ | |||
system_config.use_svg = true; | |||
system_config.use_canvas = false; | |||
} | |||
if(!system_config.use_fallback){ | |||
dpr = window.devicePixelRatio || 1, | |||
bsr = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1; | |||
} | |||
var ratio = dpr / bsr; | |||
var settings = { | |||
domain: "holder.js", | |||
images: "img", | |||
bgnodes: ".holderjs", | |||
themes: { | |||
"gray": { | |||
background: "#eee", | |||
foreground: "#aaa", | |||
size: 12 | |||
}, | |||
"social": { | |||
background: "#3a5a97", | |||
foreground: "#fff", | |||
size: 12 | |||
}, | |||
"industrial": { | |||
background: "#434A52", | |||
foreground: "#C2F200", | |||
size: 12 | |||
}, | |||
"sky": { | |||
background: "#0D8FDB", | |||
foreground: "#fff", | |||
size: 12 | |||
}, | |||
"vine": { | |||
background: "#39DBAC", | |||
foreground: "#1E292C", | |||
size: 12 | |||
}, | |||
"lava": { | |||
background: "#F8591A", | |||
foreground: "#1C2846", | |||
size: 12 | |||
} | |||
}, | |||
stylesheet: "" | |||
}; | |||
app.flags = { | |||
dimensions: { | |||
regex: /^(\d+)x(\d+)$/, | |||
output: function (val) { | |||
var exec = this.regex.exec(val); | |||
return { | |||
width: +exec[1], | |||
height: +exec[2] | |||
} | |||
} | |||
}, | |||
fluid: { | |||
regex: /^([0-9%]+)x([0-9%]+)$/, | |||
output: function (val) { | |||
var exec = this.regex.exec(val); | |||
return { | |||
width: exec[1], | |||
height: exec[2] | |||
} | |||
} | |||
}, | |||
colors: { | |||
regex: /#([0-9a-f]{3,})\:#([0-9a-f]{3,})/i, | |||
output: function (val) { | |||
var exec = this.regex.exec(val); | |||
return { | |||
size: settings.themes.gray.size, | |||
foreground: "#" + exec[2], | |||
background: "#" + exec[1] | |||
} | |||
} | |||
}, | |||
text: { | |||
regex: /text\:(.*)/, | |||
output: function (val) { | |||
return this.regex.exec(val)[1]; | |||
} | |||
}, | |||
font: { | |||
regex: /font\:(.*)/, | |||
output: function (val) { | |||
return this.regex.exec(val)[1]; | |||
} | |||
}, | |||
auto: { | |||
regex: /^auto$/ | |||
}, | |||
textmode: { | |||
regex: /textmode\:(.*)/, | |||
output: function(val){ | |||
return this.regex.exec(val)[1]; | |||
} | |||
} | |||
} | |||
function text_size(width, height, template) { | |||
height = parseInt(height, 10); | |||
width = parseInt(width, 10); | |||
var bigSide = Math.max(height, width) | |||
var smallSide = Math.min(height, width) | |||
var scale = 1 / 12; | |||
var newHeight = Math.min(smallSide * 0.75, 0.75 * bigSide * scale); | |||
return { | |||
height: Math.round(Math.max(template.size, newHeight)) | |||
} | |||
} | |||
var svg_el = (function(){ | |||
//Prevent IE <9 from initializing SVG renderer | |||
if(!window.XMLSerializer) return; | |||
var serializer = new XMLSerializer(); | |||
var svg_ns = "http://www.w3.org/2000/svg" | |||
var svg = document.createElementNS(svg_ns, "svg"); | |||
//IE throws an exception if this is set and Chrome requires it to be set | |||
if(svg.webkitMatchesSelector){ | |||
svg.setAttribute("xmlns", "http://www.w3.org/2000/svg") | |||
} | |||
var bg_el = document.createElementNS(svg_ns, "rect") | |||
var text_el = document.createElementNS(svg_ns, "text") | |||
var textnode_el = document.createTextNode(null) | |||
text_el.setAttribute("text-anchor", "middle") | |||
text_el.appendChild(textnode_el) | |||
svg.appendChild(bg_el) | |||
svg.appendChild(text_el) | |||
return function(props){ | |||
svg.setAttribute("width",props.width); | |||
svg.setAttribute("height", props.height); | |||
bg_el.setAttribute("width", props.width); | |||
bg_el.setAttribute("height", props.height); | |||
bg_el.setAttribute("fill", props.template.background); | |||
text_el.setAttribute("x", props.width/2) | |||
text_el.setAttribute("y", props.height/2) | |||
textnode_el.nodeValue=props.text | |||
text_el.setAttribute("style", css_properties({ | |||
"fill": props.template.foreground, | |||
"font-weight": "bold", | |||
"font-size": props.text_height+"px", | |||
"font-family":props.font, | |||
"dominant-baseline":"central" | |||
})) | |||
return serializer.serializeToString(svg) | |||
} | |||
})() | |||
function css_properties(props){ | |||
var ret = []; | |||
for(p in props){ | |||
if(props.hasOwnProperty(p)){ | |||
ret.push(p+":"+props[p]) | |||
} | |||
} | |||
return ret.join(";") | |||
} | |||
function draw_canvas(args) { | |||
var ctx = args.ctx, | |||
dimensions = args.dimensions, | |||
template = args.template, | |||
ratio = args.ratio, | |||
holder = args.holder, | |||
literal = holder.textmode == "literal", | |||
exact = holder.textmode == "exact"; | |||
var ts = text_size(dimensions.width, dimensions.height, template); | |||
var text_height = ts.height; | |||
var width = dimensions.width * ratio, | |||
height = dimensions.height * ratio; | |||
var font = template.font ? template.font : "Arial,Helvetica,sans-serif"; | |||
canvas.width = width; | |||
canvas.height = height; | |||
ctx.textAlign = "center"; | |||
ctx.textBaseline = "middle"; | |||
ctx.fillStyle = template.background; | |||
ctx.fillRect(0, 0, width, height); | |||
ctx.fillStyle = template.foreground; | |||
ctx.font = "bold " + text_height + "px " + font; | |||
var text = template.text ? template.text : (Math.floor(dimensions.width) + "x" + Math.floor(dimensions.height)); | |||
if (literal) { | |||
var dimensions = holder.dimensions; | |||
text = dimensions.width + "x" + dimensions.height; | |||
} | |||
else if(exact && holder.exact_dimensions){ | |||
var dimensions = holder.exact_dimensions; | |||
text = (Math.floor(dimensions.width) + "x" + Math.floor(dimensions.height)); | |||
} | |||
var text_width = ctx.measureText(text).width; | |||
if (text_width / width >= 0.75) { | |||
text_height = Math.floor(text_height * 0.75 * (width / text_width)); | |||
} | |||
//Resetting font size if necessary | |||
ctx.font = "bold " + (text_height * ratio) + "px " + font; | |||
ctx.fillText(text, (width / 2), (height / 2), width); | |||
return canvas.toDataURL("image/png"); | |||
} | |||
function draw_svg(args){ | |||
var dimensions = args.dimensions, | |||
template = args.template, | |||
holder = args.holder, | |||
literal = holder.textmode == "literal", | |||
exact = holder.textmode == "exact"; | |||
var ts = text_size(dimensions.width, dimensions.height, template); | |||
var text_height = ts.height; | |||
var width = dimensions.width, | |||
height = dimensions.height; | |||
var font = template.font ? template.font : "Arial,Helvetica,sans-serif"; | |||
var text = template.text ? template.text : (Math.floor(dimensions.width) + "x" + Math.floor(dimensions.height)); | |||
if (literal) { | |||
var dimensions = holder.dimensions; | |||
text = dimensions.width + "x" + dimensions.height; | |||
} | |||
else if(exact && holder.exact_dimensions){ | |||
var dimensions = holder.exact_dimensions; | |||
text = (Math.floor(dimensions.width) + "x" + Math.floor(dimensions.height)); | |||
} | |||
var string = svg_el({ | |||
text: text, | |||
width:width, | |||
height:height, | |||
text_height:text_height, | |||
font:font, | |||
template:template | |||
}) | |||
return "data:image/svg+xml;base64,"+btoa(string); | |||
} | |||
function draw(args) { | |||
if(instance_config.use_canvas && !instance_config.use_svg){ | |||
return draw_canvas(args); | |||
} | |||
else{ | |||
return draw_svg(args); | |||
} | |||
} | |||
function render(mode, el, holder, src) { | |||
var dimensions = holder.dimensions, | |||
theme = holder.theme, | |||
text = holder.text ? decodeURIComponent(holder.text) : holder.text; | |||
var dimensions_caption = dimensions.width + "x" + dimensions.height; | |||
theme = (text ? extend(theme, { | |||
text: text | |||
}) : theme); | |||
theme = (holder.font ? extend(theme, { | |||
font: holder.font | |||
}) : theme); | |||
el.setAttribute("data-src", src); | |||
holder.theme = theme; | |||
el.holder_data = holder; | |||
if (mode == "image") { | |||
el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption); | |||
if (instance_config.use_fallback || !holder.auto) { | |||
el.style.width = dimensions.width + "px"; | |||
el.style.height = dimensions.height + "px"; | |||
} | |||
if (instance_config.use_fallback) { | |||
el.style.backgroundColor = theme.background; | |||
} else { | |||
el.setAttribute("src", draw({ctx: ctx, dimensions: dimensions, template: theme, ratio:ratio, holder: holder})); | |||
if(holder.textmode && holder.textmode == "exact"){ | |||
resizable_images.push(el); | |||
resizable_update(el); | |||
} | |||
} | |||
} else if (mode == "background") { | |||
if (!instance_config.use_fallback) { | |||
el.style.backgroundImage = "url(" + draw({ctx:ctx, dimensions: dimensions, template: theme, ratio: ratio, holder: holder}) + ")"; | |||
el.style.backgroundSize = dimensions.width + "px " + dimensions.height + "px"; | |||
} | |||
} else if (mode == "fluid") { | |||
el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption); | |||
if (dimensions.height.slice(-1) == "%") { | |||
el.style.height = dimensions.height | |||
} else if(holder.auto == null || !holder.auto){ | |||
el.style.height = dimensions.height + "px" | |||
} | |||
if (dimensions.width.slice(-1) == "%") { | |||
el.style.width = dimensions.width | |||
} else if(holder.auto == null || !holder.auto){ | |||
el.style.width = dimensions.width + "px" | |||
} | |||
if (el.style.display == "inline" || el.style.display === "" || el.style.display == "none") { | |||
el.style.display = "block"; | |||
} | |||
set_initial_dimensions(el) | |||
if (instance_config.use_fallback) { | |||
el.style.backgroundColor = theme.background; | |||
} else { | |||
resizable_images.push(el); | |||
resizable_update(el); | |||
} | |||
} | |||
} | |||
function dimension_check(el, callback) { | |||
var dimensions = { | |||
height: el.clientHeight, | |||
width: el.clientWidth | |||
}; | |||
if (!dimensions.height && !dimensions.width) { | |||
el.setAttribute("data-holder-invisible", true) | |||
callback.call(this, el) | |||
} | |||
else{ | |||
el.removeAttribute("data-holder-invisible") | |||
return dimensions; | |||
} | |||
} | |||
function set_initial_dimensions(el){ | |||
if(el.holder_data){ | |||
var dimensions = dimension_check(el, app.invisible_error_fn( set_initial_dimensions)) | |||
if(dimensions){ | |||
var holder = el.holder_data; | |||
holder.initial_dimensions = dimensions; | |||
holder.fluid_data = { | |||
fluid_height: holder.dimensions.height.slice(-1) == "%", | |||
fluid_width: holder.dimensions.width.slice(-1) == "%", | |||
mode: null | |||
} | |||
if(holder.fluid_data.fluid_width && !holder.fluid_data.fluid_height){ | |||
holder.fluid_data.mode = "width" | |||
holder.fluid_data.ratio = holder.initial_dimensions.width / parseFloat(holder.dimensions.height) | |||
} | |||
else if(!holder.fluid_data.fluid_width && holder.fluid_data.fluid_height){ | |||
holder.fluid_data.mode = "height"; | |||
holder.fluid_data.ratio = parseFloat(holder.dimensions.width) / holder.initial_dimensions.height | |||
} | |||
} | |||
} | |||
} | |||
function resizable_update(element) { | |||
var images; | |||
if (element.nodeType == null) { | |||
images = resizable_images; | |||
} else { | |||
images = [element] | |||
} | |||
for (var i in images) { | |||
if (!images.hasOwnProperty(i)) { | |||
continue; | |||
} | |||
var el = images[i] | |||
if (el.holder_data) { | |||
var holder = el.holder_data; | |||
var dimensions = dimension_check(el, app.invisible_error_fn( resizable_update)) | |||
if(dimensions){ | |||
if(holder.fluid){ | |||
if(holder.auto){ | |||
switch(holder.fluid_data.mode){ | |||
case "width": | |||
dimensions.height = dimensions.width / holder.fluid_data.ratio; | |||
break; | |||
case "height": | |||
dimensions.width = dimensions.height * holder.fluid_data.ratio; | |||
break; | |||
} | |||
} | |||
el.setAttribute("src", draw({ | |||
ctx: ctx, | |||
dimensions: dimensions, | |||
template: holder.theme, | |||
ratio: ratio, | |||
holder: holder | |||
})) | |||
} | |||
if(holder.textmode && holder.textmode == "exact"){ | |||
holder.exact_dimensions = dimensions; | |||
el.setAttribute("src", draw({ | |||
ctx: ctx, | |||
dimensions: holder.dimensions, | |||
template: holder.theme, | |||
ratio: ratio, | |||
holder: holder | |||
})) | |||
} | |||
} | |||
} | |||
} | |||
} | |||
function parse_flags(flags, options) { | |||
var ret = { | |||
theme: extend(settings.themes.gray, {}) | |||
}; | |||
var render = false; | |||
for (var fl = flags.length, j = 0; j < fl; j++) { | |||
var flag = flags[j]; | |||
if (app.flags.dimensions.match(flag)) { | |||
render = true; | |||
ret.dimensions = app.flags.dimensions.output(flag); | |||
} else if (app.flags.fluid.match(flag)) { | |||
render = true; | |||
ret.dimensions = app.flags.fluid.output(flag); | |||
ret.fluid = true; | |||
} else if (app.flags.textmode.match(flag)) { | |||
ret.textmode = app.flags.textmode.output(flag) | |||
} else if (app.flags.colors.match(flag)) { | |||
ret.theme = app.flags.colors.output(flag); | |||
} else if (options.themes[flag]) { | |||
//If a theme is specified, it will override custom colors | |||
if(options.themes.hasOwnProperty(flag)){ | |||
ret.theme = extend(options.themes[flag], {}); | |||
} | |||
} else if (app.flags.font.match(flag)) { | |||
ret.font = app.flags.font.output(flag); | |||
} else if (app.flags.auto.match(flag)) { | |||
ret.auto = true; | |||
} else if (app.flags.text.match(flag)) { | |||
ret.text = app.flags.text.output(flag); | |||
} | |||
} | |||
return render ? ret : false; | |||
} | |||
for (var flag in app.flags) { | |||
if (!app.flags.hasOwnProperty(flag)) continue; | |||
app.flags[flag].match = function (val) { | |||
return val.match(this.regex) | |||
} | |||
} | |||
app.invisible_error_fn = function(fn){ | |||
return function(el){ | |||
if(el.hasAttribute("data-holder-invisible")){ | |||
throw new Error("Holder: invisible placeholder") | |||
} | |||
} | |||
} | |||
app.add_theme = function (name, theme) { | |||
name != null && theme != null && (settings.themes[name] = theme); | |||
return app; | |||
}; | |||
app.add_image = function (src, el) { | |||
var node = selector(el); | |||
if (node.length) { | |||
for (var i = 0, l = node.length; i < l; i++) { | |||
var img = document.createElement("img") | |||
img.setAttribute("data-src", src); | |||
node[i].appendChild(img); | |||
} | |||
} | |||
return app; | |||
}; | |||
app.run = function (o) { | |||
instance_config = extend({}, system_config) | |||
preempted = true; | |||
var options = extend(settings, o), | |||
images = [], | |||
imageNodes = [], | |||
bgnodes = []; | |||
if(options.use_canvas != null && options.use_canvas){ | |||
instance_config.use_canvas = true; | |||
instance_config.use_svg = false; | |||
} | |||
if (typeof (options.images) == "string") { | |||
imageNodes = selector(options.images); | |||
} else if (window.NodeList && options.images instanceof window.NodeList) { | |||
imageNodes = options.images; | |||
} else if (window.Node && options.images instanceof window.Node) { | |||
imageNodes = [options.images]; | |||
} else if(window.HTMLCollection && options.images instanceof window.HTMLCollection){ | |||
imageNodes = options.images | |||
} | |||
if (typeof (options.bgnodes) == "string") { | |||
bgnodes = selector(options.bgnodes); | |||
} else if (window.NodeList && options.elements instanceof window.NodeList) { | |||
bgnodes = options.bgnodes; | |||
} else if (window.Node && options.bgnodes instanceof window.Node) { | |||
bgnodes = [options.bgnodes]; | |||
} | |||
for (i = 0, l = imageNodes.length; i < l; i++) images.push(imageNodes[i]); | |||
var holdercss = document.getElementById("holderjs-style"); | |||
if (!holdercss) { | |||
holdercss = document.createElement("style"); | |||
holdercss.setAttribute("id", "holderjs-style"); | |||
holdercss.type = "text/css"; | |||
document.getElementsByTagName("head")[0].appendChild(holdercss); | |||
} | |||
if (!options.nocss) { | |||
if (holdercss.styleSheet) { | |||
holdercss.styleSheet.cssText += options.stylesheet; | |||
} else { | |||
holdercss.appendChild(document.createTextNode(options.stylesheet)); | |||
} | |||
} | |||
var cssregex = new RegExp(options.domain + "\/(.*?)\"?\\)"); | |||
for (var l = bgnodes.length, i = 0; i < l; i++) { | |||
var src = window.getComputedStyle(bgnodes[i], null) | |||
.getPropertyValue("background-image"); | |||
var flags = src.match(cssregex); | |||
var bgsrc = bgnodes[i].getAttribute("data-background-src"); | |||
if (flags) { | |||
var holder = parse_flags(flags[1].split("/"), options); | |||
if (holder) { | |||
render("background", bgnodes[i], holder, src); | |||
} | |||
} else if (bgsrc != null) { | |||
var holder = parse_flags(bgsrc.substr(bgsrc.lastIndexOf(options.domain) + options.domain.length + 1) | |||
.split("/"), options); | |||
if (holder) { | |||
render("background", bgnodes[i], holder, src); | |||
} | |||
} | |||
} | |||
for (l = images.length, i = 0; i < l; i++) { | |||
var attr_data_src, attr_src; | |||
attr_src = attr_data_src = src = null; | |||
try { | |||
attr_src = images[i].getAttribute("src"); | |||
attr_datasrc = images[i].getAttribute("data-src"); | |||
} catch (e) {} | |||
if (attr_datasrc == null && !! attr_src && attr_src.indexOf(options.domain) >= 0) { | |||
src = attr_src; | |||
} else if ( !! attr_datasrc && attr_datasrc.indexOf(options.domain) >= 0) { | |||
src = attr_datasrc; | |||
} | |||
if (src) { | |||
var holder = parse_flags(src.substr(src.lastIndexOf(options.domain) + options.domain.length + 1).split("/"), options); | |||
if (holder) { | |||
if (holder.fluid) { | |||
render("fluid", images[i], holder, src) | |||
} else { | |||
render("image", images[i], holder, src); | |||
} | |||
} | |||
} | |||
} | |||
return app; | |||
}; | |||
contentLoaded(win, function () { | |||
if (window.addEventListener) { | |||
window.addEventListener("resize", resizable_update, false); | |||
window.addEventListener("orientationchange", resizable_update, false); | |||
} else { | |||
window.attachEvent("onresize", resizable_update) | |||
} | |||
preempted || app.run({}); | |||
}); | |||
if (typeof define === "function" && define.amd) { | |||
define([], function () { | |||
return app; | |||
}); | |||
} | |||
//github.com/davidchambers/Base64.js | |||
(function(){function t(t){this.message=t}var e="undefined"!=typeof exports?exports:this,r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";t.prototype=Error(),t.prototype.name="InvalidCharacterError",e.btoa||(e.btoa=function(e){for(var o,n,a=0,i=r,c="";e.charAt(0|a)||(i="=",a%1);c+=i.charAt(63&o>>8-8*(a%1))){if(n=e.charCodeAt(a+=.75),n>255)throw new t("'btoa' failed");o=o<<8|n}return c}),e.atob||(e.atob=function(e){if(e=e.replace(/=+$/,""),1==e.length%4)throw new t("'atob' failed");for(var o,n,a=0,i=0,c="";n=e.charAt(i++);~n&&(o=a%4?64*o+n:n,a++%4)?c+=String.fromCharCode(255&o>>(6&-2*a)):0)n=r.indexOf(n);return c})})(); | |||
//getElementsByClassName polyfill | |||
document.getElementsByClassName||(document.getElementsByClassName=function(e){var t=document,n,r,i,s=[];if(t.querySelectorAll)return t.querySelectorAll("."+e);if(t.evaluate){r=".//*[contains(concat(' ', @class, ' '), ' "+e+" ')]",n=t.evaluate(r,t,null,0,null);while(i=n.iterateNext())s.push(i)}else{n=t.getElementsByTagName("*"),r=new RegExp("(^|\\s)"+e+"(\\s|$)");for(i=0;i<n.length;i++)r.test(n[i].className)&&s.push(n[i])}return s}) | |||
//getComputedStyle polyfill | |||
window.getComputedStyle||(window.getComputedStyle=function(e){return this.el=e,this.getPropertyValue=function(t){var n=/(\-([a-z]){1})/g;return t=="float"&&(t="styleFloat"),n.test(t)&&(t=t.replace(n,function(){return arguments[2].toUpperCase()})),e.currentStyle[t]?e.currentStyle[t]:null},this}) | |||
//http://javascript.nwbox.com/ContentLoaded by Diego Perini with modifications | |||
function contentLoaded(n,t){var l="complete",s="readystatechange",u=!1,h=u,c=!0,i=n.document,a=i.documentElement,e=i.addEventListener?"addEventListener":"attachEvent",v=i.addEventListener?"removeEventListener":"detachEvent",f=i.addEventListener?"":"on",r=function(e){(e.type!=s||i.readyState==l)&&((e.type=="load"?n:i)[v](f+e.type,r,u),!h&&(h=!0)&&t.call(n,null))},o=function(){try{a.doScroll("left")}catch(n){setTimeout(o,50);return}r("poll")};if(i.readyState==l)t.call(n,"lazy");else{if(i.createEventObject&&a.doScroll){try{c=!n.frameElement}catch(y){}c&&o()}i[e](f+"DOMContentLoaded",r,u),i[e](f+s,r,u),n[e](f+"load",r,u)}} | |||
//https://gist.github.com/991057 by Jed Schmidt with modifications | |||
function selector(a,b){var a=a.match(/^(\W)?(.*)/),b=b||document,c=b["getElement"+(a[1]?"#"==a[1]?"ById":"sByClassName":"sByTagName")],d=c.call(b,a[2]),e=[];return null!==d&&(e=d.length||0===d.length?d:[d]),e} | |||
//shallow object property extend | |||
function extend(a,b){ | |||
var c={}; | |||
for(var i in a){ | |||
if(a.hasOwnProperty(i)){ | |||
c[i]=a[i]; | |||
} | |||
} | |||
for(var i in b){ | |||
if(b.hasOwnProperty(i)){ | |||
c[i]=b[i]; | |||
} | |||
} | |||
return c | |||
} | |||
//hasOwnProperty polyfill | |||
if (!Object.prototype.hasOwnProperty) | |||
/*jshint -W001, -W103 */ | |||
Object.prototype.hasOwnProperty = function(prop) { | |||
var proto = this.__proto__ || this.constructor.prototype; | |||
return (prop in this) && (!(prop in proto) || proto[prop] !== this[prop]); | |||
} | |||
/*jshint +W001, +W103 */ | |||
})(Holder, window); |
@@ -1 +0,0 @@ | |||
../vendor/tablesorter/js/jquery.metadata.js |
@@ -0,0 +1,116 @@ | |||
/* | |||
* Metadata - jQuery plugin for parsing metadata from elements | |||
* | |||
* Copyright (c) 2006 John Resig, Yehuda Katz, Jรถrn Zaefferer, Paul McLanahan | |||
* | |||
* Dual licensed under the MIT and GPL licenses: | |||
* http://www.opensource.org/licenses/mit-license.php | |||
* http://www.gnu.org/licenses/gpl.html | |||
* | |||
*/ | |||
/** | |||
* Sets the type of metadata to use. Metadata is encoded in JSON, and each property | |||
* in the JSON will become a property of the element itself. | |||
* | |||
* There are three supported types of metadata storage: | |||
* | |||
* attr: Inside an attribute. The name parameter indicates *which* attribute. | |||
* | |||
* class: Inside the class attribute, wrapped in curly braces: { } | |||
* | |||
* elem: Inside a child element (e.g. a script tag). The | |||
* name parameter indicates *which* element. | |||
* | |||
* The metadata for an element is loaded the first time the element is accessed via jQuery. | |||
* | |||
* As a result, you can define the metadata type, use $(expr) to load the metadata into the elements | |||
* matched by expr, then redefine the metadata type and run another $(expr) for other elements. | |||
* | |||
* @name $.metadata.setType | |||
* | |||
* @example <p id="one" class="some_class {item_id: 1, item_label: 'Label'}">This is a p</p> | |||
* @before $.metadata.setType("class") | |||
* @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" | |||
* @desc Reads metadata from the class attribute | |||
* | |||
* @example <p id="one" class="some_class" data="{item_id: 1, item_label: 'Label'}">This is a p</p> | |||
* @before $.metadata.setType("attr", "data") | |||
* @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" | |||
* @desc Reads metadata from a "data" attribute | |||
* | |||
* @example <p id="one" class="some_class"><script>{item_id: 1, item_label: 'Label'}</script>This is a p</p> | |||
* @before $.metadata.setType("elem", "script") | |||
* @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" | |||
* @desc Reads metadata from a nested script element | |||
* | |||
* @param String type The encoding type | |||
* @param String name The name of the attribute to be used to get metadata (optional) | |||
* @cat Plugins/Metadata | |||
* @descr Sets the type of encoding to be used when loading metadata for the first time | |||
* @type undefined | |||
* @see metadata() | |||
*/ | |||
(function($) { | |||
$.extend({ | |||
metadata : { | |||
defaults : { | |||
type: 'class', | |||
name: 'metadata', | |||
cre: /(\{.*\})/, | |||
single: 'metadata' | |||
}, | |||
setType: function( type, name ){ | |||
this.defaults.type = type; | |||
this.defaults.name = name; | |||
}, | |||
get: function( elem, opts ){ | |||
var data, m, e, attr, | |||
settings = $.extend({},this.defaults,opts); | |||
// check for empty string in single property | |||
if ( !settings.single.length ) { settings.single = 'metadata'; } | |||
data = $.data(elem, settings.single); | |||
// returned cached data if it already exists | |||
if ( data ) { return data; } | |||
data = "{}"; | |||
if ( settings.type === "class" ) { | |||
m = settings.cre.exec( elem.className ); | |||
if ( m ) { data = m[1]; } | |||
} else if ( settings.type === "elem" ) { | |||
if( !elem.getElementsByTagName ) { return undefined; } | |||
e = elem.getElementsByTagName(settings.name); | |||
if ( e.length ) { data = $.trim(e[0].innerHTML); } | |||
} else if ( elem.getAttribute !== undefined ) { | |||
attr = elem.getAttribute( settings.name ); | |||
if ( attr ) { data = attr; } | |||
} | |||
if ( data.indexOf( '{' ) <0 ) { data = "{" + data + "}"; } | |||
data = eval("(" + data + ")"); | |||
$.data( elem, settings.single, data ); | |||
return data; | |||
} | |||
} | |||
}); | |||
/** | |||
* Returns the metadata object for the first member of the jQuery object. | |||
* | |||
* @name metadata | |||
* @descr Returns element's metadata object | |||
* @param Object opts An object contianing settings to override the defaults | |||
* @type jQuery | |||
* @cat Plugins/Metadata | |||
*/ | |||
$.fn.metadata = function( opts ){ | |||
return $.metadata.get( this[0], opts ); | |||
}; | |||
})(jQuery); |
@@ -1 +0,0 @@ | |||
../vendor/jquery-mousewheel/jquery.mousewheel.min.js |
@@ -0,0 +1,8 @@ | |||
/*! Copyright (c) 2013 Brandon Aaron (http://brandon.aaron.sh) | |||
* Licensed under the MIT License (LICENSE.txt). | |||
* | |||
* Version: 3.1.11 | |||
* | |||
* Requires: jQuery 1.2.2+ | |||
*/ | |||
!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a:a(jQuery)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.11",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b)["offsetParent"in a.fn?"offsetParent":"parent"]();return c.length||(c=a("body")),parseInt(c.css("fontSize"),10)},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})}); |
@@ -1 +0,0 @@ | |||
../vendor/tablesorter/js/jquery.tablesorter.min.js |
@@ -1 +0,0 @@ | |||
../vendor/pgn4web/pgn4web.js |
@@ -1,14 +0,0 @@ | |||
# editorconfig.org | |||
root = true | |||
[*] | |||
indent_style = space | |||
indent_size = 2 | |||
end_of_line = lf | |||
charset = utf-8 | |||
trim_trailing_whitespace = true | |||
insert_final_newline = true | |||
[*.py] | |||
indent_size = 4 |
@@ -1,8 +0,0 @@ | |||
# Enforce Unix newlines | |||
*.css text eol=lf | |||
*.html text eol=lf | |||
*.js text eol=lf | |||
*.json text eol=lf | |||
*.less text eol=lf | |||
*.md text eol=lf | |||
*.yml text eol=lf |
@@ -1,42 +0,0 @@ | |||
# Ignore docs files | |||
_gh_pages | |||
_site | |||
.ruby-version | |||
# Numerous always-ignore extensions | |||
*.diff | |||
*.err | |||
*.orig | |||
*.log | |||
*.rej | |||
*.swo | |||
*.swp | |||
*.zip | |||
*.vi | |||
*~ | |||
# OS or Editor folders | |||
.DS_Store | |||
._* | |||
Thumbs.db | |||
.cache | |||
.project | |||
.settings | |||
.tmproj | |||
*.esproj | |||
nbproject | |||
*.sublime-project | |||
*.sublime-workspace | |||
.idea | |||
# Komodo | |||
*.komodoproject | |||
.komodotools | |||
# grunt-html-validation | |||
validation-status.json | |||
validation-report.json | |||
# Folders to ignore | |||
node_modules | |||
bower_components |
@@ -1,28 +0,0 @@ | |||
language: node_js | |||
node_js: | |||
- "0.10" | |||
before_install: | |||
- time sudo pip install --use-mirrors -r test-infra/requirements.txt | |||
- rvm use 1.9.3 --fuzzy | |||
- if [ "$TWBS_TEST" = validate-html ]; then echo "ruby=$(basename $(rvm gemdir)) jekyll=$JEKYLL_VERSION" > pseudo_Gemfile.lock; fi | |||
install: | |||
- time npm install -g grunt-cli | |||
- time ./test-infra/s3_cache.py download 'npm packages' test-infra/npm-shrinkwrap.canonical.json ./node_modules || time ./test-infra/uncached-npm-install.sh | |||
- if [ "$TWBS_TEST" = validate-html ]; then time ./test-infra/s3_cache.py download rubygems pseudo_Gemfile.lock $(rvm gemdir) || gem install -N jekyll -v $JEKYLL_VERSION; fi | |||
after_script: | |||
- if [ "$TWBS_TEST" = core ]; then time ./test-infra/s3_cache.py upload 'npm packages' test-infra/npm-shrinkwrap.canonical.json ./node_modules; fi | |||
- if [ "$TWBS_TEST" = validate-html ]; then time ./test-infra/s3_cache.py upload rubygems pseudo_Gemfile.lock $(rvm gemdir); fi | |||
env: | |||
global: | |||
- JEKYLL_VERSION: 1.4.1 | |||
- SAUCE_USERNAME: bootstrap | |||
- secure: "pJkBwnuae9dKU5tEcCqccfS1QQw7/meEcfz63fM7ba7QJNjoA6BaXj08L5Z3Vb5vBmVPwBawxo5Hp0jC0r/Z/O0hGnAmz/Cz09L+cy7dSAZ9x4hvZePSja/UAusaB5ogMoO8l2b773MzgQeSmrLbExr9BWLeqEfjC2hFgdgHLaQ=" | |||
- secure: "gqjqISbxBJK6byFbsmr1AyP1qoWH+rap06A2gI7v72+Tn2PU2nYkIMUkCvhZw6K889jv+LhQ/ybcBxDOXHpNCExCnSgB4dcnmYp+9oeNZb37jSP0rQ+Ib4OTLjzc3/FawE/fUq5kukZTC7porzc/k0qJNLAZRx3YLALmK1GIdUY=" | |||
- secure: "Gghh/e3Gsbj1+4RR9Lh2aR/xJl35HWiHqlPIeSUqE9D7uDCVTAwNce/dGL3Ew7uJPfJ6Pgr70wD3zgu3stw0Zmzayax0hiDtGwcQCxVIER08wqGANK9C2Q7PYJkNTNtiTo6ehKWbdV4Z+/U+TEYyQfpQTDbAFYk/vVpsdjp0Lmc=" | |||
- secure: "RTbRdx4G/2OTLfrZtP1VbRljxEmd6A1F3GqXboeQTldsnAlwpsES65es5CE3ub/rmixLApOY9ot7OPmNixFgC2Y8xOsV7lNCC62QVpmqQEDyGFFQKb3yO6/dmwQxdsCqGfzf9Np6Wh5V22QFvr50ZLKLd7Uhd9oXMDIk/z1MJ3o=" | |||
matrix: | |||
- TWBS_TEST=core | |||
- TWBS_TEST=validate-html | |||
- TWBS_TEST=sauce-js-unit | |||
matrix: | |||
fast_finish: true |
@@ -1 +0,0 @@ | |||
getbootstrap.com |
@@ -1,196 +0,0 @@ | |||
# Contributing to Bootstrap | |||
Looking to contribute something to Bootstrap? **Here's how you can help.** | |||
Please take a moment to review this document in order to make the contribution | |||
process easy and effective for everyone involved. | |||
Following these guidelines helps to communicate that you respect the time of | |||
the developers managing and developing this open source project. In return, | |||
they should reciprocate that respect in addressing your issue or assessing | |||
patches and features. | |||
## Using the issue tracker | |||
The [issue tracker](https://github.com/twbs/bootstrap/issues) is | |||
the preferred channel for [bug reports](#bug-reports), [features requests](#feature-requests) | |||
and [submitting pull requests](#pull-requests), but please respect the following | |||
restrictions: | |||
* Please **do not** use the issue tracker for personal support requests. Stack | |||
Overflow ([`twitter-bootstrap-3`](http://stackoverflow.com/questions/tagged/twitter-bootstrap-3) tag) or [IRC](https://github.com/twbs/bootstrap/blob/master/README.md#community) are better places to get help. | |||
* Please **do not** derail or troll issues. Keep the discussion on topic and | |||
respect the opinions of others. | |||
* Please **do not** open issues or pull requests regarding the code in | |||
[`Normalize`](https://github.com/necolas/normalize.css) (open them in | |||
their respective repositories). | |||
## Bug reports | |||
A bug is a _demonstrable problem_ that is caused by the code in the repository. | |||
Good bug reports are extremely helpful, so thanks! | |||
Guidelines for bug reports: | |||
1. **Use the GitHub issue search** — check if the issue has already been | |||
reported. | |||
2. **Check if the issue has been fixed** — try to reproduce it using the | |||
latest `master` or development branch in the repository. | |||
3. **Isolate the problem** — ideally create a [reduced test | |||
case](http://css-tricks.com/6263-reduced-test-cases/) and a live example. | |||
[This JS Bin](http://jsbin.com/EBAwOkOK/1) is a helpful template. | |||
A good bug report shouldn't leave others needing to chase you up for more | |||
information. Please try to be as detailed as possible in your report. What is | |||
your environment? What steps will reproduce the issue? What browser(s) and OS | |||
experience the problem? Do other browsers show the bug differently? What | |||
would you expect to be the outcome? All these details will help people to fix | |||
any potential bugs. | |||
Example: | |||
> Short and descriptive example bug report title | |||
> | |||
> A summary of the issue and the browser/OS environment in which it occurs. If | |||
> suitable, include the steps required to reproduce the bug. | |||
> | |||
> 1. This is the first step | |||
> 2. This is the second step | |||
> 3. Further steps, etc. | |||
> | |||
> `<url>` - a link to the reduced test case | |||
> | |||
> Any other information you want to share that is relevant to the issue being | |||
> reported. This might include the lines of code that you have identified as | |||
> causing the bug, and potential solutions (and your opinions on their | |||
> merits). | |||
## Feature requests | |||
Feature requests are welcome. But take a moment to find out whether your idea | |||
fits with the scope and aims of the project. It's up to *you* to make a strong | |||
case to convince the project's developers of the merits of this feature. Please | |||
provide as much detail and context as possible. | |||
## Pull requests | |||
Good pull requestsโpatches, improvements, new featuresโare a fantastic | |||
help. They should remain focused in scope and avoid containing unrelated | |||
commits. | |||
**Please ask first** before embarking on any significant pull request (e.g. | |||
implementing features, refactoring code, porting to a different language), | |||
otherwise you risk spending a lot of time working on something that the | |||
project's developers might not want to merge into the project. | |||
Please adhere to the [coding guidelines](#code-guidelines) used throughout the | |||
project (indentation, accurate comments, etc.) and any other requirements | |||
(such as test coverage). | |||
Adhering to the following process is the best way to get your work | |||
included in the project: | |||
1. [Fork](http://help.github.com/fork-a-repo/) the project, clone your fork, | |||
and configure the remotes: | |||
```bash | |||
# Clone your fork of the repo into the current directory | |||
git clone https://github.com/<your-username>/bootstrap.git | |||
# Navigate to the newly cloned directory | |||
cd bootstrap | |||
# Assign the original repo to a remote called "upstream" | |||
git remote add upstream https://github.com/twbs/bootstrap.git | |||
``` | |||
2. If you cloned a while ago, get the latest changes from upstream: | |||
```bash | |||
git checkout master | |||
git pull upstream master | |||
``` | |||
3. Create a new topic branch (off the main project development branch) to | |||
contain your feature, change, or fix: | |||
```bash | |||
git checkout -b <topic-branch-name> | |||
``` | |||
4. Commit your changes in logical chunks. Please adhere to these [git commit | |||
message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) | |||
or your code is unlikely be merged into the main project. Use Git's | |||
[interactive rebase](https://help.github.com/articles/interactive-rebase) | |||
feature to tidy up your commits before making them public. | |||
5. Locally merge (or rebase) the upstream development branch into your topic branch: | |||
```bash | |||
git pull [--rebase] upstream master | |||
``` | |||
6. Push your topic branch up to your fork: | |||
```bash | |||
git push origin <topic-branch-name> | |||
``` | |||
7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) | |||
with a clear title and description against the `master` branch. | |||
**IMPORTANT**: By submitting a patch, you agree to allow the project owners to | |||
license your work under the terms of the [MIT License](LICENSE.md). | |||
## Code guidelines | |||
### HTML | |||
- Two spaces for indentation, never tabs. | |||
- Double quotes only, never single quotes. | |||
- Always use proper indentation. | |||
- Use tags and elements appropriate for an HTML5 doctype (e.g., self-closing tags). | |||
- Use CDNs and HTTPS for third-party JS when possible. We don't use protocol-relative URLs in this case because they break when viewing the page locally via `file://`. | |||
- Use [WAI-ARIA](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA) attributes in documentation examples to promote accessibility. | |||
### CSS | |||
- CSS changes must be done in `.less` files first, never just in the compiled `.css` files. | |||
- Adhere to the [CSS property order](http://markdotto.com/2011/11/29/css-property-order/). | |||
- Multiple-line approach (one property and value per line). | |||
- Always a space after a property's colon (e.g., `display: block;` and not `display:block;`). | |||
- End all lines with a semi-colon. | |||
- For multiple, comma-separated selectors, place each selector on its own line. | |||
- Attribute selectors, like `input[type="text"]` should always wrap the attribute's value in double quotes, for consistency and safety (see this [blog post on unquoted attribute values](http://mathiasbynens.be/notes/unquoted-attribute-values) that can lead to XSS attacks). | |||
- Attribute selectors should only be used where absolutely necessary (e.g., form controls) and should be avoided on custom components for performance and explicitness. | |||
- Series of classes for a component should include a base class (e.g., `.component`) and use the base class as a prefix for modifier and sub-components (e.g., `.component-lg`). | |||
- Avoid inheritance and over nestingโuse single, explicit classes whenever possible. | |||
- When feasible, default color palettes should comply with [WCAG color contrast guidelines](http://www.w3.org/TR/WCAG20/#visual-audio-contrast). | |||
- Except in rare cases, don't remove default `:focus` styles (via e.g. `outline: none;`) without providing alternative styles. See [this A11Y Project post](http://a11yproject.com/posts/never-remove-css-outlines/) for more details. | |||
### JS | |||
- No semicolons (in client-side JS) | |||
- 2 spaces (no tabs) | |||
- strict mode | |||
- "Attractive" | |||
### Checking coding style | |||
Run `grunt test` before committing to ensure your changes follow our coding standards. | |||
## License | |||
By contributing your code, you agree to license your contribution under the [MIT license](https://github.com/twbs/bootstrap/blob/master/LICENSE). | |||
Prior to v3.1.0, Bootstrap was released under the Apache License v2.0. | |||
@@ -1,421 +0,0 @@ | |||
/*! | |||
* Bootstrap's Gruntfile | |||
* http://getbootstrap.com | |||
* Copyright 2013-2014 Twitter, Inc. | |||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | |||
*/ | |||
module.exports = function (grunt) { | |||
'use strict'; | |||
// Force use of Unix newlines | |||
grunt.util.linefeed = '\n'; | |||
RegExp.quote = function (string) { | |||
return string.replace(/[-\\^$*+?.()|[\]{}]/g, '\\$&'); | |||
}; | |||
var fs = require('fs'); | |||
var path = require('path'); | |||
var generateGlyphiconsData = require('./grunt/bs-glyphicons-data-generator.js'); | |||
var BsLessdocParser = require('./grunt/bs-lessdoc-parser.js'); | |||
var generateRawFilesJs = require('./grunt/bs-raw-files-generator.js'); | |||
var updateShrinkwrap = require('./grunt/shrinkwrap.js'); | |||
// Project configuration. | |||
grunt.initConfig({ | |||
// Metadata. | |||
pkg: grunt.file.readJSON('package.json'), | |||
banner: '/*!\n' + | |||
' * Bootstrap v<%= pkg.version %> (<%= pkg.homepage %>)\n' + | |||
' * Copyright 2011-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' + | |||
' * Licensed under <%= pkg.license.type %> (<%= pkg.license.url %>)\n' + | |||
' */\n', | |||
jqueryCheck: 'if (typeof jQuery === \'undefined\') { throw new Error(\'Bootstrap\\\'s JavaScript requires jQuery\') }\n\n', | |||
// Task configuration. | |||
clean: { | |||
dist: ['dist', 'docs/dist'] | |||
}, | |||
jshint: { | |||
options: { | |||
jshintrc: 'js/.jshintrc' | |||
}, | |||
grunt: { | |||
options: { | |||
jshintrc: 'grunt/.jshintrc' | |||
}, | |||
src: ['Gruntfile.js', 'grunt/*.js'] | |||
}, | |||
src: { | |||
src: 'js/*.js' | |||
}, | |||
test: { | |||
src: 'js/tests/unit/*.js' | |||
}, | |||
assets: { | |||
src: ['docs/assets/js/application.js', 'docs/assets/js/customizer.js'] | |||
} | |||
}, | |||
jscs: { | |||
options: { | |||
config: 'js/.jscs.json', | |||
}, | |||
grunt: { | |||
src: ['Gruntfile.js', 'grunt/*.js'] | |||
}, | |||
src: { | |||
src: 'js/*.js' | |||
}, | |||
test: { | |||
src: 'js/tests/unit/*.js' | |||
}, | |||
assets: { | |||
src: ['docs/assets/js/application.js', 'docs/assets/js/customizer.js'] | |||
} | |||
}, | |||
csslint: { | |||
options: { | |||
csslintrc: 'less/.csslintrc' | |||
}, | |||
src: [ | |||
'dist/css/bootstrap.css', | |||
'dist/css/bootstrap-theme.css', | |||
'docs/assets/css/docs.css', | |||
'docs/examples/**/*.css' | |||
] | |||
}, | |||
concat: { | |||
options: { | |||
banner: '<%= banner %>\n<%= jqueryCheck %>', | |||
stripBanners: false | |||
}, | |||
bootstrap: { | |||
src: [ | |||
'js/transition.js', | |||
'js/alert.js', | |||
'js/button.js', | |||
'js/carousel.js', | |||
'js/collapse.js', | |||
'js/dropdown.js', | |||
'js/modal.js', | |||
'js/tooltip.js', | |||
'js/popover.js', | |||
'js/scrollspy.js', | |||
'js/tab.js', | |||
'js/affix.js' | |||
], | |||
dest: 'dist/js/<%= pkg.name %>.js' | |||
} | |||
}, | |||
uglify: { | |||
options: { | |||
report: 'min' | |||
}, | |||
bootstrap: { | |||
options: { | |||
banner: '<%= banner %>' | |||
}, | |||
src: '<%= concat.bootstrap.dest %>', | |||
dest: 'dist/js/<%= pkg.name %>.min.js' | |||
}, | |||
customize: { | |||
options: { | |||
preserveComments: 'some' | |||
}, | |||
src: [ | |||
'docs/assets/js/vendor/less.min.js', | |||
'docs/assets/js/vendor/jszip.min.js', | |||
'docs/assets/js/vendor/uglify.min.js', | |||
'docs/assets/js/vendor/blob.js', | |||
'docs/assets/js/vendor/filesaver.js', | |||
'docs/assets/js/raw-files.min.js', | |||
'docs/assets/js/customizer.js' | |||
], | |||
dest: 'docs/assets/js/customize.min.js' | |||
}, | |||
docsJs: { | |||
options: { | |||
preserveComments: 'some' | |||
}, | |||
src: [ | |||
'docs/assets/js/vendor/holder.js', | |||
'docs/assets/js/application.js' | |||
], | |||
dest: 'docs/assets/js/docs.min.js' | |||
} | |||
}, | |||
less: { | |||
compileCore: { | |||
options: { | |||
strictMath: true, | |||
sourceMap: true, | |||
outputSourceFiles: true, | |||
sourceMapURL: '<%= pkg.name %>.css.map', | |||
sourceMapFilename: 'dist/css/<%= pkg.name %>.css.map' | |||
}, | |||
files: { | |||
'dist/css/<%= pkg.name %>.css': 'less/bootstrap.less' | |||
} | |||
}, | |||
compileTheme: { | |||
options: { | |||
strictMath: true, | |||
sourceMap: true, | |||
outputSourceFiles: true, | |||
sourceMapURL: '<%= pkg.name %>-theme.css.map', | |||
sourceMapFilename: 'dist/css/<%= pkg.name %>-theme.css.map' | |||
}, | |||
files: { | |||
'dist/css/<%= pkg.name %>-theme.css': 'less/theme.less' | |||
} | |||
}, | |||
minify: { | |||
options: { | |||
cleancss: true, | |||
report: 'min' | |||
}, | |||
files: { | |||
'dist/css/<%= pkg.name %>.min.css': 'dist/css/<%= pkg.name %>.css', | |||
'dist/css/<%= pkg.name %>-theme.min.css': 'dist/css/<%= pkg.name %>-theme.css' | |||
} | |||
} | |||
}, | |||
cssmin: { | |||
compress: { | |||
options: { | |||
keepSpecialComments: '*', | |||
noAdvanced: true, // turn advanced optimizations off until the issue is fixed in clean-css | |||
report: 'min', | |||
selectorsMergeMode: 'ie8' | |||
}, | |||
src: [ | |||
'docs/assets/css/docs.css', | |||
'docs/assets/css/pygments-manni.css' | |||
], | |||
dest: 'docs/assets/css/docs.min.css' | |||
} | |||
}, | |||
usebanner: { | |||
dist: { | |||
options: { | |||
position: 'top', | |||
banner: '<%= banner %>' | |||
}, | |||
files: { | |||
src: [ | |||
'dist/css/<%= pkg.name %>.css', | |||
'dist/css/<%= pkg.name %>.min.css', | |||
'dist/css/<%= pkg.name %>-theme.css', | |||
'dist/css/<%= pkg.name %>-theme.min.css' | |||
] | |||
} | |||
} | |||
}, | |||
csscomb: { | |||
options: { | |||
config: 'less/.csscomb.json' | |||
}, | |||
dist: { | |||
files: { | |||
'dist/css/<%= pkg.name %>.css': 'dist/css/<%= pkg.name %>.css', | |||
< |