Added Lists to this work-in-progress

This commit is contained in:
Peter 2021-12-28 21:05:13 +01:00
parent cdb5ff6ad3
commit 215e03700a
78 changed files with 35142 additions and 516 deletions

BIN
.DS_Store vendored Normal file

Binary file not shown.

9
.gitmodules vendored
View File

@ -1,3 +1,12 @@
[submodule "themes/adidoks"]
path = themes/adidoks
url = https://github.com/aaranxu/adidoks.git
[submodule "static/csv-lists"]
path = static/csv-lists
url = https://framagit.org/linuxphoneapps/csv-lists.git
[submodule "apps"]
path = apps
url = https://framagit.org/linuxphoneapps/apps.git
[submodule "content/apps"]
path = content/apps
url = https://framagit.org/linuxphoneapps/apps.git

View File

@ -1,6 +1,6 @@
# The URL the site will be built for
base_url = "https://linuxphoneapps.frama.io"
title = "LinuxPhoneApps.org α"
title = "LinuxPhoneApps"
description = "An App Directory for PinePhone, Librem 5 and other mainline Linux phones."
# The default language; used in feeds and search index
@ -29,6 +29,7 @@ taxonomies = [
{name = "build_systems"},
{name = "programming_languages"},
{name = "state"},
{name = "authors"},
]
# Whether to build a search index to be used later on by a JavaScript library
build_search_index = true
@ -49,7 +50,7 @@ highlight_code = true
[extra]
# Put all your custom variables here
author = "LinuxPhoneApps Contributors"
github = "https://github.com/linuxphoneappsorg"
github = "https://framagit.org/linuxphoneapps"
twitter = "https://twitter.com/linuxphoneapps"
email = "mail@linuxphoneapps.org"
@ -73,7 +74,9 @@ timezone = "Europe/Copenhagen"
# Edit page on reposity or not
edit_page = true
docs_repo = "https://github.com/linuxphoneapps/linuxphoneapps.org"
docs_repo = "https://framagit.org/linuxphoneapps/linuxphoneapps.frama.io"
apps_repo = "https://framagit.org/linuxphoneapps/apps"
games_repo = "https://framagit.org/linuxphoneapps/games"
repo_branch = "main"
## Math settings
@ -106,12 +109,18 @@ site_links_search_box = true
# Menu items
[[extra.menu.main]]
name = "Apps"
section = "apps"
url = "/apps/"
weight = 10
section = "lists"
url = "/lists/apps"
weight = 20
[[extra.menu.main]]
name = "Docs "
name = "Games"
section = "lists"
url = "/lists/games/"
weight = 20
[[extra.menu.main]]
name = "Docs "
section = "docs"
url = "/docs/"
weight = 20

View File

@ -4,12 +4,14 @@ title = "LinuxPhoneApps"
# The homepage contents
[extra]
lead = '<b>LinuxPhoneApps.org</b> is <em>going to be</em> an App Directory that lists apps for Linux Phones like the PinePhone or Librem 5, that run Linux distributions which do not have a proper (de)centralized app store yet. For now, head over to LINMOBapps.frama.io for the catalog that is going to land here.'
url = "https://linmobapps.frama.io"
url_button = "Go to LINMOBapps"
lead = '<b>LinuxPhoneApps.org</b> is <em>going to be</em> an App Directory that lists apps for Linux Phones like the PinePhone or Librem 5, that run Linux distributions which do not have a proper (de)centralized app store yet. For now, this page is mostly serves the app and game lists that were previously hosted at LINMOBapps.frama.io.'
url = "lists/apps"
url_button = "Apps"
url_games = "lists/games"
url_button_games = "Games"
repo_license = "Theme and Code: MIT. Content: CC-BY-SA 4.0"
repo_url = "https://github.com/linuxphoneapps/linuxphoneapps.org"
repo_version = "alpha"
repo_url = "https://framagit/linuxphoneapps/linuxphoneapps.org"
repo_version = "beta"
[[extra.list]]
title = "For Users"
@ -25,10 +27,10 @@ content = "Help developers to find efforts for similar apps, to join a project,
[[extra.list]]
title = "Get involved"
content = 'Join our <a href="https://github.com/linuxphoneapps/">GitHub organization</a>, the <a href="https://matrix.to/#/#linuxphoneapps:matrix.org">Matrix Chat</a> and start coding, chatting, contributing!'
content = 'Join our <a href="https://framagit.org/linuxphoneapps/">Framagit organization</a>, the <a href="https://matrix.to/#/#linuxphoneapps:matrix.org">Matrix Chat</a> and start coding, chatting, contributing!'
[[extra.list]]
title = "Follow us on twitter!"
content = 'Get informed about project progress and added apps: <a href="https://twitter.com/linuxphoneapps">@LinuxPhoneApps</a>'
+++
+++

1
content/apps Submodule

@ -0,0 +1 @@
Subproject commit bcee6ab3b9e9ed13886c77156286ab441e54ce73

View File

@ -1,10 +0,0 @@
+++
title = "Apps"
description = "A list of apps."
date = 2025-05-01T08:00:00+00:00
updated = 2021-05-01T08:00:00+00:00
sort_by = "title"
template = "apps/section.html"
in_search_index = true
generate_feed = true
+++

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 252 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 347 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

View File

@ -1,40 +0,0 @@
+++
title = "KDeltaChat"
description = "DeltaChat client built with Kirigami"
date = "2021-09-04"
updated = "2021-09-11"
author = "1peter10" # Original reporter
template = "apps/page.html"
[taxonomies]
mobile_compatibilities = ["5"]
frameworks = ["Kirigami"]
project_licenses = ["GPL-3.0-or-later"] # SPDX 3-0 identifier
services = ["deltachat"]
backends = ["libdeltachat"]
categories = ["messenger"]
freedesktop_categories = ["Qt","KDE","Network","Chat",]
build_systems = ["cmake"]
programming_languages = ["C++","QML",]
state = ["WIP"]
[extra]
### URLs
repository = "https://git.sr.ht/~link2xt/kdeltachat"
homepage = ""
bugtracker = ""
donation = ""
translate = ""
repology = ["kdeltachat"] # array
flathub = ""
flatpak_json_url = "" # not used yet, fill anyway please
app_id = "chat.delta.KDeltaChat"
# summary variable is in page.description (below title) for technical reasons (https://github.com/linuxphoneapps/linuxphoneapps.org/issues)
summary_source_url = "https://git.sr.ht/~link2xt/kdeltachat"
# description is below in page content
description_source_url = "" # Don't fill if editorial
icon_url = "" # not used yet, fill anyway please
notice = "No release yet, but works for simple, encrypted text conversations. Sending attachments (images etc.) is not implemented yet, received images aren't scaling properly. Adding an account works via importing a backup or the add account screen. <br> Compiling the necessary libdeltachat library takes a long time and requires more than 3GBs of RAM (at 4 threads) - doing this on device (PinePhone, Librem 5) is not recommended." # can be markdown, use <br> for line breaks
scale-to-fit = "" # Only fill where necessary
license_url = "https://git.sr.ht/~link2xt/kdeltachat/tree/master/item/LICENSE"
appstream_xml_url = ""
listing_contributors = [""] # Further contributors (array)
+++

View File

@ -1,41 +0,0 @@
+++
title = "Gtkeddit"
description = "A GTK4 Reddit client written in C++"
date = "2021-08-24"
updated = "2021-09-01"
author = "1peter10" # Original reporter
template = "apps/page.html"
[taxonomies]
mobile_compatibilities = ["5"]
frameworks = ["GTK4", "libadwaita",]
metadata_licenses = ["FSFAP"]
project_licenses = ["GPL-3.0-or-later"] # SPDX 3-0 identifier
# services =
# backends =
categories = ["social media"]
freedesktop_categories = ["GTK","Network","News","Feed",]
build_systems = ["cmake"]
programming_languages = ["C++"]
state = ["early"]
[extra]
repository = "https://gitlab.com/caveman250/Gtkeddit"
homepage = ""
bugtracker = "https://gitlab.com/caveman250/Gtkeddit/-/issues"
donation = ""
translate = ""
repology = ["gtkeddit",] # array
flathub = "https://flathub.org/apps/details/io.gitlab.caveman250.gtkeddit"
flatpak_json_url = "https://gitlab.com/caveman250/Gtkeddit/-/raw/master/flatpak/io.gitlab.caveman250.gtkeddit.json" # not used yet, fill anyway please
app_id = "io.gitlab.caveman250.gtkeddit"
# summary variable is in page.description (below title) for technical reasons (https://github.com/linuxphoneapps/linuxphoneapps.org/issues)
summary_source_url = "https://gitlab.com/caveman250/Gtkeddit"
# description is below in page content
description_source_url = "https://gitlab.com/caveman250/Gtkeddit/-/raw/master/io.gitlab.caveman250.gtkeddit.metainfo.xml" # Don't fill if editorial
icon_url = "https://gitlab.com/caveman250/Gtkeddit/-/raw/master/gtkeddit.png" # not used yet, fill anyway please
notice = ""
scale-to-fit = "" # Only fill where necessary
license_url = "https://gitlab.com/caveman250/Gtkeddit/-/raw/master/LICENSE"
appstream_xml_url = "https://gitlab.com/caveman250/Gtkeddit/-/raw/master/io.gitlab.caveman250.gtkeddit.metainfo.xml"
listing_contributors = [""] # Further contributors (array)
+++
Gtkeddit is a GTK4 Reddit client written in C++, designed for use with Linux phones such as the Pinephone.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 286 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 194 KiB

View File

@ -1,44 +0,0 @@
+++
# Remove this line before commiting
draft = true
title = "" # Name of the app
description = "" # Summary describing the app
date = "2019-02-01" # Date when the app was added
# updated = "" # Empty at first, filled on updates
author = "" # Original reporter
template = "apps/page.html"
[taxonomies]
mobile_compatibilities = ["5"]
frameworks = [""]
metadata_licenses = [""] # License of project metadata
project_licenses = [""] # SPDX 3-0 identifier
# services =
# backends =
categories = ["file manager"]
freedesktop_categories = ["Qt","KDE","System","FileTools","FileManager",]
build_systems = ["cmake"]
programming_languages = ["C++","QML",]
state = ["mature"]
[extra]
repository = "https://invent.kde.org/maui/index-fm"
homepage = "https://mauikit.org/"
bugtracker = "https://invent.kde.org/maui/index-fm/-/issues"
donation = "https://www.kde.org/community/donations"
translate = ""
repology = ["index-fm"] # array
flathub = "https://flathub.org/apps/details/org.kde.index"
flatpak_json_url = "" # not used yet, fill anyway please
app_id = "org.kde.index"
# summary variable is in page.description (below title) for technical reasons (https://github.com/linuxphoneapps/linuxphoneapps.org/issues)
summary_source_url = "https://invent.kde.org/maui/index-fm"
# description is below in page content
description_source_url = "https://invent.kde.org/maui/index-fm" # Don't fill if editorial
icon_url = "https://invent.kde.org/maui/index-fm/-/raw/master/logo.png" # not used yet, fill anyway please
notice = "" # can be markdown or html, use <br> for line breaks
scale-to-fit = "" # Only fill where necessary
license_url = "https://invent.kde.org/maui/index-fm/-/blob/master/LICENSES/GPL-3.0-or-later.txt"
appstream_xml_url = "https://invent.kde.org/maui/index-fm/-/raw/master/org.kde.index.appdata.xml"
listing_contributors = ["1peter10"] # Further contributors (array)
+++
This is where the description goes. Feel free to use markdown formatting.

View File

@ -1,44 +0,0 @@
+++
title = "Index"
description = "Multi-platform file manager"
date = "2019-02-01"
updated = "2021-08-24"
author = "cahfofpai" # Original reporter
template = "apps/page.html"
[taxonomies]
mobile_compatibilities = ["5"]
frameworks = ["MauiKit", "Kirigami"]
metadata_licenses = ["CC0-1.0"]
project_licenses = ["LGPL-3.0-or-later"] # SPDX 3-0 identifier
# services =
# backends =
categories = ["file manager"]
freedesktop_categories = ["Qt","KDE","System","FileTools","FileManager",]
build_systems = ["cmake"]
programming_languages = ["C++","QML",]
state = ["mature"]
[extra]
repository = "https://invent.kde.org/maui/index-fm"
homepage = "https://mauikit.org/"
bugtracker = "https://invent.kde.org/maui/index-fm/-/issues"
donation = "https://www.kde.org/community/donations"
translate = ""
repology = ["index-fm"] # array
flathub = "https://flathub.org/apps/details/org.kde.index"
flatpak_json_url = "" # not used yet, fill anyway please
app_id = "org.kde.index"
# summary variable is in page.description (below title) for technical reasons (https://github.com/linuxphoneapps/linuxphoneapps.org/issues)
summary_source_url = "https://invent.kde.org/maui/index-fm"
# description is below in page content
description_source_url = "https://invent.kde.org/maui/index-fm" # Don't fill if editorial
icon_url = "https://invent.kde.org/maui/index-fm/-/raw/master/logo.png" # not used yet, fill anyway please
notice = "" # can be markdown or html, use <br> for line breaks
moreinformation =[
{url = "https://medium.com/@temisclopeolimac/index-overview-b2ddcb16534f", name = "Camilo Higuita: Index — overview (Nov 2018)"},
]
scale-to-fit = "" # Only fill where necessary
license_url = "https://invent.kde.org/maui/index-fm/-/blob/master/LICENSES/GPL-3.0-or-later.txt"
appstream_xml_url = "https://invent.kde.org/maui/index-fm/-/raw/master/org.kde.index.appdata.xml"
listing_contributors = ["1peter10"] # Further contributors (array)
+++
Index is a file manager that works on desktops, Android and Plasma Mobile. Index lets you browse your system files and applications and preview your music, text, image and video files and share them with external applications.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 209 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 350 KiB

View File

@ -1,40 +0,0 @@
+++
title = "Telly Skout"
description = "Convergent EPG based on Kirigami"
date = "2021-08-14"
updated = "2021-08-25"
author = "1peter10" # Original reporter
template = "apps/page.html"
[taxonomies]
mobile_compatibilities = ["5"]
frameworks = ["Kirigami"]
metadata_licenses = ["FSFAP"]
project_licenses = ["GPL-2.0-or-later"] # SPDX 3-0 identifier
services = ["xmltv.se"]
# backends =
categories = ["tv guide"]
freedesktop_categories = ["Qt","KDE","Utility",]
build_systems = ["cmake"]
programming_languages = ["C++","QML",]
state = ["WIP"]
[extra]
repository = "https://github.com/plata/telly-skout"
homepage = ""
bugtracker = "https://github.com/plata/telly-skout/issues"
donation = ""
translate = ""
repology = ["telly-skout"]
flathub = "" # not used yet, fill anyway please
flatpak_json_url = "" # not used yet, fill anyway please
app_id = "org.kde.telly-skout"
# summary variable is in page.description (below title) for technical reasons (https://github.com/linuxphoneapps/linuxphoneapps.org/issues)
summary_source_url = "https://github.com/plata/telly-skout"
# description is below in page content
description_source_url = "" # Don't fill if editorial
icon_url = "" # not used yet, fill anyway please
notice = "WIP - somewhat works, supports many European TV channels. Originally called Telly Scout." # can be markdown or html, use <br> for line breaks
scale-to-fit = "" # Only fill where necessary
license_url = "https://github.com/plata/telly-skout/tree/main/LICENSES"
appstream_xml_url = "https://github.com/plata/telly-skout/raw/main/org.kde.telly-skout.appdata.xml"
listing_contributors = [""] # Further contributors (array)
+++

Binary file not shown.

Before

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 158 KiB

View File

@ -1,40 +0,0 @@
+++
title = "Vvave"
description = "Multi-platform media player"
date = "2019-02-01"
updated = "2021-08-04"
author = "cahfofpai"
template = "apps/page.html"
[taxonomies]
mobile_compatibilities = ["5"]
frameworks = ["MauiKit", "Kirigami"]
metadata_licenses = ["CC0-1.0"]
project_licenses = ["LGPL-3.0-or-later"] # SPDX 3-0 identifier
# services =
# backends =
categories = ["music"]
freedesktop_categories = ["Qt","Audio","Player",]
build_systems = ["cmake"]
programming_languages = ["C++","QML",]
state = ["mature"]
[extra]
repository = "https://invent.kde.org/maui/vvave"
homepage = "https://vvave.kde.org/"
bugtracker = "https://invent.kde.org/maui/vvave/-/issues"
donation = "https://www.kde.org/community/donations"
translate = ""
repology = ["vvave"] # array
flathub = "https://flathub.org/apps/details/org.kde.vvave"
flatpak_json_url = "" # not used yet, fill anyway please
app_id = "org.kde.vvave"
# summary variable is in page.description (below title) for technical reasons (https://github.com/linuxphoneapps/linuxphoneapps.org/issues)
summary_source_url = "https://invent.kde.org/maui/vvave"
# description is below in page content
description_source_url = "" # Don't fill if editorial
icon_url = "https://invent.kde.org/maui/vvave/-/raw/master/logo.png" # not used yet, fill anyway please
notice = "" # can be markdown or html, e.g. use <br> for line breaks
scale-to-fit = "" # Only fill where necessary
license_url = "https://invent.kde.org/maui/vvave/-/blob/master/LICENSE"
appstream_xml_url = "https://invent.kde.org/maui/vvave/-/raw/master/org.kde.vvave.appdata.xml"
listing_contributors = ["1peter10"] # Further contributors (array)
+++

18
content/authors/_index.md Normal file
View File

@ -0,0 +1,18 @@
+++
title = "Authors"
description = "The authurs of the blog articles."
date = 2021-04-01T08:00:00+00:00
updated = 2021-04-01T08:00:00+00:00
draft = false
# If add a new author page in this section, please add a new item,
# and the format is as follows:
#
# "author-name-in-url" = "the-full-path-of-the-author-page"
#
# Note: We use quoted keys here.
[extra.author_pages]
"aaran-xu" = "authors/aaran-xu.md"
+++
The authors of the blog articles.

View File

@ -0,0 +1,11 @@
+++
title = "Aaran Xu"
description = "Creator of AdiDoks."
date = 2021-04-01T08:50:45+00:00
updated = 2021-04-01T08:50:45+00:00
draft = false
+++
Creator of **AdiDoks**.
[@aaranxu](https://github.com/aaranxu)

7
content/lists/_index.md Normal file
View File

@ -0,0 +1,7 @@
+++
title = "Lists"
description = "The home the various lists"
sort_by = "date"
paginate_by = 2
template = "lists/section.html"
+++

69
content/lists/apps.md Normal file
View File

@ -0,0 +1,69 @@
+++
title = "Apps"
description = "A list of apps that work on Linux Phones like the PinePhone or Librem 5."
date = 2021-12-28T07:00:00+00:00
template = "lists/apps.html"
draft = false
[extra]
lead = 'The LINMOBapps Apps list'
images = []
+++
[Get .csv](https://framagit.org/linuxphoneapps/csv-lists/-/raw/master/apps.csv)
* If you want to revive unmaintained apps, check the [Archive](../archive/)!
* If you want to help test apps or see what's likely to be added soon, check out [apps-to-be-added.csv](https://framagit.org/linuxphoneapps/csv-lists/-/blob/master/todo/apps-to-be-added.md)
### Legend/Field Explaination
* **name:** name of the app
* **category:** App category (one or two words)
* **summary:** one or two sentences about the app - normally a quote from the project site
* **mobile compatibility:** a number between 5 (best) and 0 (worst) to name the mobile compatibility of the app (this is different from MGLApps to be closer to the ratings in [Mobian Wiki](https://wiki.mobian-project.org/doku.php?id=apps); category 3 may be redefined, as it includes apps that apparently have not been tested on mobile GNU/Linux or postmarketOS)
* 5 = perfect - nothing left to be done
* 4 = almost perfect, works fine with tweaks for scaling, like `scale-to-fit´ on Phosh
* 3 = some parts of the app are not usable with touch input on small screens
* 2 = many parts of the app are not usable with touch input on small screens
* 1 = app is unusable with touch input on small screens why is this app in the LINMOBapps app list?
* A = mobile compatibility could be perfect because the app was ported to other mobile platforms (e.g. Android)
* **repository:** link to the code repository
* **framework:** UI frameworks which are used by the app
* **screenshots:** links to sites providing screenshots of the application
* **website:** link to the projects website
* **license:** license of the project
* **appid:** AppStream ID in the form {tld}.{vendor}.{product} (e.g. org.kde.itinerary)
* **appstream link:** AppStream link for automated install with software like Discover or GNOME Software (experimental)
* **scale-to-fit:** AppID to scale the app properly in Phosh (with `scale-to-fit AppID on`). To find out these IDs, put the following lines somewhere, e.g. into a file called `~/.local/bin/get-app-id.sh`:
`#!/bin/bash
WAYLAND_DEBUG=1 $1 |& grep 'xdg_toplevel@[0-9]\+\.set_app_id'`
See also this post on [linmob.net](https://linmob.net/2020/07/27/pinephone-daily-driver-challenge-part2-flatpak-and-scaling-in-phosh.html#manual-scaling-in-phosh)
* **flatpak:** link to the Flathub page (if available) or another location the app could be installed from as flatpak. For help with installing Flatpaks see [linmob.net](https://linmob.net/2020/07/27/pinephone-daily-driver-challenge-part2-flatpak-and-scaling-in-phosh.html#flatpaks-across-pinephone-distributions)
* **aur:** name of the corresponding package build in the [Arch User Repository](https://aur.archlinux.org). For help with the AUR see [linmob.net](https://linmob.net/2020/09/05/pinephone-building-plasma-mobile-apps-from-the-aur.html#preparations)
* **postmarketos:** name of the corresponding package in the postmarketOS/Alpine repositories _(definitely incomplete, contributions welcome!)_
* **debian:** name of the corresponding debian package _(definitely incomplete, contributions welcome!)_
* **notice:** additional information about develpment stage, mobile compatibility or what else is important to know
* **more information:** links to sites providing more information about the app
* **backend:** backends which are used by the app
* **service:** services the app includes and makes use of
* **description:** more detailed text about the app - normally a quote from the project site
* **description source:** if 'description' is a quote, this provides the source
* **summary source:** if 'summary' is a quote, this provides the source
* **freedesktop (sub)categories:** good old ancient [freedesktop categories](https://specifications.freedesktop.org/menu-spec/latest/apas02.html).
* **main languages:** main programming languages the project is realized with
* **build system:** build system to build the app. More documentation in our [Docs](docs/build-systems).
* **original reporter:** person that originally added the app to the list.
### Credits and Liability
LinuxPhoneApps.org is, just like its origins, the LINMOBapps app list and MGLApps app list, licensed under [CC BY-SA 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/)
Built with ♥ and amazing free and open source software:
* [Pivot.js](http://rwjblue.github.io/pivot.js/),
* [Datatables](https://www.datatables.net/),
* [Linkify](https://soapbox.github.io/linkifyjs/),
* [Bulma](http://bulma.io/),
* [Bulma-Extensions](https://wikiki.github.io) and
* [jQuery](https://jquery.com/)
The LinuxPhoneApps.org contributors do not take any warranty for the correctness of any information on this page. If you want to be sure, please visit the mentioned and linked project sites and check the information. The fields "summary" and "description" are quotations from the sites mentioned in the fields "summary source" and "description source".

67
content/lists/archive.md Normal file
View File

@ -0,0 +1,67 @@
+++
title = "Archive"
description = "A list of apps that work on Linux Phones like the PinePhone or Librem 5."
date = 2021-12-27T07:00:00+00:00
template = "lists/archive.html"
draft = false
[extra]
lead = 'The LINMOBapps Archive'
images = []
+++
[Get .csv](https://framagit.org/linuxphoneapps/csv-lists/-/raw/master/archive.csv)
### Legend/Field Explaination
* **name:** name of the app
* **category:** App category (one or two words)
* **summary:** one or two sentences about the app - normally a quote from the project site
* **mobile compatibility:** a number between 5 (best) and 0 (worst) to name the mobile compatibility of the app (this is different from MGLApps to be closer to the ratings in [Mobian Wiki](https://wiki.mobian-project.org/doku.php?id=apps); category 3 may be redefined, as it includes apps that apparently have not been tested on mobile GNU/Linux or postmarketOS)
* 5 = perfect - nothing left to be done
* 4 = almost perfect, works fine with tweaks for scaling, like `scale-to-fit´ on Phosh
* 3 = some parts of the app are not usable with touch input on small screens
* 2 = many parts of the app are not usable with touch input on small screens
* 1 = app is unusable with touch input on small screens why is this app in the LINMOBapps app list?
* A = mobile compatibility could be perfect because the app was ported to other mobile platforms (e.g. Android)
* **repository:** link to the code repository
* **framework:** UI frameworks which are used by the app
* **screenshots:** links to sites providing screenshots of the application
* **website:** link to the projects website
* **license:** license of the project
* **appid:** AppStream ID in the form {tld}.{vendor}.{product} (e.g. org.kde.itinerary)
* **appstream link:** AppStream link for automated install with software like Discover or GNOME Software (experimental)
* **scale-to-fit:** AppID to scale the app properly in Phosh (with `scale-to-fit AppID on`). To find out these IDs, put the following lines somewhere, e.g. into a file called `~/.local/bin/get-app-id.sh`:
`#!/bin/bash
WAYLAND_DEBUG=1 $1 |& grep 'xdg_toplevel@[0-9]\+\.set_app_id'`
See also this post on [linmob.net](https://linmob.net/2020/07/27/pinephone-daily-driver-challenge-part2-flatpak-and-scaling-in-phosh.html#manual-scaling-in-phosh)
* **flatpak:** link to the Flathub page (if available) or another location the app could be installed from as flatpak. For help with installing Flatpaks see [linmob.net](https://linmob.net/2020/07/27/pinephone-daily-driver-challenge-part2-flatpak-and-scaling-in-phosh.html#flatpaks-across-pinephone-distributions)
* **aur:** name of the corresponding package build in the [Arch User Repository](https://aur.archlinux.org). For help with the AUR see [linmob.net](https://linmob.net/2020/09/05/pinephone-building-plasma-mobile-apps-from-the-aur.html#preparations)
* **postmarketos:** name of the corresponding package in the postmarketOS/Alpine repositories _(definitely incomplete, contributions welcome!)_
* **debian:** name of the corresponding debian package _(definitely incomplete, contributions welcome!)_
* **notice:** additional information about develpment stage, mobile compatibility or what else is important to know
* **more information:** links to sites providing more information about the app
* **backend:** backends which are used by the app
* **service:** services the app includes and makes use of
* **description:** more detailed text about the app - normally a quote from the project site
* **description source:** if 'description' is a quote, this provides the source
* **summary source:** if 'summary' is a quote, this provides the source
* **freedesktop (sub)categories:** good old ancient [freedesktop categories](https://specifications.freedesktop.org/menu-spec/latest/apas02.html).
* **main languages:** main programming languages the project is realized with
* **build system:** build system to build the app. More documentation in our [Docs](docs/build-systems).
* **original reporter:** person that originally added the app to the list.
### Credits and Liability
LinuxPhoneApps.org is, just like its origins, the LINMOBapps app list and MGLApps app list, licensed under [CC BY-SA 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/)
Built with ♥ and amazing free and open source software:
* [Pivot.js](http://rwjblue.github.io/pivot.js/),
* [Datatables](https://www.datatables.net/),
* [Linkify](https://soapbox.github.io/linkifyjs/),
* [Bulma](http://bulma.io/),
* [Bulma-Extensions](https://wikiki.github.io) and
* [jQuery](https://jquery.com/)
The LinuxPhoneApps.org contributors do not take any warranty for the correctness of any information on this page. If you want to be sure, please visit the mentioned and linked project sites and check the information. The fields "summary" and "description" are quotations from the sites mentioned in the fields "summary source" and "description source".

67
content/lists/games.md Normal file
View File

@ -0,0 +1,67 @@
+++
title = "Games"
description = "A list of apps that work on Linux Phones like the PinePhone or Librem 5."
date = 2021-12-28T07:00:00+00:00
template = "lists/games.html"
draft = false
[extra]
lead = 'The LINMOBapps Game list'
images = []
+++
This is the games list, which is currently maintained by Moxvallix — Contributions to the list are welcome.
See also: Patched games repository: [https://github.com/moxvallix/LinMobGames](https://github.com/moxvallix/LinMobGames)
### Legend/Field Explaination
* **name:** name of the app
* **category:** App category (one or two words)
* **reporter:** Credit to whoever reported that the app works
* **verified:** App has been tested on a Linux mobile, and declared working (touch, ui etc) by a maintainer.
* **summary:** one or two sentences about the app - normally a quote from the project site
* **mobile compatibility:** a number between 5 (best) and 0 (worst) to name the mobile compatibility of the app (this is different from MGLApps to be closer to the ratings in [Mobian Wiki](https://wiki.mobian-project.org/doku.php?id=apps); category 3 may be redefined, as it includes apps that apparently have not been tested on mobile GNU/Linux or postmarketOS)
* 5 = perfect - nothing left to be done
* 4 = almost perfect, works fine with tweaks for scaling, like \`scale-to-fit´ on Phosh
* 3 = some parts of the app are not usable with touch input on small screens
* 2 = many parts of the app are not usable with touch input on small screens
* 1 = app is unusable with touch input on small screens why is this app in the LINMOBapps app list?
* A = mobile compatibility could be perfect because the app was ported to other mobile platforms (e.g. Android)
* **repository:** link to the code repository
* **framework:** UI frameworks which are used by the app
* **screenshots:** links to sites providing screenshots of the application
* **website:** link to the projects website
* **license:** license of the project
* **appid:** AppStream ID in the form {tld}.{vendor}.{product} (e.g. org.kde.itinerary)
* **scale-to-fit:** AppID to scale the app properly in Phosh (with scale-to-fit AppID on). To find out these IDs, use [get-app-id.sh](https://framagit.org/linmobapps/linmobapps.frama.io/-/blob/master/get-app-id.sh) or see [linmob.net](https://linmob.net/2020/07/27/pinephone-daily-driver-challenge-part2-flatpak-and-scaling-in-phosh.html#manual-scaling-in-phosh)
* **flatpak:** link to the Flathub page (if available) or another location the app could be installed from as flatpak. For help with installing Flatpaks see [linmob.net](https://linmob.net/2020/07/27/pinephone-daily-driver-challenge-part2-flatpak-and-scaling-in-phosh.html#flatpaks-across-pinephone-distributions)
* **aur:** name of the corresponding package build in the [Arch User Repository](https://aur.archlinux.org). For help with the AUR see [linmob.net](https://linmob.net/2020/09/05/pinephone-building-plasma-mobile-apps-from-the-aur.html#preparations)
* **postmarketos:** name of the corresponding package in the postmarketOS/Alpine repositories _(definitely incomplete, contributions welcome!)_
* **debian:** name of the corresponding debian package _(definitely incomplete, contributions welcome!)_
* **notice:** additional information about develpment stage, mobile compatibility or what else is important to know
* **more information:** links to sites providing more information about the app
* **backend:** backends which are used by the app
* **service:** services the app includes and makes use of
* **description:** more detailed text about the app - normally a quote from the project site
* **description source:** if 'description' is a quote, this provides the source
* **summary source:** if 'summary' is a quote, this provides the source
### Get in touch
If you want to contact Moxvallix, the games list maintainer, you can contact him on matrix at [moxvallix:matrix.org](https://matrix.to/#/@moxvallix:matrix.org), or send him an email at [moxvallix@gmail.com](mailto:moxvallix@gmail.com).
### Credits and Liability
LinuxPhoneApps.org is, just like its origins, the LINMOBapps app list and MGLApps app list, licensed under [CC BY-SA 4.0 International](https://creativecommons.org/licenses/by-sa/4.0/)
Built with ♥ and amazing free and open source software:
* [Pivot.js](http://rwjblue.github.io/pivot.js/),
* [Datatables](https://www.datatables.net/),
* [Linkify](https://soapbox.github.io/linkifyjs/),
* [Bulma](http://bulma.io/),
* [Bulma-Extensions](https://wikiki.github.io) and
* [jQuery](https://jquery.com/)
The LinuxPhoneApps.org contributors do not take any warranty for the correctness of any information on this page. If you want to be sure, please visit the mentioned and linked project sites and check the information. The fields "summary" and "description" are quotations from the sites mentioned in the fields "summary source" and "description source".

View File

@ -0,0 +1,41 @@
+++
title = "Hello World"
description = "Introducing Doks, a Hugo theme helping you build modern documentation websites that are secure, fast, and SEO-ready — by default."
date = 2021-05-01T09:19:42+00:00
updated = 2021-05-01T09:19:42+00:00
draft = false
template = "blog/page.html"
[taxonomies]
authors = ["Rustaceans"]
[extra]
lead = "This is the source code of the traditional <b>Hello World</b> program."
+++
```rust
// This is a comment, and is ignored by the compiler
// This is the main function
fn main() {
// Statements here are executed when the compiled binary is called
// Print text to the console
println!("Hello World!");
}
```
`println!` is a macro that prints text to the console.
A binary can be generated using the Rust compiler: `rustc`.
```bash
$ rustc hello.rs
```
`rustc` will produce a `hello` binary that can be executed.
```bash
$ ./hello
Hello World!
```

View File

@ -0,0 +1,152 @@
+++
title = "Markdown Syntax Guide"
description = "Sample article showcasing basic Markdown syntax and formatting for HTML elements."
date = 2021-04-20T09:19:42+00:00
updated = 2021-04-20T09:19:42+00:00
draft = false
template = "blog/page.html"
[taxonomies]
authors = ["Public"]
[extra]
lead = "This article offers a sample of basic Markdown syntax that can be used in Zola content files, also it shows whether basic HTML elements are decorated with CSS in a Zola theme."
+++
## Headings
The following HTML `<h1>`—`<h6>` elements represent six levels of section
headings. `<h1>` is the highest section level while `<h6>` is the lowest.
# H1
## H2
### H3
#### H4
##### H5
###### H6
## Paragraph
Xerum, quo qui aut unt expliquam qui dolut labo. Aque venitatiusda cum,
voluptionse latur sitiae dolessi aut parist aut dollo enim qui voluptate ma
dolestendit peritin re plis aut quas inctum laceat est volestemque commosa as
cus endigna tectur, offic to cor sequas etum rerum idem sintibus eiur? Quianimin
porecus evelectur, cum que nis nust voloribus ratem aut omnimi, sitatur?
Quiatem. Nam, omnis sum am facea corem alique molestrunt et eos evelece arcillit
ut aut eos eos nus, sin conecerem erum fuga. Ri oditatquam, ad quibus unda
veliamenimin cusam et facea ipsamus es exerum sitate dolores editium rerore
eost, temped molorro ratiae volorro te reribus dolorer sperchicium faceata
tiustia prat.
Itatur? Quiatae cullecum rem ent aut odis in re eossequodi nonsequ idebis ne
sapicia is sinveli squiatum, core et que aut hariosam ex eat.
## Blockquotes
The blockquote element represents content that is quoted from another source,
optionally with a citation which must be within a `footer` or `cite` element,
and optionally with in-line changes such as annotations and abbreviations.
#### Blockquote without attribution
> Tiam, ad mint andaepu dandae nostion secatur sequo quae.
> **Note** that you can use *Markdown syntax* within a blockquote.
#### Blockquote with attribution
> Don't communicate by sharing memory, share memory by communicating.<br>
> — <cite>Rob Pike[^1]</cite>
> All men by nature desire to know.<br>
> ― <cite>Aristotle[^2]</cite>
## Tables
Tables aren't part of the core Markdown spec, but Zola supports them
out-of-the-box.
Name | Age
--------|------
Bob | 27
Alice | 23
#### Inline Markdown within tables
| Italics | Bold | Code |
| -------- | -------- | ------ |
| *italics* | **bold** | `code` |
## Code Blocks
#### Code block with backticks
```html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Example HTML5 Document</title>
</head>
<body>
<p>Test</p>
</body>
</html>
```
#### Code block indented with four spaces
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Example HTML5 Document</title>
</head>
<body>
<p>Test</p>
</body>
</html>
## List Types
#### Ordered List
1. First item
2. Second item
3. Third item
#### Unordered List
- List item
- Another item
- And another item
#### Nested list
- Fruit
- Apple
- Orange
- Banana
- Dairy
- Milk
- Cheese
## Other Elements — abbr, sub, sup, kbd, mark
<abbr title="Graphics Interchange Format">GIF</abbr> is a bitmap image format.
H<sub>2</sub>O
X<sup>n</sup> + Y<sup>n</sup> = Z<sup>n</sup>
Press <kbd><kbd>CTRL</kbd>+<kbd>ALT</kbd>+<kbd>Delete</kbd></kbd> to end the
session.
Most <mark>salamanders</mark> are nocturnal, and hunt for insects, worms, and
other small creatures.
---
<!-- Note: There must be a blank line between every two lines of the footnote difinition. -->
[^1]: The above quote is excerpted from Rob Pike's [talk](https://www.youtube.com/watch?v=PAAkCSZUG1c)
during Gopherfest, November 18, 2015.
[^2]: The quote is the first sentence of Aristotle's [Metaphysics](http://classics.mit.edu/Aristotle/metaphysics.html).

View File

@ -0,0 +1,48 @@
+++
title = "Math Typesetting"
description = "Introducing Doks, a Hugo theme helping you build modern documentation websites that are secure, fast, and SEO-ready — by default."
date = 2021-04-08T09:19:42+00:00
updated = 2021-04-08T09:19:42+00:00
draft = false
template = "blog/page.html"
[taxonomies]
authors = ["Public"]
[extra]
lead = "Mathematical notation in a project can be enabled by using third party JavaScript libraries."
math = true
+++
In this example we will be using [KaTeX](https://katex.org/)
- Create a macro under `/template/macros/math.html` with a macro named `math`.
- Within this macro reference the [Auto-render Extension](https://katex.org/docs/autorender.html) or host these scripts locally.
- Import the macro in your templates like so:
```bash
{% import 'macros/math.html' as macros %}
{% if page.extra.math or section.extra.math or config.extra.math %}
{{ macros::math() }}
{% endif %}
```
- To enable KaTex globally set the parameter `extra.math` to `true` in a project's configuration
- To enable KaTex on a per page basis include the parameter `extra.math = true` in content files
**Note:**
1. The MathJax library is the other optional choice, and you can set the parameter `extra.library` to `mathjax` in a project's configuration
2. Use the online reference of [Supported TeX Functions](https://katex.org/docs/supported.html)
### Examples
<p>
Inline math: \(\varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887…\)
</p>
Block math:
$$
\varphi = 1+\frac{1} {1+\frac{1} {1+\frac{1} {1+\cdots} } }
$$

View File

@ -0,0 +1,15 @@
+++
title = "Say hello to AdiDoks 👋"
description = "Introducing AdiDoks, a Zola theme helping you build modern documentation websites, which is a port of the Hugo theme Doks for Zola."
date = 2021-04-03T07:00:00+00:00
updated = 2021-04-03T07:00:00+00:00
template = "blog/page.html"
draft = false
[taxonomies]
authors = ["Aaran Xu"]
[extra]
lead = 'Introducing AdiDoks, a Zola theme helping you build modern documentation websites, which is a port of the Hugo theme <a href="https://github.com/h-enk/doks">Doks</a> for Zola.'
images = []
+++

BIN
static/.DS_Store vendored Normal file

Binary file not shown.

1
static/csv-lists Submodule

@ -0,0 +1 @@
Subproject commit c352fd013f490dbe9916323c7c3b4e34ddb1e5ba

0
static/lib/.gitkeep Normal file
View File

0
static/lib/css/.gitkeep Normal file
View File

View File

@ -0,0 +1 @@
@-webkit-keyframes spinAround{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spinAround{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.accordions .accordion{display:flex;flex-direction:column;background-color:#f5f5f5;border-radius:4px;font-size:1rem}.accordions .accordion strong{color:currentColor}.accordions .accordion a:not(.button):not(.tag){color:currentColor;text-decoration:underline}.accordions .accordion:not(:first-child) .accordion-header{border-radius:0}.accordions .accordion:not(:last-child){margin-bottom:0}.accordions .accordion:not(:last-child) .accordion-content{border-radius:0}.accordions .accordion .toggle,.accordions .accordion [data-action=toggle]{cursor:pointer}.accordions .accordion .accordion-header{align-items:center;background-color:#4a4a4a;border-radius:4px 4px 0 0;color:#fff;display:flex;justify-content:space-between;line-height:1.25;padding:.5em .75em;position:relative}.accordions .accordion .accordion-header .toggle{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-moz-appearance:none;-webkit-appearance:none;background-color:rgba(10,10,10,.2);border:none;border-radius:290486px;display:inline-block;flex-grow:0;flex-shrink:0;margin-left:.75em;height:20px;width:20px;max-height:20px;max-width:20px;min-height:20px;min-width:20px;outline:0;position:relative;vertical-align:top}.accordions .accordion .accordion-header .toggle::before{color:#fff;display:block;left:0;position:absolute;top:-.1em;right:0;bottom:0;content:'\002B'}.accordions .accordion .accordion-header .toggle::after{display:none}.accordions .accordion .accordion-header+.accordion-body{overflow-y:hidden;max-height:0;color:#4a4a4a;border:1px solid #dbdbdb;border-radius:0 0 4px 4px;border-top:none;transition:max-height .2s}.accordions .accordion .accordion-header+.accordion-body .accordion-content{padding:1em 1.25em}.accordions .accordion.is-active .accordion-header .toggle::before{content:'\002D'}.accordions .accordion.is-active .accordion-body{max-height:100em}.accordions .accordion.is-link{background-color:#f6f9fe}.accordions .accordion.is-link .accordion-header{background-color:#3273dc;color:#fff}.accordions .accordion.is-link .accordion-content{border-color:#3273dc;color:#22509a}

File diff suppressed because one or more lines are too long

11811
static/lib/css/bulma.css vendored Normal file

File diff suppressed because it is too large Load Diff

1
static/lib/css/bulma.min.css vendored Normal file

File diff suppressed because one or more lines are too long

1
static/lib/css/pivot.css Normal file
View File

@ -0,0 +1 @@
html{padding-top:40px}div.dataTables_length label{float:left;text-align:left}div.dataTables_length select{width:75px}div.dataTables_filter label{float:right}div.dataTables_info{padding-top:8px}div.dataTables_paginate{float:right;margin:0}table.table{clear:both;margin-bottom:6px!important}table.table thead .sorting,table.table thead .sorting_asc,table.table thead .sorting_asc_disabled,table.table thead .sorting_desc,table.table thead .sorting_desc_disabled{cursor:pointer}th{padding-left:20px!important}table.table thead .sorting{background:url('../images/sort_both.png') center left no-repeat}table.table thead .sorting_asc{background:url('../images/sort_asc.png') center left no-repeat}table.table thead .sorting_desc{background:url('../images/sort_desc.png') center left no-repeat}table.table thead .sorting_asc_disabled{background:url('../images/sort_asc_disabled.png') center left no-repeat}table.table thead .sorting_desc_disabled{background:url('../images/sort_desc_disabled.png') center left no-repeat}table.dataTable th:active{outline:0}.pivot_header_fields{margin-left:-20px}.pivot_header2{font-size:x-large;font-weight:700}.pivot_field{width:300px;float:left;margin-left:20px}

View File

@ -0,0 +1 @@
table.dataTable.dtr-inline.collapsed>tbody>tr>td.child,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty{cursor:default !important}table.dataTable.dtr-inline.collapsed>tbody>tr>td.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>th.child:before,table.dataTable.dtr-inline.collapsed>tbody>tr>td.dataTables_empty:before{display:none !important}table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>td:first-child,table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>th:first-child{position:relative;padding-left:30px;cursor:pointer}table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>td:first-child:before,table.dataTable.dtr-inline.collapsed>tbody>tr[role="row"]>th:first-child:before{top:9px;left:4px;height:14px;width:14px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#21ba45}table.dataTable.dtr-inline.collapsed>tbody>tr.parent>td:first-child:before,table.dataTable.dtr-inline.collapsed>tbody>tr.parent>th:first-child:before{content:'-';background-color:#d33333}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child{padding-left:27px}table.dataTable.dtr-inline.collapsed.compact>tbody>tr>td:first-child:before,table.dataTable.dtr-inline.collapsed.compact>tbody>tr>th:first-child:before{top:5px;left:4px;height:14px;width:14px;border-radius:14px;line-height:14px;text-indent:3px}table.dataTable.dtr-column>tbody>tr>td.control,table.dataTable.dtr-column>tbody>tr>th.control{position:relative;cursor:pointer}table.dataTable.dtr-column>tbody>tr>td.control:before,table.dataTable.dtr-column>tbody>tr>th.control:before{top:50%;left:50%;height:16px;width:16px;margin-top:-10px;margin-left:-10px;display:block;position:absolute;color:white;border:2px solid white;border-radius:14px;box-shadow:0 0 3px #444;box-sizing:content-box;text-align:center;text-indent:0 !important;font-family:'Courier New', Courier, monospace;line-height:14px;content:'+';background-color:#21ba45}table.dataTable.dtr-column>tbody>tr.parent td.control:before,table.dataTable.dtr-column>tbody>tr.parent th.control:before{content:'-';background-color:#d33333}table.dataTable>tbody>tr.child{padding:0.5em 1em}table.dataTable>tbody>tr.child:hover{background:transparent !important}table.dataTable>tbody>tr.child ul.dtr-details{display:inline-block;list-style-type:none;margin:0;padding:0}table.dataTable>tbody>tr.child ul.dtr-details>li{border-bottom:1px solid #efefef;padding:0.5em 0}table.dataTable>tbody>tr.child ul.dtr-details>li:first-child{padding-top:0}table.dataTable>tbody>tr.child ul.dtr-details>li:last-child{border-bottom:none}table.dataTable>tbody>tr.child span.dtr-title{display:inline-block;min-width:75px;font-weight:bold}div.dtr-modal{position:fixed;box-sizing:border-box;top:0;left:0;height:100%;width:100%;z-index:100;padding:10em 1em}div.dtr-modal div.dtr-modal-display{position:absolute;top:0;left:0;bottom:0;right:0;width:50%;height:50%;overflow:auto;margin:auto;z-index:102;overflow:auto;background-color:#f5f5f7;border:1px solid black;border-radius:0.5em;box-shadow:0 12px 30px rgba(0,0,0,0.6)}div.dtr-modal div.dtr-modal-content{position:relative;padding:1em}div.dtr-modal div.dtr-modal-close{position:absolute;top:6px;right:6px;width:22px;height:22px;border:1px solid #eaeaea;background-color:#f9f9f9;text-align:center;border-radius:3px;cursor:pointer;z-index:12}div.dtr-modal div.dtr-modal-close:hover{background-color:#eaeaea}div.dtr-modal div.dtr-modal-background{position:fixed;top:0;left:0;right:0;bottom:0;z-index:101;background:rgba(0,0,0,0.6)}@media screen and (max-width: 767px){div.dtr-modal div.dtr-modal-display{width:95%}}div.dtr-bs-modal table.table tr:first-child td{border-top:none}

30
static/lib/csv/cities.csv Normal file
View File

@ -0,0 +1,30 @@
city,state,zip
JACKSONVILLE,FL,32204
TALLAHASSEE,FL,32308
NAPLES,FL,34110
"PONTE VEDRA",FL,32082
"WEST PALM BEACH",FL,33401
ENGLEWOOD,FL,34223
JACKSONVILLE,FL,32209
HOLLYWOOD,FL,33021
"PEMBROKE PINES",FL,33024
"NEW PORT RICHEY",FL,34655
"FORT WALTON BEACH",FL,32548
MELBOURNE,FL,32940
"PALM HARBOR",FL,34684
AVENTURA,FL,33180
TAMPA,FL,33606
"FT MYERS",FL,33901
MIAI,FL,33173
SANFORD,FL,32771
PENSACOLA,FL,32503
MARIANNA,FL,32446
"ORANGE PARK",FL,32073
MIAMI,FL,33173
PENSACOLA,FL,32504
"PEMBROKE PINES",FL,33028
"FORT MYERS",FL,33907
"AMELIA ISLAND",FL,32034
JACKSONVILLE,FL,32216
DAVIE,FL,33331
"BOCA RATON",FL,33486
1 city state zip
2 JACKSONVILLE FL 32204
3 TALLAHASSEE FL 32308
4 NAPLES FL 34110
5 PONTE VEDRA FL 32082
6 WEST PALM BEACH FL 33401
7 ENGLEWOOD FL 34223
8 JACKSONVILLE FL 32209
9 HOLLYWOOD FL 33021
10 PEMBROKE PINES FL 33024
11 NEW PORT RICHEY FL 34655
12 FORT WALTON BEACH FL 32548
13 MELBOURNE FL 32940
14 PALM HARBOR FL 34684
15 AVENTURA FL 33180
16 TAMPA FL 33606
17 FT MYERS FL 33901
18 MIAI FL 33173
19 SANFORD FL 32771
20 PENSACOLA FL 32503
21 MARIANNA FL 32446
22 ORANGE PARK FL 32073
23 MIAMI FL 33173
24 PENSACOLA FL 32504
25 PEMBROKE PINES FL 33028
26 FORT MYERS FL 33907
27 AMELIA ISLAND FL 32034
28 JACKSONVILLE FL 32216
29 DAVIE FL 33331
30 BOCA RATON FL 33486

5001
static/lib/csv/demo.csv Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,30 @@
/*!
Responsive 2.2.2
2014-2018 SpryMedia Ltd - datatables.net/license
*/
(function(d){"function"===typeof define&&define.amd?define(["jquery","datatables.net"],function(l){return d(l,window,document)}):"object"===typeof exports?module.exports=function(l,j){l||(l=window);if(!j||!j.fn.dataTable)j=require("datatables.net")(l,j).$;return d(j,l,l.document)}:d(jQuery,window,document)})(function(d,l,j,q){function t(a,b,c){var e=b+"-"+c;if(n[e])return n[e];for(var d=[],a=a.cell(b,c).node().childNodes,b=0,c=a.length;b<c;b++)d.push(a[b]);return n[e]=d}function r(a,b,d){var e=b+
"-"+d;if(n[e]){for(var a=a.cell(b,d).node(),d=n[e][0].parentNode.childNodes,b=[],f=0,g=d.length;f<g;f++)b.push(d[f]);d=0;for(f=b.length;d<f;d++)a.appendChild(b[d]);n[e]=q}}var o=d.fn.dataTable,i=function(a,b){if(!o.versionCheck||!o.versionCheck("1.10.10"))throw"DataTables Responsive requires DataTables 1.10.10 or newer";this.s={dt:new o.Api(a),columns:[],current:[]};this.s.dt.settings()[0].responsive||(b&&"string"===typeof b.details?b.details={type:b.details}:b&&!1===b.details?b.details={type:!1}:
b&&!0===b.details&&(b.details={type:"inline"}),this.c=d.extend(!0,{},i.defaults,o.defaults.responsive,b),a.responsive=this,this._constructor())};d.extend(i.prototype,{_constructor:function(){var a=this,b=this.s.dt,c=b.settings()[0],e=d(l).width();b.settings()[0]._responsive=this;d(l).on("resize.dtr orientationchange.dtr",o.util.throttle(function(){var b=d(l).width();b!==e&&(a._resize(),e=b)}));c.oApi._fnCallbackReg(c,"aoRowCreatedCallback",function(e){-1!==d.inArray(!1,a.s.current)&&d(">td, >th",
e).each(function(e){e=b.column.index("toData",e);!1===a.s.current[e]&&d(this).css("display","none")})});b.on("destroy.dtr",function(){b.off(".dtr");d(b.table().body()).off(".dtr");d(l).off("resize.dtr orientationchange.dtr");d.each(a.s.current,function(b,e){!1===e&&a._setColumnVis(b,!0)})});this.c.breakpoints.sort(function(a,b){return a.width<b.width?1:a.width>b.width?-1:0});this._classLogic();this._resizeAuto();c=this.c.details;!1!==c.type&&(a._detailsInit(),b.on("column-visibility.dtr",function(){a._timer&&
clearTimeout(a._timer);a._timer=setTimeout(function(){a._timer=null;a._classLogic();a._resizeAuto();a._resize();a._redrawChildren()},100)}),b.on("draw.dtr",function(){a._redrawChildren()}),d(b.table().node()).addClass("dtr-"+c.type));b.on("column-reorder.dtr",function(){a._classLogic();a._resizeAuto();a._resize()});b.on("column-sizing.dtr",function(){a._resizeAuto();a._resize()});b.on("preXhr.dtr",function(){var e=[];b.rows().every(function(){this.child.isShown()&&e.push(this.id(true))});b.one("draw.dtr",
function(){a._resizeAuto();a._resize();b.rows(e).every(function(){a._detailsDisplay(this,false)})})});b.on("init.dtr",function(){a._resizeAuto();a._resize();d.inArray(false,a.s.current)&&b.columns.adjust()});this._resize()},_columnsVisiblity:function(a){var b=this.s.dt,c=this.s.columns,e,f,g=c.map(function(a,b){return{columnIdx:b,priority:a.priority}}).sort(function(a,b){return a.priority!==b.priority?a.priority-b.priority:a.columnIdx-b.columnIdx}),h=d.map(c,function(e,c){return!1===b.column(c).visible()?
"not-visible":e.auto&&null===e.minWidth?!1:!0===e.auto?"-":-1!==d.inArray(a,e.includeIn)}),m=0;e=0;for(f=h.length;e<f;e++)!0===h[e]&&(m+=c[e].minWidth);e=b.settings()[0].oScroll;e=e.sY||e.sX?e.iBarWidth:0;m=b.table().container().offsetWidth-e-m;e=0;for(f=h.length;e<f;e++)c[e].control&&(m-=c[e].minWidth);var s=!1;e=0;for(f=g.length;e<f;e++){var k=g[e].columnIdx;"-"===h[k]&&(!c[k].control&&c[k].minWidth)&&(s||0>m-c[k].minWidth?(s=!0,h[k]=!1):h[k]=!0,m-=c[k].minWidth)}g=!1;e=0;for(f=c.length;e<f;e++)if(!c[e].control&&
!c[e].never&&!1===h[e]){g=!0;break}e=0;for(f=c.length;e<f;e++)c[e].control&&(h[e]=g),"not-visible"===h[e]&&(h[e]=!1);-1===d.inArray(!0,h)&&(h[0]=!0);return h},_classLogic:function(){var a=this,b=this.c.breakpoints,c=this.s.dt,e=c.columns().eq(0).map(function(a){var b=this.column(a),e=b.header().className,a=c.settings()[0].aoColumns[a].responsivePriority;a===q&&(b=d(b.header()).data("priority"),a=b!==q?1*b:1E4);return{className:e,includeIn:[],auto:!1,control:!1,never:e.match(/\bnever\b/)?!0:!1,priority:a}}),
f=function(a,b){var c=e[a].includeIn;-1===d.inArray(b,c)&&c.push(b)},g=function(d,c,g,k){if(g)if("max-"===g){k=a._find(c).width;c=0;for(g=b.length;c<g;c++)b[c].width<=k&&f(d,b[c].name)}else if("min-"===g){k=a._find(c).width;c=0;for(g=b.length;c<g;c++)b[c].width>=k&&f(d,b[c].name)}else{if("not-"===g){c=0;for(g=b.length;c<g;c++)-1===b[c].name.indexOf(k)&&f(d,b[c].name)}}else e[d].includeIn.push(c)};e.each(function(a,e){for(var c=a.className.split(" "),f=!1,i=0,l=c.length;i<l;i++){var j=d.trim(c[i]);
if("all"===j){f=!0;a.includeIn=d.map(b,function(a){return a.name});return}if("none"===j||a.never){f=!0;return}if("control"===j){f=!0;a.control=!0;return}d.each(b,function(a,b){var d=b.name.split("-"),c=j.match(RegExp("(min\\-|max\\-|not\\-)?("+d[0]+")(\\-[_a-zA-Z0-9])?"));c&&(f=!0,c[2]===d[0]&&c[3]==="-"+d[1]?g(e,b.name,c[1],c[2]+c[3]):c[2]===d[0]&&!c[3]&&g(e,b.name,c[1],c[2]))})}f||(a.auto=!0)});this.s.columns=e},_detailsDisplay:function(a,b){var c=this,e=this.s.dt,f=this.c.details;if(f&&!1!==f.type){var g=
f.display(a,b,function(){return f.renderer(e,a[0],c._detailsObj(a[0]))});(!0===g||!1===g)&&d(e.table().node()).triggerHandler("responsive-display.dt",[e,a,g,b])}},_detailsInit:function(){var a=this,b=this.s.dt,c=this.c.details;"inline"===c.type&&(c.target="td:first-child, th:first-child");b.on("draw.dtr",function(){a._tabIndexes()});a._tabIndexes();d(b.table().body()).on("keyup.dtr","td, th",function(a){a.keyCode===13&&d(this).data("dtr-keyboard")&&d(this).click()});var e=c.target;d(b.table().body()).on("click.dtr mousedown.dtr mouseup.dtr",
"string"===typeof e?e:"td, th",function(c){if(d(b.table().node()).hasClass("collapsed")&&d.inArray(d(this).closest("tr").get(0),b.rows().nodes().toArray())!==-1){if(typeof e==="number"){var g=e<0?b.columns().eq(0).length+e:e;if(b.cell(this).index().column!==g)return}g=b.row(d(this).closest("tr"));c.type==="click"?a._detailsDisplay(g,false):c.type==="mousedown"?d(this).css("outline","none"):c.type==="mouseup"&&d(this).blur().css("outline","")}})},_detailsObj:function(a){var b=this,c=this.s.dt;return d.map(this.s.columns,
function(e,d){if(!e.never&&!e.control)return{title:c.settings()[0].aoColumns[d].sTitle,data:c.cell(a,d).render(b.c.orthogonal),hidden:c.column(d).visible()&&!b.s.current[d],columnIndex:d,rowIndex:a}})},_find:function(a){for(var b=this.c.breakpoints,c=0,e=b.length;c<e;c++)if(b[c].name===a)return b[c]},_redrawChildren:function(){var a=this,b=this.s.dt;b.rows({page:"current"}).iterator("row",function(c,e){b.row(e);a._detailsDisplay(b.row(e),!0)})},_resize:function(){var a=this,b=this.s.dt,c=d(l).width(),
e=this.c.breakpoints,f=e[0].name,g=this.s.columns,h,m=this.s.current.slice();for(h=e.length-1;0<=h;h--)if(c<=e[h].width){f=e[h].name;break}var i=this._columnsVisiblity(f);this.s.current=i;e=!1;h=0;for(c=g.length;h<c;h++)if(!1===i[h]&&!g[h].never&&!g[h].control&&!1===!b.column(h).visible()){e=!0;break}d(b.table().node()).toggleClass("collapsed",e);var k=!1,j=0;b.columns().eq(0).each(function(b,c){!0===i[c]&&j++;i[c]!==m[c]&&(k=!0,a._setColumnVis(b,i[c]))});k&&(this._redrawChildren(),d(b.table().node()).trigger("responsive-resize.dt",
[b,this.s.current]),0===b.page.info().recordsDisplay&&d("td",b.table().body()).eq(0).attr("colspan",j))},_resizeAuto:function(){var a=this.s.dt,b=this.s.columns;if(this.c.auto&&-1!==d.inArray(!0,d.map(b,function(a){return a.auto}))){d.isEmptyObject(n)||d.each(n,function(b){b=b.split("-");r(a,1*b[0],1*b[1])});a.table().node();var c=a.table().node().cloneNode(!1),e=d(a.table().header().cloneNode(!1)).appendTo(c),f=d(a.table().body()).clone(!1,!1).empty().appendTo(c),g=a.columns().header().filter(function(b){return a.column(b).visible()}).to$().clone(!1).css("display",
"table-cell").css("min-width",0);d(f).append(d(a.rows({page:"current"}).nodes()).clone(!1)).find("th, td").css("display","");if(f=a.table().footer()){var f=d(f.cloneNode(!1)).appendTo(c),h=a.columns().footer().filter(function(b){return a.column(b).visible()}).to$().clone(!1).css("display","table-cell");d("<tr/>").append(h).appendTo(f)}d("<tr/>").append(g).appendTo(e);"inline"===this.c.details.type&&d(c).addClass("dtr-inline collapsed");d(c).find("[name]").removeAttr("name");d(c).css("position","relative");
c=d("<div/>").css({width:1,height:1,overflow:"hidden",clear:"both"}).append(c);c.insertBefore(a.table().node());g.each(function(c){c=a.column.index("fromVisible",c);b[c].minWidth=this.offsetWidth||0});c.remove()}},_setColumnVis:function(a,b){var c=this.s.dt,e=b?"":"none";d(c.column(a).header()).css("display",e);d(c.column(a).footer()).css("display",e);c.column(a).nodes().to$().css("display",e);d.isEmptyObject(n)||c.cells(null,a).indexes().each(function(a){r(c,a.row,a.column)})},_tabIndexes:function(){var a=
this.s.dt,b=a.cells({page:"current"}).nodes().to$(),c=a.settings()[0],e=this.c.details.target;b.filter("[data-dtr-keyboard]").removeData("[data-dtr-keyboard]");"number"===typeof e?a.cells(null,e,{page:"current"}).nodes().to$().attr("tabIndex",c.iTabIndex).data("dtr-keyboard",1):("td:first-child, th:first-child"===e&&(e=">td:first-child, >th:first-child"),d(e,a.rows({page:"current"}).nodes()).attr("tabIndex",c.iTabIndex).data("dtr-keyboard",1))}});i.breakpoints=[{name:"desktop",width:Infinity},{name:"tablet-l",
width:1024},{name:"tablet-p",width:768},{name:"mobile-l",width:480},{name:"mobile-p",width:320}];i.display={childRow:function(a,b,c){if(b){if(d(a.node()).hasClass("parent"))return a.child(c(),"child").show(),!0}else{if(a.child.isShown())return a.child(!1),d(a.node()).removeClass("parent"),!1;a.child(c(),"child").show();d(a.node()).addClass("parent");return!0}},childRowImmediate:function(a,b,c){if(!b&&a.child.isShown()||!a.responsive.hasHidden())return a.child(!1),d(a.node()).removeClass("parent"),
!1;a.child(c(),"child").show();d(a.node()).addClass("parent");return!0},modal:function(a){return function(b,c,e){if(c)d("div.dtr-modal-content").empty().append(e());else{var f=function(){g.remove();d(j).off("keypress.dtr")},g=d('<div class="dtr-modal"/>').append(d('<div class="dtr-modal-display"/>').append(d('<div class="dtr-modal-content"/>').append(e())).append(d('<div class="dtr-modal-close">&times;</div>').click(function(){f()}))).append(d('<div class="dtr-modal-background"/>').click(function(){f()})).appendTo("body");
d(j).on("keyup.dtr",function(a){27===a.keyCode&&(a.stopPropagation(),f())})}a&&a.header&&d("div.dtr-modal-content").prepend("<h2>"+a.header(b)+"</h2>")}}};var n={};i.renderer={listHiddenNodes:function(){return function(a,b,c){var e=d('<ul data-dtr-index="'+b+'" class="dtr-details"/>'),f=!1;d.each(c,function(b,c){c.hidden&&(d('<li data-dtr-index="'+c.columnIndex+'" data-dt-row="'+c.rowIndex+'" data-dt-column="'+c.columnIndex+'"><span class="dtr-title">'+c.title+"</span> </li>").append(d('<span class="dtr-data"/>').append(t(a,
c.rowIndex,c.columnIndex))).appendTo(e),f=!0)});return f?e:!1}},listHidden:function(){return function(a,b,c){return(a=d.map(c,function(a){return a.hidden?'<li data-dtr-index="'+a.columnIndex+'" data-dt-row="'+a.rowIndex+'" data-dt-column="'+a.columnIndex+'"><span class="dtr-title">'+a.title+'</span> <span class="dtr-data">'+a.data+"</span></li>":""}).join(""))?d('<ul data-dtr-index="'+b+'" class="dtr-details"/>').append(a):!1}},tableAll:function(a){a=d.extend({tableClass:""},a);return function(b,
c,e){b=d.map(e,function(a){return'<tr data-dt-row="'+a.rowIndex+'" data-dt-column="'+a.columnIndex+'"><td>'+a.title+":</td> <td>"+a.data+"</td></tr>"}).join("");return d('<table class="'+a.tableClass+' dtr-details" width="100%"/>').append(b)}}};i.defaults={breakpoints:i.breakpoints,auto:!0,details:{display:i.display.childRow,renderer:i.renderer.listHidden(),target:0,type:"inline"},orthogonal:"display"};var p=d.fn.dataTable.Api;p.register("responsive()",function(){return this});p.register("responsive.index()",
function(a){a=d(a);return{column:a.data("dtr-index"),row:a.parent().data("dtr-index")}});p.register("responsive.rebuild()",function(){return this.iterator("table",function(a){a._responsive&&a._responsive._classLogic()})});p.register("responsive.recalc()",function(){return this.iterator("table",function(a){a._responsive&&(a._responsive._resizeAuto(),a._responsive._resize())})});p.register("responsive.hasHidden()",function(){var a=this.context[0];return a._responsive?-1!==d.inArray(!1,a._responsive.s.current):
!1});p.registerPlural("columns().responsiveHidden()","column().responsiveHidden()",function(){return this.iterator("column",function(a,b){return a._responsive?a._responsive.s.current[b]:!1},1)});i.version="2.2.2";d.fn.dataTable.Responsive=i;d.fn.DataTable.Responsive=i;d(j).on("preInit.dt.dtr",function(a,b){if("dt"===a.namespace&&(d(b.nTable).hasClass("responsive")||d(b.nTable).hasClass("dt-responsive")||b.oInit.responsive||o.defaults.responsive)){var c=b.oInit.responsive;!1!==c&&new i(b,d.isPlainObject(c)?
c:{})}});return i});

15297
static/lib/javascripts/jquery.dataTables.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,153 @@
/*
* File: jquery.dataTables.min.js
* Version: 1.9.0
* Author: Allan Jardine (www.sprymedia.co.uk)
* Info: www.datatables.net
*
* Copyright 2008-2012 Allan Jardine, all rights reserved.
*
* This source file is free software, under either the GPL v2 license or a
* BSD style license, available at:
* http://datatables.net/license_gpl2
* http://datatables.net/license_bsd
*
* This source file is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
* or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
*/
(function(i,aa,k,l){var j=function(e){function o(a,b){var c=j.defaults.columns,d=a.aoColumns.length,c=i.extend({},j.models.oColumn,c,{sSortingClass:a.oClasses.sSortable,sSortingClassJUI:a.oClasses.sSortJUI,nTh:b?b:k.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mDataProp:c.mDataProp?c.oDefaults:d});a.aoColumns.push(c);if(a.aoPreSearchCols[d]===l||null===a.aoPreSearchCols[d])a.aoPreSearchCols[d]=i.extend({},j.models.oSearch);else{c=a.aoPreSearchCols[d];
if(c.bRegex===l)c.bRegex=!0;if(c.bSmart===l)c.bSmart=!0;if(c.bCaseInsensitive===l)c.bCaseInsensitive=!0}E(a,d,null)}function E(a,b,c){b=a.aoColumns[b];if(c!==l&&null!==c){if(c.sType!==l)b.sType=c.sType,b._bAutoType=!1;i.extend(b,c);n(b,c,"sWidth","sWidthOrig");if(c.iDataSort!==l)b.aDataSort=[c.iDataSort];n(b,c,"aDataSort")}b.fnGetData=V(b.mDataProp);b.fnSetData=sa(b.mDataProp);if(!a.oFeatures.bSort)b.bSortable=!1;if(!b.bSortable||-1==i.inArray("asc",b.asSorting)&&-1==i.inArray("desc",b.asSorting))b.sSortingClass=
a.oClasses.sSortableNone,b.sSortingClassJUI="";else if(b.bSortable||-1==i.inArray("asc",b.asSorting)&&-1==i.inArray("desc",b.asSorting))b.sSortingClass=a.oClasses.sSortable,b.sSortingClassJUI=a.oClasses.sSortJUI;else if(-1!=i.inArray("asc",b.asSorting)&&-1==i.inArray("desc",b.asSorting))b.sSortingClass=a.oClasses.sSortableAsc,b.sSortingClassJUI=a.oClasses.sSortJUIAscAllowed;else if(-1==i.inArray("asc",b.asSorting)&&-1!=i.inArray("desc",b.asSorting))b.sSortingClass=a.oClasses.sSortableDesc,b.sSortingClassJUI=
a.oClasses.sSortJUIDescAllowed}function r(a){if(!1===a.oFeatures.bAutoWidth)return!1;ba(a);for(var b=0,c=a.aoColumns.length;b<c;b++)a.aoColumns[b].nTh.style.width=a.aoColumns[b].sWidth}function s(a,b){for(var c=-1,d=0;d<a.aoColumns.length;d++)if(!0===a.aoColumns[d].bVisible&&c++,c==b)return d;return null}function t(a,b){for(var c=-1,d=0;d<a.aoColumns.length;d++)if(!0===a.aoColumns[d].bVisible&&c++,d==b)return!0===a.aoColumns[d].bVisible?c:null;return null}function v(a){for(var b=0,c=0;c<a.aoColumns.length;c++)!0===
a.aoColumns[c].bVisible&&b++;return b}function B(a){for(var b=j.ext.aTypes,c=b.length,d=0;d<c;d++){var f=b[d](a);if(null!==f)return f}return"string"}function D(a,b){for(var c=b.split(","),d=[],f=0,h=a.aoColumns.length;f<h;f++)for(var g=0;g<h;g++)if(a.aoColumns[f].sName==c[g]){d.push(g);break}return d}function x(a){for(var b="",c=0,d=a.aoColumns.length;c<d;c++)b+=a.aoColumns[c].sName+",";return b.length==d?"":b.slice(0,-1)}function I(a,b,c,d){var f,h,g,e,q;if(b)for(f=b.length-1;0<=f;f--){var m=b[f].aTargets;
i.isArray(m)||F(a,1,"aTargets must be an array of targets, not a "+typeof m);for(h=0,g=m.length;h<g;h++)if("number"===typeof m[h]&&0<=m[h]){for(;a.aoColumns.length<=m[h];)o(a);d(m[h],b[f])}else if("number"===typeof m[h]&&0>m[h])d(a.aoColumns.length+m[h],b[f]);else if("string"===typeof m[h])for(e=0,q=a.aoColumns.length;e<q;e++)("_all"==m[h]||i(a.aoColumns[e].nTh).hasClass(m[h]))&&d(e,b[f])}if(c)for(f=0,a=c.length;f<a;f++)d(f,c[f])}function G(a,b){var c;c=i.isArray(b)?b.slice():i.extend(!0,{},b);var d=
a.aoData.length;c=i.extend(!0,{},j.models.oRow,{_aData:c});a.aoData.push(c);for(var f,h=0,g=a.aoColumns.length;h<g;h++)if(c=a.aoColumns[h],"function"===typeof c.fnRender&&c.bUseRendered&&null!==c.mDataProp&&J(a,d,h,R(a,d,h)),c._bAutoType&&"string"!=c.sType&&(f=w(a,d,h,"type"),null!==f&&""!==f))if(f=B(f),null===c.sType)c.sType=f;else if(c.sType!=f&&"html"!=c.sType)c.sType="string";a.aiDisplayMaster.push(d);a.oFeatures.bDeferRender||ca(a,d);return d}function ta(a){var b,c,d,f,h,g,e,q,m;if(a.bDeferLoading||
null===a.sAjaxSource){e=a.nTBody.childNodes;for(b=0,c=e.length;b<c;b++)if("TR"==e[b].nodeName.toUpperCase()){q=a.aoData.length;e[b]._DT_RowIndex=q;a.aoData.push(i.extend(!0,{},j.models.oRow,{nTr:e[b]}));a.aiDisplayMaster.push(q);g=e[b].childNodes;h=0;for(d=0,f=g.length;d<f;d++)if(m=g[d].nodeName.toUpperCase(),"TD"==m||"TH"==m)J(a,q,h,i.trim(g[d].innerHTML)),h++}}e=S(a);g=[];for(b=0,c=e.length;b<c;b++)for(d=0,f=e[b].childNodes.length;d<f;d++)h=e[b].childNodes[d],m=h.nodeName.toUpperCase(),("TD"==m||
"TH"==m)&&g.push(h);for(f=0,e=a.aoColumns.length;f<e;f++){m=a.aoColumns[f];if(null===m.sTitle)m.sTitle=m.nTh.innerHTML;h=m._bAutoType;q="function"===typeof m.fnRender;var o=null!==m.sClass,r=m.bVisible,l,n;if(h||q||o||!r)for(b=0,c=a.aoData.length;b<c;b++){d=a.aoData[b];l=g[b*e+f];if(h&&"string"!=m.sType&&(n=w(a,b,f,"type"),""!==n))if(n=B(n),null===m.sType)m.sType=n;else if(m.sType!=n&&"html"!=m.sType)m.sType="string";if("function"===typeof m.mDataProp)l.innerHTML=w(a,b,f,"display");if(q)n=R(a,b,f),
l.innerHTML=n,m.bUseRendered&&J(a,b,f,n);o&&(l.className+=" "+m.sClass);r?d._anHidden[f]=null:(d._anHidden[f]=l,l.parentNode.removeChild(l));m.fnCreatedCell&&m.fnCreatedCell.call(a.oInstance,l,w(a,b,f,"display"),d._aData,b,f)}}if(0!==a.aoRowCreatedCallback.length)for(b=0,c=a.aoData.length;b<c;b++)d=a.aoData[b],C(a,"aoRowCreatedCallback",null,[d.nTr,d._aData,b])}function K(a,b){return b._DT_RowIndex!==l?b._DT_RowIndex:null}function da(a,b,c){for(var b=L(a,b),d=0,a=a.aoColumns.length;d<a;d++)if(b[d]===
c)return d;return-1}function W(a,b,c){for(var d=[],f=0,h=a.aoColumns.length;f<h;f++)d.push(w(a,b,f,c));return d}function w(a,b,c,d){var f=a.aoColumns[c];if((c=f.fnGetData(a.aoData[b]._aData,d))===l){if(a.iDrawError!=a.iDraw&&null===f.sDefaultContent)F(a,0,"Requested unknown parameter '"+f.mDataProp+"' from the data source for row "+b),a.iDrawError=a.iDraw;return f.sDefaultContent}if(null===c&&null!==f.sDefaultContent)c=f.sDefaultContent;else if("function"===typeof c)return c();return"display"==d&&
null===c?"":c}function J(a,b,c,d){a.aoColumns[c].fnSetData(a.aoData[b]._aData,d)}function V(a){if(null===a)return function(){return null};if("function"===typeof a)return function(b,d){return a(b,d)};if("string"===typeof a&&-1!=a.indexOf(".")){var b=a.split(".");return function(a){for(var d=0,f=b.length;d<f;d++)if(a=a[b[d]],a===l)return l;return a}}return function(b){return b[a]}}function sa(a){if(null===a)return function(){};if("function"===typeof a)return function(b,d){a(b,"set",d)};if("string"===
typeof a&&-1!=a.indexOf(".")){var b=a.split(".");return function(a,d){for(var f=0,h=b.length-1;f<h;f++)a=a[b[f]];a[b[b.length-1]]=d}}return function(b,d){b[a]=d}}function X(a){for(var b=[],c=a.aoData.length,d=0;d<c;d++)b.push(a.aoData[d]._aData);return b}function ea(a){a.aoData.splice(0,a.aoData.length);a.aiDisplayMaster.splice(0,a.aiDisplayMaster.length);a.aiDisplay.splice(0,a.aiDisplay.length);z(a)}function fa(a,b){for(var c=-1,d=0,f=a.length;d<f;d++)a[d]==b?c=d:a[d]>b&&a[d]--; -1!=c&&a.splice(c,
1)}function R(a,b,c){var d=a.aoColumns[c];return d.fnRender({iDataRow:b,iDataColumn:c,oSettings:a,aData:a.aoData[b]._aData,mDataProp:d.mDataProp},w(a,b,c,"display"))}function ca(a,b){var c=a.aoData[b],d;if(null===c.nTr){c.nTr=k.createElement("tr");c.nTr._DT_RowIndex=b;if(c._aData.DT_RowId)c.nTr.id=c._aData.DT_RowId;c._aData.DT_RowClass&&i(c.nTr).addClass(c._aData.DT_RowClass);for(var f=0,h=a.aoColumns.length;f<h;f++){var g=a.aoColumns[f];d=k.createElement("td");d.innerHTML="function"===typeof g.fnRender&&
(!g.bUseRendered||null===g.mDataProp)?R(a,b,f):w(a,b,f,"display");if(null!==g.sClass)d.className=g.sClass;g.bVisible?(c.nTr.appendChild(d),c._anHidden[f]=null):c._anHidden[f]=d;g.fnCreatedCell&&g.fnCreatedCell.call(a.oInstance,d,w(a,b,f,"display"),c._aData,b,f)}C(a,"aoRowCreatedCallback",null,[c.nTr,c._aData,b])}}function ua(a){var b,c,d;if(0!==a.nTHead.getElementsByTagName("th").length)for(b=0,d=a.aoColumns.length;b<d;b++){if(c=a.aoColumns[b].nTh,c.setAttribute("role","columnheader"),a.aoColumns[b].bSortable&&
(c.setAttribute("tabindex",a.iTabIndex),c.setAttribute("aria-controls",a.sTableId)),null!==a.aoColumns[b].sClass&&i(c).addClass(a.aoColumns[b].sClass),a.aoColumns[b].sTitle!=c.innerHTML)c.innerHTML=a.aoColumns[b].sTitle}else{var f=k.createElement("tr");for(b=0,d=a.aoColumns.length;b<d;b++)c=a.aoColumns[b].nTh,c.innerHTML=a.aoColumns[b].sTitle,c.setAttribute("tabindex","0"),null!==a.aoColumns[b].sClass&&i(c).addClass(a.aoColumns[b].sClass),f.appendChild(c);i(a.nTHead).html("")[0].appendChild(f);T(a.aoHeader,
a.nTHead)}i(a.nTHead).children("tr").attr("role","row");if(a.bJUI)for(b=0,d=a.aoColumns.length;b<d;b++){c=a.aoColumns[b].nTh;f=k.createElement("div");f.className=a.oClasses.sSortJUIWrapper;i(c).contents().appendTo(f);var h=k.createElement("span");h.className=a.oClasses.sSortIcon;f.appendChild(h);c.appendChild(f)}if(a.oFeatures.bSort)for(b=0;b<a.aoColumns.length;b++)!1!==a.aoColumns[b].bSortable?ga(a,a.aoColumns[b].nTh,b):i(a.aoColumns[b].nTh).addClass(a.oClasses.sSortableNone);""!==a.oClasses.sFooterTH&&
i(a.nTFoot).children("tr").children("th").addClass(a.oClasses.sFooterTH);if(null!==a.nTFoot){c=O(a,null,a.aoFooter);for(b=0,d=a.aoColumns.length;b<d;b++)if(c[b])a.aoColumns[b].nTf=c[b],a.aoColumns[b].sClass&&i(c[b]).addClass(a.aoColumns[b].sClass)}}function U(a,b,c){var d,f,h,g=[],e=[],i=a.aoColumns.length,m;c===l&&(c=!1);for(d=0,f=b.length;d<f;d++){g[d]=b[d].slice();g[d].nTr=b[d].nTr;for(h=i-1;0<=h;h--)!a.aoColumns[h].bVisible&&!c&&g[d].splice(h,1);e.push([])}for(d=0,f=g.length;d<f;d++){if(a=g[d].nTr)for(;h=
a.firstChild;)a.removeChild(h);for(h=0,b=g[d].length;h<b;h++)if(m=i=1,e[d][h]===l){a.appendChild(g[d][h].cell);for(e[d][h]=1;g[d+i]!==l&&g[d][h].cell==g[d+i][h].cell;)e[d+i][h]=1,i++;for(;g[d][h+m]!==l&&g[d][h].cell==g[d][h+m].cell;){for(c=0;c<i;c++)e[d+c][h+m]=1;m++}g[d][h].cell.rowSpan=i;g[d][h].cell.colSpan=m}}}function y(a){var b,c,d=[],f=0,h=a.asStripeClasses.length;b=a.aoOpenRows.length;c=C(a,"aoPreDrawCallback","preDraw",[a]);if(-1===i.inArray(!1,c)){a.bDrawing=!0;if(a.iInitDisplayStart!==
l&&-1!=a.iInitDisplayStart)a._iDisplayStart=a.oFeatures.bServerSide?a.iInitDisplayStart:a.iInitDisplayStart>=a.fnRecordsDisplay()?0:a.iInitDisplayStart,a.iInitDisplayStart=-1,z(a);if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++;else if(a.oFeatures.bServerSide){if(!a.bDestroying&&!va(a))return}else a.iDraw++;if(0!==a.aiDisplay.length){var g=a._iDisplayStart;c=a._iDisplayEnd;if(a.oFeatures.bServerSide)g=0,c=a.aoData.length;for(;g<c;g++){var e=a.aoData[a.aiDisplay[g]];null===e.nTr&&ca(a,a.aiDisplay[g]);
var q=e.nTr;if(0!==h){var m=a.asStripeClasses[f%h];if(e._sRowStripe!=m)i(q).removeClass(e._sRowStripe).addClass(m),e._sRowStripe=m}C(a,"aoRowCallback",null,[q,a.aoData[a.aiDisplay[g]]._aData,f,g]);d.push(q);f++;if(0!==b)for(e=0;e<b;e++)if(q==a.aoOpenRows[e].nParent){d.push(a.aoOpenRows[e].nTr);break}}}else{d[0]=k.createElement("tr");if(a.asStripeClasses[0])d[0].className=a.asStripeClasses[0];h=a.oLanguage.sZeroRecords.replace("_MAX_",a.fnFormatNumber(a.fnRecordsTotal()));if(1==a.iDraw&&null!==a.sAjaxSource&&
!a.oFeatures.bServerSide)h=a.oLanguage.sLoadingRecords;else if(a.oLanguage.sEmptyTable&&0===a.fnRecordsTotal())h=a.oLanguage.sEmptyTable;b=k.createElement("td");b.setAttribute("valign","top");b.colSpan=v(a);b.className=a.oClasses.sRowEmpty;b.innerHTML=h;d[f].appendChild(b)}C(a,"aoHeaderCallback","header",[i(a.nTHead).children("tr")[0],X(a),a._iDisplayStart,a.fnDisplayEnd(),a.aiDisplay]);C(a,"aoFooterCallback","footer",[i(a.nTFoot).children("tr")[0],X(a),a._iDisplayStart,a.fnDisplayEnd(),a.aiDisplay]);
f=k.createDocumentFragment();b=k.createDocumentFragment();if(a.nTBody){h=a.nTBody.parentNode;b.appendChild(a.nTBody);if(!a.oScroll.bInfinite||!a._bInitComplete||a.bSorted||a.bFiltered)for(;b=a.nTBody.firstChild;)a.nTBody.removeChild(b);for(b=0,c=d.length;b<c;b++)f.appendChild(d[b]);a.nTBody.appendChild(f);null!==h&&h.appendChild(a.nTBody)}C(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1;a.oFeatures.bServerSide&&(H(a,!1),a._bInitComplete||Y(a))}}function Z(a){a.oFeatures.bSort?
P(a,a.oPreviousSearch):a.oFeatures.bFilter?M(a,a.oPreviousSearch):(z(a),y(a))}function wa(a){var b=i("<div></div>")[0];a.nTable.parentNode.insertBefore(b,a.nTable);a.nTableWrapper=i('<div id="'+a.sTableId+'_wrapper" class="'+a.oClasses.sWrapper+'" role="grid"></div>')[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var c=a.nTableWrapper,d=a.sDom.split(""),f,h,g,e,q,m,o,l=0;l<d.length;l++){h=0;g=d[l];if("<"==g){e=i("<div></div>")[0];q=d[l+1];if("'"==q||'"'==q){m="";for(o=2;d[l+o]!=q;)m+=d[l+o],
o++;"H"==m?m="fg-toolbar ui-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix":"F"==m&&(m="fg-toolbar ui-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix");-1!=m.indexOf(".")?(q=m.split("."),e.id=q[0].substr(1,q[0].length-1),e.className=q[1]):"#"==m.charAt(0)?e.id=m.substr(1,m.length-1):e.className=m;l+=o}c.appendChild(e);c=e}else if(">"==g)c=c.parentNode;else if("l"==g&&a.oFeatures.bPaginate&&a.oFeatures.bLengthChange)f=xa(a),h=1;else if("f"==g&&a.oFeatures.bFilter)f=
ya(a),h=1;else if("r"==g&&a.oFeatures.bProcessing)f=za(a),h=1;else if("t"==g)f=Aa(a),h=1;else if("i"==g&&a.oFeatures.bInfo)f=Ba(a),h=1;else if("p"==g&&a.oFeatures.bPaginate)f=Ca(a),h=1;else if(0!==j.ext.aoFeatures.length){e=j.ext.aoFeatures;o=0;for(q=e.length;o<q;o++)if(g==e[o].cFeature){(f=e[o].fnInit(a))&&(h=1);break}}1==h&&null!==f&&("object"!==typeof a.aanFeatures[g]&&(a.aanFeatures[g]=[]),a.aanFeatures[g].push(f),c.appendChild(f))}b.parentNode.replaceChild(a.nTableWrapper,b)}function T(a,b){var c=
i(b).children("tr"),d,f,h,g,e,q,m,j;a.splice(0,a.length);for(f=0,q=c.length;f<q;f++)a.push([]);for(f=0,q=c.length;f<q;f++)for(h=0,m=c[f].childNodes.length;h<m;h++)if(d=c[f].childNodes[h],"TD"==d.nodeName.toUpperCase()||"TH"==d.nodeName.toUpperCase()){var o=1*d.getAttribute("colspan"),l=1*d.getAttribute("rowspan"),o=!o||0===o||1===o?1:o,l=!l||0===l||1===l?1:l;for(g=0;a[f][g];)g++;j=g;for(e=0;e<o;e++)for(g=0;g<l;g++)a[f+g][j+e]={cell:d,unique:1==o?!0:!1},a[f+g].nTr=c[f]}}function O(a,b,c){var d=[];
if(!c)c=a.aoHeader,b&&(c=[],T(c,b));for(var b=0,f=c.length;b<f;b++)for(var h=0,g=c[b].length;h<g;h++)if(c[b][h].unique&&(!d[h]||!a.bSortCellsTop))d[h]=c[b][h].cell;return d}function va(a){if(a.bAjaxDataGet){a.iDraw++;H(a,!0);var b=Da(a);ha(a,b);a.fnServerData.call(a.oInstance,a.sAjaxSource,b,function(b){Ea(a,b)},a);return!1}return!0}function Da(a){var b=a.aoColumns.length,c=[],d,f;c.push({name:"sEcho",value:a.iDraw});c.push({name:"iColumns",value:b});c.push({name:"sColumns",value:x(a)});c.push({name:"iDisplayStart",
value:a._iDisplayStart});c.push({name:"iDisplayLength",value:!1!==a.oFeatures.bPaginate?a._iDisplayLength:-1});for(f=0;f<b;f++)d=a.aoColumns[f].mDataProp,c.push({name:"mDataProp_"+f,value:"function"===typeof d?"function":d});if(!1!==a.oFeatures.bFilter){c.push({name:"sSearch",value:a.oPreviousSearch.sSearch});c.push({name:"bRegex",value:a.oPreviousSearch.bRegex});for(f=0;f<b;f++)c.push({name:"sSearch_"+f,value:a.aoPreSearchCols[f].sSearch}),c.push({name:"bRegex_"+f,value:a.aoPreSearchCols[f].bRegex}),
c.push({name:"bSearchable_"+f,value:a.aoColumns[f].bSearchable})}if(!1!==a.oFeatures.bSort){d=null!==a.aaSortingFixed?a.aaSortingFixed.length:0;var h=a.aaSorting.length;c.push({name:"iSortingCols",value:d+h});for(f=0;f<d;f++)c.push({name:"iSortCol_"+f,value:a.aaSortingFixed[f][0]}),c.push({name:"sSortDir_"+f,value:a.aaSortingFixed[f][1]});for(f=0;f<h;f++)c.push({name:"iSortCol_"+(f+d),value:a.aaSorting[f][0]}),c.push({name:"sSortDir_"+(f+d),value:a.aaSorting[f][1]});for(f=0;f<b;f++)c.push({name:"bSortable_"+
f,value:a.aoColumns[f].bSortable})}return c}function ha(a,b){C(a,"aoServerParams","serverParams",[b])}function Ea(a,b){if(b.sEcho!==l){if(1*b.sEcho<a.iDraw)return;a.iDraw=1*b.sEcho}(!a.oScroll.bInfinite||a.oScroll.bInfinite&&(a.bSorted||a.bFiltered))&&ea(a);a._iRecordsTotal=parseInt(b.iTotalRecords,10);a._iRecordsDisplay=parseInt(b.iTotalDisplayRecords,10);var c=x(a),c=b.sColumns!==l&&""!==c&&b.sColumns!=c,d;c&&(d=D(a,b.sColumns));for(var f=V(a.sAjaxDataProp)(b),h=0,g=f.length;h<g;h++)if(c){for(var e=
[],i=0,m=a.aoColumns.length;i<m;i++)e.push(f[h][d[i]]);G(a,e)}else G(a,f[h]);a.aiDisplay=a.aiDisplayMaster.slice();a.bAjaxDataGet=!1;y(a);a.bAjaxDataGet=!0;H(a,!1)}function ya(a){var b=a.oPreviousSearch,c=a.oLanguage.sSearch,c=-1!==c.indexOf("_INPUT_")?c.replace("_INPUT_",'<input type="text" />'):""===c?'<input type="text" />':c+' <input type="text" />',d=k.createElement("div");d.className=a.oClasses.sFilter;d.innerHTML="<label>"+c+"</label>";if(!a.aanFeatures.f)d.id=a.sTableId+"_filter";c=i("input",
d);c.val(b.sSearch.replace('"',"&quot;"));c.bind("keyup.DT",function(){for(var c=a.aanFeatures.f,d=0,g=c.length;d<g;d++)c[d]!=i(this).parents("div.dataTables_filter")[0]&&i("input",c[d]).val(this.value);this.value!=b.sSearch&&M(a,{sSearch:this.value,bRegex:b.bRegex,bSmart:b.bSmart,bCaseInsensitive:b.bCaseInsensitive})});c.attr("aria-controls",a.sTableId).bind("keypress.DT",function(a){if(13==a.keyCode)return!1});return d}function M(a,b,c){var d=a.oPreviousSearch,f=a.aoPreSearchCols,h=function(a){d.sSearch=
a.sSearch;d.bRegex=a.bRegex;d.bSmart=a.bSmart;d.bCaseInsensitive=a.bCaseInsensitive};if(a.oFeatures.bServerSide)h(b);else{Fa(a,b.sSearch,c,b.bRegex,b.bSmart,b.bCaseInsensitive);h(b);for(b=0;b<a.aoPreSearchCols.length;b++)Ga(a,f[b].sSearch,b,f[b].bRegex,f[b].bSmart,f[b].bCaseInsensitive);Ha(a)}a.bFiltered=!0;i(a.oInstance).trigger("filter",a);a._iDisplayStart=0;z(a);y(a);ia(a,0)}function Ha(a){for(var b=j.ext.afnFiltering,c=0,d=b.length;c<d;c++)for(var f=0,h=0,g=a.aiDisplay.length;h<g;h++){var e=a.aiDisplay[h-
f];b[c](a,W(a,e,"filter"),e)||(a.aiDisplay.splice(h-f,1),f++)}}function Ga(a,b,c,d,f,h){if(""!==b)for(var g=0,b=ja(b,d,f,h),d=a.aiDisplay.length-1;0<=d;d--)f=ka(w(a,a.aiDisplay[d],c,"filter"),a.aoColumns[c].sType),b.test(f)||(a.aiDisplay.splice(d,1),g++)}function Fa(a,b,c,d,f,h){d=ja(b,d,f,h);f=a.oPreviousSearch;c||(c=0);0!==j.ext.afnFiltering.length&&(c=1);if(0>=b.length)a.aiDisplay.splice(0,a.aiDisplay.length),a.aiDisplay=a.aiDisplayMaster.slice();else if(a.aiDisplay.length==a.aiDisplayMaster.length||
f.sSearch.length>b.length||1==c||0!==b.indexOf(f.sSearch)){a.aiDisplay.splice(0,a.aiDisplay.length);ia(a,1);for(b=0;b<a.aiDisplayMaster.length;b++)d.test(a.asDataSearch[b])&&a.aiDisplay.push(a.aiDisplayMaster[b])}else for(b=c=0;b<a.asDataSearch.length;b++)d.test(a.asDataSearch[b])||(a.aiDisplay.splice(b-c,1),c++)}function ia(a,b){if(!a.oFeatures.bServerSide){a.asDataSearch.splice(0,a.asDataSearch.length);for(var c=b&&1===b?a.aiDisplayMaster:a.aiDisplay,d=0,f=c.length;d<f;d++)a.asDataSearch[d]=la(a,
W(a,c[d],"filter"))}}function la(a,b){var c="";if(a.__nTmpFilter===l)a.__nTmpFilter=k.createElement("div");for(var d=a.__nTmpFilter,f=0,h=a.aoColumns.length;f<h;f++)a.aoColumns[f].bSearchable&&(c+=ka(b[f],a.aoColumns[f].sType)+" ");if(-1!==c.indexOf("&"))d.innerHTML=c,c=d.textContent?d.textContent:d.innerText,c=c.replace(/\n/g," ").replace(/\r/g,"");return c}function ja(a,b,c,d){if(c)return a=b?a.split(" "):ma(a).split(" "),a="^(?=.*?"+a.join(")(?=.*?")+").*$",RegExp(a,d?"i":"");a=b?a:ma(a);return RegExp(a,
d?"i":"")}function ka(a,b){return"function"===typeof j.ext.ofnSearch[b]?j.ext.ofnSearch[b](a):"html"==b?a.replace(/[\r\n]/g," ").replace(/<.*?>/g,""):"string"===typeof a?a.replace(/[\r\n]/g," "):null===a?"":a}function ma(a){return a.replace(RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\|\\$|\\^)","g"),"\\$1")}function Ba(a){var b=k.createElement("div");b.className=a.oClasses.sInfo;if(!a.aanFeatures.i)a.aoDrawCallback.push({fn:Ia,sName:"information"}),b.id=a.sTableId+"_info";a.nTable.setAttribute("aria-describedby",
a.sTableId+"_info");return b}function Ia(a){if(a.oFeatures.bInfo&&0!==a.aanFeatures.i.length){var b=a._iDisplayStart+1,c=a.fnDisplayEnd(),d=a.fnRecordsTotal(),f=a.fnRecordsDisplay(),h=a.fnFormatNumber(b),g=a.fnFormatNumber(c),e=a.fnFormatNumber(d),q=a.fnFormatNumber(f);a.oScroll.bInfinite&&(h=a.fnFormatNumber(1));h=0===a.fnRecordsDisplay()&&a.fnRecordsDisplay()==a.fnRecordsTotal()?a.oLanguage.sInfoEmpty+a.oLanguage.sInfoPostFix:0===a.fnRecordsDisplay()?a.oLanguage.sInfoEmpty+" "+a.oLanguage.sInfoFiltered.replace("_MAX_",
e)+a.oLanguage.sInfoPostFix:a.fnRecordsDisplay()==a.fnRecordsTotal()?a.oLanguage.sInfo.replace("_START_",h).replace("_END_",g).replace("_TOTAL_",q)+a.oLanguage.sInfoPostFix:a.oLanguage.sInfo.replace("_START_",h).replace("_END_",g).replace("_TOTAL_",q)+" "+a.oLanguage.sInfoFiltered.replace("_MAX_",a.fnFormatNumber(a.fnRecordsTotal()))+a.oLanguage.sInfoPostFix;null!==a.oLanguage.fnInfoCallback&&(h=a.oLanguage.fnInfoCallback.call(a.oInstance,a,b,c,d,f,h));a=a.aanFeatures.i;b=0;for(c=a.length;b<c;b++)i(a[b]).html(h)}}
function $(a){var b,c,d=a.iInitDisplayStart;if(!1===a.bInitialised)setTimeout(function(){$(a)},200);else{wa(a);ua(a);U(a,a.aoHeader);a.nTFoot&&U(a,a.aoFooter);H(a,!0);a.oFeatures.bAutoWidth&&ba(a);for(b=0,c=a.aoColumns.length;b<c;b++)if(null!==a.aoColumns[b].sWidth)a.aoColumns[b].nTh.style.width=p(a.aoColumns[b].sWidth);a.oFeatures.bSort?P(a):a.oFeatures.bFilter?M(a,a.oPreviousSearch):(a.aiDisplay=a.aiDisplayMaster.slice(),z(a),y(a));null!==a.sAjaxSource&&!a.oFeatures.bServerSide?(c=[],ha(a,c),a.fnServerData.call(a.oInstance,
a.sAjaxSource,c,function(c){var h=""!==a.sAjaxDataProp?V(a.sAjaxDataProp)(c):c;for(b=0;b<h.length;b++)G(a,h[b]);a.iInitDisplayStart=d;a.oFeatures.bSort?P(a):(a.aiDisplay=a.aiDisplayMaster.slice(),z(a),y(a));H(a,!1);Y(a,c)},a)):a.oFeatures.bServerSide||(H(a,!1),Y(a))}}function Y(a,b){a._bInitComplete=!0;C(a,"aoInitComplete","init",[a,b])}function na(a){!a.sEmptyTable&&a.sZeroRecords&&n(a,a,"sZeroRecords","sEmptyTable");!a.sLoadingRecords&&a.sZeroRecords&&n(a,a,"sZeroRecords","sLoadingRecords")}function xa(a){if(a.oScroll.bInfinite)return null;
var b='<select size="1" '+('name="'+a.sTableId+'_length"')+">",c,d,f=a.aLengthMenu;if(2==f.length&&"object"===typeof f[0]&&"object"===typeof f[1])for(c=0,d=f[0].length;c<d;c++)b+='<option value="'+f[0][c]+'">'+f[1][c]+"</option>";else for(c=0,d=f.length;c<d;c++)b+='<option value="'+f[c]+'">'+f[c]+"</option>";b+="</select>";f=k.createElement("div");if(!a.aanFeatures.l)f.id=a.sTableId+"_length";f.className=a.oClasses.sLength;f.innerHTML="<label>"+a.oLanguage.sLengthMenu.replace("_MENU_",b)+"</label>";
i('select option[value="'+a._iDisplayLength+'"]',f).attr("selected",!0);i("select",f).bind("change.DT",function(){var b=i(this).val(),f=a.aanFeatures.l;for(c=0,d=f.length;c<d;c++)f[c]!=this.parentNode&&i("select",f[c]).val(b);a._iDisplayLength=parseInt(b,10);z(a);if(a.fnDisplayEnd()==a.fnRecordsDisplay()&&(a._iDisplayStart=a.fnDisplayEnd()-a._iDisplayLength,0>a._iDisplayStart))a._iDisplayStart=0;if(-1==a._iDisplayLength)a._iDisplayStart=0;y(a)});i("select",f).attr("aria-controls",a.sTableId);return f}
function z(a){a._iDisplayEnd=!1===a.oFeatures.bPaginate?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength>a.aiDisplay.length||-1==a._iDisplayLength?a.aiDisplay.length:a._iDisplayStart+a._iDisplayLength}function Ca(a){if(a.oScroll.bInfinite)return null;var b=k.createElement("div");b.className=a.oClasses.sPaging+a.sPaginationType;j.ext.oPagination[a.sPaginationType].fnInit(a,b,function(a){z(a);y(a)});a.aanFeatures.p||a.aoDrawCallback.push({fn:function(a){j.ext.oPagination[a.sPaginationType].fnUpdate(a,
function(a){z(a);y(a)})},sName:"pagination"});return b}function oa(a,b){var c=a._iDisplayStart;if("number"===typeof b){if(a._iDisplayStart=b*a._iDisplayLength,a._iDisplayStart>a.fnRecordsDisplay())a._iDisplayStart=0}else if("first"==b)a._iDisplayStart=0;else if("previous"==b){if(a._iDisplayStart=0<=a._iDisplayLength?a._iDisplayStart-a._iDisplayLength:0,0>a._iDisplayStart)a._iDisplayStart=0}else if("next"==b)0<=a._iDisplayLength?a._iDisplayStart+a._iDisplayLength<a.fnRecordsDisplay()&&(a._iDisplayStart+=
a._iDisplayLength):a._iDisplayStart=0;else if("last"==b)if(0<=a._iDisplayLength){var d=parseInt((a.fnRecordsDisplay()-1)/a._iDisplayLength,10)+1;a._iDisplayStart=(d-1)*a._iDisplayLength}else a._iDisplayStart=0;else F(a,0,"Unknown paging action: "+b);i(a.oInstance).trigger("page",a);return c!=a._iDisplayStart}function za(a){var b=k.createElement("div");if(!a.aanFeatures.r)b.id=a.sTableId+"_processing";b.innerHTML=a.oLanguage.sProcessing;b.className=a.oClasses.sProcessing;a.nTable.parentNode.insertBefore(b,
a.nTable);return b}function H(a,b){if(a.oFeatures.bProcessing)for(var c=a.aanFeatures.r,d=0,f=c.length;d<f;d++)c[d].style.visibility=b?"visible":"hidden";i(a.oInstance).trigger("processing",[a,b])}function Aa(a){if(""===a.oScroll.sX&&""===a.oScroll.sY)return a.nTable;var b=k.createElement("div"),c=k.createElement("div"),d=k.createElement("div"),f=k.createElement("div"),h=k.createElement("div"),g=k.createElement("div"),e=a.nTable.cloneNode(!1),q=a.nTable.cloneNode(!1),m=a.nTable.getElementsByTagName("thead")[0],
j=0===a.nTable.getElementsByTagName("tfoot").length?null:a.nTable.getElementsByTagName("tfoot")[0],o=a.oClasses;c.appendChild(d);h.appendChild(g);f.appendChild(a.nTable);b.appendChild(c);b.appendChild(f);d.appendChild(e);e.appendChild(m);null!==j&&(b.appendChild(h),g.appendChild(q),q.appendChild(j));b.className=o.sScrollWrapper;c.className=o.sScrollHead;d.className=o.sScrollHeadInner;f.className=o.sScrollBody;h.className=o.sScrollFoot;g.className=o.sScrollFootInner;if(a.oScroll.bAutoCss)c.style.overflow=
"hidden",c.style.position="relative",h.style.overflow="hidden",f.style.overflow="auto";c.style.border="0";c.style.width="100%";h.style.border="0";d.style.width="150%";e.removeAttribute("id");e.style.marginLeft="0";a.nTable.style.marginLeft="0";if(null!==j)q.removeAttribute("id"),q.style.marginLeft="0";d=i(a.nTable).children("caption");g=0;for(q=d.length;g<q;g++)e.appendChild(d[g]);if(""!==a.oScroll.sX){c.style.width=p(a.oScroll.sX);f.style.width=p(a.oScroll.sX);if(null!==j)h.style.width=p(a.oScroll.sX);
i(f).scroll(function(){c.scrollLeft=this.scrollLeft;if(null!==j)h.scrollLeft=this.scrollLeft})}if(""!==a.oScroll.sY)f.style.height=p(a.oScroll.sY);a.aoDrawCallback.push({fn:Ja,sName:"scrolling"});a.oScroll.bInfinite&&i(f).scroll(function(){!a.bDrawing&&0!==i(this).scrollTop()&&i(this).scrollTop()+i(this).height()>i(a.nTable).height()-a.oScroll.iLoadGap&&a.fnDisplayEnd()<a.fnRecordsDisplay()&&(oa(a,"next"),z(a),y(a))});a.nScrollHead=c;a.nScrollFoot=h;return b}function Ja(a){var b=a.nScrollHead.getElementsByTagName("div")[0],
c=b.getElementsByTagName("table")[0],d=a.nTable.parentNode,f,h,g,e,j,m,o,l,r=[],n=null!==a.nTFoot?a.nScrollFoot.getElementsByTagName("div")[0]:null,E=null!==a.nTFoot?n.getElementsByTagName("table")[0]:null,k=i.browser.msie&&7>=i.browser.version;g=a.nTable.getElementsByTagName("thead");0<g.length&&a.nTable.removeChild(g[0]);null!==a.nTFoot&&(j=a.nTable.getElementsByTagName("tfoot"),0<j.length&&a.nTable.removeChild(j[0]));g=a.nTHead.cloneNode(!0);a.nTable.insertBefore(g,a.nTable.childNodes[0]);null!==
a.nTFoot&&(j=a.nTFoot.cloneNode(!0),a.nTable.insertBefore(j,a.nTable.childNodes[1]));if(""===a.oScroll.sX)d.style.width="100%",b.parentNode.style.width="100%";var t=O(a,g);for(f=0,h=t.length;f<h;f++)o=s(a,f),t[f].style.width=a.aoColumns[o].sWidth;null!==a.nTFoot&&N(function(a){a.style.width=""},j.getElementsByTagName("tr"));f=i(a.nTable).outerWidth();if(""===a.oScroll.sX){if(a.nTable.style.width="100%",k&&(i("tbody",d).height()>d.offsetHeight||"scroll"==i(d).css("overflow-y")))a.nTable.style.width=
p(i(a.nTable).outerWidth()-a.oScroll.iBarWidth)}else if(""!==a.oScroll.sXInner)a.nTable.style.width=p(a.oScroll.sXInner);else if(f==i(d).width()&&i(d).height()<i(a.nTable).height()){if(a.nTable.style.width=p(f-a.oScroll.iBarWidth),i(a.nTable).outerWidth()>f-a.oScroll.iBarWidth)a.nTable.style.width=p(f)}else a.nTable.style.width=p(f);f=i(a.nTable).outerWidth();h=a.nTHead.getElementsByTagName("tr");g=g.getElementsByTagName("tr");N(function(a,b){m=a.style;m.paddingTop="0";m.paddingBottom="0";m.borderTopWidth=
"0";m.borderBottomWidth="0";m.height=0;l=i(a).width();b.style.width=p(l);r.push(l)},g,h);i(g).height(0);null!==a.nTFoot&&(e=j.getElementsByTagName("tr"),j=a.nTFoot.getElementsByTagName("tr"),N(function(a,b){m=a.style;m.paddingTop="0";m.paddingBottom="0";m.borderTopWidth="0";m.borderBottomWidth="0";m.height=0;l=i(a).width();b.style.width=p(l);r.push(l)},e,j),i(e).height(0));N(function(a){a.innerHTML="";a.style.width=p(r.shift())},g);null!==a.nTFoot&&N(function(a){a.innerHTML="";a.style.width=p(r.shift())},
e);if(i(a.nTable).outerWidth()<f){e=d.scrollHeight>d.offsetHeight||"scroll"==i(d).css("overflow-y")?f+a.oScroll.iBarWidth:f;if(k&&(d.scrollHeight>d.offsetHeight||"scroll"==i(d).css("overflow-y")))a.nTable.style.width=p(e-a.oScroll.iBarWidth);d.style.width=p(e);b.parentNode.style.width=p(e);if(null!==a.nTFoot)n.parentNode.style.width=p(e);""===a.oScroll.sX?F(a,1,"The table cannot fit into the current element which will cause column misalignment. The table has been drawn at its minimum possible width."):
""!==a.oScroll.sXInner&&F(a,1,"The table cannot fit into the current element which will cause column misalignment. Increase the sScrollXInner value or remove it to allow automatic calculation")}else if(d.style.width=p("100%"),b.parentNode.style.width=p("100%"),null!==a.nTFoot)n.parentNode.style.width=p("100%");if(""===a.oScroll.sY&&k)d.style.height=p(a.nTable.offsetHeight+a.oScroll.iBarWidth);if(""!==a.oScroll.sY&&a.oScroll.bCollapse&&(d.style.height=p(a.oScroll.sY),k=""!==a.oScroll.sX&&a.nTable.offsetWidth>
d.offsetWidth?a.oScroll.iBarWidth:0,a.nTable.offsetHeight<d.offsetHeight))d.style.height=p(i(a.nTable).height()+k);k=i(a.nTable).outerWidth();c.style.width=p(k);b.style.width=p(k);if(null!==a.nTFoot)n.style.width=p(a.nTable.offsetWidth),E.style.width=p(a.nTable.offsetWidth);if(a.bSorted||a.bFiltered)d.scrollTop=0}function N(a,b,c){for(var d=0,f=b.length;d<f;d++)for(var h=0,g=b[d].childNodes.length;h<g;h++)1==b[d].childNodes[h].nodeType&&(c?a(b[d].childNodes[h],c[d].childNodes[h]):a(b[d].childNodes[h]))}
function Ka(a,b){if(!a||null===a||""===a)return 0;b||(b=k.getElementsByTagName("body")[0]);var c,d=k.createElement("div");d.style.width=p(a);b.appendChild(d);c=d.offsetWidth;b.removeChild(d);return c}function ba(a){var b=0,c,d=0,f=a.aoColumns.length,h,g=i("th",a.nTHead),e=a.nTable.getAttribute("width");for(h=0;h<f;h++)if(a.aoColumns[h].bVisible&&(d++,null!==a.aoColumns[h].sWidth)){c=Ka(a.aoColumns[h].sWidthOrig,a.nTable.parentNode);if(null!==c)a.aoColumns[h].sWidth=p(c);b++}if(f==g.length&&0===b&&
d==f&&""===a.oScroll.sX&&""===a.oScroll.sY)for(h=0;h<a.aoColumns.length;h++){if(c=i(g[h]).width(),null!==c)a.aoColumns[h].sWidth=p(c)}else{b=a.nTable.cloneNode(!1);h=a.nTHead.cloneNode(!0);d=k.createElement("tbody");c=k.createElement("tr");b.removeAttribute("id");b.appendChild(h);null!==a.nTFoot&&(b.appendChild(a.nTFoot.cloneNode(!0)),N(function(a){a.style.width=""},b.getElementsByTagName("tr")));b.appendChild(d);d.appendChild(c);d=i("thead th",b);0===d.length&&(d=i("tbody tr:eq(0)>td",b));g=O(a,
h);for(h=d=0;h<f;h++){var j=a.aoColumns[h];j.bVisible&&null!==j.sWidthOrig&&""!==j.sWidthOrig?g[h-d].style.width=p(j.sWidthOrig):j.bVisible?g[h-d].style.width="":d++}for(h=0;h<f;h++)a.aoColumns[h].bVisible&&(d=La(a,h),null!==d&&(d=d.cloneNode(!0),""!==a.aoColumns[h].sContentPadding&&(d.innerHTML+=a.aoColumns[h].sContentPadding),c.appendChild(d)));f=a.nTable.parentNode;f.appendChild(b);if(""!==a.oScroll.sX&&""!==a.oScroll.sXInner)b.style.width=p(a.oScroll.sXInner);else if(""!==a.oScroll.sX){if(b.style.width=
"",i(b).width()<f.offsetWidth)b.style.width=p(f.offsetWidth)}else if(""!==a.oScroll.sY)b.style.width=p(f.offsetWidth);else if(e)b.style.width=p(e);b.style.visibility="hidden";Ma(a,b);f=i("tbody tr:eq(0)",b).children();0===f.length&&(f=O(a,i("thead",b)[0]));if(""!==a.oScroll.sX){for(h=d=c=0;h<a.aoColumns.length;h++)a.aoColumns[h].bVisible&&(c=null===a.aoColumns[h].sWidthOrig?c+i(f[d]).outerWidth():c+(parseInt(a.aoColumns[h].sWidth.replace("px",""),10)+(i(f[d]).outerWidth()-i(f[d]).width())),d++);b.style.width=
p(c);a.nTable.style.width=p(c)}for(h=d=0;h<a.aoColumns.length;h++)if(a.aoColumns[h].bVisible){c=i(f[d]).width();if(null!==c&&0<c)a.aoColumns[h].sWidth=p(c);d++}f=i(b).css("width");a.nTable.style.width=-1!==f.indexOf("%")?f:p(i(b).outerWidth());b.parentNode.removeChild(b)}if(e)a.nTable.style.width=p(e)}function Ma(a,b){if(""===a.oScroll.sX&&""!==a.oScroll.sY)i(b).width(),b.style.width=p(i(b).outerWidth()-a.oScroll.iBarWidth);else if(""!==a.oScroll.sX)b.style.width=p(i(b).outerWidth())}function La(a,
b){var c=Na(a,b);if(0>c)return null;if(null===a.aoData[c].nTr){var d=k.createElement("td");d.innerHTML=w(a,c,b,"");return d}return L(a,c)[b]}function Na(a,b){for(var c=-1,d=-1,f=0;f<a.aoData.length;f++){var h=w(a,f,b,"display")+"",h=h.replace(/<.*?>/g,"");if(h.length>c)c=h.length,d=f}return d}function p(a){if(null===a)return"0px";if("number"==typeof a)return 0>a?"0px":a+"px";var b=a.charCodeAt(a.length-1);return 48>b||57<b?a:a+"px"}function Oa(){var a=k.createElement("p"),b=a.style;b.width="100%";
b.height="200px";b.padding="0px";var c=k.createElement("div"),b=c.style;b.position="absolute";b.top="0px";b.left="0px";b.visibility="hidden";b.width="200px";b.height="150px";b.padding="0px";b.overflow="hidden";c.appendChild(a);k.body.appendChild(c);b=a.offsetWidth;c.style.overflow="scroll";a=a.offsetWidth;if(b==a)a=c.clientWidth;k.body.removeChild(c);return b-a}function P(a,b){var c,d,f,h,g,e,o=[],m=[],r=j.ext.oSort,n=a.aoData,k=a.aoColumns,E=a.oLanguage.oAria;if(!a.oFeatures.bServerSide&&(0!==a.aaSorting.length||
null!==a.aaSortingFixed)){o=null!==a.aaSortingFixed?a.aaSortingFixed.concat(a.aaSorting):a.aaSorting.slice();for(c=0;c<o.length;c++)if(d=o[c][0],f=t(a,d),h=a.aoColumns[d].sSortDataType,j.ext.afnSortData[h]){g=j.ext.afnSortData[h](a,d,f);for(f=0,h=n.length;f<h;f++)J(a,f,d,g[f])}for(c=0,d=a.aiDisplayMaster.length;c<d;c++)m[a.aiDisplayMaster[c]]=c;var p=o.length,s;for(c=0,d=n.length;c<d;c++)for(f=0;f<p;f++){s=k[o[f][0]].aDataSort;for(g=0,e=s.length;g<e;g++)h=k[s[g]].sType,h=r[(h?h:"string")+"-pre"],
n[c]._aSortData[s[g]]=h?h(w(a,c,s[g],"sort")):w(a,c,s[g],"sort")}a.aiDisplayMaster.sort(function(a,b){var c,d,f,h,g;for(c=0;c<p;c++){g=k[o[c][0]].aDataSort;for(d=0,f=g.length;d<f;d++)if(h=k[g[d]].sType,h=r[(h?h:"string")+"-"+o[c][1]](n[a]._aSortData[g[d]],n[b]._aSortData[g[d]]),0!==h)return h}return r["numeric-asc"](m[a],m[b])})}(b===l||b)&&!a.oFeatures.bDeferRender&&Q(a);for(c=0,d=a.aoColumns.length;c<d;c++)f=k[c].nTh,f.removeAttribute("aria-sort"),f.removeAttribute("aria-label"),k[c].bSortable?
0<o.length&&o[0][0]==c?(f.setAttribute("aria-sort","asc"==o[0][1]?"ascending":"descending"),f.setAttribute("aria-label",k[c].sTitle+("asc"==(k[c].asSorting[o[0][2]+1]?k[c].asSorting[o[0][2]+1]:k[c].asSorting[0])?E.sSortAscending:E.sSortDescending))):f.setAttribute("aria-label",k[c].sTitle+("asc"==k[c].asSorting[0]?E.sSortAscending:E.sSortDescending)):f.setAttribute("aria-label",k[c].sTitle);a.bSorted=!0;i(a.oInstance).trigger("sort",a);a.oFeatures.bFilter?M(a,a.oPreviousSearch,1):(a.aiDisplay=a.aiDisplayMaster.slice(),
a._iDisplayStart=0,z(a),y(a))}function ga(a,b,c,d){Pa(b,{},function(b){if(!1!==a.aoColumns[c].bSortable){var h=function(){var d,h;if(b.shiftKey){for(var e=!1,i=0;i<a.aaSorting.length;i++)if(a.aaSorting[i][0]==c){e=!0;d=a.aaSorting[i][0];h=a.aaSorting[i][2]+1;a.aoColumns[d].asSorting[h]?(a.aaSorting[i][1]=a.aoColumns[d].asSorting[h],a.aaSorting[i][2]=h):a.aaSorting.splice(i,1);break}!1===e&&a.aaSorting.push([c,a.aoColumns[c].asSorting[0],0])}else 1==a.aaSorting.length&&a.aaSorting[0][0]==c?(d=a.aaSorting[0][0],
h=a.aaSorting[0][2]+1,a.aoColumns[d].asSorting[h]||(h=0),a.aaSorting[0][1]=a.aoColumns[d].asSorting[h],a.aaSorting[0][2]=h):(a.aaSorting.splice(0,a.aaSorting.length),a.aaSorting.push([c,a.aoColumns[c].asSorting[0],0]));P(a)};a.oFeatures.bProcessing?(H(a,!0),setTimeout(function(){h();a.oFeatures.bServerSide||H(a,!1)},0)):h();"function"==typeof d&&d(a)}})}function Q(a){var b,c,d,f,h,g=a.aoColumns.length,e=a.oClasses;for(b=0;b<g;b++)a.aoColumns[b].bSortable&&i(a.aoColumns[b].nTh).removeClass(e.sSortAsc+
" "+e.sSortDesc+" "+a.aoColumns[b].sSortingClass);f=null!==a.aaSortingFixed?a.aaSortingFixed.concat(a.aaSorting):a.aaSorting.slice();for(b=0;b<a.aoColumns.length;b++)if(a.aoColumns[b].bSortable){h=a.aoColumns[b].sSortingClass;d=-1;for(c=0;c<f.length;c++)if(f[c][0]==b){h="asc"==f[c][1]?e.sSortAsc:e.sSortDesc;d=c;break}i(a.aoColumns[b].nTh).addClass(h);a.bJUI&&(c=i("span."+e.sSortIcon,a.aoColumns[b].nTh),c.removeClass(e.sSortJUIAsc+" "+e.sSortJUIDesc+" "+e.sSortJUI+" "+e.sSortJUIAscAllowed+" "+e.sSortJUIDescAllowed),
c.addClass(-1==d?a.aoColumns[b].sSortingClassJUI:"asc"==f[d][1]?e.sSortJUIAsc:e.sSortJUIDesc))}else i(a.aoColumns[b].nTh).addClass(a.aoColumns[b].sSortingClass);h=e.sSortColumn;if(a.oFeatures.bSort&&a.oFeatures.bSortClasses){d=L(a);if(a.oFeatures.bDeferRender)i(d).removeClass(h+"1 "+h+"2 "+h+"3");else if(d.length>=g)for(b=0;b<g;b++)if(-1!=d[b].className.indexOf(h+"1"))for(c=0,a=d.length/g;c<a;c++)d[g*c+b].className=i.trim(d[g*c+b].className.replace(h+"1",""));else if(-1!=d[b].className.indexOf(h+
"2"))for(c=0,a=d.length/g;c<a;c++)d[g*c+b].className=i.trim(d[g*c+b].className.replace(h+"2",""));else if(-1!=d[b].className.indexOf(h+"3"))for(c=0,a=d.length/g;c<a;c++)d[g*c+b].className=i.trim(d[g*c+b].className.replace(" "+h+"3",""));var e=1,j;for(b=0;b<f.length;b++){j=parseInt(f[b][0],10);for(c=0,a=d.length/g;c<a;c++)d[g*c+j].className+=" "+h+e;3>e&&e++}}}function pa(a){if(a.oFeatures.bStateSave&&!a.bDestroying){var b,c;b=a.oScroll.bInfinite;var d={iCreate:(new Date).getTime(),iStart:b?0:a._iDisplayStart,
iEnd:b?a._iDisplayLength:a._iDisplayEnd,iLength:a._iDisplayLength,aaSorting:i.extend(!0,[],a.aaSorting),oSearch:i.extend(!0,{},a.oPreviousSearch),aoSearchCols:i.extend(!0,[],a.aoPreSearchCols),abVisCols:[]};for(b=0,c=a.aoColumns.length;b<c;b++)d.abVisCols.push(a.aoColumns[b].bVisible);C(a,"aoStateSaveParams","stateSaveParams",[a,d]);a.fnStateSave.call(a.oInstance,a,d)}}function Qa(a,b){if(a.oFeatures.bStateSave){var c=a.fnStateLoad.call(a.oInstance,a);if(c){var d=C(a,"aoStateLoadParams","stateLoadParams",
[a,c]);if(-1===i.inArray(!1,d)){a.oLoadedState=i.extend(!0,{},c);a._iDisplayStart=c.iStart;a.iInitDisplayStart=c.iStart;a._iDisplayEnd=c.iEnd;a._iDisplayLength=c.iLength;a.aaSorting=c.aaSorting.slice();a.saved_aaSorting=c.aaSorting.slice();i.extend(a.oPreviousSearch,c.oSearch);i.extend(!0,a.aoPreSearchCols,c.aoSearchCols);b.saved_aoColumns=[];for(d=0;d<c.abVisCols.length;d++)b.saved_aoColumns[d]={},b.saved_aoColumns[d].bVisible=c.abVisCols[d];C(a,"aoStateLoaded","stateLoaded",[a,c])}}}}function Ra(a){for(var b=
aa.location.pathname.split("/"),a=a+"_"+b[b.length-1].replace(/[\/:]/g,"").toLowerCase()+"=",b=k.cookie.split(";"),c=0;c<b.length;c++){for(var d=b[c];" "==d.charAt(0);)d=d.substring(1,d.length);if(0===d.indexOf(a))return decodeURIComponent(d.substring(a.length,d.length))}return null}function u(a){for(var b=0;b<j.settings.length;b++)if(j.settings[b].nTable===a)return j.settings[b];return null}function S(a){for(var b=[],a=a.aoData,c=0,d=a.length;c<d;c++)null!==a[c].nTr&&b.push(a[c].nTr);return b}function L(a,
b){var c=[],d,f,h,e,i,j;f=0;var o=a.aoData.length;b!==l&&(f=b,o=b+1);for(h=f;h<o;h++)if(j=a.aoData[h],null!==j.nTr){f=[];for(e=0,i=j.nTr.childNodes.length;e<i;e++)d=j.nTr.childNodes[e].nodeName.toLowerCase(),("td"==d||"th"==d)&&f.push(j.nTr.childNodes[e]);d=0;for(e=0,i=a.aoColumns.length;e<i;e++)a.aoColumns[e].bVisible?c.push(f[e-d]):(c.push(j._anHidden[e]),d++)}return c}function F(a,b,c){a=null===a?"DataTables warning: "+c:"DataTables warning (table id = '"+a.sTableId+"'): "+c;if(0===b)if("alert"==
j.ext.sErrMode)alert(a);else throw a;else console!==l&&console.log&&console.log(a)}function n(a,b,c,d){d===l&&(d=c);b[c]!==l&&(a[d]=b[c])}function Sa(a,b){for(var c in a)a.hasOwnProperty(c)&&b[c]!==l&&("object"===typeof e[c]&&!1===i.isArray(b[c])?i.extend(!0,a[c],b[c]):a[c]=b[c]);return a}function Pa(a,b,c){i(a).bind("click.DT",b,function(b){c(b);a.blur()}).bind("keypress.DT",b,function(a){13===a.which&&c(a)}).bind("selectstart.DT",function(){return!1})}function A(a,b,c,d){c&&a[b].push({fn:c,sName:d})}
function C(a,b,c,d){for(var b=a[b],f=[],h=b.length-1;0<=h;h--)f.push(b[h].fn.apply(a.oInstance,d));null!==c&&i(a.oInstance).trigger(c,d);return f}function Ta(a){return function(){var b=[u(this[j.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return j.ext.oApi[a].apply(this,b)}}var Ua=aa.JSON?JSON.stringify:function(a){var b=typeof a;if("object"!==b||null===a)return"string"===b&&(a='"'+a+'"'),a+"";var c,d,f=[],h=i.isArray(a);for(c in a)d=a[c],b=typeof d,"string"===b?d='"'+d+'"':"object"===
b&&null!==d&&(d=Ua(d)),f.push((h?"":'"'+c+'":')+d);return(h?"[":"{")+f+(h?"]":"}")};this.$=function(a,b){var c,d,f=[],h=u(this[j.ext.iApiIndex]);b||(b={});b=i.extend({},{filter:"none",order:"current",page:"all"},b);if("current"==b.page)for(c=h._iDisplayStart,d=h.fnDisplayEnd();c<d;c++)f.push(h.aoData[h.aiDisplay[c]].nTr);else if("current"==b.order&&"none"==b.filter)for(c=0,d=h.aiDisplayMaster.length;c<d;c++)f.push(h.aoData[h.aiDisplayMaster[c]].nTr);else if("current"==b.order&&"applied"==b.filter)for(c=
0,d=h.aiDisplay.length;c<d;c++)f.push(h.aoData[h.aiDisplay[c]].nTr);else if("original"==b.order&&"none"==b.filter)for(c=0,d=h.aoData.length;c<d;c++)f.push(h.aoData[c].nTr);else if("original"==b.order&&"applied"==b.filter)for(c=0,d=h.aoData.length;c<d;c++)-1!==i.inArray(c,h.aiDisplay)&&f.push(h.aoData[c].nTr);else F(h,1,"Unknown selection options");d=i(f);c=d.filter(a);d=d.find(a);return i([].concat(i.makeArray(c),i.makeArray(d)))};this._=function(a,b){var c=[],d,f,h=this.$(a,b);for(d=0,f=h.length;d<
f;d++)c.push(this.fnGetData(h[d]));return c};this.fnAddData=function(a,b){if(0===a.length)return[];var c=[],d,f=u(this[j.ext.iApiIndex]);if("object"===typeof a[0]&&null!==a[0])for(var h=0;h<a.length;h++){d=G(f,a[h]);if(-1==d)return c;c.push(d)}else{d=G(f,a);if(-1==d)return c;c.push(d)}f.aiDisplay=f.aiDisplayMaster.slice();(b===l||b)&&Z(f);return c};this.fnAdjustColumnSizing=function(a){var b=u(this[j.ext.iApiIndex]);r(b);a===l||a?this.fnDraw(!1):(""!==b.oScroll.sX||""!==b.oScroll.sY)&&this.oApi._fnScrollDraw(b)};
this.fnClearTable=function(a){var b=u(this[j.ext.iApiIndex]);ea(b);(a===l||a)&&y(b)};this.fnClose=function(a){for(var b=u(this[j.ext.iApiIndex]),c=0;c<b.aoOpenRows.length;c++)if(b.aoOpenRows[c].nParent==a)return(a=b.aoOpenRows[c].nTr.parentNode)&&a.removeChild(b.aoOpenRows[c].nTr),b.aoOpenRows.splice(c,1),0;return 1};this.fnDeleteRow=function(a,b,c){var d=u(this[j.ext.iApiIndex]),f,h,a="object"===typeof a?K(d,a):a,e=d.aoData.splice(a,1);for(f=0,h=d.aoData.length;f<h;f++)if(null!==d.aoData[f].nTr)d.aoData[f].nTr._DT_RowIndex=
f;f=i.inArray(a,d.aiDisplay);d.asDataSearch.splice(f,1);fa(d.aiDisplayMaster,a);fa(d.aiDisplay,a);"function"===typeof b&&b.call(this,d,e);if(d._iDisplayStart>=d.aiDisplay.length&&(d._iDisplayStart-=d._iDisplayLength,0>d._iDisplayStart))d._iDisplayStart=0;if(c===l||c)z(d),y(d);return e};this.fnDestroy=function(a){var b=u(this[j.ext.iApiIndex]),c=b.nTableWrapper.parentNode,d=b.nTBody,f,e,a=a===l?!1:!0;b.bDestroying=!0;for(f=0,e=b.aoDestroyCallback.length;f<e;f++)b.aoDestroyCallback[f].fn();for(f=0,
e=b.aoColumns.length;f<e;f++)!1===b.aoColumns[f].bVisible&&this.fnSetColumnVis(f,!0);i(b.nTableWrapper).find("*").andSelf().unbind(".DT");i("tbody>tr>td."+b.oClasses.sRowEmpty,b.nTable).parent().remove();b.nTable!=b.nTHead.parentNode&&(i(b.nTable).children("thead").remove(),b.nTable.appendChild(b.nTHead));b.nTFoot&&b.nTable!=b.nTFoot.parentNode&&(i(b.nTable).children("tfoot").remove(),b.nTable.appendChild(b.nTFoot));b.nTable.parentNode.removeChild(b.nTable);i(b.nTableWrapper).remove();b.aaSorting=
[];b.aaSortingFixed=[];Q(b);i(S(b)).removeClass(b.asStripeClasses.join(" "));i("th, td",b.nTHead).removeClass([b.oClasses.sSortable,b.oClasses.sSortableAsc,b.oClasses.sSortableDesc,b.oClasses.sSortableNone].join(" "));b.bJUI&&(i("th span."+b.oClasses.sSortIcon+", td span."+b.oClasses.sSortIcon,b.nTHead).remove(),i("th, td",b.nTHead).each(function(){var a=i("div."+b.oClasses.sSortJUIWrapper,this),c=a.contents();i(this).append(c);a.remove()}));!a&&b.nTableReinsertBefore?c.insertBefore(b.nTable,b.nTableReinsertBefore):
a||c.appendChild(b.nTable);for(f=0,e=b.aoData.length;f<e;f++)null!==b.aoData[f].nTr&&d.appendChild(b.aoData[f].nTr);if(!0===b.oFeatures.bAutoWidth)b.nTable.style.width=p(b.sDestroyWidth);i(d).children("tr:even").addClass(b.asDestroyStripes[0]);i(d).children("tr:odd").addClass(b.asDestroyStripes[1]);for(f=0,e=j.settings.length;f<e;f++)j.settings[f]==b&&j.settings.splice(f,1);b=null};this.fnDraw=function(a){var b=u(this[j.ext.iApiIndex]);a?(z(b),y(b)):Z(b)};this.fnFilter=function(a,b,c,d,f,e){var g=
u(this[j.ext.iApiIndex]);if(g.oFeatures.bFilter){if(c===l||null===c)c=!1;if(d===l||null===d)d=!0;if(f===l||null===f)f=!0;if(e===l||null===e)e=!0;if(b===l||null===b){if(M(g,{sSearch:a+"",bRegex:c,bSmart:d,bCaseInsensitive:e},1),f&&g.aanFeatures.f){b=g.aanFeatures.f;c=0;for(d=b.length;c<d;c++)i("input",b[c]).val(a)}}else i.extend(g.aoPreSearchCols[b],{sSearch:a+"",bRegex:c,bSmart:d,bCaseInsensitive:e}),M(g,g.oPreviousSearch,1)}};this.fnGetData=function(a,b){var c=u(this[j.ext.iApiIndex]);if(a!==l){var d=
a;if("object"===typeof a){var f=a.nodeName.toLowerCase();"tr"===f?d=K(c,a):"td"===f&&(d=K(c,a.parentNode),b=da(c,d,a))}return b!==l?w(c,d,b,""):c.aoData[d]!==l?c.aoData[d]._aData:null}return X(c)};this.fnGetNodes=function(a){var b=u(this[j.ext.iApiIndex]);return a!==l?b.aoData[a]!==l?b.aoData[a].nTr:null:S(b)};this.fnGetPosition=function(a){var b=u(this[j.ext.iApiIndex]),c=a.nodeName.toUpperCase();if("TR"==c)return K(b,a);return"TD"==c||"TH"==c?(c=K(b,a.parentNode),a=da(b,c,a),[c,t(b,a),a]):null};
this.fnIsOpen=function(a){for(var b=u(this[j.ext.iApiIndex]),c=0;c<b.aoOpenRows.length;c++)if(b.aoOpenRows[c].nParent==a)return!0;return!1};this.fnOpen=function(a,b,c){var d=u(this[j.ext.iApiIndex]),f=S(d);if(-1!==i.inArray(a,f)){this.fnClose(a);var f=k.createElement("tr"),e=k.createElement("td");f.appendChild(e);e.className=c;e.colSpan=v(d);"string"===typeof b?e.innerHTML=b:i(e).html(b);b=i("tr",d.nTBody);-1!=i.inArray(a,b)&&i(f).insertAfter(a);d.aoOpenRows.push({nTr:f,nParent:a});return f}};this.fnPageChange=
function(a,b){var c=u(this[j.ext.iApiIndex]);oa(c,a);z(c);(b===l||b)&&y(c)};this.fnSetColumnVis=function(a,b,c){var d=u(this[j.ext.iApiIndex]),f,e,g=d.aoColumns,i=d.aoData,o,m;if(g[a].bVisible!=b){if(b){for(f=e=0;f<a;f++)g[f].bVisible&&e++;m=e>=v(d);if(!m)for(f=a;f<g.length;f++)if(g[f].bVisible){o=f;break}for(f=0,e=i.length;f<e;f++)null!==i[f].nTr&&(m?i[f].nTr.appendChild(i[f]._anHidden[a]):i[f].nTr.insertBefore(i[f]._anHidden[a],L(d,f)[o]))}else for(f=0,e=i.length;f<e;f++)null!==i[f].nTr&&(o=L(d,
f)[a],i[f]._anHidden[a]=o,o.parentNode.removeChild(o));g[a].bVisible=b;U(d,d.aoHeader);d.nTFoot&&U(d,d.aoFooter);for(f=0,e=d.aoOpenRows.length;f<e;f++)d.aoOpenRows[f].nTr.colSpan=v(d);if(c===l||c)r(d),y(d);pa(d)}};this.fnSettings=function(){return u(this[j.ext.iApiIndex])};this.fnSort=function(a){var b=u(this[j.ext.iApiIndex]);b.aaSorting=a;P(b)};this.fnSortListener=function(a,b,c){ga(u(this[j.ext.iApiIndex]),a,b,c)};this.fnUpdate=function(a,b,c,d,f){var e=u(this[j.ext.iApiIndex]),b="object"===typeof b?
K(e,b):b;if(e.__fnUpdateDeep===l&&i.isArray(a)&&"object"===typeof a){e.aoData[b]._aData=a.slice();e.__fnUpdateDeep=!0;for(c=0;c<e.aoColumns.length;c++)this.fnUpdate(w(e,b,c),b,c,!1,!1);e.__fnUpdateDeep=l}else if(e.__fnUpdateDeep===l&&null!==a&&"object"===typeof a){e.aoData[b]._aData=i.extend(!0,{},a);e.__fnUpdateDeep=!0;for(c=0;c<e.aoColumns.length;c++)this.fnUpdate(w(e,b,c),b,c,!1,!1);e.__fnUpdateDeep=l}else{J(e,b,c,a);var a=w(e,b,c,"display"),g=e.aoColumns[c];null!==g.fnRender&&(a=R(e,b,c),g.bUseRendered&&
J(e,b,c,a));if(null!==e.aoData[b].nTr)L(e,b)[c].innerHTML=a}c=i.inArray(b,e.aiDisplay);e.asDataSearch[c]=la(e,W(e,b,"filter"));(f===l||f)&&r(e);(d===l||d)&&Z(e);return 0};this.fnVersionCheck=j.ext.fnVersionCheck;this.oApi={_fnExternApiFunc:Ta,_fnInitialise:$,_fnInitComplete:Y,_fnLanguageCompat:na,_fnAddColumn:o,_fnColumnOptions:E,_fnAddData:G,_fnCreateTr:ca,_fnGatherData:ta,_fnBuildHead:ua,_fnDrawHead:U,_fnDraw:y,_fnReDraw:Z,_fnAjaxUpdate:va,_fnAjaxParameters:Da,_fnAjaxUpdateDraw:Ea,_fnServerParams:ha,
_fnAddOptionsHtml:wa,_fnFeatureHtmlTable:Aa,_fnScrollDraw:Ja,_fnAdjustColumnSizing:r,_fnFeatureHtmlFilter:ya,_fnFilterComplete:M,_fnFilterCustom:Ha,_fnFilterColumn:Ga,_fnFilter:Fa,_fnBuildSearchArray:ia,_fnBuildSearchRow:la,_fnFilterCreateSearch:ja,_fnDataToSearch:ka,_fnSort:P,_fnSortAttachListener:ga,_fnSortingClasses:Q,_fnFeatureHtmlPaginate:Ca,_fnPageChange:oa,_fnFeatureHtmlInfo:Ba,_fnUpdateInfo:Ia,_fnFeatureHtmlLength:xa,_fnFeatureHtmlProcessing:za,_fnProcessingDisplay:H,_fnVisibleToColumnIndex:s,
_fnColumnIndexToVisible:t,_fnNodeToDataIndex:K,_fnVisbleColumns:v,_fnCalculateEnd:z,_fnConvertToWidth:Ka,_fnCalculateColumnWidths:ba,_fnScrollingWidthAdjust:Ma,_fnGetWidestNode:La,_fnGetMaxLenString:Na,_fnStringToCss:p,_fnDetectType:B,_fnSettingsFromNode:u,_fnGetDataMaster:X,_fnGetTrNodes:S,_fnGetTdNodes:L,_fnEscapeRegex:ma,_fnDeleteIndex:fa,_fnReOrderIndex:D,_fnColumnOrdering:x,_fnLog:F,_fnClearTable:ea,_fnSaveState:pa,_fnLoadState:Qa,_fnCreateCookie:function(a,b,c,d,e){var h=new Date;h.setTime(h.getTime()+
1E3*c);var c=aa.location.pathname.split("/"),a=a+"_"+c.pop().replace(/[\/:]/g,"").toLowerCase(),g;null!==e?(g="function"===typeof i.parseJSON?i.parseJSON(b):eval("("+b+")"),b=e(a,g,h.toGMTString(),c.join("/")+"/")):b=a+"="+encodeURIComponent(b)+"; expires="+h.toGMTString()+"; path="+c.join("/")+"/";e="";h=9999999999999;if(4096<(null!==Ra(a)?k.cookie.length:b.length+k.cookie.length)+10){for(var a=k.cookie.split(";"),j=0,o=a.length;j<o;j++)if(-1!=a[j].indexOf(d)){var m=a[j].split("=");try{g=eval("("+
decodeURIComponent(m[1])+")")}catch(l){continue}if(g.iCreate&&g.iCreate<h)e=m[0],h=g.iCreate}if(""!==e)k.cookie=e+"=; expires=Thu, 01-Jan-1970 00:00:01 GMT; path="+c.join("/")+"/"}k.cookie=b},_fnReadCookie:Ra,_fnDetectHeader:T,_fnGetUniqueThs:O,_fnScrollBarWidth:Oa,_fnApplyToChildren:N,_fnMap:n,_fnGetRowData:W,_fnGetCellData:w,_fnSetCellData:J,_fnGetObjectDataFn:V,_fnSetObjectDataFn:sa,_fnApplyColumnDefs:I,_fnBindAction:Pa,_fnExtend:Sa,_fnCallbackReg:A,_fnCallbackFire:C,_fnJsonString:Ua,_fnRender:R,
_fnNodeToColumnIndex:da};i.extend(j.ext.oApi,this.oApi);for(var qa in j.ext.oApi)qa&&(this[qa]=Ta(qa));var ra=this;return this.each(function(){var a=0,b,c,d;c=this.getAttribute("id");var f=!1,h=!1;if("table"!=this.nodeName.toLowerCase())F(null,0,"Attempted to initialise DataTables on a node which is not a table: "+this.nodeName);else{for(a=0,b=j.settings.length;a<b;a++){if(j.settings[a].nTable==this){if(e===l||e.bRetrieve)return j.settings[a].oInstance;if(e.bDestroy){j.settings[a].oInstance.fnDestroy();
break}else{F(j.settings[a],0,"Cannot reinitialise DataTable.\n\nTo retrieve the DataTables object for this table, pass no arguments or see the docs for bRetrieve and bDestroy");return}}if(j.settings[a].sTableId==this.id){j.settings.splice(a,1);break}}if(null===c)this.id=c="DataTables_Table_"+j.ext._oExternConfig.iNextUnique++;var g=i.extend(!0,{},j.models.oSettings,{nTable:this,oApi:ra.oApi,oInit:e,sDestroyWidth:i(this).width(),sInstance:c,sTableId:c});j.settings.push(g);g.oInstance=1===ra.length?
ra:i(this).dataTable();e||(e={});e.oLanguage&&na(e.oLanguage);e=Sa(i.extend(!0,{},j.defaults),e);n(g.oFeatures,e,"bPaginate");n(g.oFeatures,e,"bLengthChange");n(g.oFeatures,e,"bFilter");n(g.oFeatures,e,"bSort");n(g.oFeatures,e,"bInfo");n(g.oFeatures,e,"bProcessing");n(g.oFeatures,e,"bAutoWidth");n(g.oFeatures,e,"bSortClasses");n(g.oFeatures,e,"bServerSide");n(g.oFeatures,e,"bDeferRender");n(g.oScroll,e,"sScrollX","sX");n(g.oScroll,e,"sScrollXInner","sXInner");n(g.oScroll,e,"sScrollY","sY");n(g.oScroll,
e,"bScrollCollapse","bCollapse");n(g.oScroll,e,"bScrollInfinite","bInfinite");n(g.oScroll,e,"iScrollLoadGap","iLoadGap");n(g.oScroll,e,"bScrollAutoCss","bAutoCss");n(g,e,"asStripClasses","asStripeClasses");n(g,e,"asStripeClasses");n(g,e,"fnServerData");n(g,e,"fnFormatNumber");n(g,e,"sServerMethod");n(g,e,"aaSorting");n(g,e,"aaSortingFixed");n(g,e,"aLengthMenu");n(g,e,"sPaginationType");n(g,e,"sAjaxSource");n(g,e,"sAjaxDataProp");n(g,e,"iCookieDuration");n(g,e,"sCookiePrefix");n(g,e,"sDom");n(g,e,
"bSortCellsTop");n(g,e,"iTabIndex");n(g,e,"oSearch","oPreviousSearch");n(g,e,"aoSearchCols","aoPreSearchCols");n(g,e,"iDisplayLength","_iDisplayLength");n(g,e,"bJQueryUI","bJUI");n(g,e,"fnCookieCallback");n(g,e,"fnStateLoad");n(g,e,"fnStateSave");n(g.oLanguage,e,"fnInfoCallback");A(g,"aoDrawCallback",e.fnDrawCallback,"user");A(g,"aoServerParams",e.fnServerParams,"user");A(g,"aoStateSaveParams",e.fnStateSaveParams,"user");A(g,"aoStateLoadParams",e.fnStateLoadParams,"user");A(g,"aoStateLoaded",e.fnStateLoaded,
"user");A(g,"aoRowCallback",e.fnRowCallback,"user");A(g,"aoRowCreatedCallback",e.fnCreatedRow,"user");A(g,"aoHeaderCallback",e.fnHeaderCallback,"user");A(g,"aoFooterCallback",e.fnFooterCallback,"user");A(g,"aoInitComplete",e.fnInitComplete,"user");A(g,"aoPreDrawCallback",e.fnPreDrawCallback,"user");g.oFeatures.bServerSide&&g.oFeatures.bSort&&g.oFeatures.bSortClasses?A(g,"aoDrawCallback",Q,"server_side_sort_classes"):g.oFeatures.bDeferRender&&A(g,"aoDrawCallback",Q,"defer_sort_classes");if(e.bJQueryUI){if(i.extend(g.oClasses,
j.ext.oJUIClasses),e.sDom===j.defaults.sDom&&"lfrtip"===j.defaults.sDom)g.sDom='<"H"lfr>t<"F"ip>'}else i.extend(g.oClasses,j.ext.oStdClasses);i(this).addClass(g.oClasses.sTable);if(""!==g.oScroll.sX||""!==g.oScroll.sY)g.oScroll.iBarWidth=Oa();if(g.iInitDisplayStart===l)g.iInitDisplayStart=e.iDisplayStart,g._iDisplayStart=e.iDisplayStart;if(e.bStateSave)g.oFeatures.bStateSave=!0,Qa(g,e),A(g,"aoDrawCallback",pa,"state_save");if(null!==e.iDeferLoading)g.bDeferLoading=!0,g._iRecordsTotal=e.iDeferLoading,
g._iRecordsDisplay=e.iDeferLoading;null!==e.aaData&&(h=!0);""!==e.oLanguage.sUrl?(g.oLanguage.sUrl=e.oLanguage.sUrl,i.getJSON(g.oLanguage.sUrl,null,function(a){na(a);i.extend(!0,g.oLanguage,e.oLanguage,a);$(g)}),f=!0):i.extend(!0,g.oLanguage,e.oLanguage);c=!1;d=i(this).children("tbody").children("tr");for(a=0,b=g.asStripeClasses.length;a<b;a++)if(d.filter(":lt(2)").hasClass(g.asStripeClasses[a])){c=!0;break}if(c)g.asDestroyStripes=["",""],i(d[0]).hasClass(g.oClasses.sStripeOdd)&&(g.asDestroyStripes[0]+=
g.oClasses.sStripeOdd+" "),i(d[0]).hasClass(g.oClasses.sStripeEven)&&(g.asDestroyStripes[0]+=g.oClasses.sStripeEven),i(d[1]).hasClass(g.oClasses.sStripeOdd)&&(g.asDestroyStripes[1]+=g.oClasses.sStripeOdd+" "),i(d[1]).hasClass(g.oClasses.sStripeEven)&&(g.asDestroyStripes[1]+=g.oClasses.sStripeEven),d.removeClass(g.asStripeClasses.join(" "));c=[];a=this.getElementsByTagName("thead");0!==a.length&&(T(g.aoHeader,a[0]),c=O(g));if(null===e.aoColumns){d=[];for(a=0,b=c.length;a<b;a++)d.push(null)}else d=
e.aoColumns;for(a=0,b=d.length;a<b;a++){if(e.saved_aoColumns!==l&&e.saved_aoColumns.length==b)null===d[a]&&(d[a]={}),d[a].bVisible=e.saved_aoColumns[a].bVisible;o(g,c?c[a]:null)}I(g,e.aoColumnDefs,d,function(a,b){E(g,a,b)});for(a=0,b=g.aaSorting.length;a<b;a++){g.aaSorting[a][0]>=g.aoColumns.length&&(g.aaSorting[a][0]=0);var r=g.aoColumns[g.aaSorting[a][0]];g.aaSorting[a][2]===l&&(g.aaSorting[a][2]=0);e.aaSorting===l&&g.saved_aaSorting===l&&(g.aaSorting[a][1]=r.asSorting[0]);for(c=0,d=r.asSorting.length;c<
d;c++)if(g.aaSorting[a][1]==r.asSorting[c]){g.aaSorting[a][2]=c;break}}Q(g);a=i(this).children("thead");0===a.length&&(a=[k.createElement("thead")],this.appendChild(a[0]));g.nTHead=a[0];a=i(this).children("tbody");0===a.length&&(a=[k.createElement("tbody")],this.appendChild(a[0]));g.nTBody=a[0];g.nTBody.setAttribute("role","alert");g.nTBody.setAttribute("aria-live","polite");g.nTBody.setAttribute("aria-relevant","all");a=i(this).children("tfoot");if(0<a.length)g.nTFoot=a[0],T(g.aoFooter,g.nTFoot);
if(h)for(a=0;a<e.aaData.length;a++)G(g,e.aaData[a]);else ta(g);g.aiDisplay=g.aiDisplayMaster.slice();g.bInitialised=!0;!1===f&&$(g)}})};j.version="1.9.0";j.settings=[];j.models={};j.models.ext={afnFiltering:[],afnSortData:[],aoFeatures:[],aTypes:[],fnVersionCheck:function(e){for(var i=function(e,i){for(;e.length<i;)e+="0";return e},l=j.ext.sVersion.split("."),e=e.split("."),r="",k="",t=0,v=e.length;t<v;t++)r+=i(l[t],3),k+=i(e[t],3);return parseInt(r,10)>=parseInt(k,10)},iApiIndex:0,ofnSearch:{},oApi:{},
oStdClasses:{},oJUIClasses:{},oPagination:{},oSort:{},sVersion:j.version,sErrMode:"alert",_oExternConfig:{iNextUnique:0}};j.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};j.models.oRow={nTr:null,_aData:[],_aSortData:[],_anHidden:[],_sRowStripe:""};j.models.oColumn={aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bUseRendered:null,bVisible:null,_bAutoType:!0,fnCreatedCell:null,fnGetData:null,fnRender:null,fnSetData:null,mDataProp:null,nTh:null,nTf:null,sClass:null,
sContentPadding:null,sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};j.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:["odd","even"],bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bJQueryUI:!1,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollAutoCss:!0,bScrollCollapse:!1,
bScrollInfinite:!1,bServerSide:!1,bSort:!0,bSortCellsTop:!1,bSortClasses:!0,bStateSave:!1,fnCookieCallback:null,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(e){if(1E3>e)return e;for(var i=e+"",e=i.split(""),j="",i=i.length,l=0;l<i;l++)0===l%3&&0!==l&&(j=this.oLanguage.sInfoThousands+j),j=e[i-l-1]+j;return j},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:function(e,j,l,k){k.jqXHR=i.ajax({url:e,
data:j,success:function(e){i(k.oInstance).trigger("xhr",k);l(e)},dataType:"json",cache:!1,type:k.sServerMethod,error:function(e,i){"parsererror"==i&&alert("DataTables warning: JSON data from server could not be parsed. This is caused by a JSON formatting error.")}})},fnServerParams:null,fnStateLoad:function(e){var e=this.oApi._fnReadCookie(e.sCookiePrefix+e.sInstance),j;try{j="function"===typeof i.parseJSON?i.parseJSON(e):eval("("+e+")")}catch(l){j=null}return j},fnStateLoadParams:null,fnStateLoaded:null,
fnStateSave:function(e,i){this.oApi._fnCreateCookie(e.sCookiePrefix+e.sInstance,this.oApi._fnJsonString(i),e.iCookieDuration,e.sCookiePrefix,e.fnCookieCallback)},fnStateSaveParams:null,iCookieDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iScrollLoadGap:100,iTabIndex:0,oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last",sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",
sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sInfoThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sUrl:"",sZeroRecords:"No matching records found"},oSearch:i.extend({},j.models.oSearch),sAjaxDataProp:"aaData",sAjaxSource:null,sCookiePrefix:"SpryMedia_DataTables_",sDom:"lfrtip",sPaginationType:"two_button",sScrollX:"",
sScrollXInner:"",sScrollY:"",sServerMethod:"GET"};j.defaults.columns={aDataSort:null,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bUseRendered:!0,bVisible:!0,fnCreatedCell:null,fnRender:null,iDataSort:-1,mDataProp:null,sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};j.models.oSettings={oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,
bSortClasses:null,bStateSave:null},oScroll:{bAutoCss:null,bCollapse:null,bInfinite:null,iBarWidth:0,iLoadGap:null,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aoColumns:[],aoHeader:[],aoFooter:[],asDataSearch:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:null,asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],
aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,sPaginationType:"two_button",iCookieDuration:0,sCookiePrefix:"",fnCookieCallback:null,aoStateSave:[],aoStateLoad:[],oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,
aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iDisplayEnd:10,_iRecordsTotal:0,_iRecordsDisplay:0,bJUI:null,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsTotal,10):this.aiDisplayMaster.length},fnRecordsDisplay:function(){return this.oFeatures.bServerSide?parseInt(this._iRecordsDisplay,10):this.aiDisplay.length},fnDisplayEnd:function(){return this.oFeatures.bServerSide?
!1===this.oFeatures.bPaginate||-1==this._iDisplayLength?this._iDisplayStart+this.aiDisplay.length:Math.min(this._iDisplayStart+this._iDisplayLength,this._iRecordsDisplay):this._iDisplayEnd},oInstance:null,sInstance:null,iTabIndex:0};j.ext=i.extend(!0,{},j.models.ext);i.extend(j.ext.oStdClasses,{sTable:"dataTable",sPagePrevEnabled:"paginate_enabled_previous",sPagePrevDisabled:"paginate_disabled_previous",sPageNextEnabled:"paginate_enabled_next",sPageNextDisabled:"paginate_disabled_next",sPageJUINext:"",
sPageJUIPrev:"",sPageButton:"paginate_button",sPageButtonActive:"paginate_active",sPageButtonStaticDisabled:"paginate_button paginate_button_disabled",sPageFirst:"first",sPagePrevious:"previous",sPageNext:"next",sPageLast:"last",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",
sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",
sFooterTH:""});i.extend(j.ext.oJUIClasses,j.ext.oStdClasses,{sPagePrevEnabled:"fg-button ui-button ui-state-default ui-corner-left",sPagePrevDisabled:"fg-button ui-button ui-state-default ui-corner-left ui-state-disabled",sPageNextEnabled:"fg-button ui-button ui-state-default ui-corner-right",sPageNextDisabled:"fg-button ui-button ui-state-default ui-corner-right ui-state-disabled",sPageJUINext:"ui-icon ui-icon-circle-arrow-e",sPageJUIPrev:"ui-icon ui-icon-circle-arrow-w",sPageButton:"fg-button ui-button ui-state-default",
sPageButtonActive:"fg-button ui-button ui-state-default ui-state-disabled",sPageButtonStaticDisabled:"fg-button ui-button ui-state-default ui-state-disabled",sPageFirst:"first ui-corner-tl ui-corner-bl",sPageLast:"last ui-corner-tr ui-corner-br",sPaging:"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi ui-buttonset-multi paging_",sSortAsc:"ui-state-default",sSortDesc:"ui-state-default",sSortable:"ui-state-default",sSortableAsc:"ui-state-default",sSortableDesc:"ui-state-default",sSortableNone:"ui-state-default",
sSortJUIAsc:"css_right ui-icon ui-icon-triangle-1-n",sSortJUIDesc:"css_right ui-icon ui-icon-triangle-1-s",sSortJUI:"css_right ui-icon ui-icon-carat-2-n-s",sSortJUIAscAllowed:"css_right ui-icon ui-icon-carat-1-n",sSortJUIDescAllowed:"css_right ui-icon ui-icon-carat-1-s",sSortJUIWrapper:"DataTables_sort_wrapper",sSortIcon:"DataTables_sort_icon",sScrollHead:"dataTables_scrollHead ui-state-default",sScrollFoot:"dataTables_scrollFoot ui-state-default",sFooterTH:"ui-state-default"});i.extend(j.ext.oPagination,
{two_button:{fnInit:function(e,j,l){var k=e.oLanguage.oPaginate,s=function(i){e.oApi._fnPageChange(e,i.data.action)&&l(e)},k=!e.bJUI?'<a class="'+e.oClasses.sPagePrevDisabled+'" tabindex="'+e.iTabIndex+'" role="button">'+k.sPrevious+'</a><a class="'+e.oClasses.sPageNextDisabled+'" tabindex="'+e.iTabIndex+'" role="button">'+k.sNext+"</a>":'<a class="'+e.oClasses.sPagePrevDisabled+'" tabindex="'+e.iTabIndex+'" role="button"><span class="'+e.oClasses.sPageJUIPrev+'"></span></a><a class="'+e.oClasses.sPageNextDisabled+
'" tabindex="'+e.iTabIndex+'" role="button"><span class="'+e.oClasses.sPageJUINext+'"></span></a>';i(j).append(k);var t=i("a",j),k=t[0],t=t[1];e.oApi._fnBindAction(k,{action:"previous"},s);e.oApi._fnBindAction(t,{action:"next"},s);if(!e.aanFeatures.p)j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_previous",t.id=e.sTableId+"_next",k.setAttribute("aria-controls",e.sTableId),t.setAttribute("aria-controls",e.sTableId)},fnUpdate:function(e){if(e.aanFeatures.p)for(var i=e.oClasses,j=e.aanFeatures.p,l=0,
k=j.length;l<k;l++)if(0!==j[l].childNodes.length)j[l].childNodes[0].className=0===e._iDisplayStart?i.sPagePrevDisabled:i.sPagePrevEnabled,j[l].childNodes[1].className=e.fnDisplayEnd()==e.fnRecordsDisplay()?i.sPageNextDisabled:i.sPageNextEnabled}},iFullNumbersShowPages:5,full_numbers:{fnInit:function(e,j,l){var k=e.oLanguage.oPaginate,s=e.oClasses,t=function(i){e.oApi._fnPageChange(e,i.data.action)&&l(e)};i(j).append('<a tabindex="'+e.iTabIndex+'" class="'+s.sPageButton+" "+s.sPageFirst+'">'+k.sFirst+
'</a><a tabindex="'+e.iTabIndex+'" class="'+s.sPageButton+" "+s.sPagePrevious+'">'+k.sPrevious+'</a><span></span><a tabindex="'+e.iTabIndex+'" class="'+s.sPageButton+" "+s.sPageNext+'">'+k.sNext+'</a><a tabindex="'+e.iTabIndex+'" class="'+s.sPageButton+" "+s.sPageLast+'">'+k.sLast+"</a>");var v=i("a",j),k=v[0],s=v[1],B=v[2],v=v[3];e.oApi._fnBindAction(k,{action:"first"},t);e.oApi._fnBindAction(s,{action:"previous"},t);e.oApi._fnBindAction(B,{action:"next"},t);e.oApi._fnBindAction(v,{action:"last"},
t);if(!e.aanFeatures.p)j.id=e.sTableId+"_paginate",k.id=e.sTableId+"_first",s.id=e.sTableId+"_previous",B.id=e.sTableId+"_next",v.id=e.sTableId+"_last"},fnUpdate:function(e,l){if(e.aanFeatures.p){var k=j.ext.oPagination.iFullNumbersShowPages,r=Math.floor(k/2),s=Math.ceil(e.fnRecordsDisplay()/e._iDisplayLength),t=Math.ceil(e._iDisplayStart/e._iDisplayLength)+1,v="",B,D=e.oClasses,x,I=e.aanFeatures.p,G=function(i){e.oApi._fnBindAction(this,{page:i+B-1},function(i){e.oApi._fnPageChange(e,i.data.page);
l(e);i.preventDefault()})};s<k?(B=1,r=s):t<=r?(B=1,r=k):t>=s-r?(B=s-k+1,r=s):(B=t-Math.ceil(k/2)+1,r=B+k-1);for(k=B;k<=r;k++)v+=t!==k?'<a tabindex="'+e.iTabIndex+'" class="'+D.sPageButton+'">'+e.fnFormatNumber(k)+"</a>":'<a tabindex="'+e.iTabIndex+'" class="'+D.sPageButtonActive+'">'+e.fnFormatNumber(k)+"</a>";for(k=0,r=I.length;k<r;k++)0!==I[k].childNodes.length&&(i("span:eq(0)",I[k]).html(v).children("a").each(G),x=I[k].getElementsByTagName("a"),x=[x[0],x[1],x[x.length-2],x[x.length-1]],i(x).removeClass(D.sPageButton+
" "+D.sPageButtonActive+" "+D.sPageButtonStaticDisabled),i([x[0],x[1]]).addClass(1==t?D.sPageButtonStaticDisabled:D.sPageButton),i([x[2],x[3]]).addClass(0===s||t===s||-1===e._iDisplayLength?D.sPageButtonStaticDisabled:D.sPageButton))}}}});i.extend(j.ext.oSort,{"string-pre":function(e){"string"!=typeof e&&(e="");return e.toLowerCase()},"string-asc":function(e,i){return e<i?-1:e>i?1:0},"string-desc":function(e,i){return e<i?1:e>i?-1:0},"html-pre":function(e){return e.replace(/<.*?>/g,"").toLowerCase()},
"html-asc":function(e,i){return e<i?-1:e>i?1:0},"html-desc":function(e,i){return e<i?1:e>i?-1:0},"date-pre":function(e){e=Date.parse(e);if(isNaN(e)||""===e)e=Date.parse("01/01/1970 00:00:00");return e},"date-asc":function(e,i){return e-i},"date-desc":function(e,i){return i-e},"numeric-pre":function(e){return"-"==e||""===e?0:1*e},"numeric-asc":function(e,i){return e-i},"numeric-desc":function(e,i){return i-e}});i.extend(j.ext.aTypes,[function(e){if("number"===typeof e)return"numeric";if("string"!==
typeof e)return null;var i,j=!1;i=e.charAt(0);if(-1=="0123456789-".indexOf(i))return null;for(var k=1;k<e.length;k++){i=e.charAt(k);if(-1=="0123456789.".indexOf(i))return null;if("."==i){if(j)return null;j=!0}}return"numeric"},function(e){var i=Date.parse(e);return null!==i&&!isNaN(i)||"string"===typeof e&&0===e.length?"date":null},function(e){return"string"===typeof e&&-1!=e.indexOf("<")&&-1!=e.indexOf(">")?"html":null}]);i.fn.DataTable=j;i.fn.dataTable=j;i.fn.dataTableSettings=j.settings;i.fn.dataTableExt=
j.ext})(jQuery,window,document,void 0);

5
static/lib/javascripts/jquery.js vendored Normal file

File diff suppressed because one or more lines are too long

5
static/lib/javascripts/jquery.min.js vendored Normal file

File diff suppressed because one or more lines are too long

412
static/lib/javascripts/jquery_pivot.js vendored Normal file
View File

@ -0,0 +1,412 @@
(function( $ ){
'use strict';
var element,
callbacks = {},
resultsTitle,
resultsDivID;
var methods = {
setup : function(options){
element = this; // set element for build_containers()
if (options.callbacks) callbacks = options.callbacks;
if(options.resultsDivID){
resultsDivID = options.resultsDivID;
}
else
{
resultsDivID = 'results';
}
if (options.url !== undefined)
methods.process_from_url(options);
else
methods.process(options);
},
process : function(options){
if (callbacks.beforePopulate) {
callbacks.beforePopulate();
};
var self = methods;
pivot.init(options);
resultsTitle = options.resultsTitle;
if (options.skipBuildContainers === undefined || options.skipBuildContainers === false) self.build_containers();
self.populate_containers();
$(document).on('change', '.row-labelable', function(event) {
self.update_label_fields('row');
});
$(document).on('change', '.column-labelable', function(event) {
self.update_label_fields('column');
});
$(document).on('change', '.summary', function(event) {
self.update_summary_fields();
});
methods.update_results();
if (callbacks.afterPopulate) {
callbacks.afterPopulate();
};
},
process_from_url : function(options){
var re = /\.json$/i,
dataType;
if (re.test(options.url))
dataType = 'text/json'
else
dataType = 'text/csv'
$.ajax({
url: options.url,
dataType: "text",
accepts: "text/csv",
success: function(data, status){
if (dataType === 'text/json')
options['json'] = data
else
options['csv'] = data
methods.process(options)
}
});
},
populate_containers: function(){
methods.build_toggle_fields('#row-label-fields', pivot.fields().rowLabelable, 'row-labelable');
methods.build_toggle_fields('#column-label-fields', pivot.fields().columnLabelable, 'column-labelable');
methods.build_toggle_fields('#summary-fields', pivot.fields().summarizable, 'summary');
methods.build_filter_list();
},
reprocess_display : function(options){
if (options.rowLabels === undefined) options.rowLabels = [];
if (options.columnLabels === undefined) options.columnLabels = [];
if (options.summaries === undefined) options.summaries = [];
if (options.filters === undefined) options.filters = {};
if (options.callbacks === undefined) options.callbacks = {};
if (options.callbacks.beforeReprocessDisplay) {
options.callbacks.afterReprocessDisplay();
}
pivot.filters().set(options.filters);
pivot.display().summaries().set(options.summaries);
pivot.display().rowLabels().set(options.rowLabels);
pivot.display().columnLabels().set(options.columnLabels);
methods.populate_containers();
methods.update_results();
if (options.callbacks.afterReprocessDisplay) {
options.callbacks.afterReprocessDisplay();
}
},
build_containers : function(){
var containers = '<div class="pivot_header_fields">' +
' <div class="pivot_field">' +
' <span class="pivot_header2">Filter Fields</span>' +
' <div id="filter-list"></div>' +
' </div>' +
' <div class="pivot_field">' +
' <span class="pivot_header2">Row Label Fields</span>' +
' <div id="row-label-fields"></div>' +
' </div>' +
' <div class="pivot_field">' +
' <span class="pivot_header2">Column Label Fields</span>' +
' <div id="column-label-fields"></div>' +
' </div>' +
' <div class="pivot_field">' +
' <span class="pivot_header2">Summary Fields</span>' +
' <div id="summary-fields"></div>' +
' </div>' +
'</div>';
$(element).append(containers);
},
// Filters
build_filter_list : function(){
var select = '<select id="select-constructor">'
select += '<option></option>'
$.each(pivot.fields().filterable, function(index, field){
select += '<option>' + field.name + '</option>';
})
select += '</select>'
$('#filter-list').empty().append(select);
// show pre-defined filters (from init)
$.each(pivot.filters().all(), function(fieldName, restriction){
methods.build_filter_field(fieldName, restriction);
});
// Bind build action to select-constructor explicitly
$('#select-constructor').change(function(){
methods.build_filter_field($(this).val());
})
},
build_filter_field : function(fieldName, selectedValue) {
var snip,
remove_filter,
field = pivot.fields().get(fieldName);
if (fieldName === '') return;
// Check to see if this field has already been built
var filterExists = $('#filter-list select[data-field="' + field.name + '"]');
if (filterExists.length) return;
if (field.filterType === 'regexp')
snip = methods.build_regexp_filter_field(field, selectedValue);
else
snip = methods.build_select_filter_field(field, selectedValue);
remove_filter = '<a class="remove-filter-field" style="cursor:pointer;">(X)</a></label>';
$('#filter-list').append('<div><hr/><label>' + field.name + remove_filter + snip + '</div>');
//Optional Chosen/Select2 integration
if($.fn.chosen!==undefined) $('select.filter').chosen();
else if($.fn.select2!==undefined) $('select.filter').select2();
// Update field listeners
$('select.filter').on('change', function(event) {
methods.update_filtered_rows();
});
$('input[type=text].filter').on('keyup', function(event) {
var filterInput = this,
eventValue = $(filterInput).val();
setTimeout(function(){ if ($(filterInput).val() === eventValue) methods.update_filtered_rows()}, 500);
});
// remove_filter listener
$('.remove-filter-field').click(function(){
$(this).parents('div').first().remove();
methods.update_filtered_rows();
})
},
build_select_filter_field : function(field, selectedValue){
var snip = '<select class="filter span3" '+(field.filterType==='multiselect'?'multiple':'')+' data-field="' + field.name + '">' +
'<option></option>',
orderedValues = [];
for (var value in field.values){
orderedValues.push(value);
};
orderedValues = orderedValues.sort();
jQuery.each(orderedValues, function(index, value){
var selected = "";
if (value === selectedValue) selected = 'selected="selected"';
snip += '<option value="' + value + '" ' + selected + '>' + field.values[value].displayValue + '</option>';
});
snip += '</select>'
return snip;
},
build_regexp_filter_field : function(field, value){
if (value === undefined) value = "";
return '<input type="text" class="filter span3" data-field="' + field.name + '" value="' + value + '">';
},
update_filtered_rows : function(){
var restrictions = {}, field;
$('.filter').each(function(index){
field = pivot.fields().get($(this).attr('data-field'));
if (field) {
if ($(this).val() !== null && $(this).val()[0] !== ''){
if (field.filterType === 'regexp')
restrictions[$(this).attr('data-field')] = new RegExp($(this).val(),'i');
else
restrictions[$(this).attr('data-field')] = $(this).val();
}
}
});
pivot.filters().set(restrictions);
methods.update_results();
},
//toggles
build_toggle_fields : function(div, fields, klass){
$(div).empty();
$.each(fields, function(index, field){
$(div).append('<label class="checkbox">' +
'<input type="checkbox" class="' + klass + '" ' +
'data-field="' + field.name + '" ' +
'> ' + field.name +
'</label>');
});
var displayFields;
if (klass === 'row-labelable')
displayFields = pivot.display().rowLabels().get
else if (klass === 'column-labelable')
displayFields = pivot.display().columnLabels().get
else
displayFields = pivot.display().summaries().get
for (var fieldName in displayFields) {
var elem = $(div + ' input[data-field="' + fieldName +'"]');
elem.prop("checked", true);
methods.orderChecked(div, elem);
};
// order listener
$(div + ' input').on("click", function(){
if (this.checked) {
methods.orderChecked(div, this);
} else {
var field = $(this).parent().detach()[0];
$(div).append( field );
};
});
},
orderChecked : function(parent, elem){
var last_checked = $(parent + ' input:checked'); // last changed field (lcf)
var field = $(elem).parent().detach()[0]; // pluck item from div
var children = $(parent).children();
//subtract 1 because clicked field is already checked insert plucked item into div at index
if ((last_checked.length-1) === 0)
$(parent).prepend( field );
else if (children.length < last_checked.length)
$(parent).append( field );
else
$(children[last_checked.length-1]).before( field );
},
update_result_details : function(){
var snip = '';
var filters = '';
$.each(pivot.filters().all(), function(k,v) {
filters += '<em>' + k + '</em>' + " => " + v + " "
});
if ($('#pivot-detail').length !== 0)
snip += '<b>Filters:</b> ' + filters + "<br/>"
$('#pivot-detail').html(snip);
},
update_results : function(){
if (callbacks && callbacks.beforeUpdateResults) {
callbacks.beforeUpdateResults();
};
var results = pivot.results().all(),
config = pivot.config(),
columns = pivot.results().columns(),
snip = '',
fieldName;
var result_table = $('#' + resultsDivID),
result_rows;
result_table.empty();
snip += '<table id="pivot-table" class="table table-striped table-condensed"><thead>';
// build columnLabel header row
if (config.columnLabels.length > 0 && config.summaries.length > 1) {
var summarySnip = '', summaryRow = '';
$.each(config.summaries, function(index, fieldName){
summarySnip += '<th>' + fieldName + '</th>';
})
snip += '<tr>'
$.each(columns, function(index, column){
switch (column.type){
case 'row':
snip += '<th rowspan="2">'+ column.fieldName + '</th>';
break;
case 'column':
snip += '<th colspan="' + column.width + '">' + column.fieldName + '</th>';
summaryRow += summarySnip
break;
}
});
snip += '</tr><tr>' + summaryRow + '</tr>';
} else {
snip += '<tr>'
$.each(columns, function(index, column){
if (column.type !== 'column' || config.summaries.length <= 1) {
snip += '<th>' + column.fieldName + '</th>';
} else {
$.each(config.summaries, function(index, fieldName){
snip += '<th>' + fieldName + '</th>';
});
}
});
snip += '</tr>'
}
snip += '</thead></tr><tbody id="result-rows"></tbody></table>';
result_table.append(snip);
result_rows = $('#result-rows');
$.each(results,function(index, row){
snip = '<tr>';
$.each(columns, function(index, column){
if (column.type !== 'column')
snip += '<td>' + row[column.fieldName] + '</td>';
else {
$.each(config.summaries, function(index, fieldName){
if (row[column.fieldName] !== undefined)
snip += '<td>' + row[column.fieldName][fieldName] + '</td>';
else
snip += '<td>&nbsp;</td>';
});
}
});
snip += '</tr>';
result_rows.append(snip);
});
methods.update_result_details();
if (callbacks && callbacks.afterUpdateResults) {
callbacks.afterUpdateResults();
};
},
update_label_fields : function(type){
var display_fields = [];
$('.' + type + '-labelable:checked').each(function(index){
display_fields.push($(this).attr('data-field'));
});
pivot.display()[type + 'Labels']().set(display_fields);
methods.update_results();
},
update_summary_fields : function(){
var summary_fields = [];
$('.summary:checked').each(function(index){
summary_fields.push($(this).attr('data-field'));
});
pivot.display().summaries().set(summary_fields);
methods.update_results();
}
};
$.fn.pivot_display = function( method ) {
if ( methods[method] ) {
return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' doesn\'t exists');
}
};
})( jQuery );

View File

@ -0,0 +1 @@
"use strict";!function(t,r){var n=function(t){function r(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function n(t){return t.replace(/"/g,"&quot;")}function e(t){if(!t)return"";var r=[];for(var e in t){var i=t[e]+"";r.push(e+'="'+n(i)+'"')}return r.join(" ")}function i(t){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};i=new a(i);for(var f=o(t),u=[],c=0;c<f.length;c++){var p=f[c];if("nl"===p.type&&i.nl2br)u.push("<br>\n");else if(p.isLink&&i.check(p)){var l=i.resolve(p),s=l.formatted,g=l.formattedHref,y=l.tagName,h=l.className,v=l.target,k=l.attributes,S="<"+y+' href="'+n(g)+'"';h&&(S+=' class="'+n(h)+'"'),v&&(S+=' target="'+n(v)+'"'),k&&(S+=" "+e(k)),S+=">"+r(s)+"</"+y+">",u.push(S)}else u.push(r(p.toString()))}return u.join("")}var o=t.tokenize,f=t.options,a=f.Options;if(!String.prototype.linkify)try{Object.defineProperty(String.prototype,"linkify",{a:function(){},get:function(){return function(t){return i(this,t)}}})}catch(u){String.prototype.linkify||(String.prototype.linkify=function(t){return i(this,t)})}return i}(r);t.linkifyStr=n}(window,linkify);

1
static/lib/javascripts/linkify.min.js vendored Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -1,243 +1,29 @@
{% extends "page.html" %}
{% block body %}
{% set page_class = "apps single" %}
{% set page_class = "docs single" %}
{% endblock body %}
{% block header %}
{# This value is matched by the config.extra.menu.main~url #}
{% set current_section = "apps" %}
{% set current_section = "docs" %}
{{ macros_header::header(current_section=current_section)}}
{% endblock header %}
{% block content %}
<div class="wrap container" role="document">
<main class="content">
<div class="content">
<div class="row flex-xl-nowrap">
{{ macros_sidebar::docs_sidebar(current_section=current_section) }}
{{ macros_toc::docs_toc(page=page) }}
<main class="docs-content col-lg-11 col-xl-11">
<main class="docs-content col-lg-11 col-xl-9">
<h1>{{ page.title }}</h1>
{% if page.taxonomies.state %}{% for project_state in page.taxonomies.state %}
<p class="{{ project_state }}">
<a href="{{ get_taxonomy_url(kind="state", name=project_state) }}">{{ project_state }}</a>
</p>
{% endfor %}{% endif %}
<p class="lead">{{ page.description }}</p>
{% for asset in page.assets -%}
{%- if asset is matching("[.](jpg|png)$") -%}
{% set image = resize_image(path=asset, width=180, height=335) %}
<img src="{{ image.url }}" />
{%- endif %}
{%- endfor %}
{% if page.content %}
<h2>Description</h2>
{% if page.extra.lead %}<p class="lead">{{ page.extra.lead | safe }}</p>{% endif %}
{{ page.content | safe }}
{% if page.extra.description_source_url %}
<small>
<a href="{{ page.extra.description_source_url }}">Source</a>
</small>
{% endif %}
{% endif %}
{% if page.extra.notice %}
<h3>Editorial notice:</h3>
{{ page.extra.notice | markdown | safe }}
{% endif %}
<h3>Project links:</h3>
<ul>
<li>
<a href="{{ page.extra.repository }}">Repository</a>
</li>
{% if page.extra.homepage %}
<li>
<a href="{{ page.extra.homepage }}">Homepage</a>
</li>
{% endif %}
{% if page.extra.bugtracker %}
<li>
<a href="{{ page.extra.bugtracker }}">Bugtracker</a>
</li>
{% endif %}
{% if page.extra.translate %}
<li>
<a href="{{ page.extra.translate }}">Help with Translations</a>
</li>
{% endif %}
{% if page.extra.donation %}
<li>
<a href="{{ page.extra.donation }}">Donate</a>
</li>
{% endif %}
</ul>
{% if page.extra.moreinformation %}
<h3>Links with more information about the ap:</h3>
<ul>
{% for item in page.extra.moreinformation %}
<li>
<a href="{{ item.url | safe }}">
{{ item.name | safe }}
</a>
</li>
{% endfor %}
</ul>
{% endif %}
<h2>More info:</h2>
{% if page.taxonomies.mobile_compatibilities %}
<p>
<strong>Mobile Compatibility:</strong>
{% for mobile_compatibility in page.taxonomies.mobile_compatibilities %}
<a href="{{ get_taxonomy_url(kind="mobile_compatibilities", name=mobile_compatibility) }}">{{ mobile_compatibility }}</a>
{% endfor %}</p>
{% endif %}
<p>
<strong>Licenses:</strong>
<ul>
{% if page.taxonomies.project_licenses %}{% for project_license in page.taxonomies.project_licenses %}
<li>Project license:
<a href="{{ get_taxonomy_url(kind="project_licenses", name=project_license) }}">{{ project_license }}</a>
</li>
{% endfor %}{% endif %}
{% if page.taxonomies.metadata_licenses %}{% for metadata_license in page.taxonomies.metadata_licenses %}
<li>Metadata license:
<a href="{{ get_taxonomy_url(kind="metadata_licenses", name=metadata_license) }}">{{ metadata_license }}</a>
</li>
{% endfor %}{% endif %}
</ul></p>
{% if page.taxonomies.frameworks %}
<p>
<strong>Frameworks:</strong>
<ul>
{% for framework in page.taxonomies.frameworks %}
<li>
<a href="{{ get_taxonomy_url(kind="frameworks", name=framework) }}">{{ framework }}</a>
</li>
{% endfor %}
</ul>
</p>
{% endif %}
{% if page.taxonomies.backends %}
<p>
<strong>Backend:</strong>
<ul>
{% for backend in page.taxonomies.backends %}
<li>
<a href="{{ get_taxonomy_url(kind="backends", name=backend) }}">{{ backend }}</a>
</li>
{% endfor %}
</ul>
</p>
{% endif %}
{% if page.taxonomies.services %}
<p>
<strong>Used Services:</strong>
<ul>
{% for service in page.taxonomies.services %}
<li>
<a href="{{ get_taxonomy_url(kind="services", name=service) }}">{{ service }}</a>
</li>
{% endfor %}
</ul>
</p>
{% endif %}
{% if page.taxonomies.categories %}
<p>
<strong>Category:</strong>
<ul>
{% for category in page.taxonomies.categories %}
<li>
<a href="{{ get_taxonomy_url(kind="categories", name=category) }}">{{ category }}</a>
</li>
{% endfor %}
</ul>
</p>
{% endif %}
{% if page.taxonomies.freedesktop_categories %}
<p>
<strong>FreeDesktop-(Sub-)Categories:</strong>
<ul>
{% for freedesktop_category in page.taxonomies.freedesktop_categories %}
<li>
<a href="{{ get_taxonomy_url(kind="freedesktop_categories", name=freedesktop_category) }}">{{ freedesktop_category }}</a>
</li>
{% endfor %}
</ul>
</p>
{% endif %}
{% if page.taxonomies.build_systems %}
<p>
<strong>Build system:</strong>
<ul>
{% for build_system in page.taxonomies.build_systems %}
<li>
<a href="{{ get_taxonomy_url(kind="build_systems", name=build_system) }}">{{ build_system }}</a>
</li>
{% endfor %}
</ul>
</p>
{% endif %}
{% if page.taxonomies.programming_languages %}
<p>
<strong>Programming languages:</strong>
<ul>
{% for programming_language in page.taxonomies.programming_languages %}
<li>
<a href="{{ get_taxonomy_url(kind="programming_languages", name=programming_language) }}">{{ programming_language }}</a>
</li>
{% endfor %}
</ul>
</p>
{% endif %}
{% if page.extra.appstream_xml_url %}
<p>
<strong>AppStream Metadata URL:</strong>
<ul>
<li>
<a href="{{ page.extra.appstream_xml_url }}">{{ page.extra.appstream_xml_url }}</a>
</li>
</ul>
</p>
{% endif %}
<h2>Packaging</h2>
{% if page.extra.flathub %}
<ul>
<li>
<a href="{{ page.extra.flathub }}">Flathub</a>
</li>
</ul>
{% endif %}
{% if page.extra.flatpak_json_url %}
<ul>
<li>
<a href="{{ page.extra.flatpak_json_url }}">flatpak.json</a>
</li>
</ul>
{% endif %}
<h3>Repology Status</h3>
<p>
{% if page.extra.repology %}
{% for repologyname in page.extra.repology %}
<a href="https://repology.org/project/{{ repologyname }}/versions">
<img src="https://repology.org/badge/vertical-allrepos/{{ repologyname }}.svg" alt="Packaging status">
</a>
{% endfor %}
{% else %}
<a href="https://repology.org/project/{{ page.title | lower }}/versions">
<img src="https://repology.org/badge/vertical-allrepos/{{ page.title | lower }}.svg" alt="Packaging status">
</a>
{% endif %}
</p>
{% if page.extra.app_id %}
<p>If you're lucky, you can install this app by just hitting this button:</p>
<a href="appstream://{{ page.extra.app_id }}" class="btn btn-primary btn-lg">Install</a>
{% endif %}
{% if config.extra.edit_page %}
{{ macros_edit_page::docs_edit_page(current_path=current_path) }}
{{ macros_edit_page::apps_edit_page(current_path=current_path) }}
{% endif %}
<p><small>This listing was added on {{ page.date }}{% if page.updated %} and last edited on {{ page.updated }}{% endif %}.</small></p>
{{ macros_navigation::docs_navigation(page=page, current_section=current_section) }}
</main>
</div>
</div>

View File

@ -1,12 +1,12 @@
{% extends "section.html" %}
{% block body %}
{% set page_class = "app list" %}
{% set page_class = "docs list" %}
{% endblock body %}
{% block header %}
{# This value is matched by the config.extra.menu.main~section #}
{% set current_section = "apps" %}
{% set current_section = "docs" %}
{{ macros_header::header(current_section=current_section)}}
{% endblock header %}
@ -22,29 +22,24 @@
{% set index_path = current_path ~ "_index.md" | trim_start_matches(pat="/") %}
{% set index = get_section(path=index_path) %}
{% for page in index.pages %}
<div class="card my-5">
<div class="card my-3">
<div class="card-body">
<strong>
<a class="stretched-link" href="{{ page.permalink }}">{{ page.title }}</a>
</strong>
<span class="description" style="float:right;">{{ page.description }}</span>
<p class="description" style="text-align: right;">
{% for category in page.taxonomies.categories %}
<code class="{{ category }}" title="Category">{{ category }}</code>
{% endfor %}
{% for state in page.taxonomies.state %}
<small class="{{ state }}" style="float:left;" title="Project State">{{ state }}</small>
{% endfor %}
{% for framework in page.taxonomies.frameworks %}
<code class="{{ framework }}" title="Framework">{{ framework }}</code>
{% endfor %}
{% for compatibility in page.taxonomies.mobile_compatibilities %}
<code class="{{ compatibility }}" title="Mobile compatibility">{{ compatibility }}</code>
{% endfor %}
</p>
<a class="stretched-link" href="{{ page.permalink }}">{{ page.title }} &rarr;</a>
</div>
</div>
{% endfor %}
{% for s in index.subsections %}
{% set subsection = get_section(path=s) %}
{% if subsection.pages %}
{% for page in subsection.pages %}
<div class="card my-3">
<div class="card-body">
<a class="stretched-link" href="{{ page.permalink }}">{{ page.title }} &rarr;</a>
</div>
</div>
{% endfor %}
{% endif %}
{% endfor %}
</div>
</article>
</div>

View File

@ -9,12 +9,16 @@
{% import 'macros/docs-edit-page.html' as macros_edit_page -%}
{% import 'macros/docs-navigation.html' as macros_navigation -%}
{% import 'macros/docs-toc.html' as macros_toc -%}
{% import 'macros/lists.html' as macros_lists -%}
<!DOCTYPE html>
<html lang="{{ config.extra.language_code | default(value="en-US") }}">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
{% block extra_head %}
{% endblock extra_head %}
{{ macros_head::resource() }}
{{ macros_head::stylesheet() }}

View File

@ -33,6 +33,7 @@
<div class="col-lg-9 col-xl-8 text-center">
<p class="lead">{{ section.extra.lead | default(value="Please start setting config.toml and adding your content.") | safe }}</p>
<a class="btn btn-primary btn-lg px-4 mb-2" href="{{ section.extra.url | default(value="/") | safe }}" role="button">{{ section.extra.url_button | default(value="Get started") }}</a>
<a class="btn btn-primary btn-lg px-4 mb-2" href="{{ section.extra.url_games | default(value="/") | safe }}" role="button">{{ section.extra.url_button_games | default(value="Get started") }}</a>
<p class="meta">{{ section.extra.repo_license | default(value="MIT")}}. State: <a href="{{ section.extra.repo_url | default(value="https://github.com/aaranxu/adidoks") | safe }}">{{ section.extra.repo_version | default(value="0.1.0") }}</a></p>
</div>
</div>

40
templates/lists/apps.html Normal file
View File

@ -0,0 +1,40 @@
{# Default page template used for lists contents #}
{% extends "page.html" %}
{% block extra_head %}
{{ macros_lists::applist_head() }}
{% endblock extra_head %}
{% block seo %}
{# This value is matched by the config.extra.menu.main->section #}
{% set_global current_section = 'lists' %}
{{ super() }}
{% endblock seo %}
{% block body %}
{% set page_class = "lists single" %}
{% endblock body %}
{% block header %}
{{ macros_header::header(current_section=current_section)}}
{% endblock header %}
{% block content %}
<div class="wrap container" role="document">
<div class="content">
<div class="page-header list-header">
<h1>{{ page.title }}</h1>
</div>
{{ macros_lists::applist_body() }}
<article>
{{ page.content | safe }}
</article>
</div>
</div>
</div>
</div>
{% endblock content %}

View File

@ -0,0 +1,40 @@
{# Default page template used for lists contents #}
{% extends "page.html" %}
{% block extra_head %}
{{ macros_lists::archivelist_head() }}
{% endblock extra_head %}
{% block seo %}
{# This value is matched by the config.extra.menu.main->section #}
{% set_global current_section = 'lists' %}
{{ super() }}
{% endblock seo %}
{% block body %}
{% set page_class = "lists single" %}
{% endblock body %}
{% block header %}
{{ macros_header::header(current_section=current_section)}}
{% endblock header %}
{% block content %}
<div class="wrap container" role="document">
<div class="content">
<div class="page-header list-header">
<h1>{{ page.title }}</h1>
</div>
{{ macros_lists::archivelist_body() }}
<article>
{{ page.content | safe }}
</article>
</div>
</div>
</div>
</div>
{% endblock content %}

View File

@ -0,0 +1,40 @@
{# Default page template used for lists contents #}
{% extends "page.html" %}
{% block extra_head %}
{{ macros_lists::gamelist_head() }}
{% endblock extra_head %}
{% block seo %}
{# This value is matched by the config.extra.menu.main->section #}
{% set_global current_section = 'lists' %}
{{ super() }}
{% endblock seo %}
{% block body %}
{% set page_class = "lists single" %}
{% endblock body %}
{% block header %}
{{ macros_header::header(current_section=current_section)}}
{% endblock header %}
{% block content %}
<div class="wrap container" role="document">
<div class="content">
<div class="page-header list-header">
<h1>{{ page.title }}</h1>
</div>
{{ macros_lists::gamelist_body() }}
<article>
{{ page.content | safe }}
</article>
</div>
</div>
</div>
</div>
{% endblock content %}

37
templates/lists/page.html Normal file
View File

@ -0,0 +1,37 @@
{# Default page template used for lists contents #}
{% extends "page.html" %}
{% block seo %}
{# This value is matched by the config.extra.menu.main->section #}
{% set_global current_section = 'lists' %}
{{ super() }}
{% endblock seo %}
{% block body %}
{% set page_class = "lists single" %}
{% endblock body %}
{% block header %}
{{ macros_header::header(current_section=current_section)}}
{% endblock header %}
{% block content %}
<div class="wrap container" role="document">
<div class="content">
<div class="row justify-content-center">
<div class="col-xl-12">
<article>
<div class="lists-header">
<h1>{{ page.title }}</h1>
{{ macros_publish::page_publish_metadata(page=page) }}
</div>
{% if page.extra.lead %}<p class="lead">{{ page.extra.lead | safe }}</p>{% endif %}
{{ page.content | safe }}
</article>
</div>
</div>
</div>
</div>
{% endblock content %}

View File

@ -0,0 +1,39 @@
{% extends "section.html" %}
{% block body %}
{% set page_class = "lists-list list" %}
{% endblock body %}
{% block header %}
{# This value is matched by the config.extra.menu.main->section #}
{% set current_section = "lists" %}
{{ macros_header::header(current_section=current_section)}}
{% endblock header %}
{% block content %}
<div class="wrap container" role="document">
<div class="content">
<div class="row justify-content-center">
<div class="col-md-12 col-lg-10 col-xl-8">
<article>
<h1 class="text-center">{{ section.title }}</h1>
<div class="card-list">
{% for page in paginator.pages %}
<div class="card">
<div class="card-body">
<h2 class="h3"><a class="stretched-link text-body" href="{{ page.permalink }}">{{ page.title }}</a></h2>
{% if page.extra.lead %}
<p class="lead">{{ page.extra.lead | safe }}</p>{% elif page.description %}<p class="lead">{{ page.description | safe }}</p>{% endif %}
</div>
</div>
{% endfor %}
{% if paginator.previous or paginator.next %}
{{ macros_section_nav::navigation(paginator=paginator) }}
{% endif %}
</div>
</article>
</div>
</div>
</div>
</div>
{% endblock content %}

View File

@ -1,3 +1,12 @@
{% macro docs_edit_page(current_path) %}
<p class="edit-page"><a href="{{ config.extra.docs_repo }}/blob/{{ config.extra.repo_branch }}/content{{ current_path | replace(from="\\", to="/") | trim_end_matches(pat="/") }}/index.md"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-edit-2"><path d="M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"></path></svg>Edit this page on GitHub</a></p>
<p class="edit-page"><a href="{{ config.extra.docs_repo }}/-/blob/{{ config.extra.repo_branch }}/content{{ current_path | replace(from="\\", to="/") | trim_end_matches(pat="/") }}.md"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-edit-2"><path d="M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"></path></svg>Edit this page on Framagit</a></p>
{% endmacro %}
{% macro apps_edit_page(current_path) %}
<p class="edit-page"><a href="{{ config.extra.apps_repo }}/-/blob/{{ config.extra.repo_branch }}/content{{ current_path | replace(from="\\", to="/") | trim_end_matches(pat="/") }}/index.md"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-edit-2"><path d="M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"></path></svg>Edit this app page on Framagit</a></p>
{% endmacro %}
{% macro games_edit_page(current_path) %}
<p class="edit-page"><a href="{{ config.extra.games_repo }}/-/blob/{{ config.extra.repo_branch }}/content{{ current_path | replace(from="\\", to="/") | trim_end_matches(pat="/") }}/index.md"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-edit-2"><path d="M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"></path></svg>Edit this games page on Framagit</a></p>
{% endmacro %}

562
templates/macros/lists.html Normal file
View File

@ -0,0 +1,562 @@
{% macro applist_body() %}
<section class="accordions">
<article class="accordion is-inactive">
<div class="accordion-header toggle" style="background-color: lightgrey; color: black;">
Adjust table
</div>
<div class="accordion-body">
<div class="accordion-content">
<h4>Filter Fields</h4>
<ul class="stop-propagation">
<div id="filter-list"></div>
</ul>
<h4>Fields to display</h4>
<ul class="stop-propagation" style="overflow:auto;max-height:450px;padding:10px;">
<div id="row-label-fields"></div>
</ul>
<span id="pivot-detail" class="content"></span>
</div>
</div>
</div>
<div id="results"></div>
<script>
document.getElementById("results").innerHTML="App list is loading...";
</script>
<noscript>
<p><mark>JavaScript is required to view this table</mark></p>
<p>You can get the raw .csv table at <a target="_blank" href="https://linmobapps.frama.io/apps.csv">https://linmobapps.frama.io/apps.csv</a></p>
<p>All JavaScript code used in this site is free and open source software - the whole source code for this site can be found at <a href="https://framagit.org/linmobapps/linmobapps.frama.io">https://framagit.org/linuxphoneapps/</a>
</p>
</noscript>
{% endmacro %}
{% macro archivelist_body() %}
<section class="accordions">
<article class="accordion is-inactive">
<div class="accordion-header toggle" style="background-color: lightgrey; color: black;">
Adjust table
</div>
<div class="accordion-body">
<div class="accordion-content">
<h4>Filter Fields</h4>
<ul class="stop-propagation">
<div id="filter-list"></div>
</ul>
<h4>Fields to display</h4>
<ul class="stop-propagation" style="overflow:auto;max-height:450px;padding:10px;">
<div id="row-label-fields"></div>
</ul>
<span id="pivot-detail" class="content"></span>
</div>
</div>
</div>
<div id="results"></div>
<script>
document.getElementById("results").innerHTML="Archive list is loading...";
</script>
<noscript>
<p><mark>JavaScript is required to view this table</mark></p>
<p>You can get the raw .csv table at <a target="_blank" href="https://linmobapps.frama.io/apps.csv">https://linmobapps.frama.io/apps.csv</a></p>
<p>All JavaScript code used in this site is free and open source software - the whole source code for this site can be found at <a href="https://framagit.org/linmobapps/linmobapps.frama.io">https://framagit.org/linuxphoneapps/</a>
</p>
</noscript>
{% endmacro %}
{% macro gamelist_body() %}
<section class="accordions">
<article class="accordion is-inactive">
<div class="accordion-header toggle" style="background-color: lightgrey; color: black;">
Adjust table
</div>
<div class="accordion-body">
<div class="accordion-content">
<h4>Filter Fields</h4>
<ul class="stop-propagation">
<div id="filter-list"></div>
</ul>
<h4>Fields to display</h4>
<ul class="stop-propagation" style="overflow:auto;max-height:450px;padding:10px;">
<div id="row-label-fields"></div>
</ul>
<span id="pivot-detail" class="content"></span>
</div>
</div>
</div>
<div id="results"></div>
<script>
document.getElementById("results").innerHTML="Game list is loading...";
</script>
<noscript>
<p><mark>JavaScript is required to view this table</mark></p>
<p>You can get the raw .csv table at <a target="_blank" href="https://linmobapps.frama.io/apps.csv">https://linmobapps.frama.io/apps.csv</a></p>
<p>All JavaScript code used in this site is free and open source software - the whole source code for this site can be found at <a href="https://framagit.org/linmobapps/linmobapps.frama.io">https://framagit.org/linuxphoneapps/</a>
</p>
</noscript>
{% endmacro %}
{% macro applist_head() %}
<link rel="stylesheet" href="{{ get_url(path="lib/css/pivot.css") | safe }}" type="text/css"/>
<link rel="stylesheet" href="{{ get_url(path="lib/css/bulma.min.css") | safe }}" type="text/css"/>
<link rel="stylesheet" href="{{ get_url(path="lib/css/responsive.semanticui.min.css") | safe }}" type="text/css"/>
<link rel="stylesheet" href="{{ get_url(path="lib/css/bulma-accordion.min.css") | safe }}" type="text/css"/>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/jquery.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/jquery.dataTables.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/pivot.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/jquery_pivot.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/dataTables.responsive.min.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/linkify.min.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/linkify-string.min.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/bulma-accordion.min.js") | safe }}"></script>
<script type="text/javascript">
// Define the structure of fields, if this is not defined then all fields will be assumed
// to be strings. Name must match csv header row (which must exist) in order to parse correctly.
fields =[{name: 'name', type: 'string', filterable: false, columnLabelable: true},
{name: 'repository', type: 'string', filterable: true},
{name: 'website', type: 'string', filterable: true},
{name: 'more information', type: 'string', filterable: true},
{name: 'license', type: 'string', filterable: true},
{name: 'category', type: 'string', filterable: true},
{name: 'summary', type: 'string', filterable: false},
{name: 'summary source', type: 'string', filterable: false},
{name: 'description', type: 'string', filterable: false},
{name: 'description source', type: 'string', filterable: false},
{name: 'screenshots', type: 'string', filterable: false},
{name: 'mobile compatibility', type: 'string', filterable: true},
{name: 'framework', type: 'string', filterable: true},
{name: 'backend', type: 'string', filterable: true},
{name: 'service', type: 'string', filterable: true},
{name: 'appid', type: 'string', filterable: false},
{name: 'scale-to-fit', type: 'string', filterable: false},
{name: 'notice', type: 'string', filterable: false},
{name: 'flatpak', type: 'string', filterable: true},
{name: 'aur', type: 'string', filterable: true},
{name: 'postmarketos', type: 'string', filterable: true},
{name: 'debian', type: 'string', filterable: true},
{name: 'appstream link', type: 'string', filterable: false},
{name: 'appdata.xml or metainfo.xml url', type: 'string', filterable: false},
{name: 'freedesktop (sub)categories', type: 'string', filterable: true},
{name: 'main languages', type: 'string', filterable: true},
{name: 'build systems', type: 'string', filterable: true},
{name: 'original reporter', type: 'string', filterable: false},
{name: 'date added', type: 'string', filterable: false},
];
function setupPivot(input) {
input.callbacks = {
afterUpdateResults: function () {
$('#results > table').DataTable({responsive: true, paginate: false, scrollX: 500, class: "input", "sDom": "<'row'<'span6'l><'span6'f>>t<'row'<'span6'i><'span6'p>>"});
}
};
$('#pivot-demo').pivot_display('setup', input);
};
$(document).ready(function () {
$.ajax({
url: "{{ get_url(path="csv-lists/apps.csv") | safe }}",
dataType: "text",
success: function (data) {
data = data.replace(/,/g, " ||| ");
console.log(data);
data = linkifyStr(data, {
format: function (value, type) {
return value;
}
});
data = data.replace(/ \|\|\| /g, ",");
console.log(data);
setupPivot({
csv: data,
fields: fields,
rowLabels: [
"name",
"category",
"summary",
"mobile compatibility",
"repository",
"framework",
"screenshots",
"website",
"license",
"appid",
"appstream link",
"scale-to-fit",
"flatpak",
"aur",
"postmarketos",
"debian",
"notice",
"more information",
"appdata.xml or metainfo.xml url",
"backend",
"service",
"description",
"description source",
"summary source",
"freedesktop (sub)categories",
"main languages",
"build systems",
"date added"
]
})
$('.stop-propagation').click(function (event) {
event.stopPropagation();
});
console.log(data);
}
});
// $('#fieldExplanations').pivot_display('setup', {url:"fields.csv", fields: [{name: 'name', type: 'string', filterable: true, columnLabelable: true}, {name: 'explanation', type: 'string', filterable: true, columnLabelable: true}], rowLabels:["name",
// "explanation"]});
var accordions = bulmaAccordion.attach();
});
</script>
{% endmacro %}
{% macro archivelist_head() %}
<link rel="stylesheet" href="{{ get_url(path="lib/css/pivot.css") | safe }}" type="text/css"/>
<link rel="stylesheet" href="{{ get_url(path="lib/css/bulma.min.css") | safe }}" type="text/css"/>
<link rel="stylesheet" href="{{ get_url(path="lib/css/responsive.semanticui.min.css") | safe }}" type="text/css"/>
<link rel="stylesheet" href="{{ get_url(path="lib/css/bulma-accordion.min.css") | safe }}" type="text/css"/>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/jquery.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/jquery.dataTables.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/pivot.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/jquery_pivot.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/dataTables.responsive.min.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/linkify.min.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/linkify-string.min.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/bulma-accordion.min.js") | safe }}"></script>
<script type="text/javascript">
// Define the structure of fields, if this is not defined then all fields will be assumed
// to be strings. Name must match csv header row (which must exist) in order to parse correctly.
fields =[{name: 'name', type: 'string', filterable: false, columnLabelable: true},
{name: 'repository', type: 'string', filterable: true},
{name: 'website', type: 'string', filterable: true},
{name: 'more information', type: 'string', filterable: true},
{name: 'license', type: 'string', filterable: true},
{name: 'category', type: 'string', filterable: true},
{name: 'summary', type: 'string', filterable: false},
{name: 'summary source', type: 'string', filterable: false},
{name: 'description', type: 'string', filterable: false},
{name: 'description source', type: 'string', filterable: false},
{name: 'screenshots', type: 'string', filterable: false},
{name: 'mobile compatibility', type: 'string', filterable: true},
{name: 'framework', type: 'string', filterable: true},
{name: 'backend', type: 'string', filterable: true},
{name: 'service', type: 'string', filterable: true},
{name: 'appid', type: 'string', filterable: false},
{name: 'scale-to-fit', type: 'string', filterable: false},
{name: 'notice', type: 'string', filterable: false},
{name: 'flatpak', type: 'string', filterable: true},
{name: 'aur', type: 'string', filterable: true},
{name: 'postmarketos', type: 'string', filterable: true},
{name: 'debian', type: 'string', filterable: true},
{name: 'appstream link', type: 'string', filterable: false},
{name: 'appdata.xml or metainfo.xml url', type: 'string', filterable: false},
{name: 'freedesktop (sub)categories', type: 'string', filterable: true},
{name: 'main languages', type: 'string', filterable: true},
{name: 'build systems', type: 'string', filterable: true},
{name: 'original reporter', type: 'string', filterable: false},
{name: 'date added', type: 'string', filterable: false},
];
function setupPivot(input) {
input.callbacks = {
afterUpdateResults: function () {
$('#results > table').DataTable({responsive: true, paginate: false, scrollX: 500, class: "input", "sDom": "<'row'<'span6'l><'span6'f>>t<'row'<'span6'i><'span6'p>>"});
}
};
$('#pivot-demo').pivot_display('setup', input);
};
$(document).ready(function () {
$.ajax({
url: "{{ get_url(path="csv-lists/archive.csv") | safe }}",
dataType: "text",
success: function (data) {
data = data.replace(/,/g, " ||| ");
console.log(data);
data = linkifyStr(data, {
format: function (value, type) {
return value;
}
});
data = data.replace(/ \|\|\| /g, ",");
console.log(data);
setupPivot({
csv: data,
fields: fields,
rowLabels: [
"name",
"category",
"summary",
"mobile compatibility",
"repository",
"framework",
"screenshots",
"website",
"license",
"appid",
"appstream link",
"scale-to-fit",
"flatpak",
"aur",
"postmarketos",
"debian",
"notice",
"more information",
"appdata.xml or metainfo.xml url",
"backend",
"service",
"description",
"description source",
"summary source",
"freedesktop (sub)categories",
"main languages",
"build systems",
"date added"
]
})
$('.stop-propagation').click(function (event) {
event.stopPropagation();
});
console.log(data);
}
});
// $('#fieldExplanations').pivot_display('setup', {url:"fields.csv", fields: [{name: 'name', type: 'string', filterable: true, columnLabelable: true}, {name: 'explanation', type: 'string', filterable: true, columnLabelable: true}], rowLabels:["name",
// "explanation"]});
var accordions = bulmaAccordion.attach();
});
</script>
{% endmacro %}
{% macro gamelist_head() %}
<link rel="stylesheet" href="{{ get_url(path="lib/css/pivot.css") | safe }}" type="text/css"/>
<link rel="stylesheet" href="{{ get_url(path="lib/css/bulma.min.css") | safe }}" type="text/css"/>
<link rel="stylesheet" href="{{ get_url(path="lib/css/responsive.semanticui.min.css") | safe }}" type="text/css"/>
<link rel="stylesheet" href="{{ get_url(path="lib/css/bulma-accordion.min.css") | safe }}" type="text/css"/>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/jquery.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/jquery.dataTables.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/pivot.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/jquery_pivot.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/dataTables.responsive.min.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/linkify.min.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/linkify-string.min.js") | safe }}"></script>
<script type="text/javascript" src="{{ get_url(path="lib/javascripts/bulma-accordion.min.js") | safe }}"></script>
<script type="text/javascript">
// Define the structure of fields, if this is not defined then all fields will be assumed
// to be strings. Name must match csv header row (which must exist) in order to parse correctly.
fields = [{
name: 'name',
type: 'string',
filterable: true,
columnLabelable: true
},
{
name: 'reporter',
type: 'string',
filterable: true
},
{
name: 'verified',
type: 'boolean',
filterable: true
},
{
name: 'repository',
type: 'string',
filterable: true
},
{
name: 'website',
type: 'string',
filterable: true
},
{
name: 'more information',
type: 'string',
filterable: true
},
{
name: 'license',
type: 'string',
filterable: true
},
{
name: 'category',
type: 'string',
filterable: true
},
{
name: 'summary',
type: 'string',
filterable: true
},
{
name: 'summary source',
type: 'string',
filterable: true
},
{
name: 'description',
type: 'string',
filterable: true
},
{
name: 'description source',
type: 'string',
filterable: true
},
{
name: 'screenshots',
type: 'string',
filterable: true
},
{
name: 'mobile compatibility',
type: 'string',
filterable: true
},
{
name: 'framework',
type: 'string',
filterable: true
},
{
name: 'backend',
type: 'string',
filterable: true
},
{
name: 'service',
type: 'string',
filterable: true
},
{
name: 'appid',
type: 'string',
filterable: true
},
{
name: 'scale-to-fit',
type: 'string',
filterable: true
},
{
name: 'notice',
type: 'string',
filterable: true
},
{
name: 'flatpak',
type: 'string',
filterable: true
},
{
name: 'aur',
type: 'string',
filterable: true
},
{
name: 'postmarketos',
type: 'string',
filterable: true
},
{
name: 'debian',
type: 'string',
filterable: true
},
];
function setupPivot(input) {
input.callbacks = {
afterUpdateResults: function() {
$('#results > table').DataTable({
responsive: true,
paginate: false,
scrollX: 500,
class: "input",
"sDom": "<'row'<'span6'l><'span6'f>>t<'row'<'span6'i><'span6'p>>"
});
}
};
$('#pivot-demo').pivot_display('setup', input);
};
$(document).ready(function() {
$.ajax({
url: "{{ get_url(path="csv-lists/games.csv") | safe }}",
dataType: "text",
success: function(data) {
data = data.replace(/,/g, " ||| ");
console.log(data);
data = linkifyStr(data, {
defaultProtocol: "https",
format: function(value, type) {
return value;
}
});
data = data.replace(/ \|\|\| /g, ",");
console.log(data);
setupPivot({
csv: data,
fields: fields,
rowLabels: [
"name",
"verified",
"category",
"summary",
"mobile compatibility",
"repository",
"framework",
"screenshots",
"website",
"license",
"appid",
"scale-to-fit",
"flatpak",
"aur",
"postmarketos",
"debian",
"notice",
"more information",
"backend",
"service",
"description",
"description source",
"summary source",
"reporter"
]
})
$('.stop-propagation').click(function(event) {
event.stopPropagation();
});
console.log(data);
}
});
// $('#fieldExplanations').pivot_display('setup', {url:"fields.csv", fields: [{name: 'name', type: 'string', filterable: true, columnLabelable: true}, {name: 'explanation', type: 'string', filterable: true, columnLabelable: true}], rowLabels:["name",
// "explanation"]});
var accordions = bulmaAccordion.attach();
});
</script>
{% endmacro %}