Revive site from the unmaintainable state
Now we can again deploy it with moden Jekyll and restore lorchess.ru archive.
This commit is contained in:
parent
596505bbb7
commit
15b8f3a13e
@ -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.
|
0
.openshift/cron/daily/.gitignore
vendored
0
.openshift/cron/daily/.gitignore
vendored
0
.openshift/cron/hourly/.gitignore
vendored
0
.openshift/cron/hourly/.gitignore
vendored
0
.openshift/cron/minutely/.gitignore
vendored
0
.openshift/cron/minutely/.gitignore
vendored
0
.openshift/cron/monthly/.gitignore
vendored
0
.openshift/cron/monthly/.gitignore
vendored
@ -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
|
||||
|
4
Gemfile
4
Gemfile
@ -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
|
||||
|
195
Gemfile.lock
195
Gemfile.lock
@ -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
assets/css/bootstrap.min.css
vendored
1
assets/css/bootstrap.min.css
vendored
@ -1 +0,0 @@
|
||||
../vendor/bootstrap/docs/dist/css/bootstrap.min.css
|
7
assets/css/bootstrap.min.css
vendored
Normal file
7
assets/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
../vendor/tablesorter/css/theme.blue.css
|
217
assets/css/theme.blue.css
Normal file
217
assets/css/theme.blue.css
Normal file
@ -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
assets/js/bootstrap.min.js
vendored
1
assets/js/bootstrap.min.js
vendored
@ -1 +0,0 @@
|
||||
../vendor/bootstrap/dist/js/bootstrap.min.js
|
6
assets/js/bootstrap.min.js
vendored
Normal file
6
assets/js/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
@ -1 +0,0 @@
|
||||
../vendor/bootstrap/docs/assets/js/vendor/holder.js
|
648
assets/js/holder.js
Normal file
648
assets/js/holder.js
Normal file
@ -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
|
116
assets/js/jquery.metadata.js
Normal file
116
assets/js/jquery.metadata.js
Normal file
@ -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;
|
||||