diff --git a/.gitignore b/.gitignore index c3a43c5..40b53b0 100755 --- a/.gitignore +++ b/.gitignore @@ -40,3 +40,5 @@ nosetests.xml qpython-docs/venv/* qpython-docs/build/* qpython-docs/static/* +venv +site diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..381bb57 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,107 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Project Overview + +This is the QPython website and documentation repository (www.qpython.org). QPython is a Python script engine for Android devices. The site is built with [Sphinx](https://www.sphinx-doc.org/) using reStructuredText (.rst) source files. + +## Build Commands + +All build commands should be run from the `qpython-docs/` directory: + +```bash +cd qpython-docs +``` + +### Development Build (Local Testing) + +Build HTML documentation for local testing: + +```bash +make html +``` + +Output will be in `qpython-docs/build/html/`. Open `build/html/index.html` in a browser to preview. + +### Production Build (Deployment) + +Build the full site including analytics, static file processing, and copy to the deployment directory: + +```bash +./build.sh +``` + +This script: +1. Removes the existing `docs/` folder at the repository root +2. Runs `make html` to build the documentation +3. Adds Google Analytics and Facebook comments via `add-analytics.py` +4. Renames `_static/` to `static/` and `_images/` to `images/` +5. Copies additional static files (CNAME, favicon.ico, index.html, privacy pages, etc.) +6. Outputs final site to `/docs/` (which is deployed via GitHub Pages) + +### Other Useful Commands + +```bash +make clean # Remove build artifacts +make linkcheck # Check for broken external links +make doctest # Run doctests in documentation +``` + +## Project Architecture + +### Directory Structure + +``` +qpython-docs/ +├── source/ # Documentation source files (.rst) +│ ├── document.rst # Main toctree (entry point) +│ ├── conf.py # Sphinx configuration +│ ├── _static/ # Static assets (CSS, images) +│ ├── en/ # English documentation +│ │ ├── guide.rst +│ │ ├── faq.rst +│ │ └── ... +│ ├── zh/ # Chinese documentation +│ └── qpython_theme/ # Custom Sphinx theme +│ └── __init__.py +├── build.sh # Production build script +├── add-analytics.py # Post-processor for analytics injection +├── extra.txt # Analytics code template +├── requirements.txt # Python dependencies +└── Makefile # Sphinx build commands + +docs/ # Built site (deployment target) +├── index.html # Site homepage +├── document.html # Documentation homepage +├── en/ # Built English docs +├── _sources/ # Source archives (for Sphinx) +└── ... +``` + +### Key Files + +- **`qpython-docs/source/conf.py`**: Sphinx configuration including theme (`qpython_theme`), version, and extensions +- **`qpython-docs/source/document.rst`**: Main documentation entry point with toctree +- **`qpython-docs/build.sh`**: Production build script that processes the Sphinx output and prepares it for deployment +- **`qpython-docs/extra.txt`**: Template for injecting Google Analytics and Facebook comments into HTML +- **`docs/CNAME`**: Configures custom domain (www.qpython.org) for GitHub Pages + +### Custom Theme + +The documentation uses a custom Sphinx theme located at `qpython-docs/source/qpython_theme/`. The theme path is registered in `conf.py` via the `qpython_theme` package. + +### Documentation Languages + +- English: `qpython-docs/source/en/` +- Chinese: `qpython-docs/source/zh/` + +Each language has its own toctree structure. The master document (`document.rst`) includes the English guide by default and links to Chinese content via `zhindex.rst`. + +### Deployment + +The `docs/` folder at the repository root is the deployment target. It is served via GitHub Pages. After making changes: + +1. Run `./build.sh` to rebuild the site +2. Commit the changes in both `qpython-docs/source/` (source) and `docs/` (built output) +3. Push to deploy diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..f82aa96 --- /dev/null +++ b/build.sh @@ -0,0 +1,117 @@ +#!/bin/bash + +# Build script for QPython documentation +# Supports both English and Chinese + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "$SCRIPT_DIR" + +PYTHON="python3.12" + +echo "Building QPython documentation..." +echo "" + +# Clean previous build +echo "Cleaning previous build..." +rm -rf site + +# Build English site +echo "Building English site..." +$PYTHON -m mkdocs build + +# Build Chinese site +echo "Building Chinese site..." +$PYTHON -m mkdocs build -f mkdocs-zh.yml + +# Create root index.html +echo "Creating root index.html..." +cat > site/index.html << 'EOF' + + + + + QPython Documentation + + + + +
+ +

Choose your language / 选择语言

+
+ English + 中文 +
+
+ + +EOF + +# Copy additional HTML files from source to site +if ls source/*.html 1> /dev/null 2>&1; then + echo "Copying additional HTML files..." + cp source/*.html site/ +fi + +# Copy CNAME file if exists +if [ -f source/CNAME ]; then + echo "Copying CNAME file..." + cp source/CNAME site/ +fi + +echo "" +echo "Build complete!" +echo "" +echo "Output directories:" +echo " - English: site/en/" +echo " - Chinese: site/zh/" +echo " - Root: site/index.html" +echo "" +echo "To preview locally:" +echo " cd site && python -m http.server 8000" diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..4195983 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,91 @@ +#!/bin/bash + +# Deploy script for QPython documentation +# Builds the site and deploys to gh-pages branch + +set -e + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +cd "$SCRIPT_DIR" + +# Run build first +echo "Building site..." +./build.sh + +# Check if git repository +if [ ! -d .git ]; then + echo "Error: Not a git repository" + exit 1 +fi + +# Get current branch +CURRENT_BRANCH=$(git branch --show-current) +echo "Current branch: $CURRENT_BRANCH" + +# Check if there are uncommitted changes +if ! git diff-index --quiet HEAD --; then + echo "Warning: You have uncommitted changes. Please commit them first." + echo "Uncommitted files:" + git status --short + read -p "Do you want to continue anyway? (y/N) " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + echo "Aborted." + exit 1 + fi +fi + +# Deploy to gh-pages +echo "" +echo "Deploying to gh-pages branch..." + +# Create a temporary directory for the site +TEMP_DIR=$(mktemp -d) +cp -r site/* "$TEMP_DIR/" + +# Switch to gh-pages branch (create if doesn't exist) +if git show-ref --verify --quiet refs/heads/gh-pages; then + git checkout gh-pages +else + git checkout --orphan gh-pages + git rm -rf . -- ':!deploy.sh' +fi + +# Remove old files (except .git and deploy.sh) +find . -maxdepth 1 ! -name '.git' ! -name 'deploy.sh' ! -name '.' ! -name '..' -exec rm -rf {} \; + +# Copy new site content +cp -r "$TEMP_DIR"/* . + +# Add all files +git add -A + +# Commit +COMMIT_MSG="Deploy site - $(date '+%Y-%m-%d %H:%M:%S')" +if git diff --cached --quiet; then + echo "No changes to commit" +else + git commit -m "$COMMIT_MSG" + echo "Committed: $COMMIT_MSG" +fi + +# Push to remote with force (gh-pages is safe to force push) +read -p "Push to origin/gh-pages? (y/N) " -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]]; then + git push origin gh-pages --force + echo "" + echo "Deployed successfully!" + echo "Site will be available at: https://qpython-android.github.io/qpython.org/" +else + echo "Push aborted. You can push manually with: git push origin gh-pages --force" +fi + +# Cleanup +rm -rf "$TEMP_DIR" + +# Switch back to original branch +git checkout "$CURRENT_BRANCH" + +echo "" +echo "Done!" diff --git a/docs/.buildinfo b/docs/.buildinfo deleted file mode 100644 index a9af287..0000000 --- a/docs/.buildinfo +++ /dev/null @@ -1,4 +0,0 @@ -# Sphinx build info version 1 -# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. -config: e4277cb8131332b01f6e2dc120dd6b1b -tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/_sources/contributors.rst.txt b/docs/_sources/contributors.rst.txt deleted file mode 100644 index 1d578cf..0000000 --- a/docs/_sources/contributors.rst.txt +++ /dev/null @@ -1,61 +0,0 @@ -Contributors -=============== - -Thanks contributers for helping with QPython projects. - -We want you to join us, If you want to join us, please email us support@qpython.org - - -Developers ------------ -`River `_ - -`乘着船 `_ - -`kyle kersey `_ - -`Mae `_ - -`ZRH `_ - -*How to contribute* - -Please send an email to us with your self introduction and what kind of development do you want to contribute. - - - - -Communities Organizers ----------------------- -`LR `_ (Chinese QQ Group: 540717901) - -*How to run a QPython Community* - -We appreciate that you build a QPython topic community, you can invite us to join for answering any question about qpython by sending an email to us for telling how to join. - - -Localization ----------------------- -`Fogapod `_ (Russian) - -`Frodo821 `_ (Japanese) - -`Darciss Rehot'acc `_ (Turkish) - -`Christo phe `_ (French) - -*How to contribute localization translate* - -We appreciate that you are willing to help with translate QPython / QPython3. - -`This repo `_ is the localization project, you can post pull request and send en email to us, then we will merge it and publish in next update. - - -If you don't want to use git, you can just translate the words which do not contains translatable="false" in the following files. - -- `strings.xml `_ -- `toasts.xml `_ - -And there is the description file - -- `en-US-intro.md `_ diff --git a/docs/_sources/document.rst.txt b/docs/_sources/document.rst.txt deleted file mode 100644 index 7918285..0000000 --- a/docs/_sources/document.rst.txt +++ /dev/null @@ -1,111 +0,0 @@ -.. QPython documentation master file, created by - sphinx-quickstart on Fri Apr 7 15:07:35 2017. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -.. image:: _static/bestpython.png - - -Welcome to read the QPython guide -============================================= - -QPython is a script engine that runs Python on android devices. It lets your android device run Python scripts and projects. It contains the Python interpreter, console, editor, and the SL4A Library for Android. It’s Python on Android! - - -QPython has several millions users in the world already, it's a great project for programming users, welcome to join us for contributing to this project NOW. - - -What's NEW ------------------------- -QPython project include the `QPython `_ and `QPython3 `_ applications. - -QPython application is using the **Python 2.7.2** , and QPython application is using the **Python 3.2.2** . - - -QPython's newest version is 1.3.2 (Released on 2017/5/12) , QPython3's newest version is 1.0.2 (Released on 2017/3/29), New versions include many amazing features, please upgrade to the newest version as soon from google play, amazon appstore etc. - - -Thanks these guys who are contributing ----------------------------------------- -They are pushing on the QPython project moving forward. - -.. image:: https://avatars0.githubusercontent.com/u/3059527?v=3&s=60 - :target: https://github.com/riverfor - :alt: River is the project's organizer and the current online QPython's author. - -.. image:: https://avatars0.githubusercontent.com/u/10812534?v=3&s=60 - :target: https://github.com/pollyfat - :alt: Mae is a beautiful and talented girl developer who is good at python & android programming. - -.. image:: https://avatars0.githubusercontent.com/u/22494?v=3&s=60 - :target: https://github.com/ZoomQuiet - :alt: Zoom.Quiet is a knowledgeable guy who is famous in many opensource communities. - -.. image:: https://avatars3.githubusercontent.com/u/10219741?v=3&s=60 - :target: https://github.com/mathiasluo - :alt: MathiasLuo is a android geek developer - -.. image:: https://avatars2.githubusercontent.com/u/25975283?v=3&s=60 - :target: https://github.com/liyuanrui - :alt: liyuanrui is a Chinese geek - -.. image:: https://avatars3.githubusercontent.com/u/5159173?v=3&s=60 - :target: https://github.com/kylelk - :alt: Kyle kersey is a US geek - - -Do you want to join the great QPython team ? You could `Ask qustions on twitter `_ or `email us `_. -And you could `fork us on github `_ and send pull request. - - -QPython Communities ----------------------- -**There are many active QPython communities where you could meet the QPython users like you** - -* `Join Facebook community `_ -* `Join Google group `_ -* `Join Gitter chat `_ -* `Join G+ community(For QPython testers) `_ -* `QPython on Stackoverflow `_ - -**And you could talk to us through social network** - -* `Like us on facebook `_ -* `Follow us on twitter `_ - -* `Report issue `_ -* `Email us `_ - - -**It's the official QPython Users & Contributors' Guide, please follow these steps for using and contributing.** - -Support -------------- -We are happy to hear feedback from you, but sometimes some bugs or features demand may not be implemented soon for we lack resources. - -So if you have any issue need the core developer team to solve with higher priority, you could try the `bountysource service `_. - - - -Now, let's GO ---------------- -.. toctree:: - :maxdepth: 2 - - en/guide - -Others ---------------- -.. toctree:: - :maxdepth: 2 - - en/faq - - -For Chinese users -------------------- -.. toctree:: - :maxdepth: 2 - - zhindex - diff --git a/docs/_sources/en/faq.rst.txt b/docs/_sources/en/faq.rst.txt deleted file mode 100644 index 2bee981..0000000 --- a/docs/_sources/en/faq.rst.txt +++ /dev/null @@ -1,26 +0,0 @@ -FAQ -==== - - -**How to run qpython script from other terminals ?** - -- You could "share to" qpython from 3rd apps. - -- You need to root the android device first, then soure the env vars (Just like the qpython wiki link you mentioned) and execute the /data/data/org.qpython.qpy/bin/python or /data/data/org.qpython.qpy/bin/python-android5 (for android 5 above) - - -`Share to case sample `_ - - - -**Support pygame ?** - -Even you could import pygame in QPython, but QPython doesn't support pygame now. - -We will consider to support it later, please follow us on facebook to get it's progress. - - -`Pygame case sample `_ - - - diff --git a/docs/_sources/en/guide.rst.txt b/docs/_sources/en/guide.rst.txt deleted file mode 100644 index f5cef59..0000000 --- a/docs/_sources/en/guide.rst.txt +++ /dev/null @@ -1,47 +0,0 @@ -Getting started -========================== -How to start quickly ? Just follow the following steps: - -.. toctree:: - :maxdepth: 2 - - guide_howtostart - guide_helloworld - - -Programming Guide -======================== - -If you you want to know more about how to program through qpython, just follow these steps: - - -.. toctree:: - :maxdepth: 2 - - guide_program - guide_ide - guide_libraries - guide_extend - - -**QPython project is not only a powerful Python engine for android, but is a active technology community also.** - -Developer Guide -======================= -QPython developers' goal is pushing out a great Python for android. - -.. toctree:: - :maxdepth: 2 - - guide_developers - - -Contributor Guide -======================== - -Welcome to join QPython contributors team, you are not just a user, but a creator of QPython. - -.. toctree:: - :maxdepth: 2 - - guide_contributors diff --git a/docs/_sources/en/guide_androidhelpers.rst.txt b/docs/_sources/en/guide_androidhelpers.rst.txt deleted file mode 100644 index e64294a..0000000 --- a/docs/_sources/en/guide_androidhelpers.rst.txt +++ /dev/null @@ -1,2038 +0,0 @@ -The Scripting Layer for Android (abridged as SL4A, and previously named Android Scripting Environment or ASE) is a library that allows the creation and running of scripts written in various scripting languages directly on Android devices. QPython start to extend the SL4A project and integrate it. - - -.. image:: ../_static/sl4a.jpg - -There are many SL4A APIs, if you found any issue, please `report an issue `_. - -AndroidFacade -=============== - -Clipboard APIs ----------------- -.. py:function:: setClipboard(text) - - Put text in the clipboard - - :param str text: text - -.. py:function:: getClipboard(text) - - Read text from the clipboard - - :return: The text in the clipboard - - -:: - - from androidhelper import Android - droid = Android() - - #setClipboard - droid.setClipboard("Hello World") - - #getClipboard - clipboard = droid.getClipboard().result - - -Intent & startActivity APIs ----------------------------------- -.. py:function:: makeIntent(action, uri, type, extras, categories, packagename, classname, flags) - - Starts an activity and returns the result - - :param str action: action - :param str uri(Optional): uri - :param str type(Optional): MIME type/subtype of the URI - :param object extras(Optional): a Map of extras to add to the Intent - :param list categories(Optional): a List of categories to add to the Intent - :param str packagename(Optional): name of package. If used, requires classname to be useful - :param str classname(Optional): name of class. If used, requires packagename to be useful - :param int flags(Optional): Intent flags - - :return: An object representing an Intent - - -:: - - sample code to show makeIntent - - -.. py:function:: getIntent() - - Returns the intent that launched the script - -:: - - sample code to show getIntent - - -.. py:function:: startActivityForResult(action, uri, type, extras, packagename, classname) - - Starts an activity and returns the result - - :param str action: action - :param str uri(Optional): uri - :param str type(Optional): MIME type/subtype of the URI - :param object extras(Optional): a Map of extras to add to the Intent - :param str packagename(Optional): name of package. If used, requires classname to be useful - :param str classname(Optional): name of class. If used, requires packagename to be useful - - :return: A Map representation of the result Intent - - -:: - - sample code to show startActivityForResult - - -.. py:function:: startActivityForResultIntent(intent) - - Starts an activity and returns the result - - :param Intent intent: Intent in the format as returned from makeIntent - - :return: A Map representation of the result Intent - - -:: - - sample code to show startActivityForResultIntent - -.. py:function:: startActivityIntent(intent, wait) - - Starts an activity - - :param Intent intent: Intent in the format as returned from makeIntent - :param bool wait(Optional): block until the user exits the started activity - -:: - - sample code to show startActivityIntent - - -.. py:function:: startActivity(action, uri, type, extras, wait, packagename, classname) - - Starts an activity - - :param str action: action - :param str uri(Optional): uri - :param str type(Optional): MIME type/subtype of the URI - :param object extras(Optional): a Map of extras to add to the Intent - :param bool wait(Optional): block until the user exits the started activity - :param str packagename(Optional): name of package. If used, requires classname to be useful - :param str classname(Optional): name of class. If used, requires packagename to be useful - -:: - - sample code to show startActivityForResultIntent - - -SendBroadcast APIs -------------------- -.. py:function:: sendBroadcast(action, uri, type, extras, packagename, classname) - - Send a broadcast - - :param str action: action - :param str uri(Optional): uri - :param str type(Optional): MIME type/subtype of the URI - :param object extras(Optional): a Map of extras to add to the Intent - :param str packagename(Optional): name of package. If used, requires classname to be useful - :param str classname(Optional): name of class. If used, requires packagename to be useful - - -:: - - sample code to show sendBroadcast - -.. py:function:: sendBroadcastIntent(intent) - - Send a broadcast - - :param Intent intent: Intent in the format as returned from makeIntent - -:: - - sample code to show sendBroadcastIntent - - -Vibrate ----------- -.. py:function:: vibrate(intent) - - Vibrates the phone or a specified duration in milliseconds - - :param int duration: duration in milliseconds - -:: - - sample code to show vibrate - - -NetworkStatus ---------------- -.. py:function:: getNetworkStatus() - - Returns the status of network connection - -:: - - sample code to show getNetworkStatus - -PackageVersion APIs ------------------------------- -.. py:function:: requiredVersion(requiredVersion) - - Checks if version of QPython SL4A is greater than or equal to the specified version - - :param int requiredVersion: requiredVersion - - :return: true or false - - -.. py:function:: getPackageVersionCode(packageName) - - Returns package version code - - :param str packageName: packageName - - :return: Package version code - -.. py:function:: getPackageVersion(packageName) - - Returns package version name - - :param str packageName: packageName - - :return: Package version name - - -:: - - sample code to show getPackageVersionCode & getPackageVersion - - -System APIs --------------------------------- -.. py:function:: getConstants(classname) - - Get list of constants (static final fields) for a class - - :param str classname: classname - - :return: list - -:: - - sample code to show getConstants - -.. py:function:: environment() - - A map of various useful environment details - - :return: environment map object includes id, display, offset, TZ, SDK, download, appcache, availblocks, blocksize, blockcount, sdcard - -:: - - sample code to show environment - -.. py:function:: log(message) - - Writes message to logcat - - :param str message: message - -:: - - sample code to show log - - -SendEmail ----------- -.. py:function:: sendEmail(to, subject, body, attachmentUri) - - Launches an activity that sends an e-mail message to a given recipient - - :param str to: A comma separated list of recipients - :param str subject: subject - :param str body: mail body - :param str attachmentUri(Optional): message - -:: - - sample code to show sendEmail - - -Toast, getInput, getPassword, notify APIs ------------------------------------------------- -.. py:function:: makeToast(message) - - Displays a short-duration Toast notification - - :param str message: message - -:: - - sample code to show makeToast - -.. py:function:: getInput(title, message) - - Queries the user for a text input - - :param str title: title of the input box - :param str message: message to display above the input box - -:: - - sample code to show getInput - -.. py:function:: getPassword(title, message) - - Queries the user for a password - - :param str title: title of the input box - :param str message: message to display above the input box - -:: - - sample code to show getPassword - -.. py:function:: notify(title, message, url) - - Displays a notification that will be canceled when the user clicks on it - - :param str title: title - :param str message: message - :param str url(optional): url - -:: - import androidhelper - droid = androidhelper.Android() - droid.notify('Hello','QPython','http://qpython.org') # you could set the 3rd parameter None also - - - -ApplicationManagerFacade -========================= - -Manager APIs -------------- - -.. py:function:: getLaunchableApplications() - - Returns a list of all launchable application class names - - :return: map object - -:: - - sample code to show getLaunchableApplications - - -.. py:function:: launch(classname) - - Start activity with the given class name - - :param str classname: classname - -:: - - sample code to show launch - -.. py:function:: getRunningPackages() - - Returns a list of packages running activities or services - - :return: List of packages running activities - -:: - - sample code to show getRunningPackages - -.. py:function:: forceStopPackage(packageName) - - Force stops a package - - :param str packageName: packageName - -:: - - sample code to show forceStopPackage - - -CameraFacade -========================= - -.. py:function:: cameraCapturePicture(targetPath) - - Take a picture and save it to the specified path - - :return: A map of Booleans autoFocus and takePicture where True indicates success - -.. py:function:: cameraInteractiveCapturePicture(targetPath) - - Starts the image capture application to take a picture and saves it to the specified path - -CommonIntentsFacade -========================= - -Barcode ----------- -.. py:function:: scanBarcode() - - Starts the barcode scanner - - :return: A Map representation of the result Intent - -View APIs ----------- -.. py:function:: pick(uri) - - Display content to be picked by URI (e.g. contacts) - - :return: A map of result values - -.. py:function:: view(uri, type, extras) - - Start activity with view action by URI (i.e. browser, contacts, etc.) - -.. py:function:: viewMap(query) - - Opens a map search for query (e.g. pizza, 123 My Street) - -.. py:function:: viewContacts() - - Opens the list of contacts - -.. py:function:: viewHtml(path) - - Opens the browser to display a local HTML file - -.. py:function:: search(query) - - Starts a search for the given query - -ContactsFacade -========================= - -.. py:function:: pickContact() - - Displays a list of contacts to pick from - - :return: A map of result values - -.. py:function:: pickPhone() - - Displays a list of phone numbers to pick from - - :return: The selected phone number - -.. py:function:: contactsGetAttributes() - - Returns a List of all possible attributes for contacts - - :return: a List of contacts as Maps - -.. py:function:: contactsGetIds() - - Returns a List of all contact IDs - -.. py:function:: contactsGet(attributes) - - Returns a List of all contacts - -.. py:function:: contactsGetById(id) - - Returns contacts by ID - -.. py:function:: contactsGetCount() - - Returns the number of contacts - -.. py:function:: queryContent(uri, attributes, selection, selectionArgs, order) - - Content Resolver Query - - :return: result of query as Maps - -.. py:function:: queryAttributes(uri) - - Content Resolver Query Attributes - - :return: a list of available columns for a given content uri - -EventFacade -========================= - -.. py:function:: eventClearBuffer() - - Clears all events from the event buffer - -.. py:function:: eventRegisterForBroadcast(category, enqueue) - - Registers a listener for a new broadcast signal - -.. py:function:: eventUnregisterForBroadcast(category) - - Stop listening for a broadcast signal - -.. py:function:: eventGetBrodcastCategories() - - Lists all the broadcast signals we are listening for - -.. py:function:: eventPoll(number_of_events) - - Returns and removes the oldest n events (i.e. location or sensor update, etc.) from the event buffer - - :return: A List of Maps of event properties - -.. py:function:: eventWaitFor(eventName, timeout) - - Blocks until an event with the supplied name occurs. The returned event is not removed from the buffer - - :return: Map of event properties - -.. py:function:: eventWait(timeout) - - Blocks until an event occurs. The returned event is removed from the buffer - - :return: Map of event properties - -.. py:function:: eventPost(name, data, enqueue) - - Post an event to the event queue - -.. py:function:: rpcPostEvent(name, data) - - Post an event to the event queue - -.. py:function:: receiveEvent() - - Returns and removes the oldest event (i.e. location or sensor update, etc.) from the event buffer - - :return: Map of event properties - -.. py:function:: waitForEvent(eventName, timeout) - - Blocks until an event with the supplied name occurs. The returned event is not removed from the buffer - - :return: Map of event properties - -.. py:function:: startEventDispatcher(port) - - Opens up a socket where you can read for events posted - -.. py:function:: stopEventDispatcher() - - Stops the event server, you can't read in the port anymore - -LocationFacade -========================= - -Providers APIs ------------------ - -.. py:function:: locationProviders() - - Returns availables providers on the phone - -.. py:function:: locationProviderEnabled(provider) - - Ask if provider is enabled - -Location APIs ------------------ -.. py:function:: startLocating(minDistance, minUpdateDistance) - - Starts collecting location data - -.. py:function:: readLocation() - - Returns the current location as indicated by all available providers - - :return: A map of location information by provider - -.. py:function:: stopLocating() - - Stops collecting location data - -.. py:function:: getLastKnownLocation() - - Returns the last known location of the device - - :return: A map of location information by provider - -*sample code* -:: - - Droid = androidhelper.Android() - location = Droid.getLastKnownLocation().result - location = location.get('network', location.get('gps')) - - -GEO ------------ -.. py:function:: geocode(latitude, longitude, maxResults) - - Returns a list of addresses for the given latitude and longitude - - :return: A list of addresses - -PhoneFacade -========================= - -PhoneStat APIs ----------------- - -.. py:function:: startTrackingPhoneState() - - Starts tracking phone state - -.. py:function:: readPhoneState() - - Returns the current phone state and incoming number - - :return: A Map of "state" and "incomingNumber" - -.. py:function:: stopTrackingPhoneState() - - Stops tracking phone state - - -Call & Dia APIs ----------------- - -.. py:function:: phoneCall(uri) - - Calls a contact/phone number by URI - -.. py:function:: phoneCallNumber(number) - - Calls a phone number - -.. py:function:: phoneDial(uri) - - Dials a contact/phone number by URI - -.. py:function:: phoneDialNumber(number) - - Dials a phone number - - - -Get information APIs ------------------------- -.. py:function:: getCellLocation() - - Returns the current cell location - -.. py:function:: getNetworkOperator() - - Returns the numeric name (MCC+MNC) of current registered operator - -.. py:function:: getNetworkOperatorName() - - Returns the alphabetic name of current registered operator - -.. py:function:: getNetworkType() - - Returns a the radio technology (network type) currently in use on the device - -.. py:function:: getPhoneType() - - Returns the device phone type - -.. py:function:: getSimCountryIso() - - Returns the ISO country code equivalent for the SIM provider's country code - -.. py:function:: getSimOperator() - - Returns the MCC+MNC (mobile country code + mobile network code) of the provider of the SIM. 5 or 6 decimal digits - -.. py:function:: getSimOperatorName() - - Returns the Service Provider Name (SPN) - -.. py:function:: getSimSerialNumber() - - Returns the serial number of the SIM, if applicable. Return null if it is unavailable - -.. py:function:: getSimState() - - Returns the state of the device SIM card - -.. py:function:: getSubscriberId() - - Returns the unique subscriber ID, for example, the IMSI for a GSM phone. Return null if it is unavailable - -.. py:function:: getVoiceMailAlphaTag() - - Retrieves the alphabetic identifier associated with the voice mail number - -.. py:function:: getVoiceMailNumber() - - Returns the voice mail number. Return null if it is unavailable - -.. py:function:: checkNetworkRoaming() - - Returns true if the device is considered roaming on the current network, for GSM purposes - -.. py:function:: getDeviceId() - - Returns the unique device ID, for example, the IMEI for GSM and the MEID for CDMA phones. Return null if device ID is not available - -.. py:function:: getDeviceSoftwareVersion() - - Returns the software version number for the device, for example, the IMEI/SV for GSM phones. Return null if the software version is not available - -.. py:function:: getLine1Number() - - Returns the phone number string for line 1, for example, the MSISDN for a GSM phone. Return null if it is unavailable - -.. py:function:: getNeighboringCellInfo() - - Returns the neighboring cell information of the device - -MediaRecorderFacade -========================= - - -Audio --------- - -.. py:function:: recorderStartMicrophone(targetPath) - - Records audio from the microphone and saves it to the given location - -Video APIs ------------ - -.. py:function:: recorderStartVideo(targetPath, duration, videoSize) - - Records video from the camera and saves it to the given location. - Duration specifies the maximum duration of the recording session. - If duration is 0 this method will return and the recording will only be stopped - when recorderStop is called or when a scripts exits. - Otherwise it will block for the time period equal to the duration argument. - videoSize: 0=160x120, 1=320x240, 2=352x288, 3=640x480, 4=800x480. - - -.. py:function:: recorderCaptureVideo(targetPath, duration, recordAudio) - - Records video (and optionally audio) from the camera and saves it to the given location. - Duration specifies the maximum duration of the recording session. - If duration is not provided this method will return immediately and the recording will only be stopped - when recorderStop is called or when a scripts exits. - Otherwise it will block for the time period equal to the duration argument. - -.. py:function:: startInteractiveVideoRecording(path) - - Starts the video capture application to record a video and saves it to the specified path - - -Stop --------- -.. py:function:: recorderStop() - - Stops a previously started recording - - -SensorManagerFacade -========================= - -Start & Stop -------------- -.. py:function:: startSensingTimed(sensorNumber, delayTime) - - Starts recording sensor data to be available for polling - -.. py:function:: startSensingThreshold(ensorNumber, threshold, axis) - - Records to the Event Queue sensor data exceeding a chosen threshold - -.. py:function:: startSensing(sampleSize) - - Starts recording sensor data to be available for polling - -.. py:function:: stopSensing() - - Stops collecting sensor data - -Read data APIs ---------------- -.. py:function:: readSensors() - - Returns the most recently recorded sensor data - -.. py:function:: sensorsGetAccuracy() - - Returns the most recently received accuracy value - -.. py:function:: sensorsGetLight() - - Returns the most recently received light value - -.. py:function:: sensorsReadAccelerometer() - - Returns the most recently received accelerometer values - - :return: a List of Floats [(acceleration on the) X axis, Y axis, Z axis] - -.. py:function:: sensorsReadMagnetometer() - - Returns the most recently received magnetic field values - - :return: a List of Floats [(magnetic field value for) X axis, Y axis, Z axis] - -.. py:function:: sensorsReadOrientation() - - Returns the most recently received orientation values - - :return: a List of Doubles [azimuth, pitch, roll] - -*sample code* -:: - - Droid = androidhelper.Android() - Droid.startSensingTimed(1, 250) - sensor = Droid.sensorsReadOrientation().result - Droid.stopSensing() - - -SettingsFacade -========================= - -Screen ----------- - -.. py:function:: setScreenTimeout(value) - - Sets the screen timeout to this number of seconds - - :return: The original screen timeout - -.. py:function:: getScreenTimeout() - - Gets the screen timeout - - :return: the current screen timeout in seconds - -AirplanerMode ---------------------- - -.. py:function:: checkAirplaneMode() - - Checks the airplane mode setting - - :return: True if airplane mode is enabled - -.. py:function:: toggleAirplaneMode(enabled) - - Toggles airplane mode on and off - - :return: True if airplane mode is enabled - -Ringer Silent Mode ---------------------- - -.. py:function:: checkRingerSilentMode() - - Checks the ringer silent mode setting - - :return: True if ringer silent mode is enabled - -.. py:function:: toggleRingerSilentMode(enabled) - - Toggles ringer silent mode on and off - - :return: True if ringer silent mode is enabled - -Vibrate Mode ---------------------- - -.. py:function:: toggleVibrateMode(enabled) - - Toggles vibrate mode on and off. If ringer=true then set Ringer setting, else set Notification setting - - :return: True if vibrate mode is enabled - -.. py:function:: getVibrateMode(ringer) - - Checks Vibration setting. If ringer=true then query Ringer setting, else query Notification setting - - :return: True if vibrate mode is enabled - -Ringer & Media Volume ---------------------- - -.. py:function:: getMaxRingerVolume() - - Returns the maximum ringer volume - -.. py:function:: getRingerVolume() - - Returns the current ringer volume - -.. py:function:: setRingerVolume(volume) - - Sets the ringer volume - -.. py:function:: getMaxMediaVolume() - - Returns the maximum media volume - -.. py:function:: getMediaVolume() - - Returns the current media volume - -.. py:function:: setMediaVolume(volume) - - Sets the media volume - -Screen Brightness ---------------------- - -.. py:function:: getScreenBrightness() - - Returns the screen backlight brightness - - :return: the current screen brightness between 0 and 255 - -.. py:function:: setScreenBrightness(value) - - Sets the the screen backlight brightness - - :return: the original screen brightness - -.. py:function:: checkScreenOn() - - Checks if the screen is on or off (requires API level 7) - - :return: True if the screen is currently on - - -SmsFacade -========================= - -.. py:function:: smsSend(destinationAddress, text) - - Sends an SMS - - :param str destinationAddress: typically a phone number - :param str text: - -.. py:function:: smsGetMessageCount(unreadOnly, folder) - - Returns the number of messages - - :param bool unreadOnly: typically a phone number - :param str folder(optional): default "inbox" - -.. py:function:: smsGetMessageIds(unreadOnly, folder) - - Returns a List of all message IDs - - :param bool unreadOnly: typically a phone number - :param str folder(optional): default "inbox" - -.. py:function:: smsGetMessages(unreadOnly, folder, attributes) - - Returns a List of all messages - - :param bool unreadOnly: typically a phone number - :param str folder: default "inbox" - :param list attributes(optional): attributes - - :return: a List of messages as Maps - -.. py:function:: smsGetMessageById(id, attributes) - - Returns message attributes - - :param int id: message ID - :param list attributes(optional): attributes - - :return: a List of messages as Maps - -.. py:function:: smsGetAttributes() - - Returns a List of all possible message attributes - -.. py:function:: smsDeleteMessage(id) - - Deletes a message - - :param int id: message ID - - :return: True if the message was deleted - -.. py:function:: smsMarkMessageRead(ids, read) - - Marks messages as read - - :param list ids: List of message IDs to mark as read - :param bool read: true or false - - :return: number of messages marked read - -SpeechRecognitionFacade -========================= - -.. py:function:: recognizeSpeech(prompt, language, languageModel) - - Recognizes user's speech and returns the most likely result - - :param str prompt(optional): text prompt to show to the user when asking them to speak - :param str language(optional): language override to inform the recognizer that it should expect speech in a language different than the one set in the java.util.Locale.getDefault() - :param str languageModel(optional): informs the recognizer which speech model to prefer (see android.speech.RecognizeIntent) - - :return: An empty string in case the speech cannot be recongnized - - -ToneGeneratorFacade -========================= - -.. py:function:: generateDtmfTones(phoneNumber, toneDuration) - - Generate DTMF tones for the given phone number - - :param str phoneNumber: phone number - :param int toneDuration(optional): default 100, duration of each tone in milliseconds - - -WakeLockFacade -========================= - -.. py:function:: wakeLockAcquireFull() - - Acquires a full wake lock (CPU on, screen bright, keyboard bright) - -.. py:function:: wakeLockAcquirePartial() - - Acquires a partial wake lock (CPU on) - -.. py:function:: wakeLockAcquireBright() - - Acquires a bright wake lock (CPU on, screen bright) - -.. py:function:: wakeLockAcquireDim() - - Acquires a dim wake lock (CPU on, screen dim) - -.. py:function:: wakeLockRelease() - - Releases the wake lock - -WifiFacade -========================= - -.. py:function:: wifiGetScanResults() - - Returns the list of access points found during the most recent Wifi scan - -.. py:function:: wifiLockAcquireFull() - - Acquires a full Wifi lock - -.. py:function:: wifiLockAcquireScanOnly() - - Acquires a scan only Wifi lock - -.. py:function:: wifiLockRelease() - - Releases a previously acquired Wifi lock - -.. py:function:: wifiStartScan() - - Starts a scan for Wifi access points - - :return: True if the scan was initiated successfully - -.. py:function:: checkWifiState() - - Checks Wifi state - - :return: True if Wifi is enabled - -.. py:function:: toggleWifiState(enabled) - - Toggle Wifi on and off - - :param bool enabled(optional): enabled - - :return: True if Wifi is enabled - -.. py:function:: wifiDisconnect() - - Disconnects from the currently active access point - - :return: True if the operation succeeded - -.. py:function:: wifiGetConnectionInfo() - - Returns information about the currently active access point - -.. py:function:: wifiReassociate() - - Returns information about the currently active access point - - :return: True if the operation succeeded - -.. py:function:: wifiReconnect() - - Reconnects to the currently active access point - - :return: True if the operation succeeded - - -BatteryManagerFacade -========================= - -.. py:function:: readBatteryData() - - Returns the most recently recorded battery data - -.. py:function:: batteryStartMonitoring() - - Starts tracking battery state - -.. py:function:: batteryStopMonitoring() - - Stops tracking battery state - -.. py:function:: batteryGetStatus() - - Returns the most recently received battery status data: - 1 - unknown; - 2 - charging; - 3 - discharging; - 4 - not charging; - 5 - full - -.. py:function:: batteryGetHealth() - - Returns the most recently received battery health data: - 1 - unknown; - 2 - good; - 3 - overheat; - 4 - dead; - 5 - over voltage; - 6 - unspecified failure - -.. py:function:: batteryGetPlugType() - - Returns the most recently received plug type data: - -1 - unknown - 0 - unplugged - 1 - power source is an AC charger - 2 - power source is a USB port - - -.. py:function:: batteryCheckPresent() - - Returns the most recently received battery presence data - -.. py:function:: batteryGetLevel() - - Returns the most recently received battery level (percentage) - -.. py:function:: batteryGetVoltage() - - Returns the most recently received battery voltage - -.. py:function:: batteryGetTemperature() - - Returns the most recently received battery temperature - -.. py:function:: batteryGetTechnology() - - Returns the most recently received battery technology data - - -ActivityResultFacade -========================= - -.. py:function:: setResultBoolean(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - - -.. py:function:: setResultByte(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultShort(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultChar(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - - -.. py:function:: setResultInteger(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultLong(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultFloat(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultDouble(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultString(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultBooleanArray(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultByteArray(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultShortArray(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultCharArray(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultIntegerArray(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultLongArray(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultFloatArray(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultDoubleArray(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultStringArray(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultSerializable(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - - -MediaPlayerFacade -========================= - -Control ------------------ -.. py:function:: mediaPlay(url, tag, play) - - Open a media file - - :param str url: url of media resource - :param str tag(optional): string identifying resource (default=default) - :param bool play(optional): start playing immediately - - :return: true if play successful - -.. py:function:: mediaPlayPause(tag) - - pause playing media file - - :param str tag: string identifying resource (default=default) - - :return: true if successful - -.. py:function:: mediaPlayStart(tag) - - start playing media file - - :param str tag: string identifying resource (default=default) - - :return: true if successful - -.. py:function:: mediaPlayClose(tag) - - Close media file - - :param str tag: string identifying resource (default=default) - - :return: true if successful - -.. py:function:: mediaIsPlaying(tag) - - Checks if media file is playing - - :param str tag: string identifying resource (default=default) - - :return: true if successful - - -.. py:function:: mediaPlaySetLooping(enabled, tag) - - Set Looping - - :param bool enabled: default true - :param str tag: string identifying resource (default=default) - - :return: True if successful - -.. py:function:: mediaPlaySeek(msec, tag) - - Seek To Position - - :param int msec: default true - :param str tag: string identifying resource (default=default) - - :return: New Position (in ms) - -Get Information ------------------ -.. py:function:: mediaPlayInfo(tag) - - Information on current media - - :param str tag: string identifying resource (default=default) - - :return: Media Information - -.. py:function:: mediaPlayList() - - Lists currently loaded media - - :return: List of Media Tags - - -PreferencesFacade -========================= - -.. py:function:: prefGetValue(key, filename) - - Read a value from shared preferences - - :param str key: key - :param str filename(optional): Desired preferences file. If not defined, uses the default Shared Preferences. - - -.. py:function:: prefPutValue(key, value, filename) - - Write a value to shared preferences - - :param str key: key - :param str value: value - :param str filename(optional): Desired preferences file. If not defined, uses the default Shared Preferences. - -.. py:function:: prefGetAll(filename) - - Get list of Shared Preference Values - - :param str filename(optional): Desired preferences file. If not defined, uses the default Shared Preferences. - - -QPyInterfaceFacade -========================= - -.. py:function:: executeQPy(script) - - Execute a qpython script by absolute path - - :param str script: The absolute path of the qpython script - - :return: bool - - -TextToSpeechFacade -========================= - -.. py:function:: ttsSpeak(message) - - Speaks the provided message via TTS - - :param str message: message - -.. py:function:: ttsIsSpeaking() - - Returns True if speech is currently in progress - -EyesFreeFacade -========================= - - - - -BluetoothFacade -========================= - -.. py:function:: bluetoothActiveConnections() - - Returns active Bluetooth connections - - -.. py:function:: bluetoothWriteBinary(base64, connID) - - Send bytes over the currently open Bluetooth connection - - :param str base64: A base64 encoded String of the bytes to be sent - :param str connID(optional): Connection id - -.. py:function:: bluetoothReadBinary(bufferSize, connID) - - Read up to bufferSize bytes and return a chunked, base64 encoded string - - :param int bufferSize: default 4096 - :param str connID(optional): Connection id - -.. py:function:: bluetoothConnect(uuid, address) - - Connect to a device over Bluetooth. Blocks until the connection is established or fails - - :param str uuid: The UUID passed here must match the UUID used by the server device - :param str address(optional): The user will be presented with a list of discovered devices to choose from if an address is not provided - - :return: True if the connection was established successfully - -.. py:function:: bluetoothAccept(uuid, timeout) - - Listens for and accepts a Bluetooth connection. Blocks until the connection is established or fails - - :param str uuid: The UUID passed here must match the UUID used by the server device - :param int timeout: How long to wait for a new connection, 0 is wait for ever (default=0) - -.. py:function:: bluetoothMakeDiscoverable(duration) - - Requests that the device be discoverable for Bluetooth connections - - :param int duration: period of time, in seconds, during which the device should be discoverable (default=300) - -.. py:function:: bluetoothWrite(ascii, connID) - - Sends ASCII characters over the currently open Bluetooth connection - - :param str ascii: text - :param str connID: Connection id - -.. py:function:: bluetoothReadReady(connID) - - Sends ASCII characters over the currently open Bluetooth connection - - :param str ascii: text - :param str connID: Connection id - -.. py:function:: bluetoothRead(bufferSize, connID) - - Read up to bufferSize ASCII characters - - :param int bufferSize: default=4096 - :param str connID(optional): Connection id - -.. py:function:: bluetoothReadLine(connID) - - Read the next line - - :param str connID(optional): Connection id - -.. py:function:: bluetoothGetRemoteDeviceName(address) - - Queries a remote device for it's name or null if it can't be resolved - - :param str address: Bluetooth Address For Target Device - -.. py:function:: bluetoothGetLocalName() - - Gets the Bluetooth Visible device name - -.. py:function:: bluetoothSetLocalName(name) - - Sets the Bluetooth Visible device name, returns True on success - - :param str name: New local name - -.. py:function:: bluetoothGetScanMode() - - Gets the scan mode for the local dongle. - Return values: - -1 when Bluetooth is disabled. - 0 if non discoverable and non connectable. - 1 connectable non discoverable. - 3 connectable and discoverable. - -.. py:function:: bluetoothGetConnectedDeviceName(connID) - - Returns the name of the connected device - - :param str connID: Connection id - -.. py:function:: checkBluetoothState() - - Checks Bluetooth state - - :return: True if Bluetooth is enabled - -.. py:function:: toggleBluetoothState(enabled, prompt) - - Toggle Bluetooth on and off - - :param bool enabled: - :param str prompt: Prompt the user to confirm changing the Bluetooth state, default=true - - :return: True if Bluetooth is enabled - -.. py:function:: bluetoothStop(connID) - - Stops Bluetooth connection - - :param str connID: Connection id - -.. py:function:: bluetoothGetLocalAddress() - - Returns the hardware address of the local Bluetooth adapter - -.. py:function:: bluetoothDiscoveryStart() - - Start the remote device discovery process - - :return: true on success, false on error - -.. py:function:: bluetoothDiscoveryCancel() - - Cancel the current device discovery process - - :return: true on success, false on error - -.. py:function:: bluetoothIsDiscovering() - - Return true if the local Bluetooth adapter is currently in the device discovery process - - -SignalStrengthFacade -========================= -.. py:function:: startTrackingSignalStrengths() - - Starts tracking signal strengths - -.. py:function:: readSignalStrengths() - - Returns the current signal strengths - - :return: A map of gsm_signal_strength - -.. py:function:: stopTrackingSignalStrengths() - - Stops tracking signal strength - - -WebCamFacade -========================= - -.. py:function:: webcamStart(resolutionLevel, jpegQuality, port) - - Starts an MJPEG stream and returns a Tuple of address and port for the stream - - :param int resolutionLevel: increasing this number provides higher resolution (default=0) - :param int jpegQuality: a number from 0-10 (default=20) - :param int port: If port is specified, the webcam service will bind to port, otherwise it will pick any available port (default=0) - -.. py:function:: webcamAdjustQuality(resolutionLevel, jpegQuality) - - Adjusts the quality of the webcam stream while it is running - - :param int resolutionLevel: increasing this number provides higher resolution (default=0) - :param int jpegQuality: a number from 0-10 (default=20) - -.. py:function:: cameraStartPreview(resolutionLevel, jpegQuality, filepath) - - Start Preview Mode. Throws 'preview' events - - :param int resolutionLevel: increasing this number provides higher resolution (default=0) - :param int jpegQuality: a number from 0-10 (default=20) - :param str filepath: Path to store jpeg files - - :return: True if successful - -.. py:function:: cameraStopPreview() - - Stop the preview mode - - -UiFacade -========================= - -Dialog --------- -.. py:function:: dialogCreateInput(title, message, defaultText, inputType) - - Create a text input dialog - - :param str title: title of the input box - :param str message: message to display above the input box - :param str defaultText(optional): text to insert into the input box - :param str inputType(optional): type of input data, ie number or text - -.. py:function:: dialogCreatePassword(title, message) - - Create a password input dialog - - :param str title: title of the input box - :param str message: message to display above the input box - -.. py:function:: dialogGetInput(title, message, defaultText) - - Create a password input dialog - - :param str title: title of the input box - :param str message: message to display above the input box - :param str defaultText(optional): text to insert into the input box - -.. py:function:: dialogGetPassword(title, message) - - Queries the user for a password - - :param str title: title of the password box - :param str message: message to display above the input box - -.. py:function:: dialogCreateSeekBar(start, maximum, title) - - Create seek bar dialog - - :param int start: default=50 - :param int maximum: default=100 - :param int title: title - -.. py:function:: dialogCreateTimePicker(hour, minute, is24hour) - - Create time picker dialog - - :param int hour: default=0 - :param int miute: default=0 - :param bool is24hour: default=false - -.. py:function:: dialogCreateDatePicker(year, month, day) - - Create date picker dialog - - :param int year: default=1970 - :param int month: default=1 - :param int day: default=1 - - -NFC -------------- -**Data structs** -*QPython NFC json result* -:: - - { - "role": , # could be self/master/slave - "stat": , # could be ok / fail / cancl - "message": - } - -**APIs** - -.. py:function:: dialogCreateNFCBeamMaster(title, message, inputType) - - Create a dialog where you could create a qpython beam master - - :param str title: title of the input box - :param str message: message to display above the input box - :param str inputType(optional): type of input data, ie number or text - -.. py:function:: NFCBeamMessage(content, title, message) - - Create a dialog where you could create a qpython beam master - - :param str content: message you want to sent - :param str title: title of the input box - :param str message: message to display above the input box - :param str inputType(optional): type of input data, ie number or text - -.. py:function:: dialogCreateNFCBeamSlave(title, message) - - Create a qpython beam slave - - :param str title: title of the input box - :param str message: message to display above the input box - -Progress --------------- -.. py:function:: dialogCreateSpinnerProgress(message, maximumProgress) - - Create a spinner progress dialog - - :param str message(optional): message - :param int maximunProgress(optional): dfault=100 - -.. py:function:: dialogSetCurrentProgress(current) - - Set progress dialog current value - - :param int current: current - -.. py:function:: dialogSetMaxProgress(max) - - Set progress dialog maximum value - - :param int max: max - - -.. py:function:: dialogCreateHorizontalProgress(title, message, maximumProgress) - - Create a horizontal progress dialog - - :param str title(optional): title - :param str message(optional): message - :param int maximunProgress(optional): dfault=100 - - -Alert ----------- -.. py:function:: dialogCreateAlert(title, message) - - Create alert dialog - - :param str title(optional): title - :param str message(optional): message - :param int maximunProgress(optional): dfault=100 - - -Dialog Control ---------------- -.. py:function:: dialogSetPositiveButtonText(text) - - Set alert dialog positive button text - - :param str text: text - -.. py:function:: dialogSetNegativeButtonText(text) - - Set alert dialog negative button text - - :param str text: text - -.. py:function:: dialogSetNeutralButtonText(text) - - Set alert dialog button text - - :param str text: text - -.. py:function:: dialogSetItems(items) - - Set alert dialog list items - - :param list items: items - -.. py:function:: dialogSetSingleChoiceItems(items, selected) - - Set alert dialog list items - - :param list items: items - :param int selected: selected item index (default=0) - -.. py:function:: dialogSetMultiChoiceItems(items, selected) - - Set dialog multiple choice items and selection - - :param list items: items - :param int selected: selected item index (default=0) - -.. py:function:: addContextMenuItem(label, event, eventData) - - Adds a new item to context menu - - :param str label: label for this menu item - :param str event: event that will be generated on menu item click - :param object eventData: event object - -.. py:function:: addOptionsMenuItem(label, event, eventData, iconName) - - Adds a new item to context menu - - :param str label: label for this menu item - :param str event: event that will be generated on menu item click - :param object eventData: event object - :param str iconName: Android system menu icon, see http://developer.android.com/reference/android/R.drawable.html - -.. py:function:: dialogGetResponse() - - Returns dialog response - -.. py:function:: dialogGetSelectedItems() - - This method provides list of items user selected - -.. py:function:: dialogDismiss() - - Dismiss dialog - -.. py:function:: dialogShow() - - Show dialog - - -Layout ---------- -.. py:function:: fullShow(layout) - - Show Full Screen - - :param string layout: String containing View layout - -.. py:function:: fullDismiss() - - Dismiss Full Screen - -.. py:function:: fullQuery() - - Get Fullscreen Properties - -.. py:function:: fullQueryDetail(id) - - Get fullscreen properties for a specific widget - - :param str id: id of layout widget - -.. py:function:: fullSetProperty(id) - - Set fullscreen widget property - - :param str id: id of layout widget - :param str property: name of property to set - :param str value: value to set property to - -.. py:function:: fullSetList(id, list) - - Attach a list to a fullscreen widget - - :param str id: id of layout widget - :param list list: List to set - -.. py:function:: fullKeyOverride(keycodes, enable) - - Override default key actions - - :param str keycodes: id of layout widget - :param bool enable: List to set (default=true) - - - -WebView ------------ -.. py:function:: webViewShow() - - Display a WebView with the given URL - - :param str url: url - :param bool wait(optional): block until the user exits the WebView - -USB Host Serial Facade -====================== - -*QPython 1.3.1+ and QPython3 1.0.3+ contains this feature* - -SL4A Facade for USB Serial devices by Android USB Host API. - - -It control the USB-Serial like devices -from Andoroid which has USB Host Controller . - -The sample -`demonstration is also available at youtube video `_ - - -Requirements -------------- -* Android device which has USB Host controller (and enabled in that firmware). -* Android 4.0 (API14) or later. -* USB Serial devices (see [Status](#Status)). -* USB Serial devices were not handled by Android kernel. - - > I heard some android phone handle USB Serial devices - > make /dev/ttyUSB0 in kernel level. - > In this case, Android does not be able to handle the device - > from OS level. - - please check Android Applications be able to grab the target USB Devices, - such as `USB Device Info `_. - -Status ---------------- -* probably work with USB CDC, like FTDI, Arduino or else. - -* 2012/09/10: work with 78K0F0730 device (new RL78) with Tragi BIOS board. - - `M78K0F0730 `_ - -* 2012/09/24: work with some pl2303 devcies. - -Author -------- -This facade developped by `Kuri65536 `_ -you can see the commit log in it. - - -APIs --------- -.. py:function:: usbserialGetDeviceList() - - Returns USB devices reported by USB Host API. - - :return: Returns "Map of id and string information Map - - -.. py:function:: usbserialDisconnect(connID) - - Disconnect all USB-device - - :param str connID: connection ID - -.. py:function:: usbserialActiveConnections() - - Returns active USB-device connections. - - :return: Returns "Active USB-device connections by Map UUID vs device-name." - - -.. py:function:: usbserialWriteBinary(base64, connID) - - Send bytes over the currently open USB Serial connection. - - :param str base64: - :param str connId: - -.. py:function:: usbserialReadBinary(bufferSize, connID) - - Read up to bufferSize bytes and return a chunked, base64 encoded string - - :param int bufferSize: - :param str connId: - -.. py:function:: usbserialConnect(hash, options) - - Connect to a device with USB-Host. request the connection and exit - - :param str hash: - :param str options: - - :return: Returns messages the request status - -.. py:function:: usbserialHostEnable() - - Requests that the host be enable for USB Serial connections. - - :return: True if the USB Device is accesible - -.. py:function:: usbserialWrite(String ascii, String connID) - - Sends ASCII characters over the currently open USB Serial connection - - :param str ascii: - :param str connID: - -.. py:function:: usbserialReadReady(connID) - - :param str connID: - - :return: True if the next read is guaranteed not to block - - -.. py:function:: usbserialRead(connID, bufferSize) - - Read up to bufferSize ASCII characters. - - :param str connID: - :param int bufferSize: - -.. py:function:: usbserialGetDeviceName(connID) - - Queries a remote device for it's name or null if it can't be resolved - - :param str connID: diff --git a/docs/_sources/en/guide_contributors.rst.txt b/docs/_sources/en/guide_contributors.rst.txt deleted file mode 100644 index 2078554..0000000 --- a/docs/_sources/en/guide_contributors.rst.txt +++ /dev/null @@ -1,40 +0,0 @@ -Welcome contribute -=============================== -Thanks for supporting this project, QPython is a greate project, and we hope you join us to help with make it more greater. - -Please send email to us(support at qpython.org) to introduce youself briefly, and which part do you want to contribute. - -Then we will consider to invite you to join the qpython-collaborator group. - -How to help with test -======================== - -.. toctree:: - :maxdepth: 2 - - guide_contributors_test - -How to contribute documentation -================================ - -How to translate -================================ - - -How to launch a local QPython users community -================================================================ - -How to organise a local qpython user sharing event ---------------------------------------------------- - -How to became the developer member -==================================== - -How to develop qpython built-in programs ----------------------------------------- - -How to sponsor QPython project -==================================== - - -More detail coming soon... diff --git a/docs/_sources/en/guide_contributors_test.rst.txt b/docs/_sources/en/guide_contributors_test.rst.txt deleted file mode 100644 index c4c0093..0000000 --- a/docs/_sources/en/guide_contributors_test.rst.txt +++ /dev/null @@ -1,33 +0,0 @@ -QPython is keeping develop! -If you are interested about what we are doing and want to make some contribution, follow this guide to make this project better! - - -Join the tester community --------------------------- -We create a G+ community where you could report bugs or offer suggestions -> `QPython tester G+ community(For QPython testers) `_ - -Join us now! - -.. image:: ../_static/1.png - :scale: 50 % - - -Become a tester ----------------- -After join the tester community, you could become a tester! -Click this and become a tester -> `I'm ready for test `_ - -.. image:: ../_static/2.png - -Report or suggest -------------------- -If you find out any bugs or have any cool idea about QPython, please let us know about it. -You could write down your suggestion or bug report on the community. - -.. image:: ../_static/3.png - - - -Feedback ---------- -Send your feedback to QPython using the contact information: support@qpython.org diff --git a/docs/_sources/en/guide_developers.rst.txt b/docs/_sources/en/guide_developers.rst.txt deleted file mode 100644 index add6f43..0000000 --- a/docs/_sources/en/guide_developers.rst.txt +++ /dev/null @@ -1,75 +0,0 @@ -Android -============================== -Android part offers the common Python user interaction functions, like console, editor, file browsing, QRCode reader etc. - - -Console ---------- - - -Editor ------------ - - -File browsing ---------------- - - -QRCode reader ------------------------- - - -QSL4A -============================== -QSL4A is the folk of SL4A for QPython, which allows users being able to program with Python script for android. - - -QPython Core -============================== -Besides Python core, QPython core offer three types programming mode also. - -Python 2.x ------------ - -Python 3.x ------------ - -Console program ---------------- - -Kivy program ------------- - -WebApp program --------------- - - - -Pip and libraries -============================== -Pip and libraries offer great expansion ability for QPython. - -Pip ---------- - -Libraries ----------- - - -Quick tools -============================== -Quick tools offers better guide for using QPython well for different users. - -QPython API ------------- - -FTP --------- - - -QPY.IO (Enterprise service) -============================== -It's a enterprise service which aim at offering quick android development delivery with QPython. - -It's QPython's maintainers' main paid service, but not a opensource project. - diff --git a/docs/_sources/en/guide_extend.rst.txt b/docs/_sources/en/guide_extend.rst.txt deleted file mode 100644 index bda077e..0000000 --- a/docs/_sources/en/guide_extend.rst.txt +++ /dev/null @@ -1,131 +0,0 @@ -QPython Open API -===================================================== -QPython has an open activity which allow you run qpython from outside. - -The MPyAPI's definition seems like the following: - -:: - - - - - - - - - - - - - - - - - - - - - - - - - - - -**So, with it's help, you could:** - -Share some content to QPython's scripts ---------------------------------------------- -You could choose some content in some app, and share to qpython's script, then you could handle the content with the **sys.argv[2]** - -`Watch the demo video on YouTube `_ - - -Run QPython's script from your own application ------------------------------------------------------- - -You can call QPython to run some script or python code in your application by call this activity, like the following sample: - -:: - - // code sample shows how to call qpython API - String extPlgPlusName = "org.qpython.qpy"; // QPython package name - Intent intent = new Intent(); - intent.setClassName(extPlgPlusName, "org.qpython.qpylib.MPyApi"); - intent.setAction(extPlgPlusName + ".action.MPyApi"); - - Bundle mBundle = new Bundle(); - mBundle.putString("app", "myappid"); - mBundle.putString("act", "onPyApi"); - mBundle.putString("flag", "onQPyExec"); // any String flag you may use in your context - mBundle.putString("param", ""); // param String param you may use in your context - - /* - * The Python code we will run - */ - String code = "import androidhelper\n" + - "droid = androidhelper.Android()\n" + - "line = droid.dialogGetInput()\n" + - "s = 'Hello %s' % line.result\n" + - "droid.makeToast(s)\n" - - mBundle.putString("pycode", code); - intent.putExtras(mBundle); - startActivityForResult(intent, SCRIPT_EXEC_PY); - ... - - - - // And you can handle the qpython callabck result in onActivityResult - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == SCRIPT_EXEC_PY) { - if (data!=null) { - Bundle bundle = data.getExtras(); - String flag = bundle.getString("flag"); - String param = bundle.getString("param"); - String result = bundle.getString("result"); // Result your Pycode generate - Toast.makeText(this, "onQPyExec: return ("+result+")", Toast.LENGTH_SHORT).show(); - } else { - Toast.makeText(this, "onQPyExec: data is null", Toast.LENGTH_SHORT).show(); - - } - } - } - - -`Checkout the full project from github `_ - -And there is `a production application - QPython Plugin for Tasker `_ - -QPython Online Service -===================================================== - -Now the QPython online service only open for QPython, not QPython3. - - -QPypi ---------------------------------------------------------- -Can I install some packages which required pre-compiled ? -Sure, you could install some pre-compiled packages from QPypi, you could find it through "Libraries" on dashboard. - - -.. image:: ../_static/guide_extend_pic2.png - -If you couldn't found the package here, you could send email to river@qpython.org . - -QPY.IO ---------------------------------------------------- -Can I build an independent APK from QPython script? - -Sure you can. now the service is **in BETA**, it's a challenging thing. We will publish it as a online service, for we want to let the development process is simple, you don't need to own the development environment set up when you want to build a application. - - -.. image:: ../_static/guide_extend_pic1.png - -If you want to try it out or have some business proposal, please contact with us by sending email to river@qpython.org . diff --git a/docs/_sources/en/guide_helloworld.rst.txt b/docs/_sources/en/guide_helloworld.rst.txt deleted file mode 100644 index ae6d11f..0000000 --- a/docs/_sources/en/guide_helloworld.rst.txt +++ /dev/null @@ -1,121 +0,0 @@ -Writing "Hello World" -======================== - - -Hello world ----------------- -.. image:: ../_static/guide_helloworld_pic1.png - :alt: hello world - -Well, after you became a bit more familiar with QPython, let's create our first program in QPython. Obviously, it will be `helloworld.py`. ;) - -Start QPython, open editor and enter the following code: - -:: - - import androidhelper - droid = androidhelper.Android() - droid.makeToast('Hello, Username!') - -No wonder, it's just similar to any other hello-world program. When executed, it just shows pop-up message on the screen (see screenshot on the top). Anyway, it's a good example of QPython program. - -SL4A library ------------- - -It begins with *import androidhelper* — the most useful module in QPython, which encapsulates almost all interface with Android, available in Python. Any script developed in QPython starts with this statement (at least if it claims to communicate with user). Read more about Python library `here `_ and import statement `here `_ - -By the way, if you're going to make your script compatible with SL4A, you should replace the first line with the following code (and use `android` instead `androidhelper` further in the program): - -:: - -> try: -> import androidhelper as android -> except ImportError: -> import android - -Ok, next we're creating an object `droid` (actually a class), it is necessary to call RPC functions in order to communicate with Android. - -And the last line of our code calls such function, `droid.makeToast()`, which shows a small pop-up message (a "toast") on the screen. - -Well, let's add some more functionality. Let it ask the user name and greet them. - -More samples ---------------- -We can display a simple dialog box with the title, prompt, edit field and buttons **Ok** and **Cancel** using `dialogGetInput` call. Replace the last line of your code and save it as `hello1.py`: - -:: - - import androidhelper - droid = androidhelper.Android() - respond = droid.dialogGetInput("Hello", "What is your name?") - -Well, I think it should return any respond, any user reaction. That's why I wrote `respond = ...`. But what the call actually returns? Let's check. Just add `print` statement after the last line: - -:: - - import androidhelper - droid = androidhelper.Android() - respond = droid.dialogGetInput("Hello", "What is your name?") - print respond - -Then save and run it... - -Oops! Nothing printed? Don't worry. Just pull notification bar and you will see "QPython Program Output: hello1.py" — tap it! - - -As you can see, `droid.dialogGetInput()` returns a JSON object with three fields. We need only one — `result` which contains an actual input from user. - -Let's add script's reaction: - -:: - - import androidhelper - droid = androidhelper.Android() - respond = droid.dialogGetInput("Hello", "What is your name?") - print respond - message = 'Hello, %s!' % respond.result - droid.makeToast(message) - -Last two lines (1) format the message and (2) show the message to the user in the toast. See `Python docs `_ if you still don't know what `%` means. - -Wow! It works! ;) - -Now I'm going to add a bit of logic there. Think: what happen if the user clicks **Cancel** button, or clicks **Ok** leaving the input field blank? - -You can play with the program checking what contains `respond` variable in every case. - -First of all, I want to put text entered by user to a separate variable: `name = respond.result`. Then I'm going to check it, and if it contains any real text, it will be considered as a name and will be used in greeting. Otherwise another message will be shown. Replace fifth line `message = 'Hello, %s!' % respond.result` with the following code: - -:: - - name = respond.result - if name: - message = 'Hello, %s!' % name - else: - message = "Hey! And you're not very polite, %Username%!" - -Use **<** and **>** buttons on the toolbar to indent/unindent lines in if-statement (or just use space/backspace keys). You can read more about indentation in Python `here `_; if-statement described `here `_. - -First of all, we put user input to the variable `name`. Then we check does `name` contain anything? In case the user left the line blank and clicked **Ok**, the return value is empty string `''`. In case of **Cancel** button pressed, the return value is `None`. Both are treated as false in if-statement. So, only if `name` contans anything meaninful, then-statement is executed and greeting "Hello, ...!" shown. In case of empty input the user will see "Hey! And you're not very polite, %Username%!" message. - -Ok, here is the whole program: - -:: - - import androidhelper - droid = androidhelper.Android() - respond = droid.dialogGetInput("Hello", "What is your name?") - print respond - name = respond.result - if name: - message = 'Hello, %s!' % name - else: - message = "Hey! And you're not very polite, %Username%!" - droid.makeToast(message) - - -`Thanks dmych offer the first draft in his blog `_ - - - - diff --git a/docs/_sources/en/guide_howtostart.rst.txt b/docs/_sources/en/guide_howtostart.rst.txt deleted file mode 100644 index 8575d63..0000000 --- a/docs/_sources/en/guide_howtostart.rst.txt +++ /dev/null @@ -1,133 +0,0 @@ - - -QPython: How To Start -======================== -Now, I will introduce the QPython's features through it's interfaces. - -1. Dashboard ------------------- - -.. image:: ../_static/guide_howtostart_pic1.png - :alt: QPython start - - -After you installed QPython, start it in the usual way by tapping its icon in the menu. Screenshot on the top of this post shows what you should see when QPython just started. - -**Start button** - -By tapping the big button with Python logo in the center of the screen you can - -**Launch your local script or project** - -*Get script from QR code* (funny brand new way to share and distribute your code, you can create QRCode through `QPython's QRCode generator `_ - -Now you can install many 3rd libaries ( pure python libraries mainly ) through pip_console.py script. - -If you want QPython to run some script of project when you click the start button, you can make it by setting default program in setting activity. - - -**Developer kit dashboard** - -If you swipe to the left instead of tapping, you will see another (second) main screen of QPython *(Pic. 2)*. As for me, it is much more useful and comfortable for developer. - -.. image:: ../_static/guide_howtostart_pic2.png - :alt: QPython develop dashboard - - -Tools available here: - -* **Console** — yes, it's regular Python console, feel free to comunicate with interpreter directly -* **Editor** — QPython has a nice text editor integrated with the rest, you can write code and run it without leaving the application -* **My QPython** — here you can find your scripts and projects -* **System** — maintain libraries and components: install and uninstall them -* **Package Index** opens the page `QPyPI `_ in browser allowing to install packages listed there -* **Community** leads to `QPython.org `_ page. Feel free to join or ask&answer questions in the QPython community. - -By long clicking on the console or editor, you have chance to create the shortcut on desktop which allow you enter console or editor directly. - -Next, let's see the console and the editor. - -2. Console and editor -------------------------- - -.. image:: ../_static/guide_howtostart_pic3.png - :alt: QPython console - - -As I said before, there is an ordinary Python console. Many people usually use it to explore objects' properties, consult about syntax and test their ideas. You can type your commands directly and Python interpreter will execute them. You can open additional consoles by tapping the plus button (1) and usedrop-down list on the upper left corner to switch between consoles (2). To close the console just tap the close button (3). - -.. image:: ../_static/guide_howtostart_pic4.png - :alt: QPython notification - - -Please note, there will be notification in the notification bar unless you explicitly close the console and you always can reach the open console by tapping the notification. - - - -.. image:: ../_static/guide_howtostart_pic5.png - :alt: QPython editor - - -The editor allows you obviously (hello Cap!) enter and modify text. Here you can develop your scripts, save them and execute. The editor supports Python syntax highlighting and shows line numbers (there is no ability to go to the line by number though). *(above picture)* - -When typing, you can easily control indentation level (which is critical for Python code) using two buttons on the toolbar (1). Next buttons on the toolbar are **Save** and **Save As** (2), then goes **Run** (3), **Undo**, **Search**, **Recent Files** and **Settings** buttons. Also there are two buttons on the top: **Open** and **New** (5). - -When saving, don't forget to add `.py` estension to the file name since the editor don't do it for you. - -3. Programs --------------------- -You can find the scripts or projects in My QPython. My QPython contains the scripts and Projects. - -By long clicking on script or project, you have chance to create the shortcut for the script or project. Once you have created the shortcuts on desktop, you can directly run the script or project from desktop. - - -**Scripts** -Scripts : A single script. The scripts are in the /sdcard/com.hipipal.qpyplus/scripts directory. -If you want your script could be found in My QPython, please upload it to this directory. - -When you click the script, you can choose the following actions: - -- Run : Run the script -- Open : Edit the script with built-in editor -- Rename : Rename the script -- Delete : Delete the script - -**Projects** -Projects : A directory which should contain the main.py as the project's default launch script, and you can put other dependency 3rd libraries or resources in the same directory, if you want your project could be found in My QPython, please upload them into this directory. - -When you click on the project, you can choose the following actions: - -- Run : run the project -- Open : use it to explore project's resources -- Rename : Rename the project -- Delete : Delete the project - -4. Libraries --------------- - -By installing 3rd libraries, you can extend your qpython's programming ability quickly. There are some ways to install libraries. - -**QPypi** - -You can install some pre-built libraries from QPypi, like numpy etc. - -**Pip console** - -You can install most pure python libraries through pip console. - - -Besides the two ways above, you could copy libraries into the /sdcard/qpython/lib/python2.7/site-packages in your device. - - -*Notice:* -Some libraries mixed with c/c++ files could not be install through pip console for the android lacks the compiler environment, you could ask help from qpython developer team. - - -5. Community --------------- -It will redirect to the QPython.org, including somthe source of this documentation, and there are some qpython user communities' link, many questions of qpython usage or programming could be asked in the community. - - - - -`Thanks dmych offer the first draft in his blog `_ diff --git a/docs/_sources/en/guide_libraries.rst.txt b/docs/_sources/en/guide_libraries.rst.txt deleted file mode 100644 index e4bb3ef..0000000 --- a/docs/_sources/en/guide_libraries.rst.txt +++ /dev/null @@ -1,292 +0,0 @@ -QPython built-in Libraries -========================== -QPython is using the Python 2.7.2 and it support most Python stardard libraries. And you could see their documentation through Python documentation. - -QPython dynload libraries --------------------------------------------------------------- -Just like Python, QPython contains python built-in .so libraries. - -Usually, you don't need to import them manually, they were used in stardard libraries, and could be imported automatically. - -* _codecs_cn.so -* _codecs_hk.so -* _codecs_iso2022.so -* _codecs_jp.so -* _codecs_kr.so -* _codecs_tw.so -* _csv.so -* _ctypes.so -* _ctypes_test.so -* _hashlib.so -* _heapq.so -* _hotshot.so -* _io.so -* _json.so -* _lsprof.so -* _multibytecodec.so -* _sqlite3.so -* _ssl.so -* _testcapi.so -* audioop.so -* future_builtins.so -* grp.so -* mmap.so -* resource.so -* syslog.so -* termios.so -* unicodedata.so - -QPython stardard libraries ---------------------------- -The following libraries are the stardard QPython libraries which are the same as Python: - -- `BaseHTTPServer.py `_ -- `binhex.py `_ -- `fnmatch.py `_ -- mhlib.py -- quopri.py -- sysconfig.py -- Bastion.py -- bisect.py -- formatter.py -- mimetools.py -- random.py -- tabnanny.py -- CGIHTTPServer.py -- bsddb -- fpformat.py -- mimetypes.py -- re.py -- tarfile.py -- ConfigParser.py -- cProfile.py -- fractions.py -- mimify.py -- repr.py -- telnetlib.py -- Cookie.py -- calendar.py -- ftplib.py -- modulefinder.py -- rexec.py -- tempfile.py -- DocXMLRPCServer.py -- cgi.py -- functools.py -- multifile.py -- rfc822.py -- textwrap.py -- HTMLParser.py -- cgitb.py -- genericpath.py -- mutex.py -- rlcompleter.py -- this.py -- chunk.py -- getopt.py -- netrc.py -- robotparser.py -- threading.py -- MimeWriter.py -- cmd.py -- getpass.py -- new.py -- runpy.py -- timeit.py -- Queue.py -- code.py -- gettext.py -- nntplib.py -- sched.py -- toaiff.py -- SimpleHTTPServer.py -- codecs.py -- glob.py -- ntpath.py -- sets.py -- token.py -- SimpleXMLRPCServer.py -- codeop.py -- gzip.py -- nturl2path.py -- sgmllib.py -- tokenize.py -- SocketServer.py -- collections.py -- hashlib.py -- numbers.py -- sha.py -- trace.py -- StringIO.py -- colorsys.py -- heapq.py -- opcode.py -- shelve.py -- traceback.py -- UserDict.py -- commands.py -- hmac.py -- optparse.py -- shlex.py -- tty.py -- UserList.py -- compileall.py -- hotshot -- os.py -- shutil.py -- types.py -- UserString.py -- compiler -- htmlentitydefs.py -- os2emxpath.py -- site.py -- unittest -- _LWPCookieJar.py -- config -- htmllib.py -- smtpd.py -- urllib.py -- _MozillaCookieJar.py -- contextlib.py -- httplib.py -- pdb.py -- smtplib.py -- urllib2.py -- __future__.py -- cookielib.py -- ihooks.py -- pickle.py -- sndhdr.py -- urlparse.py -- __phello__.foo.py -- copy.py -- imaplib.py -- pickletools.py -- socket.py -- user.py -- _abcoll.py -- copy_reg.py -- imghdr.py -- pipes.py -- sqlite3 -- uu.py -- _pyio.py -- csv.py -- importlib -- pkgutil.py -- sre.py -- uuid.py -- _strptime.py -- ctypes -- imputil.py -- plat-linux4 -- sre_compile.py -- warnings.py -- _threading_local.py -- dbhash.py -- inspect.py -- platform.py -- sre_constants.py -- wave.py -- _weakrefset.py -- decimal.py -- io.py -- plistlib.py -- sre_parse.py -- weakref.py -- abc.py -- difflib.py -- json -- popen2.py -- ssl.py -- webbrowser.py -- aifc.py -- dircache.py -- keyword.py -- poplib.py -- stat.py -- whichdb.py -- antigravity.py -- dis.py -- lib-tk -- posixfile.py -- statvfs.py -- wsgiref -- anydbm.py -- distutils -- linecache.py -- posixpath.py -- string.py -- argparse.py -- doctest.py -- locale.py -- pprint.py -- stringold.py -- xdrlib.py -- ast.py -- dumbdbm.py -- logging -- profile.py -- stringprep.py -- xml -- asynchat.py -- dummy_thread.py -- macpath.py -- pstats.py -- struct.py -- xmllib.py -- asyncore.py -- dummy_threading.py -- macurl2path.py -- pty.py -- subprocess.py -- xmlrpclib.py -- atexit.py -- email -- mailbox.py -- py_compile.py -- sunau.py -- zipfile.py -- audiodev.py -- encodings -- mailcap.py -- pyclbr.py -- sunaudio.py -- base64.py -- filecmp.py -- markupbase.py -- pydoc.py -- symbol.py -- bdb.py -- fileinput.py -- md5.py -- pydoc_data -- symtable.py - - - -Python 3rd Libraries -========================== - -- `BeautifulSoup.py(3) `_ -- pkg_resources.py -- androidhelper -- plyer -- `bottle.py `_ -- qpy.py -- qpythoninit.py -- setuptools -- `pip `_ - - -Androidhelper APIs -======================== -To simplify QPython SL4A development in IDEs with a -"hepler" class derived from the default Android class containing -SL4A facade functions & API documentation - - -.. toctree:: - :maxdepth: 2 - - guide_androidhelpers diff --git a/docs/_sources/en/guide_program.rst.txt b/docs/_sources/en/guide_program.rst.txt deleted file mode 100644 index 895615c..0000000 --- a/docs/_sources/en/guide_program.rst.txt +++ /dev/null @@ -1,191 +0,0 @@ -QPython's main features -==================================== - -**With QPython, you could build android applications with android application and script language now.** - - -Why should I choose QPython ------------------------------------------------- -The smartphone is becomming people's essential information & technical assitant, so an flexiable script engine could help people complete most jobs efficiently without complex development. - -QPython offer **an amazing developing experience**, with it's help, you could implement the program easily without complex installing IDE, compiling, package progress etc. - -QPython's main features -------------------------- -You can do most jobs through QPython just like the way that Python does on PC/Laptop. - - -**Libraries** - -- QPython supports most stardard Python libraries. - -- QPython supports many 3rd Python libraries which implemented with pure Python code. - -- QPython supports some Python libraries mixed with C/C++ code which pre-compiled by QPython develop team. - -- QPython allows you put on the libraries by yourself. - -Besides these, QPython offers some extra features which Python doesn't offer, Like: - -- Android APIs Access(Like SMS, GPS, NFC, BLUETOOTH etc) - -*Why QPython require so many permissions?* - -QPython need these permissions to access Android's API. - - -**Runtime modes** - -QPython supports several runtime modes for android. - -**Console mode** - -It's the default runtime mode in QPython, it's very common in PC/laptop. - - -**Kivy mode** - -QPython supports `Kivy `_ as the GUI programming solution. - - -Kivy is an open source Python library for rapid development of applications that make use of innovative user interfaces, such as multi-touch apps. - -Your device should support opengl2.0 for supporting kivy mode. - -By insert into the following header in your script, you can let your script run with kivy mode. - -:: - - #qpy:kivy - - -*An kivy program in QPython sample* - -:: - - #qpy:kivy - from kivy.app import App - from kivy.uix.button import Button - - class TestApp(App): - def build(self): - return Button(text='Hello World') - - TestApp().run() - - -If your library require the opengl driver, you shoule declare the kivy mode header in your script, like the jnius. - -*NOTE: QPython3 didn't support kivy mode yet, we have plan to support it in the future* - -**WebApp mode** - -We recommend you implement WebApp with QPython for it offer the easy to accomplish UI and Take advantage of Python's fast programming strong point. - -WebApp will start a webview in front, and run a python web service background. -You could use *bottle*(QPython built-in library) to implement the web service, or you could install *django* / *flask* framework also. - - -By insert into the following header in your script, you can let your script run with webapp mode. - -:: - - #qpy:webapp: - #qpy: - #qpy:// - -For example - -:: - - #qpy:webapp:Hello QPython - #qpy://localhost:8080/hello - - -The previous should start a webview which should load the *http://localhost:8080/hello* as the default page, and the webview will keep the titlebar which title is "Hello QPython", if you add the *#qpy:fullscreen* it will hide the titlebar. - - -:: - - #qpy:webapp:Hello Qpython - #qpy://127.0.0.1:8080/ - """ - This is a sample for qpython webapp - """ - - from bottle import Bottle, ServerAdapter - from bottle import run, debug, route, error, static_file, template - - - ######### QPYTHON WEB SERVER ############### - - class MyWSGIRefServer(ServerAdapter): - server = None - - def run(self, handler): - from wsgiref.simple_server import make_server, WSGIRequestHandler - if self.quiet: - class QuietHandler(WSGIRequestHandler): - def log_request(*args, **kw): pass - self.options['handler_class'] = QuietHandler - self.server = make_server(self.host, self.port, handler, **self.options) - self.server.serve_forever() - - def stop(self): - #sys.stderr.close() - import threading - threading.Thread(target=self.server.shutdown).start() - #self.server.shutdown() - self.server.server_close() #<--- alternative but causes bad fd exception - print "# qpyhttpd stop" - - - ######### BUILT-IN ROUTERS ############### - @route('/__exit', method=['GET','HEAD']) - def __exit(): - global server - server.stop() - - @route('/assets/') - def server_static(filepath): - return static_file(filepath, root='/sdcard') - - - ######### WEBAPP ROUTERS ############### - @route('/') - def home(): - return template('

Hello {{name}} !

'+ \ - 'View source',name='QPython') - - - ######### WEBAPP ROUTERS ############### - app = Bottle() - app.route('/', method='GET')(home) - app.route('/__exit', method=['GET','HEAD'])(__exit) - app.route('/assets/', method='GET')(server_static) - - try: - server = MyWSGIRefServer(host="127.0.0.1", port="8080") - app.run(server=server,reloader=False) - except Exception,ex: - print "Exception: %s" % repr(ex) - - -If you want the webapp could be close when you exit the webview, you have to define the *@route('/__exit', method=['GET','HEAD'])* method , for the qpython will request the *http://localhost:8080/__exit* when you exit the webview. So you can release other resource in this function. - -.. image:: ../_static/guide_program_pic1.png - :alt: QPython WebApp Sample - -*Running screenshot* - - -In the other part of the code, you could implement a webserver whish serve on localhost:8080 and make the URL /hello implement as your webapp's homepage. - - -**Q mode** - -If you don't want the QPython display some UI, pelase try to use the QScript mode, it could run a script background, just insert the following header into your script: - -:: - - #qpy:qpyapp diff --git a/docs/_sources/en/qpypi.rst.txt b/docs/_sources/en/qpypi.rst.txt deleted file mode 100644 index da142e5..0000000 --- a/docs/_sources/en/qpypi.rst.txt +++ /dev/null @@ -1,49 +0,0 @@ -QPYPI -====== -You can extend your QPython capabilities by installing packages. -Because of different computer architectures, we cannot guarantee that QPYPI includes all packages in PYPI. -If you want us to support a package that is not currently supported, you can raise an issue in the QPYPI project - - -QPySLA Package --------------- - -qsl4ahelper ->>>>>>>>>>>>>>> -It extends qpysl4a's APIs. Now the below project depends on it. -https://github.com/qpython-android/qpy-calcount - - -AIPY Packages ----------------- - -AIPY is a high-level AI learning app, based on related libraries like Numpy, Scipy, theano, keras, etc.... It was developed with a focus on helping you learn and practise AI programming well and fast. - -Numpy ->>>>>>> -NumPy is the fundamental package needed for scientific computing with Python. This package contains: - -:: - - a powerful N-dimensional array object - sophisticated (broadcasting) functions - basic linear algebra functions - basic Fourier transforms - sophisticated random number capabilities - tools for integrating Fortran code - tools for integrating C/C++ code - - -Scipy ->>>>>>>> -SciPy refers to several related but distinct entities: - -:: - - The SciPy ecosystem, a collection of open source software for scientific computing in Python. - The community of people who use and develop this stack. - Several conferences dedicated to scientific computing in Python - SciPy, EuroSciPy and SciPy.in. - The SciPy library, one component of the SciPy stack, providing many numerical routines. - -Other ------- diff --git a/docs/_sources/en/qpython3.rst.txt b/docs/_sources/en/qpython3.rst.txt deleted file mode 100644 index 291d604..0000000 --- a/docs/_sources/en/qpython3.rst.txt +++ /dev/null @@ -1,53 +0,0 @@ -# About QPython 3L -QPython is the Python engine for android. It contains some amazing features such as Python interpreter, runtime environment, editor and QPYI and integrated SL4A. It makes it easy for you to use Python on Android. And it's FREE. - -QPython already has millions of users worldwide and it is also an open source project. - -For different usage scenarios, QPython has two branches, namely QPython Ox and 3x. - -QPython Ox is mainly aimed at programming learners, and it provides more friendly features for beginners. QPython 3x is mainly for experienced Python users, and it provides some advanced technical features. - -This is the QPython 3L, it is the only Python interpreter which works under android 4.0 in google play. - -# Amazing Features -- Offline Python 3 interpreter: no Internet is required to run Python programs -- It supports running multiple types of projects, including: console program, SL4A program, webapp program -- Convenient QR code reader for transferring codes to your phone -- QPYPI and a custom repository for prebuilt wheel packages for enhanced scientific libraries, such as numpy, scipy, matplotlib, scikit-learn etc -- Easy-to-use editor -- INTEGRATED & EXTENDED SCRIPT LAYER FOR ANDROID LIBRARY (SL4A): IT LETS YOU DRIVE THE ANDROID WORK WITH PYTHON -- Good documentation and customer support - - -# SL4A Features -With SL4A features, you can use Python programming to control Android work: - -- Android Apps API, such as: Application, Activity, Intent & startActivity, SendBroadcast, PackageVersion, System, Toast, Notify, Settings, Preferences, GUI -- Android Resources Manager, such as: Contact, Location, Phone, Sms, ToneGenerator, WakeLock, WifiLock, Clipboard, NetworkStatus, MediaPlayer -- Third App Integrations, such as: Barcode, Browser, SpeechRecongition, SendEmail, TextToSpeech -- Hardwared Manager: Carmer, Sensor, Ringer & Media Volume, Screen Brightness, Battery, Bluetooth, SignalStrength, WebCam, Vibrate, NFC, USB - -[ API Documentation Link ] -https://github.com/qpython-android/qpysl4a/blob/master/README.md - -[ API Samples ] -https://github.com/qpython-android/qpysl4a/issues/1 - -[ IMPORTANT NOTE ] -IT MAY REQUIRE THE BLUETOOTH / LOCATION / READ_SMS / SEND_SMS / CALL_PHONE AND OTHER PERMISSIONS, SO THAT YOU CAN PROGRAM ITH THESE FEATURES. QPYTHON WILL NOT USE THESE PERMISSIONS IN BACKGROUND. - -IF YOU GET EXCEPTION IN RUNTIME WHILE USING SL4A API, PLEASE CHECK WHETHER THE RELEVANT PERMISSIONS IN THE SYSTEM SETTINGS ARE ENABLED. - -# How To Get Professional Customer Support -Please follow the guide to get support https://github.com/qpython-android/qpython/blob/master/README.md - -[ QPython community ] -https://www.facebook.com/groups/qpython - -[ FAQ ] -A: Why can't I use the SMS API of SL4A -Q: Because Google Play and some app stores have strict requirements on the permissions of apps, in QPython 3x, we use x to distinguish branches with different permissions or appstores. For example, L means LIMITED and S means SENSITIVE. -Sometimes you cannot use the corresponding SL4A APIs because the version you installed does not have the corresponding permissions, so you can consider replace what you have installed with the right one. - -You can find other versions here: -https://www.qpython.org/en/qpython_3x_featues.html diff --git a/docs/_sources/en/qpython_3x_featues.rst.txt b/docs/_sources/en/qpython_3x_featues.rst.txt deleted file mode 100644 index 0fc4578..0000000 --- a/docs/_sources/en/qpython_3x_featues.rst.txt +++ /dev/null @@ -1,98 +0,0 @@ -QPython 3x featues -================== - -QPython 3x, Previously it was QPython3. - -A: Why are there so many branches? - -Q: Because Google Play and some appstores have strict requirements for application permissions, -they require different permissions, we use different branch codes, for example, 3 means it was QPython3, -L means LIMITED, S means SENSITIVE permission is required. - -A: I know there was a QPython before, what is the difference between it and QPython 3x? - -Q: It is now called QPython Ox now, which is mainly aimed at programming learners, and -it provides more friendly features for beginners. QPython 3x is mainly for experienced -Python users, and it provides some advanced technical features. - - -A: Where can I get different branches or versions ? - -Q: Take a look at `this link `_. - -WHAT'S NEW ------------ - -QPython 3x v3.0.0 (Published on 2020/2/1) ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -This is the first version after we restarting the QPython project - -- It added the `qsl4ahelper `_ as a built-in package -- It added a `QPySL4A App project sample `_ into built-in editor, you can create QSLAApp by creating an project -- It rearranged permissions -- It fixed `ssl error `_ bugs - -App's Features ------------------ - -- Offline Python 3 interpreter: no Internet is required to run Python programs -- It supports running multiple types of projects, including: console program, SL4A program, webapp program -- Convenient QR code reader for transferring codes to your phone -- QPYPI and a custom repository for prebuilt wheel packages for enhanced scientific libraries, such as numpy, scipy, matplotlib, scikit-learn etc -- Easy-to-use editor -- INTEGRATED & EXTENDED SCRIPT LAYER FOR ANDROID LIBRARY (SL4A): IT LETS YOU DRIVE THE ANDROID WORK WITH PYTHON -- Good documentation and customer support - - -Android Permissions that QPython requires ------------------------------------------- - -QPython require the BLUETOOTH / LOCATION / BLUETOOTH and OTHER permissions, so that you can program using these FEATURES. AND WE WILL NOT USE THIS PERMISSIONS IN BACKGROUND. - -Both QPython 3S and 3L ->>>>>>>>>>>>>>>>>>>>>> - -- android.permission.INTERNET -- android.permission.WAKE_LOCK -- android.permission.ACCESS_NETWORK_STATE -- android.permission.CHANGE_NETWORK_STATE -- android.permission.ACCESS_WIFI_STATE -- android.permission.CHANGE_WIFI_STATE -- android.permission.RECEIVE_BOOT_COMPLETED -- android.permission.CAMERA -- android.permission.FLASHLIGHT -- android.permission.VIBRATE -- android.permission.RECEIVE_USER_PRESENT -- com.android.vending.BILLING -- com.android.launcher.permission.INSTALL_SHORTCUT -- com.android.launcher.permission.UNINSTALL_SHORTCUT -- android.permission.READ_EXTERNAL_STORAGE -- android.permission.WRITE_EXTERNAL_STORAGE -- android.permission.READ_MEDIA_STORAGE -- android.permission.ACCESS_COARSE_LOCATION -- android.permission.ACCESS_FINE_LOCATION -- android.permission.FOREGROUND_SERVICE -- android.permission.BLUETOOTH -- android.permission.BLUETOOTH_ADMIN -- android.permission.NFC -- android.permission.RECORD_AUDIO -- android.permission.ACCESS_NOTIFICATION_POLICY -- android.permission.KILL_BACKGROUND_PROCESSES -- net.dinglisch.android.tasker.PERMISSION_RUN_TASKS - -QPython 3S ->>>>>>>>>>> -- android.permission.ACCESS_SUPERUSER -- android.permission.READ_SMS -- android.permission.SEND_SMS -- android.permission.RECEIVE_SMS -- android.permission.WRITE_SMS -- android.permission.READ_PHONE_STATE -- android.permission.CALL_PHONE -- android.permission.READ_CALL_LOG -- android.permission.PROCESS_OUTGOING_CALLS -- android.permission.READ_CONTACTS -- android.permission.GET_ACCOUNTS -- android.permission.SYSTEM_ALERT_WINDOW - diff --git a/docs/_sources/en/qpython_ox_featues.rst.txt b/docs/_sources/en/qpython_ox_featues.rst.txt deleted file mode 100644 index f30c15d..0000000 --- a/docs/_sources/en/qpython_ox_featues.rst.txt +++ /dev/null @@ -1,62 +0,0 @@ -QPython Ox featues -====================== - -Because google play and some appstores have strict requirements on the permissions of the app, we use different strategies in different appstores, which is why the branch name will be different. For example, L means Limited, and S means it contains Sensitive permissions. - -Python ---------- -- Python3 + Python2 basis -- QRCode Reader -- Editor -- QPYPI -- Ftp -- Course - -Permissions ----------------- -Both QPython OL and OS ->>>>>>>>>>>>>>>>>>>>>>>>>>> - -- android.permission.INTERNET -- android.permission.WAKE_LOCK -- android.permission.ACCESS_NETWORK_STATE -- android.permission.CHANGE_NETWORK_STATE -- android.permission.ACCESS_WIFI_STATE -- android.permission.CHANGE_WIFI_STATE -- android.permission.RECEIVE_BOOT_COMPLETED -- android.permission.CAMERA -- android.permission.FLASHLIGHT -- android.permission.VIBRATE -- android.permission.RECEIVE_USER_PRESENT -- com.android.vending.BILLING -- com.android.launcher.permission.INSTALL_SHORTCUT -- com.android.launcher.permission.UNINSTALL_SHORTCUT -- android.permission.READ_EXTERNAL_STORAGE -- android.permission.WRITE_EXTERNAL_STORAGE -- android.permission.READ_MEDIA_STORAGE -- android.permission.ACCESS_COARSE_LOCATION -- android.permission.ACCESS_FINE_LOCATION -- android.permission.FOREGROUND_SERVICE -- android.permission.BLUETOOTH -- android.permission.BLUETOOTH_ADMIN -- android.permission.NFC -- android.permission.RECORD_AUDIO -- android.permission.ACCESS_NOTIFICATION_POLICY -- android.permission.KILL_BACKGROUND_PROCESSES -- net.dinglisch.android.tasker.PERMISSION_RUN_TASKS - -QPython OS ->>>>>>>>>>> -- android.permission.ACCESS_SUPERUSER -- android.permission.SEND_SMS -- android.permission.READ_SMS -- android.permission.SEND_SMS -- android.permission.RECEIVE_SMS -- android.permission.WRITE_SMS -- android.permission.READ_PHONE_STATE -- android.permission.CALL_PHONE -- android.permission.READ_CALL_LOG -- android.permission.PROCESS_OUTGOING_CALLS -- android.permission.READ_CONTACTS -- android.permission.GET_ACCOUNTS -- android.permission.SYSTEM_ALERT_WINDOW diff --git a/docs/_sources/features/2018-09-28-dropbear-cn.rst.txt b/docs/_sources/features/2018-09-28-dropbear-cn.rst.txt deleted file mode 100644 index 11491c4..0000000 --- a/docs/_sources/features/2018-09-28-dropbear-cn.rst.txt +++ /dev/null @@ -1,79 +0,0 @@ -如何在QPython 使用 SSH -======================== - -近来悄悄更新了不少好玩的包,但是我最喜欢的是今天介绍的这个特性,刚被集成到QPython中的dropbear SSH工具。 - -Dropbear SSH 是很多嵌入式linux系统首选的ssh工具,结合qpython,能让你方便地进行编程来自动管理服务器或你的手机。 - -如何远程登录 你的服务器? ----------------------------- - -.. image:: https://mmbiz.qpic.cn/mmbiz_jpg/tuObYW62d0iaJIF2ibzmISF2PBd92KzAPnZfLlIbyOglK3NOvD508VccuQafhhic036KuxGeiasAQDqb2YMDmHWo2w/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1 - :alt: 1 Dashboard 长按Terminal, 选择Shell Terminal - -*1 Dashboard 长按Terminal, 选择Shell Terminal* - -.. image:: https://mmbiz.qpic.cn/mmbiz_jpg/tuObYW62d0iaJIF2ibzmISF2PBd92KzAPncIibPKFhA6RtwC5tQyia66nDWcnccv8aSrZJDNKzBiaduvy23rib1oLv5A/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1 - :alt: 2 Shell中输入ssh @ - -*2 Shell中输入ssh @* - -.. image:: https://mmbiz.qpic.cn/mmbiz_jpg/tuObYW62d0iaJIF2ibzmISF2PBd92KzAPnEpC5zNbJJejeGCvnNgEIHDKLX9S72GjVybShlqvtzvPATsh4Fg13Kw/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1 - :alt: 3 已经登录到了远端服务器 - -*3 已经登录到了远端服务器* - - -除了从手机上登录服务器外,你还可以登录到你的手机。 - -如何登录到你的手机? ------------------------ - -这个功能适合高级玩家,因为一些权限的问题,在手机上开sshd服务需要root权限。 -第一次使用,需要从shell terminal中进行下初始化操作 - -``` -su - #切换为root用户, - -mkdir dropbear # 在 /data/data/org.qpython.qpy/files下创建dropbear目录 - -初始化对应的key - -dbkey -t dss -f dropbear/dropbear_dss_host_key - -dbkey -t rsa -f dropbear/dropbear_rsa_host_key - -dbkey -t ecdsa -f dropbear/dropbear_ecdsa_host_key - -``` - -完成上述步骤之后,即可启动sshd服务。 - -.. image:: https://mmbiz.qpic.cn/mmbiz_jpg/tuObYW62d0iaJIF2ibzmISF2PBd92KzAPnLL1eeZvpzyJXLfBLJT1hmbQEKs1QDodeugXPh8vOvJ77HNvHyT6sDg/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1 - :alt: 启动sshd服务:sshd -p 8088 -P dropbear/db.pid -F # 前台启动,端口 8088 - -*启动sshd服务:sshd -p 8088 -P dropbear/db.pid -F # 前台启动,端口 8088* - -接下来从你的电脑中就可以登录了你的手机了默认密码就是我们的app名字,你懂得。 - -.. image:: https://mmbiz.qpic.cn/mmbiz_png/tuObYW62d0iaJIF2ibzmISF2PBd92KzAPn4FOhNFPVKEpZE8mCibia8Cgf4sUK41cldnFWYpqtaY62LfX6MiabwYquQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1 - :alt: 从你的笔记本登录手机 - -*从你的笔记本登录手机* - -**另外还支持下面高级特性:** - -- ssh 支持证书登录,借助dbconvert,可以把你的openssh证书转换过来,存到对应的目录,用 ssh -i 指定证书即可 -- sshd 支持 authorized_keys, 只需要把该文件保存到你的dropbear目录下,即可 -- scp,远程拷贝文件 - -后续计划移植更多有用的工具 - -其他 ------- - -不想玩了记得kill掉sshd进程,之前需要指定pid文件就是方便你获得 pid - -kill `cat dropbear/db.pid` - -`获得QPython App `_ diff --git a/docs/_sources/zh/contributorshowto.rst.txt b/docs/_sources/zh/contributorshowto.rst.txt deleted file mode 100644 index da17ec1..0000000 --- a/docs/_sources/zh/contributorshowto.rst.txt +++ /dev/null @@ -1,36 +0,0 @@ - -QPython文档体系说明 ---------------------- - -QPython 文档体系分为 英文/中文 两部分,我们努力保持两种语言对应内容的准确和同步,其中内容其中又分为 - -* 快速开始 (使用上的帮助) - -* 编程指南 (主要是用QPython来进行编程和开发的指南) - -* QPython黑客指南 (深入折腾的指导) - -* 贡献者指南 (QPython贡献者指南,分为在QPython team内的,和以外的) - - -如何提交文档 -------------------------------- -文档非常重要,我们用sphinx来组织文档,并且文档会通过github page功能直接推到qpython.org网站中 -在想要贡献QPython文档之前仔细阅读我们的指南 - -* git clone http://github.com/qpython-android/qpython - -* 进入到 项目的qpython-docs目录中 - -* 按照sphinx规则编辑source中的文件即可 - -* 最后cd到qpython-docs中并运行build.sh - -* 打开浏览器打开本地文件检查, - -* 如果检查无问题则可以提交,然后浏览qpython.org即可看到最新的更新 - - -如何提交翻译 -------------------------------- -QPython是一个支持多语言的应用,你可以通过以下方式来提交对应国家的翻译 diff --git a/docs/_sources/zh/howtostart.rst.txt b/docs/_sources/zh/howtostart.rst.txt deleted file mode 100644 index 8a1ed07..0000000 --- a/docs/_sources/zh/howtostart.rst.txt +++ /dev/null @@ -1,28 +0,0 @@ -快速开始 -========= - -* `QPython - 使用说明 `_ -* `QPython - 快速开始 `_ -* `“你好,世界!” `_ - -编程指南 -============ - -* `QPython - 开发 WEB APP `_ -* `QPython - Bottle 快速了解 `_ - -QPython黑客指南 -================= - -* `QPython - 编程向导 `_ -* `QPython 黑客 `_ - -贡献者指南 -================= -欢迎加入 QPython 团队 - -.. toctree:: - :maxdepth: 2 - - contributorshowto - diff --git a/docs/_sources/zhindex.rst.txt b/docs/_sources/zhindex.rst.txt deleted file mode 100644 index 6006633..0000000 --- a/docs/_sources/zhindex.rst.txt +++ /dev/null @@ -1,33 +0,0 @@ -中文用户向导 -============================================= - -欢迎 ! ------------------------------- -QPython/QPython3 的最新版本1.3.2(QPython), 1.0.2(QPython3) 已经发布,它包含了许多惊艳的特性,请从应用市场安装 - - -QPython 起步 ------------------------- -.. toctree:: - :maxdepth: 2 - - zh/howtostart - - -更多链接 ------------------------------- -* `常见问题 `_ -* `在百度贴吧里讨论 `_ -* `在微博问我们问题 `_ -* `给我们发邮件 `_ -* `报告问题 `_ - -QPython 用户开发组 ------------------------------- -* 请加入 `QPython 用户开发者组 `_ 来和全世界的 QPython 用户一块来玩转QPython。 -* 加入QPython QQ组(Q群:540717901)来和中国活跃的QPython 用户一起玩转 QPython - -如何贡献 ---------- -想成为 QPython 的贡献者么?请 `给我们发邮件 `_ - diff --git a/docs/community.html b/docs/community.html deleted file mode 100644 index d6d01b6..0000000 --- a/docs/community.html +++ /dev/null @@ -1,22 +0,0 @@ - diff --git a/docs/contributors.html b/docs/contributors.html deleted file mode 100644 index 096dfae..0000000 --- a/docs/contributors.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - - - - Contributors — QPython 0.9 documentation - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
-
-
- - -
-
-
-
- -
    -
  • Guide »
  • - -
  • Contributors
  • -
- - -
-
-
- -
-

Contributors

-

Thanks contributers for helping with QPython projects.

-

We want you to join us, If you want to join us, please email us support@qpython.org

-
-

Developers

-

River

-

乘着船

-

kyle kersey

-

Mae

-

ZRH

- - -

How to contribute

-

Please send an email to us <support@qpython.org> with your self introduction and what kind of development do you want to contribute.

-
-
-

Communities Contributors

-

LR (Chinese QQ Group: 540717901)

-

脉动小羊mo

- -

How to run a QPython Community

-

We appreciate that you build a QPython topic community, you can invite us to join for answering any question about qpython by sending an email to us for telling how to join<support@qpython.org>.

-
-
-

Localization

-

Fogapod (Russian)

-

Frodo821 (Japanese)

-

Darciss Rehot’acc (Turkish)

-

Christo phe (French)

-

How to contribute localization translate

-

We appreciate that you are willing to help with translate QPython / QPython3.

-

This repo is the localization project, you can post pull request and send en email to us<support@qpython.org>, then we will merge it and publish in next update.

-

If you don’t want to use git, you can just translate the words which do not contains translatable=”false” in the following files.

- -

And there is the description file

- -
-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/default.html b/docs/default.html deleted file mode 100644 index 7dbd944..0000000 --- a/docs/default.html +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/docs/discord.html b/docs/discord.html deleted file mode 100644 index 4f7cb82..0000000 --- a/docs/discord.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/document.html b/docs/document.html deleted file mode 100644 index 82ff8fb..0000000 --- a/docs/document.html +++ /dev/null @@ -1,287 +0,0 @@ - - - - - - - - - Welcome to read the QPython guide — QPython 0.9 documentation - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
-
-
- - -
-
-
-
- -
    -
  • Guide »
  • - -
  • Welcome to read the QPython guide
  • -
- - -
-
-
- - images/bestpython.png -
-

Welcome to read the QPython guide

-

QPython is a script engine that runs Python on android devices. It lets your android device run Python scripts and projects. It contains the Python interpreter, console, editor, and the SL4A Library for Android. It’s Python on Android!

-

QPython has several millions users in the world already, it’s a great project for programming users, welcome to join us for contributing to this project NOW.

-
-

What’s NEW

-

QPython project include the QPython and QPython3 applications.

-

QPython application is using the Python 2.7.2 , and QPython application is using the Python 3.2.2 .

-

QPython’s newest version is 1.3.2 (Released on 2017/5/12) , QPython3’s newest version is 1.0.2 (Released on 2017/3/29), New versions include many amazing features, please upgrade to the newest version as soon from google play, amazon appstore etc.

-
-
-

Thanks these guys who are contributing

-

They are pushing on the QPython project moving forward.

-River is the project's organizer and the current online QPython's author. -Mae is a beautiful and talented girl developer who is good at python & android programming. -Zoom.Quiet is a knowledgeable guy who is famous in many opensource communities. -MathiasLuo is a android geek developer -liyuanrui is a Chinese geek -Kyle kersey is a US geek -

Do you want to join the great QPython team ? You could Ask qustions on twitter or email us. -And you could fork us on github and send pull request.

-
-
-

QPython Communities

-

There are many active QPython communities where you could meet the QPython users like you

- -

And you could talk to us through social network

- -

It’s the official QPython Users & Contributors’ Guide, please follow these steps for using and contributing.

-
-
-

Support

-

We are happy to hear feedback from you, but sometimes some bugs or features demand may not be implemented soon for we lack resources.

-

So if you have any issue need the core developer team to solve with higher priority, you could try the bountysource service.

-
-
-

Now, let’s GO

- -
-
-

Others

-
- -
-
-
-

For Chinese users

- -
-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/en/faq.html b/docs/en/faq.html deleted file mode 100644 index d1f18be..0000000 --- a/docs/en/faq.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - - FAQ — QPython 0.9 documentation - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
-
-
- - -
-
-
-
- - - - -
-
-
- -
-

FAQ

-

How to run qpython script from other terminals ?

-
    -
  • You could “share to” qpython from 3rd apps.

  • -
  • You need to root the android device first, then soure the env vars (Just like the qpython wiki link you mentioned) and execute the /data/data/org.qpython.qpy/bin/python or /data/data/org.qpython.qpy/bin/python-android5 (for android 5 above)

  • -
-

Share to case sample

-

Support pygame ?

-

Even you could import pygame in QPython, but QPython doesn’t support pygame now.

-

We will consider to support it later, please follow us on facebook to get it’s progress.

-

Pygame case sample

-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/en/guide.html b/docs/en/guide.html deleted file mode 100644 index 263ae52..0000000 --- a/docs/en/guide.html +++ /dev/null @@ -1,357 +0,0 @@ - - - - - - - - - Getting started — QPython 0.9 documentation - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
- -
-
- -
    -
  • Guide »
  • - -
  • Getting started
  • -
- - -
-
-
- -
-

Getting started

-

How to start quickly ? Just follow the following steps:

- -
-
-

Programming Guide

-

If you you want to know more about how to program through qpython, just follow these steps:

- -

QPython project is not only a powerful Python engine for android, but is a active technology community also.

-
-
-

Developer Guide

-

QPython developers’ goal is pushing out a great Python for android.

- -
-
-

Contributor Guide

-

Welcome to join QPython contributors team, you are not just a user, but a creator of QPython.

- -
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/en/guide_androidhelpers.html b/docs/en/guide_androidhelpers.html deleted file mode 100644 index 2a6e42a..0000000 --- a/docs/en/guide_androidhelpers.html +++ /dev/null @@ -1,3403 +0,0 @@ - - - - - - - - - AndroidFacade — QPython 0.9 documentation - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
- -
-
- - - - -
-
-
- -

The Scripting Layer for Android (abridged as SL4A, and previously named Android Scripting Environment or ASE) is a library that allows the creation and running of scripts written in various scripting languages directly on Android devices. QPython start to extend the SL4A project and integrate it.

-../images/sl4a.jpg -

There are many SL4A APIs, if you found any issue, please report an issue.

-
-

AndroidFacade

-
-

Clipboard APIs

-
-
-setClipboard(text)
-

Put text in the clipboard

-
-
Parameters:
-

text (str) – text

-
-
-
- -
-
-getClipboard(text)
-

Read text from the clipboard

-
-
Returns:
-

The text in the clipboard

-
-
-
- -
from androidhelper import Android
-droid = Android()
-
-#setClipboard
-droid.setClipboard("Hello World")
-
-#getClipboard
-clipboard = droid.getClipboard().result
-
-
-
-
-

Intent & startActivity APIs

-
-
-makeIntent(action, uri, type, extras, categories, packagename, classname, flags)
-

Starts an activity and returns the result

-
-
Parameters:
-
    -
  • action (str) – action

  • -
  • uri(Optional) (str) – uri

  • -
  • type(Optional) (str) – MIME type/subtype of the URI

  • -
  • extras(Optional) (object) – a Map of extras to add to the Intent

  • -
  • categories(Optional) (list) – a List of categories to add to the Intent

  • -
  • packagename(Optional) (str) – name of package. If used, requires classname to be useful

  • -
  • classname(Optional) (str) – name of class. If used, requires packagename to be useful

  • -
  • flags(Optional) (int) – Intent flags

  • -
-
-
Returns:
-

An object representing an Intent

-
-
-
- -
sample code to show makeIntent
-
-
-
-
-getIntent()
-

Returns the intent that launched the script

-
- -
sample code to show getIntent
-
-
-
-
-startActivityForResult(action, uri, type, extras, packagename, classname)
-

Starts an activity and returns the result

-
-
Parameters:
-
    -
  • action (str) – action

  • -
  • uri(Optional) (str) – uri

  • -
  • type(Optional) (str) – MIME type/subtype of the URI

  • -
  • extras(Optional) (object) – a Map of extras to add to the Intent

  • -
  • packagename(Optional) (str) – name of package. If used, requires classname to be useful

  • -
  • classname(Optional) (str) – name of class. If used, requires packagename to be useful

  • -
-
-
Returns:
-

A Map representation of the result Intent

-
-
-
- -
sample code to show startActivityForResult
-
-
-
-
-startActivityForResultIntent(intent)
-

Starts an activity and returns the result

-
-
Parameters:
-

intent (Intent) – Intent in the format as returned from makeIntent

-
-
Returns:
-

A Map representation of the result Intent

-
-
-
- -
sample code to show startActivityForResultIntent
-
-
-
-
-startActivityIntent(intent, wait)
-

Starts an activity

-
-
Parameters:
-
    -
  • intent (Intent) – Intent in the format as returned from makeIntent

  • -
  • wait(Optional) (bool) – block until the user exits the started activity

  • -
-
-
-
- -
sample code to show startActivityIntent
-
-
-
-
-startActivity(action, uri, type, extras, wait, packagename, classname)
-

Starts an activity

-
-
Parameters:
-
    -
  • action (str) – action

  • -
  • uri(Optional) (str) – uri

  • -
  • type(Optional) (str) – MIME type/subtype of the URI

  • -
  • extras(Optional) (object) – a Map of extras to add to the Intent

  • -
  • wait(Optional) (bool) – block until the user exits the started activity

  • -
  • packagename(Optional) (str) – name of package. If used, requires classname to be useful

  • -
  • classname(Optional) (str) – name of class. If used, requires packagename to be useful

  • -
-
-
-
- -
sample code to show startActivityForResultIntent
-
-
-
-
-

SendBroadcast APIs

-
-
-sendBroadcast(action, uri, type, extras, packagename, classname)
-

Send a broadcast

-
-
Parameters:
-
    -
  • action (str) – action

  • -
  • uri(Optional) (str) – uri

  • -
  • type(Optional) (str) – MIME type/subtype of the URI

  • -
  • extras(Optional) (object) – a Map of extras to add to the Intent

  • -
  • packagename(Optional) (str) – name of package. If used, requires classname to be useful

  • -
  • classname(Optional) (str) – name of class. If used, requires packagename to be useful

  • -
-
-
-
- -
sample code to show sendBroadcast
-
-
-
-
-sendBroadcastIntent(intent)
-

Send a broadcast

-
-
Parameters:
-

intent (Intent) – Intent in the format as returned from makeIntent

-
-
-
- -
sample code to show sendBroadcastIntent
-
-
-
-
-

Vibrate

-
-
-vibrate(intent)
-

Vibrates the phone or a specified duration in milliseconds

-
-
Parameters:
-

duration (int) – duration in milliseconds

-
-
-
- -
sample code to show vibrate
-
-
-
-
-

NetworkStatus

-
-
-getNetworkStatus()
-

Returns the status of network connection

-
- -
sample code to show getNetworkStatus
-
-
-
-
-

PackageVersion APIs

-
-
-requiredVersion(requiredVersion)
-

Checks if version of QPython SL4A is greater than or equal to the specified version

-
-
Parameters:
-

requiredVersion (int) – requiredVersion

-
-
Returns:
-

true or false

-
-
-
- -
-
-getPackageVersionCode(packageName)
-

Returns package version code

-
-
Parameters:
-

packageName (str) – packageName

-
-
Returns:
-

Package version code

-
-
-
- -
-
-getPackageVersion(packageName)
-

Returns package version name

-
-
Parameters:
-

packageName (str) – packageName

-
-
Returns:
-

Package version name

-
-
-
- -
sample code to show getPackageVersionCode & getPackageVersion
-
-
-
-
-

System APIs

-
-
-getConstants(classname)
-

Get list of constants (static final fields) for a class

-
-
Parameters:
-

classname (str) – classname

-
-
Returns:
-

list

-
-
-
- -
sample code to show getConstants
-
-
-
-
-environment()
-

A map of various useful environment details

-
-
Returns:
-

environment map object includes id, display, offset, TZ, SDK, download, appcache, availblocks, blocksize, blockcount, sdcard

-
-
-
- -
sample code to show environment
-
-
-
-
-log(message)
-

Writes message to logcat

-
-
Parameters:
-

message (str) – message

-
-
-
- -
sample code to show log
-
-
-
-
-

SendEmail

-
-
-sendEmail(to, subject, body, attachmentUri)
-

Launches an activity that sends an e-mail message to a given recipient

-
-
Parameters:
-
    -
  • to (str) – A comma separated list of recipients

  • -
  • subject (str) – subject

  • -
  • body (str) – mail body

  • -
  • attachmentUri(Optional) (str) – message

  • -
-
-
-
- -
sample code to show sendEmail
-
-
-
-
-

Toast, getInput, getPassword, notify APIs

-
-
-makeToast(message)
-

Displays a short-duration Toast notification

-
-
Parameters:
-

message (str) – message

-
-
-
- -
sample code to show makeToast
-
-
-
-
-getInput(title, message)
-

Queries the user for a text input

-
-
Parameters:
-
    -
  • title (str) – title of the input box

  • -
  • message (str) – message to display above the input box

  • -
-
-
-
- -
sample code to show getInput
-
-
-
-
-getPassword(title, message)
-

Queries the user for a password

-
-
Parameters:
-
    -
  • title (str) – title of the input box

  • -
  • message (str) – message to display above the input box

  • -
-
-
-
- -
sample code to show getPassword
-
-
-
-
-notify(title, message, url)
-

Displays a notification that will be canceled when the user clicks on it

-
-
Parameters:
-
    -
  • title (str) – title

  • -
  • message (str) – message

  • -
  • url(optional) (str) – url

  • -
-
-
-
- -
-
::

import androidhelper -droid = androidhelper.Android() -droid.notify(‘Hello’,’QPython’,’http://qpython.org’) # you could set the 3rd parameter None also

-
-
-
-
-
-

ApplicationManagerFacade

-
-

Manager APIs

-
-
-getLaunchableApplications()
-

Returns a list of all launchable application class names

-
-
Returns:
-

map object

-
-
-
- -
sample code to show getLaunchableApplications
-
-
-
-
-launch(classname)
-

Start activity with the given class name

-
-
Parameters:
-

classname (str) – classname

-
-
-
- -
sample code to show launch
-
-
-
-
-getRunningPackages()
-

Returns a list of packages running activities or services

-
-
Returns:
-

List of packages running activities

-
-
-
- -
sample code to show getRunningPackages
-
-
-
-
-forceStopPackage(packageName)
-

Force stops a package

-
-
Parameters:
-

packageName (str) – packageName

-
-
-
- -
sample code to show forceStopPackage
-
-
-
-
-
-

CameraFacade

-
-
-cameraCapturePicture(targetPath)
-

Take a picture and save it to the specified path

-
-
Returns:
-

A map of Booleans autoFocus and takePicture where True indicates success

-
-
-
- -
-
-cameraInteractiveCapturePicture(targetPath)
-

Starts the image capture application to take a picture and saves it to the specified path

-
- -
-
-

CommonIntentsFacade

-
-

Barcode

-
-
-scanBarcode()
-

Starts the barcode scanner

-
-
Returns:
-

A Map representation of the result Intent

-
-
-
- -
-
-

View APIs

-
-
-pick(uri)
-

Display content to be picked by URI (e.g. contacts)

-
-
Returns:
-

A map of result values

-
-
-
- -
-
-view(uri, type, extras)
-

Start activity with view action by URI (i.e. browser, contacts, etc.)

-
- -
-
-viewMap(query)
-

Opens a map search for query (e.g. pizza, 123 My Street)

-
- -
-
-viewContacts()
-

Opens the list of contacts

-
- -
-
-viewHtml(path)
-

Opens the browser to display a local HTML file

-
- -
- -

Starts a search for the given query

-
- -
-
-
-

ContactsFacade

-
-
-pickContact()
-

Displays a list of contacts to pick from

-
-
Returns:
-

A map of result values

-
-
-
- -
-
-pickPhone()
-

Displays a list of phone numbers to pick from

-
-
Returns:
-

The selected phone number

-
-
-
- -
-
-contactsGetAttributes()
-

Returns a List of all possible attributes for contacts

-
-
Returns:
-

a List of contacts as Maps

-
-
-
- -
-
-contactsGetIds()
-

Returns a List of all contact IDs

-
- -
-
-contactsGet(attributes)
-

Returns a List of all contacts

-
- -
-
-contactsGetById(id)
-

Returns contacts by ID

-
- -
-
-contactsGetCount()
-

Returns the number of contacts

-
- -
-
-queryContent(uri, attributes, selection, selectionArgs, order)
-

Content Resolver Query

-
-
Returns:
-

result of query as Maps

-
-
-
- -
-
-queryAttributes(uri)
-

Content Resolver Query Attributes

-
-
Returns:
-

a list of available columns for a given content uri

-
-
-
- -
-
-

EventFacade

-
-
-eventClearBuffer()
-

Clears all events from the event buffer

-
- -
-
-eventRegisterForBroadcast(category, enqueue)
-

Registers a listener for a new broadcast signal

-
- -
-
-eventUnregisterForBroadcast(category)
-

Stop listening for a broadcast signal

-
- -
-
-eventGetBrodcastCategories()
-

Lists all the broadcast signals we are listening for

-
- -
-
-eventPoll(number_of_events)
-

Returns and removes the oldest n events (i.e. location or sensor update, etc.) from the event buffer

-
-
Returns:
-

A List of Maps of event properties

-
-
-
- -
-
-eventWaitFor(eventName, timeout)
-

Blocks until an event with the supplied name occurs. The returned event is not removed from the buffer

-
-
Returns:
-

Map of event properties

-
-
-
- -
-
-eventWait(timeout)
-

Blocks until an event occurs. The returned event is removed from the buffer

-
-
Returns:
-

Map of event properties

-
-
-
- -
-
-eventPost(name, data, enqueue)
-

Post an event to the event queue

-
- -
-
-rpcPostEvent(name, data)
-

Post an event to the event queue

-
- -
-
-receiveEvent()
-

Returns and removes the oldest event (i.e. location or sensor update, etc.) from the event buffer

-
-
Returns:
-

Map of event properties

-
-
-
- -
-
-waitForEvent(eventName, timeout)
-

Blocks until an event with the supplied name occurs. The returned event is not removed from the buffer

-
-
Returns:
-

Map of event properties

-
-
-
- -
-
-startEventDispatcher(port)
-

Opens up a socket where you can read for events posted

-
- -
-
-stopEventDispatcher()
-

Stops the event server, you can’t read in the port anymore

-
- -
-
-

LocationFacade

-
-

Providers APIs

-
-
-locationProviders()
-

Returns availables providers on the phone

-
- -
-
-locationProviderEnabled(provider)
-

Ask if provider is enabled

-
- -
-
-

Location APIs

-
-
-startLocating(minDistance, minUpdateDistance)
-

Starts collecting location data

-
- -
-
-readLocation()
-

Returns the current location as indicated by all available providers

-
-
Returns:
-

A map of location information by provider

-
-
-
- -
-
-stopLocating()
-

Stops collecting location data

-
- -
-
-getLastKnownLocation()
-

Returns the last known location of the device

-
-
Returns:
-

A map of location information by provider

-
-
-
- -

sample code

-
Droid = androidhelper.Android()
-location = Droid.getLastKnownLocation().result
-location = location.get('network', location.get('gps'))
-
-
-
-
-

GEO

-
-
-geocode(latitude, longitude, maxResults)
-

Returns a list of addresses for the given latitude and longitude

-
-
Returns:
-

A list of addresses

-
-
-
- -
-
-
-

PhoneFacade

-
-

PhoneStat APIs

-
-
-startTrackingPhoneState()
-

Starts tracking phone state

-
- -
-
-readPhoneState()
-

Returns the current phone state and incoming number

-
-
Returns:
-

A Map of “state” and “incomingNumber”

-
-
-
- -
-
-stopTrackingPhoneState()
-

Stops tracking phone state

-
- -
-
-

Call & Dia APIs

-
-
-phoneCall(uri)
-

Calls a contact/phone number by URI

-
- -
-
-phoneCallNumber(number)
-

Calls a phone number

-
- -
-
-phoneDial(uri)
-

Dials a contact/phone number by URI

-
- -
-
-phoneDialNumber(number)
-

Dials a phone number

-
- -
-
-

Get information APIs

-
-
-getCellLocation()
-

Returns the current cell location

-
- -
-
-getNetworkOperator()
-

Returns the numeric name (MCC+MNC) of current registered operator

-
- -
-
-getNetworkOperatorName()
-

Returns the alphabetic name of current registered operator

-
- -
-
-getNetworkType()
-

Returns a the radio technology (network type) currently in use on the device

-
- -
-
-getPhoneType()
-

Returns the device phone type

-
- -
-
-getSimCountryIso()
-

Returns the ISO country code equivalent for the SIM provider’s country code

-
- -
-
-getSimOperator()
-

Returns the MCC+MNC (mobile country code + mobile network code) of the provider of the SIM. 5 or 6 decimal digits

-
- -
-
-getSimOperatorName()
-

Returns the Service Provider Name (SPN)

-
- -
-
-getSimSerialNumber()
-

Returns the serial number of the SIM, if applicable. Return null if it is unavailable

-
- -
-
-getSimState()
-

Returns the state of the device SIM card

-
- -
-
-getSubscriberId()
-

Returns the unique subscriber ID, for example, the IMSI for a GSM phone. Return null if it is unavailable

-
- -
-
-getVoiceMailAlphaTag()
-

Retrieves the alphabetic identifier associated with the voice mail number

-
- -
-
-getVoiceMailNumber()
-

Returns the voice mail number. Return null if it is unavailable

-
- -
-
-checkNetworkRoaming()
-

Returns true if the device is considered roaming on the current network, for GSM purposes

-
- -
-
-getDeviceId()
-

Returns the unique device ID, for example, the IMEI for GSM and the MEID for CDMA phones. Return null if device ID is not available

-
- -
-
-getDeviceSoftwareVersion()
-

Returns the software version number for the device, for example, the IMEI/SV for GSM phones. Return null if the software version is not available

-
- -
-
-getLine1Number()
-

Returns the phone number string for line 1, for example, the MSISDN for a GSM phone. Return null if it is unavailable

-
- -
-
-getNeighboringCellInfo()
-

Returns the neighboring cell information of the device

-
- -
-
-
-

MediaRecorderFacade

-
-

Audio

-
-
-recorderStartMicrophone(targetPath)
-

Records audio from the microphone and saves it to the given location

-
- -
-
-

Video APIs

-
-
-recorderStartVideo(targetPath, duration, videoSize)
-

Records video from the camera and saves it to the given location. -Duration specifies the maximum duration of the recording session. -If duration is 0 this method will return and the recording will only be stopped -when recorderStop is called or when a scripts exits. -Otherwise it will block for the time period equal to the duration argument. -videoSize: 0=160x120, 1=320x240, 2=352x288, 3=640x480, 4=800x480.

-
- -
-
-recorderCaptureVideo(targetPath, duration, recordAudio)
-

Records video (and optionally audio) from the camera and saves it to the given location. -Duration specifies the maximum duration of the recording session. -If duration is not provided this method will return immediately and the recording will only be stopped -when recorderStop is called or when a scripts exits. -Otherwise it will block for the time period equal to the duration argument.

-
- -
-
-startInteractiveVideoRecording(path)
-

Starts the video capture application to record a video and saves it to the specified path

-
- -
-
-

Stop

-
-
-recorderStop()
-

Stops a previously started recording

-
- -
-
-
-

SensorManagerFacade

-
-

Start & Stop

-
-
-startSensingTimed(sensorNumber, delayTime)
-

Starts recording sensor data to be available for polling

-
- -
-
-startSensingThreshold(ensorNumber, threshold, axis)
-

Records to the Event Queue sensor data exceeding a chosen threshold

-
- -
-
-startSensing(sampleSize)
-

Starts recording sensor data to be available for polling

-
- -
-
-stopSensing()
-

Stops collecting sensor data

-
- -
-
-

Read data APIs

-
-
-readSensors()
-

Returns the most recently recorded sensor data

-
- -
-
-sensorsGetAccuracy()
-

Returns the most recently received accuracy value

-
- -
-
-sensorsGetLight()
-

Returns the most recently received light value

-
- -
-
-sensorsReadAccelerometer()
-

Returns the most recently received accelerometer values

-
-
Returns:
-

a List of Floats [(acceleration on the) X axis, Y axis, Z axis]

-
-
-
- -
-
-sensorsReadMagnetometer()
-

Returns the most recently received magnetic field values

-
-
Returns:
-

a List of Floats [(magnetic field value for) X axis, Y axis, Z axis]

-
-
-
- -
-
-sensorsReadOrientation()
-

Returns the most recently received orientation values

-
-
Returns:
-

a List of Doubles [azimuth, pitch, roll]

-
-
-
- -

sample code

-
Droid = androidhelper.Android()
-Droid.startSensingTimed(1, 250)
-sensor = Droid.sensorsReadOrientation().result
-Droid.stopSensing()
-
-
-
-
-
-

SettingsFacade

-
-

Screen

-
-
-setScreenTimeout(value)
-

Sets the screen timeout to this number of seconds

-
-
Returns:
-

The original screen timeout

-
-
-
- -
-
-getScreenTimeout()
-

Gets the screen timeout

-
-
Returns:
-

the current screen timeout in seconds

-
-
-
- -
-
-

AirplanerMode

-
-
-checkAirplaneMode()
-

Checks the airplane mode setting

-
-
Returns:
-

True if airplane mode is enabled

-
-
-
- -
-
-toggleAirplaneMode(enabled)
-

Toggles airplane mode on and off

-
-
Returns:
-

True if airplane mode is enabled

-
-
-
- -
-
-

Ringer Silent Mode

-
-
-checkRingerSilentMode()
-

Checks the ringer silent mode setting

-
-
Returns:
-

True if ringer silent mode is enabled

-
-
-
- -
-
-toggleRingerSilentMode(enabled)
-

Toggles ringer silent mode on and off

-
-
Returns:
-

True if ringer silent mode is enabled

-
-
-
- -
-
-

Vibrate Mode

-
-
-toggleVibrateMode(enabled)
-

Toggles vibrate mode on and off. If ringer=true then set Ringer setting, else set Notification setting

-
-
Returns:
-

True if vibrate mode is enabled

-
-
-
- -
-
-getVibrateMode(ringer)
-

Checks Vibration setting. If ringer=true then query Ringer setting, else query Notification setting

-
-
Returns:
-

True if vibrate mode is enabled

-
-
-
- -
-
-

Ringer & Media Volume

-
-
-getMaxRingerVolume()
-

Returns the maximum ringer volume

-
- -
-
-getRingerVolume()
-

Returns the current ringer volume

-
- -
-
-setRingerVolume(volume)
-

Sets the ringer volume

-
- -
-
-getMaxMediaVolume()
-

Returns the maximum media volume

-
- -
-
-getMediaVolume()
-

Returns the current media volume

-
- -
-
-setMediaVolume(volume)
-

Sets the media volume

-
- -
-
-

Screen Brightness

-
-
-getScreenBrightness()
-

Returns the screen backlight brightness

-
-
Returns:
-

the current screen brightness between 0 and 255

-
-
-
- -
-
-setScreenBrightness(value)
-

Sets the the screen backlight brightness

-
-
Returns:
-

the original screen brightness

-
-
-
- -
-
-checkScreenOn()
-

Checks if the screen is on or off (requires API level 7)

-
-
Returns:
-

True if the screen is currently on

-
-
-
- -
-
-
-

SmsFacade

-
-
-smsSend(destinationAddress, text)
-

Sends an SMS

-
-
Parameters:
-
    -
  • destinationAddress (str) – typically a phone number

  • -
  • text (str) –

  • -
-
-
-
- -
-
-smsGetMessageCount(unreadOnly, folder)
-

Returns the number of messages

-
-
Parameters:
-
    -
  • unreadOnly (bool) – typically a phone number

  • -
  • folder(optional) (str) – default “inbox”

  • -
-
-
-
- -
-
-smsGetMessageIds(unreadOnly, folder)
-

Returns a List of all message IDs

-
-
Parameters:
-
    -
  • unreadOnly (bool) – typically a phone number

  • -
  • folder(optional) (str) – default “inbox”

  • -
-
-
-
- -
-
-smsGetMessages(unreadOnly, folder, attributes)
-

Returns a List of all messages

-
-
Parameters:
-
    -
  • unreadOnly (bool) – typically a phone number

  • -
  • folder (str) – default “inbox”

  • -
  • attributes(optional) (list) – attributes

  • -
-
-
Returns:
-

a List of messages as Maps

-
-
-
- -
-
-smsGetMessageById(id, attributes)
-

Returns message attributes

-
-
Parameters:
-
    -
  • id (int) – message ID

  • -
  • attributes(optional) (list) – attributes

  • -
-
-
Returns:
-

a List of messages as Maps

-
-
-
- -
-
-smsGetAttributes()
-

Returns a List of all possible message attributes

-
- -
-
-smsDeleteMessage(id)
-

Deletes a message

-
-
Parameters:
-

id (int) – message ID

-
-
Returns:
-

True if the message was deleted

-
-
-
- -
-
-smsMarkMessageRead(ids, read)
-

Marks messages as read

-
-
Parameters:
-
    -
  • ids (list) – List of message IDs to mark as read

  • -
  • read (bool) – true or false

  • -
-
-
Returns:
-

number of messages marked read

-
-
-
- -
-
-

SpeechRecognitionFacade

-
-
-recognizeSpeech(prompt, language, languageModel)
-

Recognizes user’s speech and returns the most likely result

-
-
Parameters:
-
    -
  • prompt(optional) (str) – text prompt to show to the user when asking them to speak

  • -
  • language(optional) (str) – language override to inform the recognizer that it should expect speech in a language different than the one set in the java.util.Locale.getDefault()

  • -
  • languageModel(optional) (str) – informs the recognizer which speech model to prefer (see android.speech.RecognizeIntent)

  • -
-
-
Returns:
-

An empty string in case the speech cannot be recongnized

-
-
-
- -
-
-

ToneGeneratorFacade

-
-
-generateDtmfTones(phoneNumber, toneDuration)
-

Generate DTMF tones for the given phone number

-
-
Parameters:
-
    -
  • phoneNumber (str) – phone number

  • -
  • toneDuration(optional) (int) – default 100, duration of each tone in milliseconds

  • -
-
-
-
- -
-
-

WakeLockFacade

-
-
-wakeLockAcquireFull()
-

Acquires a full wake lock (CPU on, screen bright, keyboard bright)

-
- -
-
-wakeLockAcquirePartial()
-

Acquires a partial wake lock (CPU on)

-
- -
-
-wakeLockAcquireBright()
-

Acquires a bright wake lock (CPU on, screen bright)

-
- -
-
-wakeLockAcquireDim()
-

Acquires a dim wake lock (CPU on, screen dim)

-
- -
-
-wakeLockRelease()
-

Releases the wake lock

-
- -
-
-

WifiFacade

-
-
-wifiGetScanResults()
-

Returns the list of access points found during the most recent Wifi scan

-
- -
-
-wifiLockAcquireFull()
-

Acquires a full Wifi lock

-
- -
-
-wifiLockAcquireScanOnly()
-

Acquires a scan only Wifi lock

-
- -
-
-wifiLockRelease()
-

Releases a previously acquired Wifi lock

-
- -
-
-wifiStartScan()
-

Starts a scan for Wifi access points

-
-
Returns:
-

True if the scan was initiated successfully

-
-
-
- -
-
-checkWifiState()
-

Checks Wifi state

-
-
Returns:
-

True if Wifi is enabled

-
-
-
- -
-
-toggleWifiState(enabled)
-

Toggle Wifi on and off

-
-
Parameters:
-

enabled(optional) (bool) – enabled

-
-
Returns:
-

True if Wifi is enabled

-
-
-
- -
-
-wifiDisconnect()
-

Disconnects from the currently active access point

-
-
Returns:
-

True if the operation succeeded

-
-
-
- -
-
-wifiGetConnectionInfo()
-

Returns information about the currently active access point

-
- -
-
-wifiReassociate()
-

Returns information about the currently active access point

-
-
Returns:
-

True if the operation succeeded

-
-
-
- -
-
-wifiReconnect()
-

Reconnects to the currently active access point

-
-
Returns:
-

True if the operation succeeded

-
-
-
- -
-
-

BatteryManagerFacade

-
-
-readBatteryData()
-

Returns the most recently recorded battery data

-
- -
-
-batteryStartMonitoring()
-

Starts tracking battery state

-
- -
-
-batteryStopMonitoring()
-

Stops tracking battery state

-
- -
-
-batteryGetStatus()
-

Returns the most recently received battery status data: -1 - unknown; -2 - charging; -3 - discharging; -4 - not charging; -5 - full

-
- -
-
-batteryGetHealth()
-

Returns the most recently received battery health data: -1 - unknown; -2 - good; -3 - overheat; -4 - dead; -5 - over voltage; -6 - unspecified failure

-
- -
-
-batteryGetPlugType()
-

Returns the most recently received plug type data: --1 - unknown -0 - unplugged -1 - power source is an AC charger -2 - power source is a USB port

-
- -
-
-batteryCheckPresent()
-

Returns the most recently received battery presence data

-
- -
-
-batteryGetLevel()
-

Returns the most recently received battery level (percentage)

-
- -
-
-batteryGetVoltage()
-

Returns the most recently received battery voltage

-
- -
-
-batteryGetTemperature()
-

Returns the most recently received battery temperature

-
- -
-
-batteryGetTechnology()
-

Returns the most recently received battery technology data

-
- -
-
-

ActivityResultFacade

-
-
-setResultBoolean(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-setResultByte(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-setResultShort(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-setResultChar(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-setResultInteger(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-setResultLong(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-setResultFloat(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-setResultDouble(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-setResultString(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-setResultBooleanArray(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-setResultByteArray(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-setResultShortArray(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-setResultCharArray(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-setResultIntegerArray(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-setResultLongArray(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-setResultFloatArray(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-setResultDoubleArray(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-setResultStringArray(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-setResultSerializable(resultCode, resultValue)
-

Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), -the resulting intent will contain SCRIPT_RESULT extra with the given value

-
-
Parameters:
-
    -
  • resultCode (int) –

  • -
  • resultValue (byte) –

  • -
-
-
-
- -
-
-

MediaPlayerFacade

-
-

Control

-
-
-mediaPlay(url, tag, play)
-

Open a media file

-
-
Parameters:
-
    -
  • url (str) – url of media resource

  • -
  • tag(optional) (str) – string identifying resource (default=default)

  • -
  • play(optional) (bool) – start playing immediately

  • -
-
-
Returns:
-

true if play successful

-
-
-
- -
-
-mediaPlayPause(tag)
-

pause playing media file

-
-
Parameters:
-

tag (str) – string identifying resource (default=default)

-
-
Returns:
-

true if successful

-
-
-
- -
-
-mediaPlayStart(tag)
-

start playing media file

-
-
Parameters:
-

tag (str) – string identifying resource (default=default)

-
-
Returns:
-

true if successful

-
-
-
- -
-
-mediaPlayClose(tag)
-

Close media file

-
-
Parameters:
-

tag (str) – string identifying resource (default=default)

-
-
Returns:
-

true if successful

-
-
-
- -
-
-mediaIsPlaying(tag)
-

Checks if media file is playing

-
-
Parameters:
-

tag (str) – string identifying resource (default=default)

-
-
Returns:
-

true if successful

-
-
-
- -
-
-mediaPlaySetLooping(enabled, tag)
-

Set Looping

-
-
Parameters:
-
    -
  • enabled (bool) – default true

  • -
  • tag (str) – string identifying resource (default=default)

  • -
-
-
Returns:
-

True if successful

-
-
-
- -
-
-mediaPlaySeek(msec, tag)
-

Seek To Position

-
-
Parameters:
-
    -
  • msec (int) – default true

  • -
  • tag (str) – string identifying resource (default=default)

  • -
-
-
Returns:
-

New Position (in ms)

-
-
-
- -
-
-

Get Information

-
-
-mediaPlayInfo(tag)
-

Information on current media

-
-
Parameters:
-

tag (str) – string identifying resource (default=default)

-
-
Returns:
-

Media Information

-
-
-
- -
-
-mediaPlayList()
-

Lists currently loaded media

-
-
Returns:
-

List of Media Tags

-
-
-
- -
-
-
-

PreferencesFacade

-
-
-prefGetValue(key, filename)
-

Read a value from shared preferences

-
-
Parameters:
-
    -
  • key (str) – key

  • -
  • filename(optional) (str) – Desired preferences file. If not defined, uses the default Shared Preferences.

  • -
-
-
-
- -
-
-prefPutValue(key, value, filename)
-

Write a value to shared preferences

-
-
Parameters:
-
    -
  • key (str) – key

  • -
  • value (str) – value

  • -
  • filename(optional) (str) – Desired preferences file. If not defined, uses the default Shared Preferences.

  • -
-
-
-
- -
-
-prefGetAll(filename)
-

Get list of Shared Preference Values

-
-
Parameters:
-

filename(optional) (str) – Desired preferences file. If not defined, uses the default Shared Preferences.

-
-
-
- -
-
-

QPyInterfaceFacade

-
-
-executeQPy(script)
-

Execute a qpython script by absolute path

-
-
Parameters:
-

script (str) – The absolute path of the qpython script

-
-
Returns:
-

bool

-
-
-
- -
-
-

TextToSpeechFacade

-
-
-ttsSpeak(message)
-

Speaks the provided message via TTS

-
-
Parameters:
-

message (str) – message

-
-
-
- -
-
-ttsIsSpeaking()
-

Returns True if speech is currently in progress

-
- -
-
-

EyesFreeFacade

-
-
-

BluetoothFacade

-
-
-bluetoothActiveConnections()
-

Returns active Bluetooth connections

-
- -
-
-bluetoothWriteBinary(base64, connID)
-

Send bytes over the currently open Bluetooth connection

-
-
Parameters:
-
    -
  • base64 (str) – A base64 encoded String of the bytes to be sent

  • -
  • connID(optional) (str) – Connection id

  • -
-
-
-
- -
-
-bluetoothReadBinary(bufferSize, connID)
-

Read up to bufferSize bytes and return a chunked, base64 encoded string

-
-
Parameters:
-
    -
  • bufferSize (int) – default 4096

  • -
  • connID(optional) (str) – Connection id

  • -
-
-
-
- -
-
-bluetoothConnect(uuid, address)
-

Connect to a device over Bluetooth. Blocks until the connection is established or fails

-
-
Parameters:
-
    -
  • uuid (str) – The UUID passed here must match the UUID used by the server device

  • -
  • address(optional) (str) – The user will be presented with a list of discovered devices to choose from if an address is not provided

  • -
-
-
Returns:
-

True if the connection was established successfully

-
-
-
- -
-
-bluetoothAccept(uuid, timeout)
-

Listens for and accepts a Bluetooth connection. Blocks until the connection is established or fails

-
-
Parameters:
-
    -
  • uuid (str) – The UUID passed here must match the UUID used by the server device

  • -
  • timeout (int) – How long to wait for a new connection, 0 is wait for ever (default=0)

  • -
-
-
-
- -
-
-bluetoothMakeDiscoverable(duration)
-

Requests that the device be discoverable for Bluetooth connections

-
-
Parameters:
-

duration (int) – period of time, in seconds, during which the device should be discoverable (default=300)

-
-
-
- -
-
-bluetoothWrite(ascii, connID)
-

Sends ASCII characters over the currently open Bluetooth connection

-
-
Parameters:
-
    -
  • ascii (str) – text

  • -
  • connID (str) – Connection id

  • -
-
-
-
- -
-
-bluetoothReadReady(connID)
-

Sends ASCII characters over the currently open Bluetooth connection

-
-
Parameters:
-
    -
  • ascii (str) – text

  • -
  • connID (str) – Connection id

  • -
-
-
-
- -
-
-bluetoothRead(bufferSize, connID)
-

Read up to bufferSize ASCII characters

-
-
Parameters:
-
    -
  • bufferSize (int) – default=4096

  • -
  • connID(optional) (str) – Connection id

  • -
-
-
-
- -
-
-bluetoothReadLine(connID)
-

Read the next line

-
-
Parameters:
-

connID(optional) (str) – Connection id

-
-
-
- -
-
-bluetoothGetRemoteDeviceName(address)
-

Queries a remote device for it’s name or null if it can’t be resolved

-
-
Parameters:
-

address (str) – Bluetooth Address For Target Device

-
-
-
- -
-
-bluetoothGetLocalName()
-

Gets the Bluetooth Visible device name

-
- -
-
-bluetoothSetLocalName(name)
-

Sets the Bluetooth Visible device name, returns True on success

-
-
Parameters:
-

name (str) – New local name

-
-
-
- -
-
-bluetoothGetScanMode()
-

Gets the scan mode for the local dongle. -Return values: --1 when Bluetooth is disabled. -0 if non discoverable and non connectable. -1 connectable non discoverable. -3 connectable and discoverable.

-
- -
-
-bluetoothGetConnectedDeviceName(connID)
-

Returns the name of the connected device

-
-
Parameters:
-

connID (str) – Connection id

-
-
-
- -
-
-checkBluetoothState()
-

Checks Bluetooth state

-
-
Returns:
-

True if Bluetooth is enabled

-
-
-
- -
-
-toggleBluetoothState(enabled, prompt)
-

Toggle Bluetooth on and off

-
-
Parameters:
-
    -
  • enabled (bool) –

  • -
  • prompt (str) – Prompt the user to confirm changing the Bluetooth state, default=true

  • -
-
-
Returns:
-

True if Bluetooth is enabled

-
-
-
- -
-
-bluetoothStop(connID)
-

Stops Bluetooth connection

-
-
Parameters:
-

connID (str) – Connection id

-
-
-
- -
-
-bluetoothGetLocalAddress()
-

Returns the hardware address of the local Bluetooth adapter

-
- -
-
-bluetoothDiscoveryStart()
-

Start the remote device discovery process

-
-
Returns:
-

true on success, false on error

-
-
-
- -
-
-bluetoothDiscoveryCancel()
-

Cancel the current device discovery process

-
-
Returns:
-

true on success, false on error

-
-
-
- -
-
-bluetoothIsDiscovering()
-

Return true if the local Bluetooth adapter is currently in the device discovery process

-
- -
-
-

SignalStrengthFacade

-
-
-startTrackingSignalStrengths()
-

Starts tracking signal strengths

-
- -
-
-readSignalStrengths()
-

Returns the current signal strengths

-
-
Returns:
-

A map of gsm_signal_strength

-
-
-
- -
-
-stopTrackingSignalStrengths()
-

Stops tracking signal strength

-
- -
-
-

WebCamFacade

-
-
-webcamStart(resolutionLevel, jpegQuality, port)
-

Starts an MJPEG stream and returns a Tuple of address and port for the stream

-
-
Parameters:
-
    -
  • resolutionLevel (int) – increasing this number provides higher resolution (default=0)

  • -
  • jpegQuality (int) – a number from 0-10 (default=20)

  • -
  • port (int) – If port is specified, the webcam service will bind to port, otherwise it will pick any available port (default=0)

  • -
-
-
-
- -
-
-webcamAdjustQuality(resolutionLevel, jpegQuality)
-

Adjusts the quality of the webcam stream while it is running

-
-
Parameters:
-
    -
  • resolutionLevel (int) – increasing this number provides higher resolution (default=0)

  • -
  • jpegQuality (int) – a number from 0-10 (default=20)

  • -
-
-
-
- -
-
-cameraStartPreview(resolutionLevel, jpegQuality, filepath)
-

Start Preview Mode. Throws ‘preview’ events

-
-
Parameters:
-
    -
  • resolutionLevel (int) – increasing this number provides higher resolution (default=0)

  • -
  • jpegQuality (int) – a number from 0-10 (default=20)

  • -
  • filepath (str) – Path to store jpeg files

  • -
-
-
Returns:
-

True if successful

-
-
-
- -
-
-cameraStopPreview()
-

Stop the preview mode

-
- -
-
-

UiFacade

-
-

Dialog

-
-
-dialogCreateInput(title, message, defaultText, inputType)
-

Create a text input dialog

-
-
Parameters:
-
    -
  • title (str) – title of the input box

  • -
  • message (str) – message to display above the input box

  • -
  • defaultText(optional) (str) – text to insert into the input box

  • -
  • inputType(optional) (str) – type of input data, ie number or text

  • -
-
-
-
- -
-
-dialogCreatePassword(title, message)
-

Create a password input dialog

-
-
Parameters:
-
    -
  • title (str) – title of the input box

  • -
  • message (str) – message to display above the input box

  • -
-
-
-
- -
-
-dialogGetInput(title, message, defaultText)
-

Create a password input dialog

-
-
Parameters:
-
    -
  • title (str) – title of the input box

  • -
  • message (str) – message to display above the input box

  • -
  • defaultText(optional) (str) – text to insert into the input box

  • -
-
-
-
- -
-
-dialogGetPassword(title, message)
-

Queries the user for a password

-
-
Parameters:
-
    -
  • title (str) – title of the password box

  • -
  • message (str) – message to display above the input box

  • -
-
-
-
- -
-
-dialogCreateSeekBar(start, maximum, title)
-

Create seek bar dialog

-
-
Parameters:
-
    -
  • start (int) – default=50

  • -
  • maximum (int) – default=100

  • -
  • title (int) – title

  • -
-
-
-
- -
-
-dialogCreateTimePicker(hour, minute, is24hour)
-

Create time picker dialog

-
-
Parameters:
-
    -
  • hour (int) – default=0

  • -
  • miute (int) – default=0

  • -
  • is24hour (bool) – default=false

  • -
-
-
-
- -
-
-dialogCreateDatePicker(year, month, day)
-

Create date picker dialog

-
-
Parameters:
-
    -
  • year (int) – default=1970

  • -
  • month (int) – default=1

  • -
  • day (int) – default=1

  • -
-
-
-
- -
-
-

NFC

-

Data structs -QPython NFC json result

-
{
-"role": <role>, # could be self/master/slave
-"stat": <stat>, # could be ok / fail / cancl
-"message": <message get>
-}
-
-
-

APIs

-
-
-dialogCreateNFCBeamMaster(title, message, inputType)
-

Create a dialog where you could create a qpython beam master

-
-
Parameters:
-
    -
  • title (str) – title of the input box

  • -
  • message (str) – message to display above the input box

  • -
  • inputType(optional) (str) – type of input data, ie number or text

  • -
-
-
-
- -
-
-NFCBeamMessage(content, title, message)
-

Create a dialog where you could create a qpython beam master

-
-
Parameters:
-
    -
  • content (str) – message you want to sent

  • -
  • title (str) – title of the input box

  • -
  • message (str) – message to display above the input box

  • -
  • inputType(optional) (str) – type of input data, ie number or text

  • -
-
-
-
- -
-
-dialogCreateNFCBeamSlave(title, message)
-

Create a qpython beam slave

-
-
Parameters:
-
    -
  • title (str) – title of the input box

  • -
  • message (str) – message to display above the input box

  • -
-
-
-
- -
-
-

Progress

-
-
-dialogCreateSpinnerProgress(message, maximumProgress)
-

Create a spinner progress dialog

-
-
Parameters:
-
    -
  • message(optional) (str) – message

  • -
  • maximunProgress(optional) (int) – dfault=100

  • -
-
-
-
- -
-
-dialogSetCurrentProgress(current)
-

Set progress dialog current value

-
-
Parameters:
-

current (int) – current

-
-
-
- -
-
-dialogSetMaxProgress(max)
-

Set progress dialog maximum value

-
-
Parameters:
-

max (int) – max

-
-
-
- -
-
-dialogCreateHorizontalProgress(title, message, maximumProgress)
-

Create a horizontal progress dialog

-
-
Parameters:
-
    -
  • title(optional) (str) – title

  • -
  • message(optional) (str) – message

  • -
  • maximunProgress(optional) (int) – dfault=100

  • -
-
-
-
- -
-
-

Alert

-
-
-dialogCreateAlert(title, message)
-

Create alert dialog

-
-
Parameters:
-
    -
  • title(optional) (str) – title

  • -
  • message(optional) (str) – message

  • -
  • maximunProgress(optional) (int) – dfault=100

  • -
-
-
-
- -
-
-

Dialog Control

-
-
-dialogSetPositiveButtonText(text)
-

Set alert dialog positive button text

-
-
Parameters:
-

text (str) – text

-
-
-
- -
-
-dialogSetNegativeButtonText(text)
-

Set alert dialog negative button text

-
-
Parameters:
-

text (str) – text

-
-
-
- -
-
-dialogSetNeutralButtonText(text)
-

Set alert dialog button text

-
-
Parameters:
-

text (str) – text

-
-
-
- -
-
-dialogSetItems(items)
-

Set alert dialog list items

-
-
Parameters:
-

items (list) – items

-
-
-
- -
-
-dialogSetSingleChoiceItems(items, selected)
-

Set alert dialog list items

-
-
Parameters:
-
    -
  • items (list) – items

  • -
  • selected (int) – selected item index (default=0)

  • -
-
-
-
- -
-
-dialogSetMultiChoiceItems(items, selected)
-

Set dialog multiple choice items and selection

-
-
Parameters:
-
    -
  • items (list) – items

  • -
  • selected (int) – selected item index (default=0)

  • -
-
-
-
- -
-
-addContextMenuItem(label, event, eventData)
-

Adds a new item to context menu

-
-
Parameters:
-
    -
  • label (str) – label for this menu item

  • -
  • event (str) – event that will be generated on menu item click

  • -
  • eventData (object) – event object

  • -
-
-
-
- -
-
-addOptionsMenuItem(label, event, eventData, iconName)
-

Adds a new item to context menu

-
-
Parameters:
-
-
-
-
- -
-
-dialogGetResponse()
-

Returns dialog response

-
- -
-
-dialogGetSelectedItems()
-

This method provides list of items user selected

-
- -
-
-dialogDismiss()
-

Dismiss dialog

-
- -
-
-dialogShow()
-

Show dialog

-
- -
-
-

Layout

-
-
-fullShow(layout)
-

Show Full Screen

-
-
Parameters:
-

layout (string) – String containing View layout

-
-
-
- -
-
-fullDismiss()
-

Dismiss Full Screen

-
- -
-
-fullQuery()
-

Get Fullscreen Properties

-
- -
-
-fullQueryDetail(id)
-

Get fullscreen properties for a specific widget

-
-
Parameters:
-

id (str) – id of layout widget

-
-
-
- -
-
-fullSetProperty(id)
-

Set fullscreen widget property

-
-
Parameters:
-
    -
  • id (str) – id of layout widget

  • -
  • property (str) – name of property to set

  • -
  • value (str) – value to set property to

  • -
-
-
-
- -
-
-fullSetList(id, list)
-

Attach a list to a fullscreen widget

-
-
Parameters:
-
    -
  • id (str) – id of layout widget

  • -
  • list (list) – List to set

  • -
-
-
-
- -
-
-fullKeyOverride(keycodes, enable)
-

Override default key actions

-
-
Parameters:
-
    -
  • keycodes (str) – id of layout widget

  • -
  • enable (bool) – List to set (default=true)

  • -
-
-
-
- -
-
-

WebView

-
-
-webViewShow()
-

Display a WebView with the given URL

-
-
Parameters:
-
    -
  • url (str) – url

  • -
  • wait(optional) (bool) – block until the user exits the WebView

  • -
-
-
-
- -
-
-
-

USB Host Serial Facade

-

QPython 1.3.1+ and QPython3 1.0.3+ contains this feature

-

SL4A Facade for USB Serial devices by Android USB Host API.

-

It control the USB-Serial like devices -from Andoroid which has USB Host Controller .

-

The sample -demonstration is also available at youtube video

-
-

Requirements

-
    -
  • Android device which has USB Host controller (and enabled in that firmware).

  • -
  • Android 4.0 (API14) or later.

  • -
  • USB Serial devices (see [Status](#Status)).

  • -
  • USB Serial devices were not handled by Android kernel.

    -

    > I heard some android phone handle USB Serial devices -> make /dev/ttyUSB0 in kernel level. -> In this case, Android does not be able to handle the device -> from OS level.

    -

    please check Android Applications be able to grab the target USB Devices, -such as USB Device Info.

    -
  • -
-
-
-

Status

-
    -
  • probably work with USB CDC, like FTDI, Arduino or else.

  • -
  • 2012/09/10: work with 78K0F0730 device (new RL78) with Tragi BIOS board.

    -

    M78K0F0730

    -
  • -
  • 2012/09/24: work with some pl2303 devcies.

  • -
-
-
-

Author

-

This facade developped by Kuri65536 -you can see the commit log in it.

-
-
-

APIs

-
-
-usbserialGetDeviceList()
-

Returns USB devices reported by USB Host API.

-
-
Returns:
-

Returns “Map of id and string information Map<String, String>

-
-
-
- -
-
-usbserialDisconnect(connID)
-

Disconnect all USB-device

-
-
Parameters:
-

connID (str) – connection ID

-
-
-
- -
-
-usbserialActiveConnections()
-

Returns active USB-device connections.

-
-
Returns:
-

Returns “Active USB-device connections by Map UUID vs device-name.”

-
-
-
- -
-
-usbserialWriteBinary(base64, connID)
-

Send bytes over the currently open USB Serial connection.

-
-
Parameters:
-
    -
  • base64 (str) –

  • -
  • connId (str) –

  • -
-
-
-
- -
-
-usbserialReadBinary(bufferSize, connID)
-

Read up to bufferSize bytes and return a chunked, base64 encoded string

-
-
Parameters:
-
    -
  • bufferSize (int) –

  • -
  • connId (str) –

  • -
-
-
-
- -
-
-usbserialConnect(hash, options)
-

Connect to a device with USB-Host. request the connection and exit

-
-
Parameters:
-
    -
  • hash (str) –

  • -
  • options (str) –

  • -
-
-
Returns:
-

Returns messages the request status

-
-
-
- -
-
-usbserialHostEnable()
-

Requests that the host be enable for USB Serial connections.

-
-
Returns:
-

True if the USB Device is accesible

-
-
-
- -
-
-usbserialWrite(String ascii, String connID)
-

Sends ASCII characters over the currently open USB Serial connection

-
-
Parameters:
-
    -
  • ascii (str) –

  • -
  • connID (str) –

  • -
-
-
-
- -
-
-usbserialReadReady(connID)
-
-
Parameters:
-

connID (str) –

-
-
Returns:
-

True if the next read is guaranteed not to block

-
-
-
- -
-
-usbserialRead(connID, bufferSize)
-

Read up to bufferSize ASCII characters.

-
-
Parameters:
-
    -
  • connID (str) –

  • -
  • bufferSize (int) –

  • -
-
-
-
- -
-
-usbserialGetDeviceName(connID)
-

Queries a remote device for it’s name or null if it can’t be resolved

-
-
Parameters:
-

connID (str) –

-
-
-
- -
-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/en/guide_contributors.html b/docs/en/guide_contributors.html deleted file mode 100644 index 9d9d155..0000000 --- a/docs/en/guide_contributors.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - - - Welcome contribute — QPython 0.9 documentation - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
- -
-
- - - - -
-
-
- -
-

Welcome contribute

-

Thanks for supporting this project, QPython is a greate project, and we hope you join us to help with make it more greater.

-

Please send email to us(support at qpython.org) to introduce youself briefly, and which part do you want to contribute.

-

Then we will consider to invite you to join the qpython-collaborator group.

-
-
-

How to help with test

- -
-
-

How to contribute documentation

-
-
-

How to translate

-
-
-

How to launch a local QPython users community

-
-

How to organise a local qpython user sharing event

-
-
-
-

How to became the developer member

-
-

How to develop qpython built-in programs

-
-
-
-

How to sponsor QPython project

-

More detail coming soon…

-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/en/guide_contributors_test.html b/docs/en/guide_contributors_test.html deleted file mode 100644 index 52e4135..0000000 --- a/docs/en/guide_contributors_test.html +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - - - - Join the tester community — QPython 0.9 documentation - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
- -
-
- - - - -
-
-
- -

QPython is keeping develop! -If you are interested about what we are doing and want to make some contribution, follow this guide to make this project better!

-
-

Join the tester community

-

We create a G+ community where you could report bugs or offer suggestions -> QPython tester G+ community(For QPython testers)

-

Join us now!

-../images/1.png -
-
-

Become a tester

-

After join the tester community, you could become a tester! -Click this and become a tester -> I’m ready for test

-../images/2.png -
-
-

Report or suggest

-

If you find out any bugs or have any cool idea about QPython, please let us know about it. -You could write down your suggestion or bug report on the community.

-../images/3.png -
-
-

Feedback

-

Send your feedback to QPython using the contact information: support@qpython.org

-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/en/guide_developers.html b/docs/en/guide_developers.html deleted file mode 100644 index 8aae853..0000000 --- a/docs/en/guide_developers.html +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - - - - Android — QPython 0.9 documentation - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
- -
-
- - - - -
-
-
- -
-

Android

-

Android part offers the common Python user interaction functions, like console, editor, file browsing, QRCode reader etc.

-
-

Console

-
-
-

Editor

-
-
-

File browsing

-
-
-

QRCode reader

-
-
-
-

QSL4A

-

QSL4A is the folk of SL4A for QPython, which allows users being able to program with Python script for android.

-
-
-

QPython Core

-

Besides Python core, QPython core offer three types programming mode also.

-
-

Python 2.x

-
-
-

Python 3.x

-
-
-

Console program

-
-
-

Kivy program

-
-
-

WebApp program

-
-
-
-

Pip and libraries

-

Pip and libraries offer great expansion ability for QPython.

-
-

Pip

-
-
-

Libraries

-
-
-
-

Quick tools

-

Quick tools offers better guide for using QPython well for different users.

-
-

QPython API

-
-
-

FTP

-
-
-
-

QPY.IO (Enterprise service)

-

It’s a enterprise service which aim at offering quick android development delivery with QPython.

-

It’s QPython’s maintainers’ main paid service, but not a opensource project.

-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/en/guide_extend.html b/docs/en/guide_extend.html deleted file mode 100644 index b4ef655..0000000 --- a/docs/en/guide_extend.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - - - - QPython Open API — QPython 0.9 documentation - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
- -
-
- - - - -
-
-
- -
-

QPython Open API

-

QPython has an open activity which allow you run qpython from outside.

-

The MPyAPI’s definition seems like the following:

-
<activity
-    android:name="org.qpython.qpylib.MPyApi"
-    android:label="@string/qpy_run_with_share"
-    android:screenOrientation="user"
-    android:configChanges="orientation|keyboardHidden"
-    android:exported="true">
-    <intent-filter>
-        <action android:name="org.qpython.qpylib.action.MPyApi" />
-        <category android:name="android.intent.category.DEFAULT" />
-        <category android:name="android.intent.category.LAUNCHER" />
-    </intent-filter>
-    <intent-filter>
-        <action android:name="android.intent.action.VIEW" />
-        <category android:name="android.intent.category.DEFAULT" />
-        <category android:name="android.intent.category.BROWSABLE" />
-        <data android:scheme="http" />
-        <data android:scheme="https" />
-    </intent-filter>
-    <intent-filter>
-        <action android:name="android.intent.action.SEND"/>
-        <category android:name="android.intent.category.DEFAULT"/>
-        <data android:mimeType="text/plain"/>
-    </intent-filter>
-    <intent-filter>
-        <action android:name="android.intent.action.SEND"/>
-        <category android:name="android.intent.category.DEFAULT"/>
-        <data android:mimeType="image/*"/>
-    </intent-filter>
-</activity>
-
-
-

So, with it’s help, you could:

-
-

Share some content to QPython’s scripts

-

You could choose some content in some app, and share to qpython’s script, then you could handle the content with the sys.argv[2]

-

Watch the demo video on YouTube

-
-
-

Run QPython’s script from your own application

-

You can call QPython to run some script or python code in your application by call this activity, like the following sample:

-
// code sample shows how to call qpython API
-String extPlgPlusName = "org.qpython.qpy";          // QPython package name
-Intent intent = new Intent();
-intent.setClassName(extPlgPlusName, "org.qpython.qpylib.MPyApi");
-intent.setAction(extPlgPlusName + ".action.MPyApi");
-
-Bundle mBundle = new Bundle();
-mBundle.putString("app", "myappid");
-mBundle.putString("act", "onPyApi");
-mBundle.putString("flag", "onQPyExec"); // any String flag you may use in your context
-mBundle.putString("param", "");         // param String param you may use in your context
-
-/*
-* The Python code we will run
-*/
-String code = "import androidhelper\n" +
-            "droid = androidhelper.Android()\n" +
-            "line = droid.dialogGetInput()\n" +
-            "s = 'Hello %s' % line.result\n" +
-            "droid.makeToast(s)\n"
-
-mBundle.putString("pycode", code);
-intent.putExtras(mBundle);
-startActivityForResult(intent, SCRIPT_EXEC_PY);
-...
-
-
-
-// And you can handle the qpython callabck result in onActivityResult
-@Override
-protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-    if (requestCode == SCRIPT_EXEC_PY) {
-        if (data!=null) {
-            Bundle bundle = data.getExtras();
-            String flag = bundle.getString("flag");
-            String param = bundle.getString("param");
-            String result = bundle.getString("result"); // Result your Pycode generate
-            Toast.makeText(this, "onQPyExec: return ("+result+")", Toast.LENGTH_SHORT).show();
-        } else {
-            Toast.makeText(this, "onQPyExec: data is null", Toast.LENGTH_SHORT).show();
-
-        }
-    }
-}
-
-
-

Checkout the full project from github

-

And there is a production application - QPython Plugin for Tasker

-
-
-
-

QPython Online Service

-

Now the QPython online service only open for QPython, not QPython3.

-
-

QPypi

-

Can I install some packages which required pre-compiled ? -Sure, you could install some pre-compiled packages from QPypi, you could find it through “Libraries” on dashboard.

-../images/guide_extend_pic2.png -

If you couldn’t found the package here, you could send email to river@qpython.org .

-
-
-

QPY.IO

-

Can I build an independent APK from QPython script?

-

Sure you can. now the service is in BETA, it’s a challenging thing. We will publish it as a online service, for we want to let the development process is simple, you don’t need to own the development environment set up when you want to build a application.

-../images/guide_extend_pic1.png -

If you want to try it out or have some business proposal, please contact with us by sending email to river@qpython.org .

-
-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/en/guide_helloworld.html b/docs/en/guide_helloworld.html deleted file mode 100644 index b3abc52..0000000 --- a/docs/en/guide_helloworld.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - - - - - - Writing “Hello World” — QPython 0.9 documentation - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
- -
-
- - - - -
-
-
- -
-

Writing “Hello World”

-
-

Hello world

-hello world -

Well, after you became a bit more familiar with QPython, let’s create our first program in QPython. Obviously, it will be helloworld.py. ;)

-

Start QPython, open editor and enter the following code:

-
import androidhelper
-droid = androidhelper.Android()
-droid.makeToast('Hello, Username!')
-
-
-

No wonder, it’s just similar to any other hello-world program. When executed, it just shows pop-up message on the screen (see screenshot on the top). Anyway, it’s a good example of QPython program.

-
-
-

SL4A library

-

It begins with import androidhelper — the most useful module in QPython, which encapsulates almost all interface with Android, available in Python. Any script developed in QPython starts with this statement (at least if it claims to communicate with user). Read more about Python library here and import statement here

-

By the way, if you’re going to make your script compatible with SL4A, you should replace the first line with the following code (and use android instead androidhelper further in the program):

-
>    try:
->        import androidhelper as android
->    except ImportError:
->        import android
-
-
-

Ok, next we’re creating an object droid (actually a class), it is necessary to call RPC functions in order to communicate with Android.

-

And the last line of our code calls such function, droid.makeToast(), which shows a small pop-up message (a “toast”) on the screen.

-

Well, let’s add some more functionality. Let it ask the user name and greet them.

-
-
-

More samples

-

We can display a simple dialog box with the title, prompt, edit field and buttons Ok and Cancel using dialogGetInput call. Replace the last line of your code and save it as hello1.py:

-
import androidhelper
-droid = androidhelper.Android()
-respond = droid.dialogGetInput("Hello", "What is your name?")
-
-
-

Well, I think it should return any respond, any user reaction. That’s why I wrote respond = …. But what the call actually returns? Let’s check. Just add print statement after the last line:

-
import androidhelper
-droid = androidhelper.Android()
-respond = droid.dialogGetInput("Hello", "What is your name?")
-print respond
-
-
-

Then save and run it…

-

Oops! Nothing printed? Don’t worry. Just pull notification bar and you will see “QPython Program Output: hello1.py” — tap it!

-

As you can see, droid.dialogGetInput() returns a JSON object with three fields. We need only one — result which contains an actual input from user.

-

Let’s add script’s reaction:

-
import androidhelper
-droid = androidhelper.Android()
-respond = droid.dialogGetInput("Hello", "What is your name?")
-print respond
-message = 'Hello, %s!' % respond.result
-droid.makeToast(message)
-
-
-

Last two lines (1) format the message and (2) show the message to the user in the toast. See Python docs if you still don’t know what % means.

-

Wow! It works! ;)

-

Now I’m going to add a bit of logic there. Think: what happen if the user clicks Cancel button, or clicks Ok leaving the input field blank?

-

You can play with the program checking what contains respond variable in every case.

-

First of all, I want to put text entered by user to a separate variable: name = respond.result. Then I’m going to check it, and if it contains any real text, it will be considered as a name and will be used in greeting. Otherwise another message will be shown. Replace fifth line message = ‘Hello, %s!’ % respond.result with the following code:

-
name = respond.result
-if name:
-    message = 'Hello, %s!' % name
-else:
-    message = "Hey! And you're not very polite, %Username%!"
-
-
-

Use < and > buttons on the toolbar to indent/unindent lines in if-statement (or just use space/backspace keys). You can read more about indentation in Python here; if-statement described here.

-

First of all, we put user input to the variable name. Then we check does name contain anything? In case the user left the line blank and clicked Ok, the return value is empty string ‘’. In case of Cancel button pressed, the return value is None. Both are treated as false in if-statement. So, only if name contans anything meaninful, then-statement is executed and greeting “Hello, …!” shown. In case of empty input the user will see “Hey! And you’re not very polite, %Username%!” message.

-

Ok, here is the whole program:

-
import androidhelper
-droid = androidhelper.Android()
-respond = droid.dialogGetInput("Hello", "What is your name?")
-print respond
-name = respond.result
-if name:
-    message = 'Hello, %s!' % name
-else:
-    message = "Hey! And you're not very polite, %Username%!"
-droid.makeToast(message)
-
-
-

Thanks dmych offer the first draft in his blog

-
-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/en/guide_howtostart.html b/docs/en/guide_howtostart.html deleted file mode 100644 index 72e6dd6..0000000 --- a/docs/en/guide_howtostart.html +++ /dev/null @@ -1,269 +0,0 @@ - - - - - - - - - QPython: How To Start — QPython 0.9 documentation - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
- -
-
- - - - -
-
-
- -
-

QPython: How To Start

-

Now, I will introduce the QPython’s features through it’s interfaces.

-
-

1. Dashboard

-QPython start -

After you installed QPython, start it in the usual way by tapping its icon in the menu. Screenshot on the top of this post shows what you should see when QPython just started.

-

Start button

-

By tapping the big button with Python logo in the center of the screen you can

-

Launch your local script or project

-

Get script from QR code (funny brand new way to share and distribute your code, you can create QRCode through QPython’s QRCode generator

-

Now you can install many 3rd libaries ( pure python libraries mainly ) through pip_console.py script.

-

If you want QPython to run some script of project when you click the start button, you can make it by setting default program in setting activity.

-

Developer kit dashboard

-

If you swipe to the left instead of tapping, you will see another (second) main screen of QPython (Pic. 2). As for me, it is much more useful and comfortable for developer.

-QPython develop dashboard -

Tools available here:

-
    -
  • Console — yes, it’s regular Python console, feel free to comunicate with interpreter directly

  • -
  • Editor — QPython has a nice text editor integrated with the rest, you can write code and run it without leaving the application

  • -
  • My QPython — here you can find your scripts and projects

  • -
  • System — maintain libraries and components: install and uninstall them

  • -
  • Package Index opens the page QPyPI in browser allowing to install packages listed there

  • -
  • Community leads to QPython.org page. Feel free to join or ask&answer questions in the QPython community.

  • -
-

By long clicking on the console or editor, you have chance to create the shortcut on desktop which allow you enter console or editor directly.

-

Next, let’s see the console and the editor.

-
-
-

2. Console and editor

-QPython console -

As I said before, there is an ordinary Python console. Many people usually use it to explore objects’ properties, consult about syntax and test their ideas. You can type your commands directly and Python interpreter will execute them. You can open additional consoles by tapping the plus button (1) and usedrop-down list on the upper left corner to switch between consoles (2). To close the console just tap the close button (3).

-QPython notification -

Please note, there will be notification in the notification bar unless you explicitly close the console and you always can reach the open console by tapping the notification.

-QPython editor -

The editor allows you obviously (hello Cap!) enter and modify text. Here you can develop your scripts, save them and execute. The editor supports Python syntax highlighting and shows line numbers (there is no ability to go to the line by number though). (above picture)

-

When typing, you can easily control indentation level (which is critical for Python code) using two buttons on the toolbar (1). Next buttons on the toolbar are Save and Save As (2), then goes Run (3), Undo, Search, Recent Files and Settings buttons. Also there are two buttons on the top: Open and New (5).

-

When saving, don’t forget to add .py estension to the file name since the editor don’t do it for you.

-
-
-

3. Programs

-

You can find the scripts or projects in My QPython. My QPython contains the scripts and Projects.

-

By long clicking on script or project, you have chance to create the shortcut for the script or project. Once you have created the shortcuts on desktop, you can directly run the script or project from desktop.

-

Scripts -Scripts : A single script. The scripts are in the /sdcard/com.hipipal.qpyplus/scripts directory. -If you want your script could be found in My QPython, please upload it to this directory.

-

When you click the script, you can choose the following actions:

-
    -
  • Run : Run the script

  • -
  • Open : Edit the script with built-in editor

  • -
  • Rename : Rename the script

  • -
  • Delete : Delete the script

  • -
-

Projects -Projects : A directory which should contain the main.py as the project’s default launch script, and you can put other dependency 3rd libraries or resources in the same directory, if you want your project could be found in My QPython, please upload them into this directory.

-

When you click on the project, you can choose the following actions:

-
    -
  • Run : run the project

  • -
  • Open : use it to explore project’s resources

  • -
  • Rename : Rename the project

  • -
  • Delete : Delete the project

  • -
-
-
-

4. Libraries

-

By installing 3rd libraries, you can extend your qpython’s programming ability quickly. There are some ways to install libraries.

-

QPypi

-

You can install some pre-built libraries from QPypi, like numpy etc.

-

Pip console

-

You can install most pure python libraries through pip console.

-

Besides the two ways above, you could copy libraries into the /sdcard/qpython/lib/python2.7/site-packages in your device.

-

Notice: -Some libraries mixed with c/c++ files could not be install through pip console for the android lacks the compiler environment, you could ask help from qpython developer team.

-
-
-

5. Community

-

It will redirect to the QPython.org, including somthe source of this documentation, and there are some qpython user communities’ link, many questions of qpython usage or programming could be asked in the community.

-

Thanks dmych offer the first draft in his blog

-
-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/en/guide_ide.html b/docs/en/guide_ide.html deleted file mode 100644 index 6fa6401..0000000 --- a/docs/en/guide_ide.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - - - - - - Use the best way for developing — QPython 0.9 documentation - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
- -
-
- - - - -
-
-
- -
-

Use the best way for developing

-
-

Develop from QEditor

-

QEditor is the QPython’s built-in editor, which supports Python / HTML syntax highlight.

-

QEditor’s main features

-
    -
  • Edit / View plain text file, like Python, Lua, HTML, Javascript and so on

  • -
  • Edit and run Python script & Python syntax highlight

  • -
  • Edit and run Shell script

  • -
  • Preview HTML with built-in HTML browser

  • -
  • Search by keyword, code snippets, code share

  • -
-

You could run the QPython script directly when you develop from QEditor, so when you are moving it’s the most convient way for QPython develop.

-
-
-

Develop from browser

-

QPython has a built-in script which is qedit4web.py, you could see it when you click the start button and choose “Run local script”. -After run it, you could see the result.

-QPython qedit4web -

Then, you could access the url from your PC/Laptop’s browser for developing, just like the below pics.

-QPython qedit4web choose project or file -

After choose some project or script, you could start to develop

-QPython qedit4web -

With it’s help, you could write from browser and run from your android phone. It is very convenient.

-
-
-

Develop from your computer

-

Besides the above ways, you could develop the script with your way, then upload to your phone and run with QPython also.

-
-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/en/guide_libraries.html b/docs/en/guide_libraries.html deleted file mode 100644 index eccd84c..0000000 --- a/docs/en/guide_libraries.html +++ /dev/null @@ -1,750 +0,0 @@ - - - - - - - - - QPython built-in Libraries — QPython 0.9 documentation - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
- -
-
- - - - -
-
-
- -
-

QPython built-in Libraries

-

QPython is using the Python 2.7.2 and it support most Python stardard libraries. And you could see their documentation through Python documentation.

-
-

QPython dynload libraries

-

Just like Python, QPython contains python built-in .so libraries.

-

Usually, you don’t need to import them manually, they were used in stardard libraries, and could be imported automatically.

-
    -
  • _codecs_cn.so

  • -
  • _codecs_hk.so

  • -
  • _codecs_iso2022.so

  • -
  • _codecs_jp.so

  • -
  • _codecs_kr.so

  • -
  • _codecs_tw.so

  • -
  • _csv.so

  • -
  • _ctypes.so

  • -
  • _ctypes_test.so

  • -
  • _hashlib.so

  • -
  • _heapq.so

  • -
  • _hotshot.so

  • -
  • _io.so

  • -
  • _json.so

  • -
  • _lsprof.so

  • -
  • _multibytecodec.so

  • -
  • _sqlite3.so

  • -
  • _ssl.so

  • -
  • _testcapi.so

  • -
  • audioop.so

  • -
  • future_builtins.so

  • -
  • grp.so

  • -
  • mmap.so

  • -
  • resource.so

  • -
  • syslog.so

  • -
  • termios.so

  • -
  • unicodedata.so

  • -
-
-
-

QPython stardard libraries

-

The following libraries are the stardard QPython libraries which are the same as Python:

-
    -
  • BaseHTTPServer.py

  • -
  • binhex.py

  • -
  • fnmatch.py

  • -
  • mhlib.py

  • -
  • quopri.py

  • -
  • sysconfig.py

  • -
  • Bastion.py

  • -
  • bisect.py

  • -
  • formatter.py

  • -
  • mimetools.py

  • -
  • random.py

  • -
  • tabnanny.py

  • -
  • CGIHTTPServer.py

  • -
  • bsddb

  • -
  • fpformat.py

  • -
  • mimetypes.py

  • -
  • re.py

  • -
  • tarfile.py

  • -
  • ConfigParser.py

  • -
  • cProfile.py

  • -
  • fractions.py

  • -
  • mimify.py

  • -
  • repr.py

  • -
  • telnetlib.py

  • -
  • Cookie.py

  • -
  • calendar.py

  • -
  • ftplib.py

  • -
  • modulefinder.py

  • -
  • rexec.py

  • -
  • tempfile.py

  • -
  • DocXMLRPCServer.py

  • -
  • cgi.py

  • -
  • functools.py

  • -
  • multifile.py

  • -
  • rfc822.py

  • -
  • textwrap.py

  • -
  • HTMLParser.py

  • -
  • cgitb.py

  • -
  • genericpath.py

  • -
  • mutex.py

  • -
  • rlcompleter.py

  • -
  • this.py

  • -
  • chunk.py

  • -
  • getopt.py

  • -
  • netrc.py

  • -
  • robotparser.py

  • -
  • threading.py

  • -
  • MimeWriter.py

  • -
  • cmd.py

  • -
  • getpass.py

  • -
  • new.py

  • -
  • runpy.py

  • -
  • timeit.py

  • -
  • Queue.py

  • -
  • code.py

  • -
  • gettext.py

  • -
  • nntplib.py

  • -
  • sched.py

  • -
  • toaiff.py

  • -
  • SimpleHTTPServer.py

  • -
  • codecs.py

  • -
  • glob.py

  • -
  • ntpath.py

  • -
  • sets.py

  • -
  • token.py

  • -
  • SimpleXMLRPCServer.py

  • -
  • codeop.py

  • -
  • gzip.py

  • -
  • nturl2path.py

  • -
  • sgmllib.py

  • -
  • tokenize.py

  • -
  • SocketServer.py

  • -
  • collections.py

  • -
  • hashlib.py

  • -
  • numbers.py

  • -
  • sha.py

  • -
  • trace.py

  • -
  • StringIO.py

  • -
  • colorsys.py

  • -
  • heapq.py

  • -
  • opcode.py

  • -
  • shelve.py

  • -
  • traceback.py

  • -
  • UserDict.py

  • -
  • commands.py

  • -
  • hmac.py

  • -
  • optparse.py

  • -
  • shlex.py

  • -
  • tty.py

  • -
  • UserList.py

  • -
  • compileall.py

  • -
  • hotshot

  • -
  • os.py

  • -
  • shutil.py

  • -
  • types.py

  • -
  • UserString.py

  • -
  • compiler

  • -
  • htmlentitydefs.py

  • -
  • os2emxpath.py

  • -
  • site.py

  • -
  • unittest

  • -
  • _LWPCookieJar.py

  • -
  • config

  • -
  • htmllib.py

  • -
  • smtpd.py

  • -
  • urllib.py

  • -
  • _MozillaCookieJar.py

  • -
  • contextlib.py

  • -
  • httplib.py

  • -
  • pdb.py

  • -
  • smtplib.py

  • -
  • urllib2.py

  • -
  • __future__.py

  • -
  • cookielib.py

  • -
  • ihooks.py

  • -
  • pickle.py

  • -
  • sndhdr.py

  • -
  • urlparse.py

  • -
  • __phello__.foo.py

  • -
  • copy.py

  • -
  • imaplib.py

  • -
  • pickletools.py

  • -
  • socket.py

  • -
  • user.py

  • -
  • _abcoll.py

  • -
  • copy_reg.py

  • -
  • imghdr.py

  • -
  • pipes.py

  • -
  • sqlite3

  • -
  • uu.py

  • -
  • _pyio.py

  • -
  • csv.py

  • -
  • importlib

  • -
  • pkgutil.py

  • -
  • sre.py

  • -
  • uuid.py

  • -
  • _strptime.py

  • -
  • ctypes

  • -
  • imputil.py

  • -
  • plat-linux4

  • -
  • sre_compile.py

  • -
  • warnings.py

  • -
  • _threading_local.py

  • -
  • dbhash.py

  • -
  • inspect.py

  • -
  • platform.py

  • -
  • sre_constants.py

  • -
  • wave.py

  • -
  • _weakrefset.py

  • -
  • decimal.py

  • -
  • io.py

  • -
  • plistlib.py

  • -
  • sre_parse.py

  • -
  • weakref.py

  • -
  • abc.py

  • -
  • difflib.py

  • -
  • json

  • -
  • popen2.py

  • -
  • ssl.py

  • -
  • webbrowser.py

  • -
  • aifc.py

  • -
  • dircache.py

  • -
  • keyword.py

  • -
  • poplib.py

  • -
  • stat.py

  • -
  • whichdb.py

  • -
  • antigravity.py

  • -
  • dis.py

  • -
  • lib-tk

  • -
  • posixfile.py

  • -
  • statvfs.py

  • -
  • wsgiref

  • -
  • anydbm.py

  • -
  • distutils

  • -
  • linecache.py

  • -
  • posixpath.py

  • -
  • string.py

  • -
  • argparse.py

  • -
  • doctest.py

  • -
  • locale.py

  • -
  • pprint.py

  • -
  • stringold.py

  • -
  • xdrlib.py

  • -
  • ast.py

  • -
  • dumbdbm.py

  • -
  • logging

  • -
  • profile.py

  • -
  • stringprep.py

  • -
  • xml

  • -
  • asynchat.py

  • -
  • dummy_thread.py

  • -
  • macpath.py

  • -
  • pstats.py

  • -
  • struct.py

  • -
  • xmllib.py

  • -
  • asyncore.py

  • -
  • dummy_threading.py

  • -
  • macurl2path.py

  • -
  • pty.py

  • -
  • subprocess.py

  • -
  • xmlrpclib.py

  • -
  • atexit.py

  • -
  • email

  • -
  • mailbox.py

  • -
  • py_compile.py

  • -
  • sunau.py

  • -
  • zipfile.py

  • -
  • audiodev.py

  • -
  • encodings

  • -
  • mailcap.py

  • -
  • pyclbr.py

  • -
  • sunaudio.py

  • -
  • base64.py

  • -
  • filecmp.py

  • -
  • markupbase.py

  • -
  • pydoc.py

  • -
  • symbol.py

  • -
  • bdb.py

  • -
  • fileinput.py

  • -
  • md5.py

  • -
  • pydoc_data

  • -
  • symtable.py

  • -
-
-
-
-

Python 3rd Libraries

- -
-
-

Androidhelper APIs

-

To simplify QPython SL4A development in IDEs with a -“hepler” class derived from the default Android class containing -SL4A facade functions & API documentation

-
- -
-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/en/guide_program.html b/docs/en/guide_program.html deleted file mode 100644 index b66d2b9..0000000 --- a/docs/en/guide_program.html +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - - - QPython’s main features — QPython 0.9 documentation - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
- -
-
- - - - -
-
-
- -
-

QPython’s main features

-

With QPython, you could build android applications with android application and script language now.

-
-

Why should I choose QPython

-

The smartphone is becomming people’s essential information & technical assitant, so an flexiable script engine could help people complete most jobs efficiently without complex development.

-

QPython offer an amazing developing experience, with it’s help, you could implement the program easily without complex installing IDE, compiling, package progress etc.

-
-
-

QPython’s main features

-

You can do most jobs through QPython just like the way that Python does on PC/Laptop.

-

Libraries

-
    -
  • QPython supports most stardard Python libraries.

  • -
  • QPython supports many 3rd Python libraries which implemented with pure Python code.

  • -
  • QPython supports some Python libraries mixed with C/C++ code which pre-compiled by QPython develop team.

  • -
  • QPython allows you put on the libraries by yourself.

  • -
-

Besides these, QPython offers some extra features which Python doesn’t offer, Like:

-
    -
  • Android APIs Access(Like SMS, GPS, NFC, BLUETOOTH etc)

  • -
-

Why QPython require so many permissions?

-

QPython need these permissions to access Android’s API.

-

Runtime modes

-

QPython supports several runtime modes for android.

-

Console mode

-

It’s the default runtime mode in QPython, it’s very common in PC/laptop.

-

Kivy mode

-

QPython supports Kivy as the GUI programming solution.

-

Kivy is an open source Python library for rapid development of applications that make use of innovative user interfaces, such as multi-touch apps.

-

Your device should support opengl2.0 for supporting kivy mode.

-

By insert into the following header in your script, you can let your script run with kivy mode.

-
#qpy:kivy
-
-
-

An kivy program in QPython sample

-
#qpy:kivy
-from kivy.app import App
-from kivy.uix.button import Button
-
-class TestApp(App):
-    def build(self):
-        return Button(text='Hello World')
-
-TestApp().run()
-
-
-

If your library require the opengl driver, you shoule declare the kivy mode header in your script, like the jnius.

-

NOTE: QPython3 didn’t support kivy mode yet, we have plan to support it in the future

-

WebApp mode

-

We recommend you implement WebApp with QPython for it offer the easy to accomplish UI and Take advantage of Python’s fast programming strong point.

-

WebApp will start a webview in front, and run a python web service background. -You could use bottle*(QPython built-in library) to implement the web service, or you could install *django / flask framework also.

-

By insert into the following header in your script, you can let your script run with webapp mode.

-
#qpy:webapp:<app title>
-#qpy:<fullscreen or remove this line>
-#qpy://<ip:port:path>
-
-
-

For example

-
#qpy:webapp:Hello QPython
-#qpy://localhost:8080/hello
-
-
-

The previous should start a webview which should load the http://localhost:8080/hello as the default page, and the webview will keep the titlebar which title is “Hello QPython”, if you add the #qpy:fullscreen it will hide the titlebar.

-
#qpy:webapp:Hello Qpython
-#qpy://127.0.0.1:8080/
-"""
-This is a sample for qpython webapp
-"""
-
-from bottle import Bottle, ServerAdapter
-from bottle import run, debug, route, error, static_file, template
-
-
-######### QPYTHON WEB SERVER ###############
-
-class MyWSGIRefServer(ServerAdapter):
-    server = None
-
-    def run(self, handler):
-        from wsgiref.simple_server import make_server, WSGIRequestHandler
-        if self.quiet:
-            class QuietHandler(WSGIRequestHandler):
-                def log_request(*args, **kw): pass
-            self.options['handler_class'] = QuietHandler
-        self.server = make_server(self.host, self.port, handler, **self.options)
-        self.server.serve_forever()
-
-    def stop(self):
-        #sys.stderr.close()
-        import threading
-        threading.Thread(target=self.server.shutdown).start()
-        #self.server.shutdown()
-        self.server.server_close() #<--- alternative but causes bad fd exception
-        print "# qpyhttpd stop"
-
-
-######### BUILT-IN ROUTERS ###############
-@route('/__exit', method=['GET','HEAD'])
-def __exit():
-    global server
-    server.stop()
-
-@route('/assets/<filepath:path>')
-def serverstatic(filepath):
-    return static_file(filepath, root='/sdcard')
-
-
-######### WEBAPP ROUTERS ###############
-@route('/')
-def home():
-    return template('<h1>Hello {{name}} !</h1>'+ \
-    '<a href="/assets/qpython/projects/WebApp Sample/main.py">View source</a>',name='QPython')
-
-
-######### WEBAPP ROUTERS ###############
-app = Bottle()
-app.route('/', method='GET')(home)
-app.route('/__exit', method=['GET','HEAD'])(__exit)
-app.route('/assets/<filepath:path>', method='GET')(serverstatic)
-
-try:
-    server = MyWSGIRefServer(host="127.0.0.1", port="8080")
-    app.run(server=server,reloader=False)
-except Exception,ex:
-    print "Exception: %s" % repr(ex)
-
-
-

If you want the webapp could be close when you exit the webview, you have to define the @route(‘/__exit’, method=[‘GET’,’HEAD’]) method , for the qpython will request the http://localhost:8080/__exit when you exit the webview. So you can release other resource in this function.

-QPython WebApp Sample -

Running screenshot

-

In the other part of the code, you could implement a webserver whish serve on localhost:8080 and make the URL /hello implement as your webapp’s homepage.

-

Q mode

-

If you don’t want the QPython display some UI, pelase try to use the QScript mode, it could run a script background, just insert the following header into your script:

-
#qpy:qpyapp
-
-
-
-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/en/qpypi.html b/docs/en/qpypi.html deleted file mode 100644 index 4892ca1..0000000 --- a/docs/en/qpypi.html +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - - - - QPYPI — QPython 0.9 documentation - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
-
-
- - -
-
-
-
- - - - -
-
-
- -
-

QPYPI

-

You can extend your QPython capabilities by installing packages. -Because of different computer architectures, we cannot guarantee that QPYPI includes all packages in PYPI. -If you want us to support a package that is not currently supported, you can raise an issue in the QPYPI project

-
-

QPySLA Package

-
-

qsl4ahelper

-

It extends qpysl4a’s APIs. Now the below project depends on it. -https://github.com/qpython-android/qpy-calcount

-
-
-
-

AIPY Packages

-

AIPY is a high-level AI learning app, based on related libraries like Numpy, Scipy, theano, keras, etc…. It was developed with a focus on helping you learn and practise AI programming well and fast.

-
-

Numpy

-

NumPy is the fundamental package needed for scientific computing with Python. This package contains:

-
a powerful N-dimensional array object
-sophisticated (broadcasting) functions
-basic linear algebra functions
-basic Fourier transforms
-sophisticated random number capabilities
-tools for integrating Fortran code
-tools for integrating C/C++ code
-
-
-
-
-

Scipy

-

SciPy refers to several related but distinct entities:

-
The SciPy ecosystem, a collection of open source software for scientific computing in Python.
-The community of people who use and develop this stack.
-Several conferences dedicated to scientific computing in Python - SciPy, EuroSciPy and SciPy.in.
-The SciPy library, one component of the SciPy stack, providing many numerical routines.
-
-
-
-
-
-

Other

-
-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/en/qpython3.html b/docs/en/qpython3.html deleted file mode 100644 index 9d8a82b..0000000 --- a/docs/en/qpython3.html +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - - - <no title> — QPython 0.9 documentation - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
-
-
- - -
-
-
-
- -
    -
  • Guide »
  • - -
  • <no title>
  • -
- - -
-
-
- -

# About QPython 3L -QPython is the Python engine for android. It contains some amazing features such as Python interpreter, runtime environment, editor and QPYI and integrated SL4A. It makes it easy for you to use Python on Android. And it’s FREE.

-

QPython already has millions of users worldwide and it is also an open source project.

-

For different usage scenarios, QPython has two branches, namely QPython Ox and 3x.

-

QPython Ox is mainly aimed at programming learners, and it provides more friendly features for beginners. QPython 3x is mainly for experienced Python users, and it provides some advanced technical features.

-

This is the QPython 3L, it is the only Python interpreter which works under android 4.0 in google play.

-

# Amazing Features -- Offline Python 3 interpreter: no Internet is required to run Python programs -- It supports running multiple types of projects, including: console program, SL4A program, webapp program -- Convenient QR code reader for transferring codes to your phone -- QPYPI and a custom repository for prebuilt wheel packages for enhanced scientific libraries, such as numpy, scipy, matplotlib, scikit-learn etc -- Easy-to-use editor -- INTEGRATED & EXTENDED SCRIPT LAYER FOR ANDROID LIBRARY (SL4A): IT LETS YOU DRIVE THE ANDROID WORK WITH PYTHON -- Good documentation and customer support

-

# SL4A Features -With SL4A features, you can use Python programming to control Android work:

-
    -
  • Android Apps API, such as: Application, Activity, Intent & startActivity, SendBroadcast, PackageVersion, System, Toast, Notify, Settings, Preferences, GUI

  • -
  • Android Resources Manager, such as: Contact, Location, Phone, Sms, ToneGenerator, WakeLock, WifiLock, Clipboard, NetworkStatus, MediaPlayer

  • -
  • Third App Integrations, such as: Barcode, Browser, SpeechRecongition, SendEmail, TextToSpeech

  • -
  • Hardwared Manager: Carmer, Sensor, Ringer & Media Volume, Screen Brightness, Battery, Bluetooth, SignalStrength, WebCam, Vibrate, NFC, USB

  • -
-

[ API Documentation Link ] -https://github.com/qpython-android/qpysl4a/blob/master/README.md

-

[ API Samples ] -https://github.com/qpython-android/qpysl4a/issues/1

-

[ IMPORTANT NOTE ] -IT MAY REQUIRE THE BLUETOOTH / LOCATION / READ_SMS / SEND_SMS / CALL_PHONE AND OTHER PERMISSIONS, SO THAT YOU CAN PROGRAM ITH THESE FEATURES. QPYTHON WILL NOT USE THESE PERMISSIONS IN BACKGROUND.

-

IF YOU GET EXCEPTION IN RUNTIME WHILE USING SL4A API, PLEASE CHECK WHETHER THE RELEVANT PERMISSIONS IN THE SYSTEM SETTINGS ARE ENABLED.

-

# How To Get Professional Customer Support -Please follow the guide to get support https://github.com/qpython-android/qpython/blob/master/README.md

-

[ QPython community ] -https://www.facebook.com/groups/qpython

-

[ FAQ ] -A: Why can’t I use the SMS API of SL4A -Q: Because Google Play and some app stores have strict requirements on the permissions of apps, in QPython 3x, we use x to distinguish branches with different permissions or appstores. For example, L means LIMITED and S means SENSITIVE. -Sometimes you cannot use the corresponding SL4A APIs because the version you installed does not have the corresponding permissions, so you can consider replace what you have installed with the right one.

-

You can find other versions here: -https://www.qpython.org/en/qpython_3x_featues.html

- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/en/qpython_3x_featues.html b/docs/en/qpython_3x_featues.html deleted file mode 100644 index dd80acc..0000000 --- a/docs/en/qpython_3x_featues.html +++ /dev/null @@ -1,266 +0,0 @@ - - - - - - - - - QPython 3x featues — QPython 0.9 documentation - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
-
-
- - -
-
-
-
- -
    -
  • Guide »
  • - -
  • QPython 3x featues
  • -
- - -
-
-
- -
-

QPython 3x featues

-

QPython 3x, Previously it was QPython3.

-

A: Why are there so many branches?

-

Q: Because Google Play and some appstores have strict requirements for application permissions, -they require different permissions, we use different branch codes, for example, 3 means it was QPython3, -L means LIMITED, S means SENSITIVE permission is required.

-

A: I know there was a QPython before, what is the difference between it and QPython 3x?

-

Q: It is now called QPython Ox now, which is mainly aimed at programming learners, and -it provides more friendly features for beginners. QPython 3x is mainly for experienced -Python users, and it provides some advanced technical features.

-

A: Where can I get different branches or versions ?

-

Q: Take a look at this link.

-
-

WHAT’S NEW

-
-

QPython 3x v3.0.0 (Published on 2020/2/1)

-

This is the first version after we restarting the QPython project

- -
-
-
-

App’s Features

-
    -
  • Offline Python 3 interpreter: no Internet is required to run Python programs

  • -
  • It supports running multiple types of projects, including: console program, SL4A program, webapp program

  • -
  • Convenient QR code reader for transferring codes to your phone

  • -
  • QPYPI and a custom repository for prebuilt wheel packages for enhanced scientific libraries, such as numpy, scipy, matplotlib, scikit-learn etc

  • -
  • Easy-to-use editor

  • -
  • INTEGRATED & EXTENDED SCRIPT LAYER FOR ANDROID LIBRARY (SL4A): IT LETS YOU DRIVE THE ANDROID WORK WITH PYTHON

  • -
  • Good documentation and customer support

  • -
-
-
-

Android Permissions that QPython requires

-

QPython require the BLUETOOTH / LOCATION / BLUETOOTH and OTHER permissions, so that you can program using these FEATURES. AND WE WILL NOT USE THIS PERMISSIONS IN BACKGROUND.

-
-

Both QPython 3S and 3L

-
    -
  • android.permission.INTERNET

  • -
  • android.permission.WAKE_LOCK

  • -
  • android.permission.ACCESS_NETWORK_STATE

  • -
  • android.permission.CHANGE_NETWORK_STATE

  • -
  • android.permission.ACCESS_WIFI_STATE

  • -
  • android.permission.CHANGE_WIFI_STATE

  • -
  • android.permission.RECEIVE_BOOT_COMPLETED

  • -
  • android.permission.CAMERA

  • -
  • android.permission.FLASHLIGHT

  • -
  • android.permission.VIBRATE

  • -
  • android.permission.RECEIVE_USER_PRESENT

  • -
  • com.android.vending.BILLING

  • -
  • com.android.launcher.permission.INSTALL_SHORTCUT

  • -
  • com.android.launcher.permission.UNINSTALL_SHORTCUT

  • -
  • android.permission.READ_EXTERNAL_STORAGE

  • -
  • android.permission.WRITE_EXTERNAL_STORAGE

  • -
  • android.permission.READ_MEDIA_STORAGE

  • -
  • android.permission.ACCESS_COARSE_LOCATION

  • -
  • android.permission.ACCESS_FINE_LOCATION

  • -
  • android.permission.FOREGROUND_SERVICE

  • -
  • android.permission.BLUETOOTH

  • -
  • android.permission.BLUETOOTH_ADMIN

  • -
  • android.permission.NFC

  • -
  • android.permission.RECORD_AUDIO

  • -
  • android.permission.ACCESS_NOTIFICATION_POLICY

  • -
  • android.permission.KILL_BACKGROUND_PROCESSES

  • -
  • net.dinglisch.android.tasker.PERMISSION_RUN_TASKS

  • -
-
-
-

QPython 3S

-
    -
  • android.permission.ACCESS_SUPERUSER

  • -
  • android.permission.READ_SMS

  • -
  • android.permission.SEND_SMS

  • -
  • android.permission.RECEIVE_SMS

  • -
  • android.permission.WRITE_SMS

  • -
  • android.permission.READ_PHONE_STATE

  • -
  • android.permission.CALL_PHONE

  • -
  • android.permission.READ_CALL_LOG

  • -
  • android.permission.PROCESS_OUTGOING_CALLS

  • -
  • android.permission.READ_CONTACTS

  • -
  • android.permission.GET_ACCOUNTS

  • -
  • android.permission.SYSTEM_ALERT_WINDOW

  • -
-
-
-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/en/qpython_ox_featues.html b/docs/en/qpython_ox_featues.html deleted file mode 100644 index 5cbea3d..0000000 --- a/docs/en/qpython_ox_featues.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - - - - QPython Ox featues — QPython 0.9 documentation - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
-
-
- - -
-
-
-
- -
    -
  • Guide »
  • - -
  • QPython Ox featues
  • -
- - -
-
-
- -
-

QPython Ox featues

-

Because google play and some appstores have strict requirements on the permissions of the app, we use different strategies in different appstores, which is why the branch name will be different. For example, L means Limited, and S means it contains Sensitive permissions.

-
-

Python

-
    -
  • Python3 + Python2 basis

  • -
  • QRCode Reader

  • -
  • Editor

  • -
  • QPYPI

  • -
  • Ftp

  • -
  • Course

  • -
-
-
-

Permissions

-
-

Both QPython OL and OS

-
    -
  • android.permission.INTERNET

  • -
  • android.permission.WAKE_LOCK

  • -
  • android.permission.ACCESS_NETWORK_STATE

  • -
  • android.permission.CHANGE_NETWORK_STATE

  • -
  • android.permission.ACCESS_WIFI_STATE

  • -
  • android.permission.CHANGE_WIFI_STATE

  • -
  • android.permission.RECEIVE_BOOT_COMPLETED

  • -
  • android.permission.CAMERA

  • -
  • android.permission.FLASHLIGHT

  • -
  • android.permission.VIBRATE

  • -
  • android.permission.RECEIVE_USER_PRESENT

  • -
  • com.android.vending.BILLING

  • -
  • com.android.launcher.permission.INSTALL_SHORTCUT

  • -
  • com.android.launcher.permission.UNINSTALL_SHORTCUT

  • -
  • android.permission.READ_EXTERNAL_STORAGE

  • -
  • android.permission.WRITE_EXTERNAL_STORAGE

  • -
  • android.permission.READ_MEDIA_STORAGE

  • -
  • android.permission.ACCESS_COARSE_LOCATION

  • -
  • android.permission.ACCESS_FINE_LOCATION

  • -
  • android.permission.FOREGROUND_SERVICE

  • -
  • android.permission.BLUETOOTH

  • -
  • android.permission.BLUETOOTH_ADMIN

  • -
  • android.permission.NFC

  • -
  • android.permission.RECORD_AUDIO

  • -
  • android.permission.ACCESS_NOTIFICATION_POLICY

  • -
  • android.permission.KILL_BACKGROUND_PROCESSES

  • -
  • net.dinglisch.android.tasker.PERMISSION_RUN_TASKS

  • -
-
-
-

QPython OS

-
    -
  • android.permission.ACCESS_SUPERUSER

  • -
  • android.permission.SEND_SMS

  • -
  • android.permission.READ_SMS

  • -
  • android.permission.SEND_SMS

  • -
  • android.permission.RECEIVE_SMS

  • -
  • android.permission.WRITE_SMS

  • -
  • android.permission.READ_PHONE_STATE

  • -
  • android.permission.CALL_PHONE

  • -
  • android.permission.READ_CALL_LOG

  • -
  • android.permission.PROCESS_OUTGOING_CALLS

  • -
  • android.permission.READ_CONTACTS

  • -
  • android.permission.GET_ACCOUNTS

  • -
  • android.permission.SYSTEM_ALERT_WINDOW

  • -
-
-
-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/features/2018-09-28-dropbear-cn.html b/docs/features/2018-09-28-dropbear-cn.html deleted file mode 100644 index 2e97b16..0000000 --- a/docs/features/2018-09-28-dropbear-cn.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - - - - 如何在QPython 使用 SSH — QPython 0.9 documentation - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
-
-
- - -
-
-
-
- -
    -
  • Guide »
  • - -
  • 如何在QPython 使用 SSH
  • -
- - -
-
-
- -
-

如何在QPython 使用 SSH

-

近来悄悄更新了不少好玩的包,但是我最喜欢的是今天介绍的这个特性,刚被集成到QPython中的dropbear SSH工具。

-

Dropbear SSH 是很多嵌入式linux系统首选的ssh工具,结合qpython,能让你方便地进行编程来自动管理服务器或你的手机。

-
-

如何远程登录 你的服务器?

-1 Dashboard 长按Terminal, 选择Shell Terminal -

1 Dashboard 长按Terminal, 选择Shell Terminal

-2 Shell中输入ssh <user>@<host> -

2 Shell中输入ssh <user>@<host>

-3 已经登录到了远端服务器 -

3 已经登录到了远端服务器

-

除了从手机上登录服务器外,你还可以登录到你的手机。

-
-
-

如何登录到你的手机?

-

这个功能适合高级玩家,因为一些权限的问题,在手机上开sshd服务需要root权限。 -第一次使用,需要从shell terminal中进行下初始化操作

-

``` -su - #切换为root用户,

-

mkdir dropbear # 在 /data/data/org.qpython.qpy/files下创建dropbear目录

-

初始化对应的key

-

dbkey -t dss -f dropbear/dropbear_dss_host_key

-

dbkey -t rsa -f dropbear/dropbear_rsa_host_key

-

dbkey -t ecdsa -f dropbear/dropbear_ecdsa_host_key

-

```

-

完成上述步骤之后,即可启动sshd服务。

-启动sshd服务:sshd -p 8088 -P dropbear/db.pid -F # 前台启动,端口 8088 -

启动sshd服务:sshd -p 8088 -P dropbear/db.pid -F # 前台启动,端口 8088

-

接下来从你的电脑中就可以登录了你的手机了默认密码就是我们的app名字,你懂得。

-从你的笔记本登录手机 -

从你的笔记本登录手机

-

另外还支持下面高级特性:

-
    -
  • ssh 支持证书登录,借助dbconvert,可以把你的openssh证书转换过来,存到对应的目录,用 ssh -i <id_private>指定证书即可

  • -
  • sshd 支持 authorized_keys, 只需要把该文件保存到你的dropbear目录下,即可

  • -
  • scp,远程拷贝文件

  • -
-

后续计划移植更多有用的工具

-
-
-

其他

-

不想玩了记得kill掉sshd进程,之前需要指定pid文件就是方便你获得 pid

-

kill cat dropbear/db.pid

-

获得QPython App

-
-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/genindex.html b/docs/genindex.html deleted file mode 100644 index 491791c..0000000 --- a/docs/genindex.html +++ /dev/null @@ -1,2756 +0,0 @@ - - - - - - - - Index — QPython 0.9 documentation - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
-
-
- - -
-
-
-
- - - - -
-
-
- - -

Index

- -
- A - | B - | C - | D - | E - | F - | G - | L - | M - | N - | P - | Q - | R - | S - | T - | U - | V - | W - -
-

A

- - - -
- -

B

- - -
- -

C

- - - -
- -

D

- - - -
- -

E

- - - -
- -

F

- - - -
- -

G

- - - -
- -

L

- - - -
- -

M

- - - -
- -

N

- - - -
- -

P

- - - -
- -

Q

- - - -
- -

R

- - - -
- -

S

- - - -
- -

T

- - - -
- -

U

- - - -
- -

V

- - - -
- -

W

- - - -
- - - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/huawei.html b/docs/huawei.html deleted file mode 100644 index f808c0d..0000000 --- a/docs/huawei.html +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/docs/index.html b/docs/index.html deleted file mode 100755 index 5c2f2a0..0000000 --- a/docs/index.html +++ /dev/null @@ -1,226 +0,0 @@ - - - -QPython - Learn Python & AI on mobile - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
-
- - -
- - -
-
- -
-
-

About QPython

-
- QPython integrates the Python interpreter, AI model engine and mobile development tool chain, supports Web development, scientific computing and intelligent application construction, provides a complete mobile programming solution, and provides developer courses and community resources to help continuous learning. -
-
    -
  • - -
  • - - - -
-
-
-
- -
-
-
-
    -
  • -
    -

    What's NEW

    -
    -## v3.5.2 (2025/2/25)
    -Achieve seamless integration with the open source LLM deployment tool Ollama and deepseek developed by DeepSeek! This means:
    -✅ Zero threshold to run various large language models locally on mobile devices
    -✅ Quickly deploy cutting-edge AI models such as DeepSeek
    -✅ Enjoy a minimalist API calling experience
    -✅ Build a completely offline intelligent programming environment
    -
    -With this update, you will be able to experience immediately:
    -🔧 Load/manage LLM models directly on the mobile phone
    -⚡ Real-time low-latency response based on local computing
    -
    -
    -
    - -
    -
  • -
  • -
    -

    QPython download resources

    -

    We recommend that you download and install the latest version of QPython and its related resources from your mobile app store first. If you cannot get it from the app store, you can also download it from the following network disk.

    - - - - -
    -
  • -
  • -
    -

    Community & Feedback

    -

    Welcome to join the QPython community to learn and discuss with many QPythoneers.

    - - - 加入中文交流社区
    - - Join QPython Discord
    - - Subscribe QPython Newsletter
    -

    We recommend that you contact us and provide feedback through the QPython community, which is a relatively convenient way. Of course, you can also share your feedback with us through the following channels.

    - - Report App's Issue
    - - Request Extension Package
    -
      -
    -
  • -
-
-
-
-
- -
    - -
  • - -
  • - -
-
-
-
-
-
- - - -
- - diff --git a/docs/objects.inv b/docs/objects.inv deleted file mode 100644 index 9dccc05..0000000 Binary files a/docs/objects.inv and /dev/null differ diff --git a/docs/qpy3-rate.html b/docs/qpy3-rate.html deleted file mode 100644 index 0437884..0000000 --- a/docs/qpy3-rate.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/docs/qq.html b/docs/qq.html deleted file mode 100644 index b16f03f..0000000 --- a/docs/qq.html +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/docs/search.html b/docs/search.html deleted file mode 100644 index 3519f50..0000000 --- a/docs/search.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - - Search — QPython 0.9 documentation - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
-
-
- - -
-
-
-
- -
    -
  • Guide »
  • - -
  • Search
  • -
- - -
-
-
- -

Search

- - - - -

- Searching for multiple words only shows matches that contain - all words. -

- - -
- - - -
- - - -
- -
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/searchindex.js b/docs/searchindex.js deleted file mode 100644 index 663a9e2..0000000 --- a/docs/searchindex.js +++ /dev/null @@ -1 +0,0 @@ -Search.setIndex({"docnames": ["contributors", "document", "en/faq", "en/guide", "en/guide_androidhelpers", "en/guide_contributors", "en/guide_contributors_test", "en/guide_developers", "en/guide_extend", "en/guide_helloworld", "en/guide_howtostart", "en/guide_ide", "en/guide_libraries", "en/guide_program", "en/qpypi", "en/qpython3", "en/qpython_3x_featues", "en/qpython_ox_featues", "features/2018-09-28-dropbear-cn", "zh/contributorshowto", "zh/howtostart", "zhindex"], "filenames": ["contributors.rst", "document.rst", "en\\faq.rst", "en\\guide.rst", "en\\guide_androidhelpers.rst", "en\\guide_contributors.rst", "en\\guide_contributors_test.rst", "en\\guide_developers.rst", "en\\guide_extend.rst", "en\\guide_helloworld.rst", "en\\guide_howtostart.rst", "en\\guide_ide.rst", "en\\guide_libraries.rst", "en\\guide_program.rst", "en\\qpypi.rst", "en\\qpython3.rst", "en\\qpython_3x_featues.rst", "en\\qpython_ox_featues.rst", "features\\2018-09-28-dropbear-cn.rst", "zh\\contributorshowto.rst", "zh\\howtostart.rst", "zhindex.rst"], "titles": ["Contributors", "Welcome to read the QPython guide", "FAQ", "Getting started", "AndroidFacade", "Welcome contribute", "Join the tester community", "Android", "QPython Open API", "Writing \u201cHello World\u201d", "QPython: How To Start", "Use the best way for developing", "QPython built-in Libraries", "QPython\u2019s main features", "QPYPI", "<no title>", "QPython 3x featues", "QPython Ox featues", "\u5982\u4f55\u5728QPython \u4f7f\u7528 SSH", "QPython\u6587\u6863\u4f53\u7cfb\u8bf4\u660e", "\u5feb\u901f\u5f00\u59cb", "\u4e2d\u6587\u7528\u6237\u5411\u5bfc"], "terms": {"thank": [0, 5, 9, 10], "contribut": [0, 3, 6], "help": [0, 1, 3, 8, 10, 11, 13, 14], "qpython": [0, 2, 3, 4, 6, 9, 11, 14, 15, 18, 19, 20], "project": [0, 1, 3, 4, 6, 7, 8, 10, 11, 13, 14, 15, 16], "we": [0, 1, 2, 4, 5, 6, 8, 9, 13, 14, 15, 16, 17], "want": [0, 1, 3, 4, 5, 6, 8, 9, 10, 13, 14], "you": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "join": [0, 1, 3, 5, 10], "u": [0, 1, 2, 5, 6, 8, 14], "If": [0, 3, 4, 6, 8, 10, 13, 14], "pleas": [0, 1, 2, 4, 5, 6, 8, 10, 15], "email": [0, 1, 5, 8, 12], "support": [0, 2, 5, 6, 10, 11, 12, 13, 14, 15, 16], "org": [0, 2, 4, 5, 6, 8, 10, 15, 18], "river": [0, 8], "\u4e58\u7740\u8239": 0, "kyle": 0, "kersei": 0, "mae": 0, "zrh": 0, "how": [0, 1, 2, 3, 4, 8, 15], "send": [0, 1, 4, 5, 6, 8], "an": [0, 4, 8, 9, 10, 13, 14, 15, 16], "your": [0, 1, 3, 6, 9, 10, 13, 14, 15, 16], "self": [0, 4, 13], "introduct": 0, "what": [0, 6, 9, 10, 15], "kind": 0, "do": [0, 1, 5, 6, 10, 13], "lr": 0, "chines": 0, "qq": 0, "group": [0, 1, 5, 15], "540717901": [0, 21], "run": [0, 1, 2, 3, 4, 9, 10, 11, 13, 15, 16], "appreci": 0, "build": [0, 8, 13], "topic": 0, "can": [0, 4, 8, 9, 10, 13, 14, 15, 16], "invit": [0, 5], "answer": [0, 10], "ani": [0, 1, 4, 6, 8, 9], "question": [0, 10], "about": [0, 3, 4, 6, 9, 10, 15], "tell": 0, "fogapod": 0, "russian": 0, "frodo821": 0, "japanes": 0, "darciss": 0, "rehot": 0, "acc": 0, "turkish": 0, "christo": 0, "phe": 0, "french": 0, "translat": [0, 1, 3], "ar": [0, 3, 4, 6, 9, 10, 11, 12, 15, 16], "willing": 0, "qpython3": [0, 1, 4, 8, 13, 16, 21], "thi": [0, 1, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15, 16], "repo": 0, "i": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18], "post": [0, 4, 10], "pull": [0, 1, 9], "request": [0, 1, 4, 13], "en": [0, 15], "merg": 0, "publish": [0, 8], "next": [0, 4, 9, 10], "updat": [0, 4], "don": [0, 8, 9, 10, 12, 13], "t": [0, 2, 4, 8, 9, 10, 12, 13, 15, 18], "us": [0, 1, 3, 4, 6, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17], "git": [0, 19], "just": [0, 2, 3, 9, 10, 11, 12, 13], "word": 0, "which": [0, 4, 5, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17], "contain": [0, 1, 4, 9, 10, 12, 14, 15, 17], "fals": [0, 4, 9, 13], "follow": [0, 1, 2, 3, 6, 8, 9, 10, 12, 13, 15], "file": [0, 3, 4, 10, 11], "string": [0, 4, 8, 9, 12], "xml": [0, 12], "toast": [0, 8, 9, 12, 15], "And": [0, 1, 8, 9, 12, 15], "descript": 0, "intro": 0, "md": [0, 15], "script": [1, 2, 3, 4, 7, 9, 10, 11, 13, 15, 16], "engin": [1, 3, 13, 15], "python": [1, 2, 3, 8, 9, 10, 11, 13, 14, 15, 16], "android": [1, 2, 3, 4, 8, 9, 10, 11, 12, 13, 14, 15, 17, 19], "devic": [1, 2, 4, 10, 13], "It": [1, 4, 7, 9, 10, 11, 13, 14, 15, 16], "interpret": [1, 10, 15, 16], "consol": [1, 3, 13, 15, 16], "editor": [1, 3, 9, 11, 15, 16, 17], "sl4a": [1, 3, 4, 7, 12, 15, 16], "librari": [1, 3, 4, 8, 13, 14, 15, 16], "ha": [1, 4, 8, 10, 11, 15], "sever": [1, 13, 14], "million": [1, 15], "world": [1, 3, 4, 13], "alreadi": [1, 15], "great": [1, 3, 5, 7], "program": [1, 9, 13, 14, 15, 16], "includ": [1, 4, 10, 14, 15, 16], "applic": [1, 3, 4, 10, 13, 15, 16], "2": [1, 3, 4, 8, 9, 12, 18, 21], "7": [1, 4, 10, 12], "3": [1, 3, 4, 12, 15, 18, 21], "newest": 1, "version": [1, 4, 15, 16], "1": [1, 3, 4, 9, 13, 15, 18, 21], "releas": [1, 4, 13], "2017": 1, "5": [1, 2, 3, 4], "12": 1, "0": [1, 4, 13, 15, 21], "29": 1, "mani": [1, 4, 10, 13, 14, 16], "amaz": [1, 13, 15], "featur": [1, 3, 4, 10, 11, 15], "upgrad": 1, "soon": [1, 5], "from": [1, 2, 3, 4, 9, 10, 12, 13], "googl": [1, 15, 16, 17], "plai": [1, 4, 9, 15, 16, 17], "amazon": 1, "appstor": [1, 15, 16, 17], "etc": [1, 4, 7, 10, 13, 14, 15, 16], "thei": [1, 12, 16], "push": [1, 3], "move": [1, 11], "forward": 1, "team": [1, 3, 10, 13], "could": [1, 2, 4, 6, 8, 10, 11, 12, 13], "ask": [1, 4, 9, 10], "qustion": 1, "twitter": 1, "fork": 1, "github": [1, 8, 14, 15, 19], "There": [1, 4, 10], "activ": [1, 3, 4, 8, 10, 15], "where": [1, 4, 6, 16], "meet": 1, "like": [1, 2, 4, 7, 8, 10, 11, 12, 13, 14], "facebook": [1, 2, 15], "gitter": 1, "chat": 1, "g": [1, 4, 6], "tester": [1, 3, 5], "stackoverflow": 1, "talk": 1, "through": [1, 3, 8, 10, 12, 13], "social": 1, "network": [1, 4], "report": [1, 3, 4, 5], "issu": [1, 4, 14, 15], "offici": 1, "contributor": 1, "step": [1, 3], "happi": 1, "hear": 1, "feedback": [1, 3, 5], "sometim": [1, 15], "some": [1, 3, 4, 6, 9, 10, 11, 13, 15, 16, 17], "bug": [1, 6, 16], "demand": 1, "mai": [1, 8, 15], "implement": [1, 13], "lack": [1, 10], "resourc": [1, 4, 10, 12, 13, 15], "so": [1, 8, 9, 11, 12, 13, 15, 16], "have": [1, 6, 8, 10, 13, 15, 16, 17], "need": [1, 2, 8, 9, 12, 13, 14], "core": [1, 3], "develop": [1, 4, 6, 7, 8, 9, 10, 12, 13, 14], "solv": 1, "higher": [1, 4], "prioriti": 1, "try": [1, 8, 9, 13], "bountysourc": 1, "servic": [1, 3, 4, 13], "get": [1, 2, 10, 12, 13, 15, 16], "start": [1, 9, 11, 12, 13], "To": [1, 3, 4, 12, 15], "write": [1, 3, 4, 6, 10, 11], "hello": [1, 3, 4, 8, 10, 13], "main": [1, 3, 7, 10, 11], "best": [1, 3], "wai": [1, 3, 9, 10, 13], "built": [1, 3, 10, 11, 13, 16], "3rd": [1, 2, 3, 4, 10, 13], "androidhelp": [1, 3, 4, 8, 9], "api": [1, 3, 13, 14, 15], "open": [1, 3, 4, 9, 10, 13, 14, 15], "onlin": [1, 3], "qsl4a": [1, 3], "pip": [1, 3, 10, 12], "quick": [1, 3], "tool": [1, 3, 10, 14], "qpy": [1, 2, 3, 12, 13, 14, 18], "io": [1, 3, 12], "enterpris": [1, 3], "test": [1, 3, 6, 10], "document": [1, 3, 10, 12, 15, 16], "launch": [1, 3, 4, 10], "local": [1, 3, 4, 10, 11, 12], "becam": [1, 3, 9], "member": [1, 3], "sponsor": [1, 3], "faq": [1, 15], "\u4e2d\u6587\u7528\u6237\u5411\u5bfc": 1, "\u6b22\u8fce": 1, "\u8d77\u6b65": 1, "\u66f4\u591a\u94fe\u63a5": 1, "\u7528\u6237\u5f00\u53d1\u7ec4": 1, "\u5982\u4f55\u8d21\u732e": 1, "other": [2, 9, 10, 13, 15, 16], "termin": [2, 18], "share": [2, 3, 4, 10, 11], "app": [2, 8, 13, 14, 15, 17, 18, 20], "root": [2, 13], "first": [2, 9, 10, 16], "sour": 2, "env": 2, "var": 2, "wiki": 2, "link": [2, 10, 15, 16], "mention": 2, "execut": [2, 4, 9, 10], "data": [2, 8, 12, 18], "bin": 2, "android5": 2, "abov": [2, 4, 10, 11], "case": [2, 4, 9], "sampl": [2, 3, 4, 8, 13, 15, 16], "pygam": 2, "even": 2, "import": [2, 4, 8, 9, 12, 13, 15], "doesn": [2, 13], "now": [2, 6, 8, 9, 10, 13, 14, 16], "consid": [2, 4, 5, 9, 15], "later": [2, 4], "": [2, 3, 4, 7, 9, 10, 11, 14, 15, 17], "progress": [2, 12, 13], "quickli": [3, 10], "dashboard": [3, 8, 18], "4": [3, 4, 15], "commun": [3, 9, 14, 15], "more": [3, 5, 10, 15, 16], "know": [3, 6, 9, 16], "why": [3, 9, 15, 16, 17], "should": [3, 4, 9, 10], "choos": [3, 4, 8, 10, 11], "qeditor": 3, "browser": [3, 4, 10, 15], "comput": [3, 14], "dynload": 3, "stardard": [3, 13], "androidfacad": [3, 12], "applicationmanagerfacad": [3, 12], "camerafacad": [3, 12], "commonintentsfacad": [3, 12], "contactsfacad": [3, 12], "eventfacad": [3, 12], "locationfacad": [3, 12], "phonefacad": [3, 12], "mediarecorderfacad": [3, 12], "sensormanagerfacad": [3, 12], "settingsfacad": [3, 12], "smsfacad": [3, 12], "speechrecognitionfacad": [3, 12], "tonegeneratorfacad": [3, 12], "wakelockfacad": [3, 12], "wififacad": [3, 12], "batterymanagerfacad": [3, 12], "activityresultfacad": [3, 12], "mediaplayerfacad": [3, 12], "preferencesfacad": [3, 12], "qpyinterfacefacad": [3, 12], "texttospeechfacad": [3, 12], "eyesfreefacad": [3, 12], "bluetoothfacad": [3, 12], "signalstrengthfacad": [3, 12], "webcamfacad": [3, 12], "uifacad": [3, 12], "usb": [3, 12, 15], "host": [3, 12, 13, 18], "serial": [3, 12], "facad": [3, 12], "content": [3, 4], "own": 3, "qpypi": [3, 10, 15, 16, 17], "onli": [3, 4, 8, 9, 15], "power": [3, 4, 14], "technologi": [3, 4], "also": [3, 4, 7, 10, 11, 13, 15], "goal": 3, "out": [3, 6, 8], "brows": 3, "qrcode": [3, 10, 17], "reader": [3, 15, 16, 17], "x": [3, 4, 15], "kivi": [3, 13], "webapp": [3, 13, 15, 16], "ftp": [3, 17], "welcom": 3, "user": [3, 4, 7, 8, 9, 10, 12, 13, 15, 16, 18], "creator": 3, "becom": [3, 5, 13], "suggest": [3, 5], "organis": 3, "event": [3, 4], "The": [4, 8, 10, 12, 13, 14], "layer": [4, 15, 16], "abridg": 4, "previous": [4, 16], "name": [4, 8, 9, 10, 13, 15, 17], "environ": [4, 8, 10, 15], "ASE": 4, "allow": [4, 7, 8, 10, 13], "creation": 4, "written": 4, "variou": 4, "languag": [4, 13], "directli": [4, 10, 11], "extend": [4, 10, 14, 15, 16], "integr": [4, 10, 14, 15, 16], "found": [4, 8, 10], "setclipboard": 4, "text": [4, 8, 9, 10, 11, 13], "put": [4, 9, 10, 13], "paramet": 4, "str": 4, "getclipboard": 4, "return": [4, 8, 9, 13], "droid": [4, 8, 9], "result": [4, 8, 9, 11], "makeint": 4, "action": [4, 8, 10], "uri": 4, "type": [4, 7, 10, 12, 15, 16], "extra": [4, 13], "categori": [4, 8], "packagenam": 4, "classnam": 4, "flag": [4, 8], "option": [4, 13], "mime": 4, "subtyp": 4, "object": [4, 9, 10, 14], "map": 4, "add": [4, 9, 10, 13], "list": [4, 10], "packag": [4, 8, 10, 13, 15, 16], "class": [4, 9, 12, 13], "int": [4, 8], "repres": 4, "code": [4, 8, 9, 10, 11, 12, 13, 14, 15, 16], "show": [4, 8, 9, 10], "getint": 4, "startactivityforresult": [4, 8], "A": [4, 10, 15, 16], "represent": 4, "startactivityforresultint": 4, "format": [4, 9], "startactivityint": 4, "wait": 4, "bool": 4, "block": 4, "until": 4, "exit": [4, 13], "broadcast": [4, 14], "sendbroadcastint": 4, "phone": [4, 11, 15, 16], "specifi": 4, "durat": 4, "millisecond": 4, "getnetworkstatu": 4, "connect": 4, "requiredvers": 4, "check": [4, 9, 15], "greater": [4, 5], "than": 4, "equal": 4, "true": [4, 8], "getpackageversioncod": 4, "getpackagevers": 4, "getconst": 4, "constant": 4, "static": 4, "final": 4, "field": [4, 9], "detail": [4, 5], "id": [4, 12, 13], "displai": [4, 9, 13], "offset": 4, "tz": 4, "sdk": 4, "download": 4, "appcach": 4, "availblock": 4, "blocksiz": 4, "blockcount": 4, "sdcard": [4, 10, 13], "log": [4, 12], "messag": [4, 9], "logcat": 4, "subject": 4, "bodi": 4, "attachmenturi": 4, "e": 4, "mail": 4, "given": 4, "recipi": 4, "comma": 4, "separ": [4, 9], "maketoast": [4, 8, 9], "short": 4, "notif": [4, 9, 10], "titl": [4, 9, 13], "queri": 4, "input": [4, 9], "box": [4, 9], "password": 4, "url": [4, 11, 13], "cancel": [4, 9], "when": [4, 8, 9, 10, 11, 13], "click": [4, 6, 9, 10, 11], "http": [4, 8, 13, 14, 15, 19], "set": [4, 8, 10, 12, 15], "none": [4, 9, 13], "getlaunchableappl": 4, "all": [4, 9, 14], "launchabl": 4, "getrunningpackag": 4, "forcestoppackag": 4, "forc": 4, "cameracapturepictur": [4, 12], "targetpath": 4, "take": [4, 13, 16], "pictur": [4, 10], "save": [4, 9, 10], "path": [4, 13], "boolean": 4, "autofocu": 4, "takepictur": 4, "indic": 4, "success": 4, "camerainteractivecapturepictur": [4, 12], "imag": [4, 8], "captur": 4, "scanbarcod": 4, "scanner": 4, "pick": 4, "contact": [4, 6, 8, 15], "valu": [4, 9], "viewmap": 4, "search": [4, 10, 11], "pizza": 4, "123": 4, "my": [4, 10], "street": 4, "viewcontact": 4, "viewhtml": 4, "html": [4, 11, 15], "pickcontact": [4, 12], "pickphon": [4, 12], "number": [4, 10, 12, 14], "select": 4, "contactsgetattribut": [4, 12], "possibl": 4, "attribut": 4, "contactsgetid": [4, 12], "contactsget": [4, 12], "contactsgetbyid": [4, 12], "contactsgetcount": [4, 12], "querycont": [4, 12], "selectionarg": 4, "order": [4, 9], "resolv": 4, "queryattribut": [4, 12], "avail": [4, 9, 10], "column": 4, "eventclearbuff": [4, 12], "clear": 4, "buffer": 4, "eventregisterforbroadcast": [4, 12], "enqueu": 4, "regist": 4, "listen": 4, "new": [4, 8, 10, 12], "signal": 4, "eventunregisterforbroadcast": [4, 12], "eventgetbrodcastcategori": [4, 12], "eventpol": [4, 12], "number_of_ev": 4, "remov": [4, 13], "oldest": 4, "n": [4, 8, 14], "sensor": [4, 15], "properti": [4, 10], "eventwaitfor": [4, 12], "eventnam": 4, "timeout": 4, "suppli": 4, "occur": 4, "eventwait": [4, 12], "eventpost": [4, 12], "queue": [4, 12], "rpcpostev": [4, 12], "receiveev": [4, 12], "waitforev": [4, 12], "starteventdispatch": [4, 12], "port": [4, 13], "up": [4, 8, 9], "socket": [4, 12], "stopeventdispatch": [4, 12], "server": [4, 13], "anymor": 4, "locationprovid": 4, "locationprovideren": 4, "enabl": [4, 15], "startloc": 4, "mindist": 4, "minupdatedist": 4, "collect": [4, 12, 14], "readloc": 4, "current": [4, 14], "stoploc": 4, "getlastknownloc": 4, "last": [4, 9], "known": 4, "gp": [4, 13], "geocod": 4, "latitud": 4, "longitud": 4, "maxresult": 4, "address": 4, "starttrackingphonest": 4, "track": 4, "state": 4, "readphonest": 4, "incom": 4, "incomingnumb": 4, "stoptrackingphonest": 4, "phonecal": 4, "phonecallnumb": 4, "phonedi": 4, "dial": 4, "phonedialnumb": 4, "getcellloc": 4, "cell": 4, "getnetworkoper": 4, "numer": [4, 14], "mcc": 4, "mnc": 4, "oper": 4, "getnetworkoperatornam": 4, "alphabet": 4, "getnetworktyp": 4, "radio": 4, "getphonetyp": 4, "getsimcountryiso": 4, "iso": 4, "countri": 4, "equival": 4, "sim": 4, "getsimoper": 4, "mobil": 4, "6": 4, "decim": [4, 12], "digit": 4, "getsimoperatornam": 4, "spn": 4, "getsimserialnumb": 4, "null": [4, 8], "unavail": 4, "getsimst": 4, "card": 4, "getsubscriberid": 4, "uniqu": 4, "subscrib": 4, "exampl": [4, 9, 13, 15, 16, 17], "imsi": 4, "gsm": 4, "getvoicemailalphatag": 4, "retriev": 4, "identifi": 4, "associ": 4, "voic": 4, "getvoicemailnumb": 4, "checknetworkroam": 4, "roam": 4, "purpos": 4, "getdeviceid": 4, "imei": 4, "meid": 4, "cdma": 4, "getdevicesoftwarevers": 4, "softwar": [4, 14], "sv": 4, "getline1numb": 4, "line": [4, 8, 9, 10, 13], "msisdn": 4, "getneighboringcellinfo": 4, "neighbor": 4, "recorderstartmicrophon": 4, "record": 4, "microphon": 4, "recorderstartvideo": 4, "videos": 4, "camera": [4, 16, 17], "maximum": 4, "session": 4, "method": [4, 13], "recorderstop": 4, "otherwis": [4, 9], "time": 4, "period": 4, "argument": 4, "160x120": 4, "320x240": 4, "352x288": 4, "640x480": 4, "800x480": 4, "recordercapturevideo": 4, "recordaudio": 4, "immedi": 4, "startinteractivevideorecord": 4, "startsensingtim": 4, "sensornumb": 4, "delaytim": 4, "poll": 4, "startsensingthreshold": 4, "ensornumb": 4, "threshold": 4, "axi": 4, "exceed": 4, "chosen": 4, "startsens": 4, "samples": 4, "stopsens": 4, "readsensor": 4, "most": [4, 9, 10, 11, 12, 13], "recent": [4, 10], "sensorsgetaccuraci": 4, "receiv": 4, "accuraci": 4, "sensorsgetlight": 4, "light": 4, "sensorsreadacceleromet": 4, "acceleromet": 4, "float": 4, "acceler": 4, "y": 4, "z": 4, "sensorsreadmagnetomet": 4, "magnet": 4, "sensorsreadorient": 4, "orient": [4, 8], "doubl": 4, "azimuth": 4, "pitch": 4, "roll": 4, "250": 4, "setscreentimeout": 4, "second": [4, 10], "origin": 4, "getscreentimeout": 4, "checkairplanemod": 4, "airplan": 4, "toggleairplanemod": 4, "toggl": 4, "off": 4, "checkringersilentmod": 4, "toggleringersilentmod": 4, "togglevibratemod": 4, "els": [4, 8, 9], "getvibratemod": 4, "getmaxringervolum": 4, "getringervolum": 4, "setringervolum": 4, "getmaxmediavolum": 4, "getmediavolum": 4, "setmediavolum": 4, "getscreenbright": 4, "backlight": 4, "between": [4, 10, 16], "255": 4, "setscreenbright": 4, "checkscreenon": 4, "level": [4, 10, 14], "smssend": [4, 12], "destinationaddress": 4, "sm": [4, 13, 15], "typic": 4, "smsgetmessagecount": [4, 12], "unreadonli": 4, "folder": 4, "default": [4, 8, 10, 12, 13], "inbox": 4, "smsgetmessageid": [4, 12], "smsgetmessag": [4, 12], "smsgetmessagebyid": [4, 12], "smsgetattribut": [4, 12], "smsdeletemessag": [4, 12], "delet": [4, 10], "wa": [4, 14, 16], "smsmarkmessageread": [4, 12], "mark": 4, "recognizespeech": [4, 12], "prompt": [4, 9], "languagemodel": 4, "recogn": 4, "speech": 4, "them": [4, 9, 10, 12], "speak": 4, "overrid": [4, 8], "expect": 4, "differ": [4, 7, 14, 15, 16, 17], "one": [4, 9, 14, 15], "java": 4, "util": 4, "getdefault": 4, "model": 4, "prefer": [4, 15], "see": [4, 9, 10, 11, 12], "recognizeint": 4, "empti": [4, 9], "cannot": [4, 14, 15], "recongn": 4, "generatedtmfton": [4, 12], "phonenumb": 4, "tonedur": 4, "gener": [4, 8, 10], "dtmf": 4, "tone": 4, "100": 4, "each": 4, "wakelockacquireful": [4, 12], "acquir": 4, "full": [4, 8], "wake": 4, "lock": 4, "cpu": 4, "keyboard": 4, "wakelockacquireparti": [4, 12], "partial": 4, "wakelockacquirebright": [4, 12], "wakelockacquiredim": [4, 12], "dim": 4, "wakelockreleas": [4, 12], "wifigetscanresult": [4, 12], "access": [4, 11, 13], "point": [4, 13], "dure": 4, "wifi": 4, "scan": 4, "wifilockacquireful": [4, 12], "wifilockacquirescanonli": [4, 12], "wifilockreleas": [4, 12], "wifistartscan": [4, 12], "initi": 4, "successfulli": 4, "checkwifist": [4, 12], "togglewifist": [4, 12], "wifidisconnect": [4, 12], "disconnect": 4, "succeed": 4, "wifigetconnectioninfo": [4, 12], "wifireassoci": [4, 12], "wifireconnect": [4, 12], "reconnect": 4, "readbatterydata": [4, 12], "batteri": [4, 15], "batterystartmonitor": [4, 12], "batterystopmonitor": [4, 12], "batterygetstatu": [4, 12], "unknown": 4, "charg": 4, "discharg": 4, "batterygethealth": [4, 12], "health": 4, "good": [4, 9, 15, 16], "overheat": 4, "dead": 4, "over": 4, "voltag": 4, "unspecifi": 4, "failur": 4, "batterygetplugtyp": [4, 12], "plug": 4, "unplug": 4, "sourc": [4, 10, 13, 14, 15], "ac": 4, "charger": 4, "batterycheckpres": [4, 12], "presenc": 4, "batterygetlevel": [4, 12], "percentag": 4, "batterygetvoltag": [4, 12], "batterygettemperatur": [4, 12], "temperatur": 4, "batterygettechnologi": [4, 12], "setresultboolean": [4, 12], "resultcod": [4, 8], "resultvalu": 4, "whenev": 4, "apk": [4, 8], "via": 4, "script_result": 4, "byte": 4, "setresultbyt": [4, 12], "setresultshort": [4, 12], "setresultchar": [4, 12], "setresultinteg": [4, 12], "setresultlong": [4, 12], "setresultfloat": [4, 12], "setresultdoubl": [4, 12], "setresultstr": [4, 12], "setresultbooleanarrai": [4, 12], "setresultbytearrai": [4, 12], "setresultshortarrai": [4, 12], "setresultchararrai": [4, 12], "setresultintegerarrai": [4, 12], "setresultlongarrai": [4, 12], "setresultfloatarrai": [4, 12], "setresultdoublearrai": [4, 12], "setresultstringarrai": [4, 12], "setresultserializ": [4, 12], "mediaplai": 4, "tag": 4, "mediaplaypaus": 4, "paus": 4, "mediaplaystart": 4, "mediaplayclos": 4, "close": [4, 10, 13], "mediaisplai": 4, "mediaplaysetloop": 4, "loop": 4, "mediaplayseek": 4, "msec": 4, "seek": 4, "posit": 4, "m": [4, 6, 9], "mediaplayinfo": 4, "mediaplaylist": 4, "load": [4, 13], "prefgetvalu": [4, 12], "kei": [4, 9], "filenam": 4, "desir": 4, "defin": [4, 13], "prefputvalu": [4, 12], "prefgetal": [4, 12], "executeqpi": [4, 12], "absolut": 4, "ttsspeak": [4, 12], "tt": 4, "ttsisspeak": [4, 12], "bluetoothactiveconnect": [4, 12], "bluetooth": [4, 13, 15, 16, 17], "bluetoothwritebinari": [4, 12], "base64": [4, 12], "connid": 4, "encod": [4, 12], "sent": 4, "bluetoothreadbinari": [4, 12], "buffers": 4, "chunk": [4, 12], "4096": 4, "bluetoothconnect": [4, 12], "uuid": [4, 12], "establish": 4, "fail": 4, "pass": [4, 13], "here": [4, 8, 9, 10, 15], "must": 4, "match": 4, "present": 4, "discov": 4, "bluetoothaccept": [4, 12], "accept": 4, "long": [4, 10], "ever": 4, "bluetoothmakediscover": [4, 12], "discover": 4, "300": 4, "bluetoothwrit": [4, 12], "ascii": 4, "charact": 4, "bluetoothreadreadi": [4, 12], "bluetoothread": [4, 12], "bluetoothreadlin": [4, 12], "bluetoothgetremotedevicenam": [4, 12], "remot": 4, "For": [4, 6, 13, 15, 17], "target": [4, 13], "bluetoothgetlocalnam": [4, 12], "visibl": 4, "bluetoothsetlocalnam": [4, 12], "bluetoothgetscanmod": [4, 12], "dongl": 4, "disabl": 4, "non": 4, "bluetoothgetconnecteddevicenam": [4, 12], "checkbluetoothst": [4, 12], "togglebluetoothst": [4, 12], "confirm": 4, "chang": 4, "bluetoothstop": [4, 12], "bluetoothgetlocaladdress": [4, 12], "hardwar": [4, 15], "adapt": 4, "bluetoothdiscoverystart": [4, 12], "discoveri": 4, "process": [4, 8], "error": [4, 13, 16], "bluetoothdiscoverycancel": [4, 12], "bluetoothisdiscov": [4, 12], "starttrackingsignalstrength": [4, 12], "strength": 4, "readsignalstrength": [4, 12], "gsm_signal_strength": 4, "stoptrackingsignalstrength": [4, 12], "webcamstart": [4, 12], "resolutionlevel": 4, "jpegqual": 4, "mjpeg": 4, "stream": 4, "tupl": 4, "increas": 4, "resolut": 4, "10": 4, "20": 4, "webcam": [4, 15], "bind": 4, "webcamadjustqu": [4, 12], "adjust": 4, "qualiti": 4, "while": [4, 15], "camerastartpreview": [4, 12], "filepath": [4, 13], "preview": [4, 11], "throw": 4, "store": [4, 15], "jpeg": 4, "camerastoppreview": [4, 12], "dialogcreateinput": 4, "defaulttext": 4, "inputtyp": 4, "creat": [4, 6, 9, 10, 16], "insert": [4, 13], "ie": 4, "dialogcreatepassword": 4, "dialoggetinput": [4, 8, 9], "dialoggetpassword": 4, "dialogcreateseekbar": 4, "bar": [4, 9, 10], "50": 4, "dialogcreatetimepick": 4, "hour": 4, "minut": 4, "is24hour": 4, "picker": 4, "miut": 4, "dialogcreatedatepick": 4, "year": 4, "month": 4, "dai": 4, "date": 4, "1970": 4, "struct": [4, 12], "json": [4, 9, 12], "role": 4, "master": [4, 15], "slave": 4, "stat": [4, 12], "ok": [4, 9], "cancl": 4, "dialogcreatenfcbeammast": 4, "beam": 4, "nfcbeammessag": 4, "dialogcreatenfcbeamslav": 4, "dialogcreatespinnerprogress": 4, "maximumprogress": 4, "spinner": 4, "maximunprogress": 4, "dfault": 4, "dialogsetcurrentprogress": 4, "dialogsetmaxprogress": 4, "max": 4, "dialogcreatehorizontalprogress": 4, "horizont": 4, "dialogcreatealert": 4, "dialogsetpositivebuttontext": 4, "button": [4, 9, 10, 11, 13], "dialogsetnegativebuttontext": 4, "neg": 4, "dialogsetneutralbuttontext": 4, "dialogsetitem": 4, "item": 4, "dialogsetsinglechoiceitem": 4, "index": [4, 10], "dialogsetmultichoiceitem": 4, "multipl": [4, 15, 16], "choic": 4, "addcontextmenuitem": 4, "label": [4, 8], "eventdata": 4, "context": [4, 8], "menu": [4, 10], "addoptionsmenuitem": 4, "iconnam": 4, "icon": [4, 10], "com": [4, 10, 14, 15, 16, 17, 19], "refer": [4, 14], "r": 4, "drawabl": 4, "dialoggetrespons": 4, "respons": 4, "dialoggetselecteditem": 4, "dialogdismiss": 4, "dismiss": 4, "dialogshow": 4, "fullshow": 4, "fulldismiss": 4, "fullqueri": 4, "fullscreen": [4, 13], "fullquerydetail": 4, "specif": 4, "widget": 4, "fullsetproperti": 4, "fullsetlist": 4, "attach": 4, "fullkeyoverrid": 4, "keycod": 4, "webviewshow": 4, "andoroid": 4, "demonstr": 4, "youtub": [4, 8], "firmwar": 4, "api14": 4, "were": [4, 12], "handl": [4, 8], "kernel": 4, "heard": 4, "make": [4, 5, 6, 9, 10, 13, 15], "dev": 4, "ttyusb0": 4, "In": [4, 9, 13], "doe": [4, 9, 13, 15], "abl": [4, 7], "o": [4, 12], "grab": 4, "info": 4, "probabl": 4, "work": [4, 9, 15, 16], "cdc": 4, "ftdi": 4, "arduino": 4, "2012": 4, "09": 4, "78k0f0730": 4, "rl78": 4, "tragi": 4, "bio": 4, "board": 4, "m78k0f0730": 4, "24": 4, "pl2303": 4, "devci": 4, "kuri65536": 4, "commit": 4, "usbserialgetdevicelist": 4, "usbserialdisconnect": 4, "usbserialactiveconnect": 4, "v": 4, "usbserialwritebinari": 4, "usbserialreadbinari": 4, "usbserialconnect": 4, "hash": 4, "usbserialhosten": 4, "acces": 4, "usbserialwrit": 4, "usbserialreadreadi": 4, "guarante": [4, 14], "usbserialread": 4, "usbserialgetdevicenam": 4, "hope": 5, "introduc": [5, 10], "youself": 5, "briefli": 5, "part": [5, 7, 13], "Then": [5, 9, 11], "collabor": 5, "come": 5, "keep": [6, 13], "interest": 6, "guid": [6, 7, 15], "better": [6, 7], "offer": [6, 7, 9, 10, 13], "after": [6, 9, 10, 11, 16], "readi": 6, "find": [6, 8, 10, 15], "cool": 6, "idea": [6, 10], "let": [6, 8, 9, 10, 13, 15, 16], "down": [6, 10], "inform": [6, 12, 13], "common": [7, 13], "interact": 7, "function": [7, 9, 12, 13, 14], "folk": 7, "being": 7, "besid": [7, 10, 11, 13], "three": [7, 9], "mode": [7, 12, 13], "expans": 7, "abil": [7, 10], "well": [7, 9, 14], "aim": [7, 15, 16], "deliveri": 7, "maintain": [7, 10], "paid": 7, "opensourc": 7, "outsid": 8, "mpyapi": 8, "definit": 8, "seem": 8, "qpylib": 8, "qpy_run_with_shar": 8, "screenorient": 8, "configchang": 8, "keyboardhidden": 8, "export": 8, "intent": [8, 12, 15], "filter": 8, "launcher": [8, 16, 17], "view": [8, 11, 12, 13], "browsabl": 8, "scheme": 8, "mimetyp": [8, 12], "plain": [8, 11], "sy": [8, 13], "argv": 8, "watch": 8, "demo": 8, "video": [8, 12], "call": [8, 9, 12, 16], "extplgplusnam": 8, "setclassnam": 8, "setact": 8, "bundl": 8, "mbundl": 8, "putstr": 8, "myappid": 8, "act": 8, "onpyapi": 8, "onqpyexec": 8, "param": 8, "pycod": 8, "putextra": 8, "script_exec_pi": 8, "callabck": 8, "onactivityresult": 8, "protect": 8, "void": 8, "requestcod": 8, "getextra": 8, "getstr": 8, "maketext": 8, "length_short": 8, "checkout": 8, "product": 8, "plugin": 8, "tasker": [8, 16, 17], "instal": [8, 10, 13, 14, 15], "requir": [8, 12, 13, 15, 17], "pre": [8, 10, 13], "compil": [8, 10, 12, 13], "sure": 8, "couldn": 8, "independ": 8, "beta": 8, "challeng": 8, "thing": 8, "simpl": [8, 9], "busi": 8, "propos": 8, "bit": 9, "familiar": 9, "our": 9, "obvious": [9, 10], "helloworld": 9, "py": [9, 10, 11, 12, 13], "enter": [9, 10], "usernam": 9, "No": 9, "wonder": 9, "similar": 9, "pop": 9, "screen": [9, 10, 12, 15], "screenshot": [9, 10, 13], "top": [9, 10], "anywai": 9, "begin": 9, "modul": 9, "encapsul": 9, "almost": 9, "interfac": [9, 10, 13], "statement": 9, "least": 9, "claim": 9, "read": [9, 12], "By": [9, 10, 13], "re": [9, 12], "go": [9, 10], "compat": 9, "replac": [9, 15], "instead": [9, 10], "further": 9, "except": [9, 13, 15], "importerror": 9, "actual": 9, "necessari": 9, "rpc": 9, "small": 9, "greet": 9, "dialog": [9, 12], "edit": [9, 10, 11], "hello1": 9, "respond": 9, "think": 9, "reaction": 9, "That": 9, "wrote": 9, "But": 9, "print": [9, 13], "oop": 9, "noth": 9, "worri": 9, "output": 9, "tap": [9, 10], "As": [9, 10], "two": [9, 10, 15], "doc": 9, "still": 9, "mean": [9, 15, 16, 17], "wow": 9, "logic": 9, "happen": 9, "leav": [9, 10], "blank": 9, "variabl": 9, "everi": 9, "real": 9, "anoth": [9, 10], "shown": 9, "fifth": 9, "hei": 9, "veri": [9, 11, 13], "polit": 9, "toolbar": [9, 10], "indent": [9, 10], "unind": 9, "space": 9, "backspac": 9, "describ": 9, "anyth": 9, "left": [9, 10], "press": 9, "both": 9, "treat": 9, "contan": 9, "meanin": 9, "whole": 9, "dmych": [9, 10], "draft": [9, 10], "hi": [9, 10], "blog": [9, 10], "usual": [10, 12], "its": 10, "big": 10, "logo": 10, "center": 10, "qr": [10, 15, 16], "funni": 10, "brand": 10, "distribut": 10, "libari": 10, "pure": [10, 13], "mainli": [10, 15, 16], "pip_consol": 10, "kit": 10, "swipe": 10, "pic": [10, 11], "me": 10, "much": 10, "comfort": 10, "ye": 10, "regular": 10, "feel": 10, "free": [10, 15], "comun": 10, "nice": 10, "rest": 10, "without": [10, 13], "system": [10, 12, 15], "compon": [10, 14], "uninstal": 10, "page": [10, 13], "lead": 10, "chanc": 10, "shortcut": 10, "desktop": 10, "said": 10, "befor": [10, 16], "ordinari": 10, "peopl": [10, 13, 14], "explor": 10, "consult": 10, "syntax": [10, 11], "command": [10, 12], "addit": 10, "plu": 10, "usedrop": 10, "upper": 10, "corner": 10, "switch": 10, "note": [10, 13, 15], "unless": 10, "explicitli": 10, "alwai": 10, "reach": 10, "cap": 10, "modifi": 10, "highlight": [10, 11], "though": 10, "easili": [10, 13], "control": [10, 12, 15], "critic": 10, "goe": 10, "undo": 10, "forget": 10, "estens": 10, "sinc": 10, "onc": 10, "singl": 10, "hipip": 10, "qpyplu": 10, "directori": 10, "upload": [10, 11], "renam": 10, "depend": [10, 14], "same": [10, 12], "numpi": [10, 15, 16], "copi": [10, 12], "lib": [10, 12], "python2": [10, 17], "site": [10, 12], "notic": 10, "mix": [10, 13], "c": [10, 13, 14], "redirect": 10, "somth": 10, "usag": [10, 15], "lua": 11, "javascript": 11, "shell": 11, "keyword": [11, 12], "snippet": 11, "convient": 11, "qedit4web": 11, "pc": [11, 13], "laptop": [11, 13], "below": [11, 14], "With": [11, 13, 15], "conveni": [11, 15, 16], "manual": 12, "automat": 12, "_codecs_cn": 12, "_codecs_hk": 12, "_codecs_iso2022": 12, "_codecs_jp": 12, "_codecs_kr": 12, "_codecs_tw": 12, "_csv": 12, "_ctype": 12, "_ctypes_test": 12, "_hashlib": 12, "_heapq": 12, "_hotshot": 12, "_io": 12, "_json": 12, "_lsprof": 12, "_multibytecodec": 12, "_sqlite3": 12, "_ssl": 12, "_testcapi": 12, "audioop": 12, "future_builtin": 12, "grp": 12, "mmap": 12, "syslog": 12, "termio": 12, "unicodedata": 12, "basehttpserv": 12, "binhex": 12, "fnmatch": 12, "mhlib": 12, "quopri": 12, "sysconfig": 12, "bastion": 12, "bisect": 12, "formatt": 12, "mimetool": 12, "random": [12, 14], "tabnanni": 12, "cgihttpserv": 12, "bsddb": 12, "fpformat": 12, "tarfil": 12, "configpars": 12, "cprofil": 12, "fraction": 12, "mimifi": 12, "repr": [12, 13], "telnetlib": 12, "cooki": 12, "calendar": 12, "ftplib": 12, "modulefind": 12, "rexec": 12, "tempfil": 12, "docxmlrpcserv": 12, "cgi": 12, "functool": 12, "multifil": 12, "rfc822": 12, "textwrap": 12, "htmlparser": 12, "cgitb": 12, "genericpath": 12, "mutex": 12, "rlcomplet": 12, "getopt": 12, "netrc": 12, "robotpars": 12, "thread": [12, 13], "mimewrit": 12, "cmd": 12, "getpass": 12, "runpi": 12, "timeit": 12, "gettext": 12, "nntplib": 12, "sched": 12, "toaiff": 12, "simplehttpserv": 12, "codec": 12, "glob": 12, "ntpath": 12, "token": 12, "simplexmlrpcserv": 12, "codeop": 12, "gzip": 12, "nturl2path": 12, "sgmllib": 12, "socketserv": 12, "hashlib": 12, "sha": 12, "trace": 12, "stringio": 12, "colorsi": 12, "heapq": 12, "opcod": 12, "shelv": 12, "traceback": 12, "userdict": 12, "hmac": 12, "optpars": 12, "shlex": 12, "tty": 12, "userlist": 12, "compileal": 12, "hotshot": 12, "shutil": 12, "userstr": 12, "htmlentitydef": 12, "os2emxpath": 12, "unittest": 12, "_lwpcookiejar": 12, "config": 12, "htmllib": 12, "smtpd": 12, "urllib": 12, "_mozillacookiejar": 12, "contextlib": 12, "httplib": 12, "pdb": 12, "smtplib": 12, "urllib2": 12, "__future__": 12, "cookielib": 12, "ihook": 12, "pickl": 12, "sndhdr": 12, "urlpars": 12, "__phello__": 12, "foo": 12, "imaplib": 12, "pickletool": 12, "_abcol": 12, "copy_reg": 12, "imghdr": 12, "pipe": 12, "sqlite3": 12, "uu": 12, "_pyio": 12, "csv": 12, "importlib": 12, "pkgutil": 12, "sre": 12, "_strptime": 12, "ctype": 12, "imputil": 12, "plat": 12, "linux4": 12, "sre_compil": 12, "warn": 12, "_threading_loc": 12, "dbhash": 12, "inspect": 12, "platform": 12, "sre_const": 12, "wave": 12, "_weakrefset": 12, "plistlib": 12, "sre_pars": 12, "weakref": 12, "abc": 12, "difflib": 12, "popen2": 12, "ssl": [12, 16], "webbrows": 12, "aifc": 12, "dircach": 12, "poplib": 12, "whichdb": 12, "antigrav": 12, "di": 12, "tk": 12, "posixfil": 12, "statvf": 12, "wsgiref": [12, 13], "anydbm": 12, "distutil": 12, "linecach": 12, "posixpath": 12, "argpars": 12, "doctest": 12, "pprint": 12, "stringold": 12, "xdrlib": 12, "ast": 12, "dumbdbm": 12, "profil": 12, "stringprep": 12, "asynchat": 12, "dummy_thread": 12, "macpath": 12, "pstat": 12, "xmllib": 12, "asyncor": 12, "macurl2path": 12, "pty": 12, "subprocess": 12, "xmlrpclib": 12, "atexit": 12, "mailbox": 12, "py_compil": 12, "sunau": 12, "zipfil": 12, "audiodev": 12, "mailcap": 12, "pyclbr": 12, "sunaudio": 12, "filecmp": 12, "markupbas": 12, "pydoc": 12, "symbol": 12, "bdb": 12, "fileinput": 12, "md5": 12, "pydoc_data": 12, "symtabl": 12, "beautifulsoup": 12, "pkg_resourc": 12, "plyer": 12, "bottl": [12, 13, 20], "qpythoninit": 12, "setuptool": 12, "simplifi": 12, "hepler": 12, "deriv": 12, "clipboard": [12, 15], "startact": [12, 15], "sendbroadcast": [12, 15], "vibrat": [12, 15, 16, 17], "networkstatu": [12, 15], "packagevers": [12, 15], "sendemail": [12, 15], "getinput": 12, "getpassword": 12, "notifi": [12, 15], "manag": [12, 15], "barcod": [12, 15], "provid": [12, 14, 15, 16], "locat": [12, 15, 16], "geo": 12, "phonestat": 12, "dia": 12, "audio": 12, "stop": [12, 13], "airplanermod": 12, "ringer": [12, 15], "silent": 12, "media": [12, 15], "volum": [12, 15], "bright": [12, 15], "nfc": [12, 13, 15, 16, 17], "alert": 12, "layout": 12, "webview": [12, 13], "statu": 12, "author": 12, "smartphon": 13, "essenti": 13, "technic": [13, 15, 16], "assit": 13, "flexiabl": 13, "complet": 13, "job": 13, "effici": 13, "complex": 13, "experi": 13, "yourself": 13, "permiss": [13, 15], "runtim": [13, 15], "gui": [13, 15], "solut": 13, "rapid": 13, "innov": 13, "multi": 13, "touch": 13, "opengl2": 13, "header": 13, "uix": 13, "testapp": 13, "def": 13, "opengl": 13, "driver": 13, "shoul": 13, "declar": 13, "jniu": 13, "didn": 13, "yet": 13, "plan": 13, "futur": 13, "recommend": 13, "easi": [13, 15, 16], "accomplish": 13, "ui": 13, "advantag": 13, "fast": [13, 14], "strong": 13, "front": 13, "web": [13, 20], "background": [13, 15, 16], "django": 13, "flask": 13, "framework": 13, "ip": 13, "localhost": 13, "8080": 13, "previou": 13, "titlebar": 13, "hide": 13, "127": 13, "serveradapt": 13, "debug": 13, "rout": 13, "static_fil": 13, "templat": 13, "mywsgirefserv": 13, "handler": 13, "simple_serv": 13, "make_serv": 13, "wsgirequesthandl": 13, "quiet": 13, "quiethandl": 13, "log_request": 13, "arg": 13, "kw": 13, "handler_class": 13, "serve_forev": 13, "stderr": 13, "shutdown": 13, "server_clos": 13, "altern": 13, "caus": 13, "bad": 13, "fd": 13, "qpyhttpd": 13, "IN": [13, 15, 16], "router": 13, "__exit": 13, "head": 13, "global": 13, "asset": 13, "server_stat": 13, "home": 13, "h1": 13, "href": 13, "reload": 13, "ex": 13, "webserv": 13, "whish": 13, "serv": 13, "homepag": 13, "q": [13, 15, 16], "pelas": 13, "qscript": 13, "qpyapp": 13, "capabl": 14, "becaus": [14, 15, 16, 17], "architectur": 14, "pypi": 14, "rais": 14, "qpysl4a": [14, 15, 16], "calcount": 14, "high": 14, "ai": 14, "learn": [14, 15, 16], "base": 14, "relat": 14, "theano": 14, "kera": 14, "focu": 14, "practis": 14, "fundament": 14, "scientif": [14, 15, 16], "dimension": 14, "arrai": 14, "sophist": 14, "basic": 14, "linear": 14, "algebra": 14, "fourier": 14, "transform": 14, "fortran": 14, "distinct": 14, "entiti": 14, "ecosystem": 14, "who": 14, "stack": 14, "confer": 14, "dedic": 14, "euroscipi": 14, "routin": 14, "3l": 15, "qpyi": 15, "worldwid": 15, "scenario": 15, "branch": [15, 16, 17], "ox": [15, 16], "3x": 15, "learner": [15, 16], "friendli": [15, 16], "beginn": [15, 16], "experienc": [15, 16], "advanc": [15, 16], "under": 15, "offlin": [15, 16], "internet": [15, 16, 17], "transfer": [15, 16], "custom": [15, 16], "repositori": [15, 16], "prebuilt": [15, 16], "wheel": [15, 16], "enhanc": [15, 16], "scipi": [15, 16], "matplotlib": [15, 16], "scikit": [15, 16], "FOR": [15, 16], "IT": [15, 16], "drive": [15, 16], "THE": [15, 16], "WITH": [15, 16], "tonegener": 15, "wakelock": 15, "wifilock": 15, "mediaplay": 15, "third": 15, "speechrecongit": 15, "texttospeech": 15, "carmer": 15, "signalstrength": 15, "blob": 15, "readm": 15, "read_sm": [15, 16, 17], "send_sm": [15, 16, 17], "call_phon": [15, 16, 17], "AND": [15, 16], "THAT": 15, "ith": 15, "THESE": 15, "WILL": [15, 16], "NOT": [15, 16], "IF": 15, "whether": 15, "relev": 15, "profession": 15, "www": 15, "strict": [15, 16, 17], "distinguish": 15, "l": [15, 16, 17], "limit": [15, 16, 17], "sensit": [15, 16, 17], "correspond": 15, "right": 15, "qpython_3x_featu": 15, "look": 16, "restart": 16, "ad": 16, "qsl4ahelp": 16, "qslaapp": 16, "rearrang": 16, "fix": 16, "wake_lock": [16, 17], "access_network_st": [16, 17], "change_network_st": [16, 17], "access_wifi_st": [16, 17], "change_wifi_st": [16, 17], "receive_boot_complet": [16, 17], "flashlight": [16, 17], "receive_user_pres": [16, 17], "vend": [16, 17], "bill": [16, 17], "install_shortcut": [16, 17], "uninstall_shortcut": [16, 17], "read_external_storag": [16, 17], "write_external_storag": [16, 17], "read_media_storag": [16, 17], "access_coarse_loc": [16, 17], "access_fine_loc": [16, 17], "foreground_servic": [16, 17], "bluetooth_admin": [16, 17], "record_audio": [16, 17], "access_notification_polici": [16, 17], "kill_background_process": [16, 17], "net": [16, 17], "dinglisch": [16, 17], "permission_run_task": [16, 17], "access_superus": [16, 17], "receive_sm": [16, 17], "write_sm": [16, 17], "read_phone_st": [16, 17], "read_call_log": [16, 17], "process_outgoing_cal": [16, 17], "read_contact": [16, 17], "get_account": [16, 17], "system_alert_window": [16, 17], "strategi": 17, "python3": 17, "basi": 17, "cours": 17, "\u8fd1\u6765\u6084\u6084\u66f4\u65b0\u4e86\u4e0d\u5c11\u597d\u73a9\u7684\u5305": 18, "\u4f46\u662f\u6211\u6700\u559c\u6b22\u7684\u662f\u4eca\u5929\u4ecb\u7ecd\u7684\u8fd9\u4e2a\u7279\u6027": 18, "\u521a\u88ab\u96c6\u6210\u5230qpython\u4e2d\u7684dropbear": 18, "ssh\u5de5\u5177": 18, "dropbear": 18, "\u662f\u5f88\u591a\u5d4c\u5165\u5f0flinux\u7cfb\u7edf\u9996\u9009\u7684ssh\u5de5\u5177": 18, "\u7ed3\u5408qpython": 18, "\u80fd\u8ba9\u4f60\u65b9\u4fbf\u5730\u8fdb\u884c\u7f16\u7a0b\u6765\u81ea\u52a8\u7ba1\u7406\u670d\u52a1\u5668\u6216\u4f60\u7684\u624b\u673a": 18, "\u957f\u6309termin": 18, "\u9009\u62e9shell": 18, "shell\u4e2d\u8f93\u5165ssh": 18, "\u5df2\u7ecf\u767b\u5f55\u5230\u4e86\u8fdc\u7aef\u670d\u52a1\u5668": 18, "\u9664\u4e86\u4ece\u624b\u673a\u4e0a\u767b\u5f55\u670d\u52a1\u5668\u5916": 18, "\u4f60\u8fd8\u53ef\u4ee5\u767b\u5f55\u5230\u4f60\u7684\u624b\u673a": 18, "\u8fd9\u4e2a\u529f\u80fd\u9002\u5408\u9ad8\u7ea7\u73a9\u5bb6": 18, "\u56e0\u4e3a\u4e00\u4e9b\u6743\u9650\u7684\u95ee\u9898": 18, "\u5728\u624b\u673a\u4e0a\u5f00sshd\u670d\u52a1\u9700\u8981root\u6743\u9650": 18, "\u7b2c\u4e00\u6b21\u4f7f\u7528": 18, "\u9700\u8981\u4eceshell": 18, "terminal\u4e2d\u8fdb\u884c\u4e0b\u521d\u59cb\u5316\u64cd\u4f5c": 18, "su": 18, "\u5207\u6362\u4e3aroot\u7528\u6237": 18, "mkdir": 18, "\u5728": 18, "files\u4e0b\u521b\u5efadropbear\u76ee\u5f55": 18, "\u521d\u59cb\u5316\u5bf9\u5e94\u7684kei": 18, "dbkei": 18, "dss": 18, "f": 18, "dropbear_dss_host_kei": 18, "rsa": 18, "dropbear_rsa_host_kei": 18, "ecdsa": 18, "dropbear_ecdsa_host_kei": 18, "\u5b8c\u6210\u4e0a\u8ff0\u6b65\u9aa4\u4e4b\u540e": 18, "\u5373\u53ef\u542f\u52a8sshd\u670d\u52a1": 18, "\u542f\u52a8sshd\u670d\u52a1": 18, "sshd": 18, "p": 18, "8088": 18, "db": 18, "pid": 18, "\u524d\u53f0\u542f\u52a8": 18, "\u7aef\u53e3": 18, "\u63a5\u4e0b\u6765\u4ece\u4f60\u7684\u7535\u8111\u4e2d\u5c31\u53ef\u4ee5\u767b\u5f55\u4e86\u4f60\u7684\u624b\u673a\u4e86\u9ed8\u8ba4\u5bc6\u7801\u5c31\u662f\u6211\u4eec\u7684app\u540d\u5b57": 18, "\u4f60\u61c2\u5f97": 18, "\u4ece\u4f60\u7684\u7b14\u8bb0\u672c\u767b\u5f55\u624b\u673a": 18, "\u53e6\u5916\u8fd8\u652f\u6301\u4e0b\u9762\u9ad8\u7ea7\u7279\u6027": 18, "\u652f\u6301\u8bc1\u4e66\u767b\u5f55": 18, "\u501f\u52a9dbconvert": 18, "\u53ef\u4ee5\u628a\u4f60\u7684openssh\u8bc1\u4e66\u8f6c\u6362\u8fc7\u6765": 18, "\u5b58\u5230\u5bf9\u5e94\u7684\u76ee\u5f55": 18, "\u7528": 18, "id_priv": 18, "\u6307\u5b9a\u8bc1\u4e66\u5373\u53ef": 18, "\u652f\u6301": 18, "authorized_kei": 18, "\u53ea\u9700\u8981\u628a\u8be5\u6587\u4ef6\u4fdd\u5b58\u5230\u4f60\u7684dropbear\u76ee\u5f55\u4e0b": 18, "\u5373\u53ef": 18, "scp": 18, "\u8fdc\u7a0b\u62f7\u8d1d\u6587\u4ef6": 18, "\u540e\u7eed\u8ba1\u5212\u79fb\u690d\u66f4\u591a\u6709\u7528\u7684\u5de5\u5177": 18, "\u4e0d\u60f3\u73a9\u4e86\u8bb0\u5f97kill\u6389sshd\u8fdb\u7a0b": 18, "\u4e4b\u524d\u9700\u8981\u6307\u5b9apid\u6587\u4ef6\u5c31\u662f\u65b9\u4fbf\u4f60\u83b7\u5f97": 18, "kill": 18, "cat": 18, "\u83b7\u5f97qpython": 18, "\u6587\u6863\u4f53\u7cfb\u5206\u4e3a": 19, "\u82f1\u6587": 19, "\u4e2d\u6587": 19, "\u4e24\u90e8\u5206": 19, "\u6211\u4eec\u52aa\u529b\u4fdd\u6301\u4e24\u79cd\u8bed\u8a00\u5bf9\u5e94\u5185\u5bb9\u7684\u51c6\u786e\u548c\u540c\u6b65": 19, "\u5176\u4e2d\u5185\u5bb9\u5176\u4e2d\u53c8\u5206\u4e3a": 19, "\u5feb\u901f\u5f00\u59cb": [19, 21], "\u4f7f\u7528\u4e0a\u7684\u5e2e\u52a9": 19, "\u7f16\u7a0b\u6307\u5357": [19, 21], "\u4e3b\u8981\u662f\u7528qpython\u6765\u8fdb\u884c\u7f16\u7a0b\u548c\u5f00\u53d1\u7684\u6307\u5357": 19, "qpython\u9ed1\u5ba2\u6307\u5357": [19, 21], "\u6df1\u5165\u6298\u817e\u7684\u6307\u5bfc": 19, "\u8d21\u732e\u8005\u6307\u5357": [19, 21], "qpython\u8d21\u732e\u8005\u6307\u5357": 19, "\u5206\u4e3a\u5728qpython": 19, "team\u5185\u7684": 19, "\u548c\u4ee5\u5916\u7684": 19, "\u6587\u6863\u975e\u5e38\u91cd\u8981": 19, "\u6211\u4eec\u7528sphinx\u6765\u7ec4\u7ec7\u6587\u6863": 19, "\u5e76\u4e14\u6587\u6863\u4f1a\u901a\u8fc7github": 19, "page\u529f\u80fd\u76f4\u63a5\u63a8\u5230qpython": 19, "org\u7f51\u7ad9\u4e2d": 19, "\u5728\u60f3\u8981\u8d21\u732eqpython\u6587\u6863\u4e4b\u524d\u4ed4\u7ec6\u9605\u8bfb\u6211\u4eec\u7684\u6307\u5357": 19, "clone": 19, "\u8fdb\u5165\u5230": 19, "\u9879\u76ee\u7684qpython": 19, "docs\u76ee\u5f55\u4e2d": 19, "\u6309\u7167sphinx\u89c4\u5219\u7f16\u8f91source\u4e2d\u7684\u6587\u4ef6\u5373\u53ef": 19, "\u6700\u540ecd\u5230qpython": 19, "docs\u4e2d\u5e76\u8fd0\u884cbuild": 19, "sh": 19, "\u6253\u5f00\u6d4f\u89c8\u5668\u6253\u5f00\u672c\u5730\u6587\u4ef6\u68c0\u67e5": 19, "\u5982\u679c\u68c0\u67e5\u65e0\u95ee\u9898\u5219\u53ef\u4ee5\u63d0\u4ea4": 19, "\u7136\u540e\u6d4f\u89c8qpython": 19, "org\u5373\u53ef\u770b\u5230\u6700\u65b0\u7684\u66f4\u65b0": 19, "qpython\u662f\u4e00\u4e2a\u652f\u6301\u591a\u8bed\u8a00\u7684\u5e94\u7528": 19, "\u4f60\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u65b9\u5f0f\u6765\u63d0\u4ea4\u5bf9\u5e94\u56fd\u5bb6\u7684\u7ffb\u8bd1": 19, "\u4f7f\u7528\u8bf4\u660e": 20, "\u4f60\u597d": 20, "\u4e16\u754c": 20, "\u5f00\u53d1": 20, "\u5feb\u901f\u4e86\u89e3": 20, "\u7f16\u7a0b\u5411\u5bfc": 20, "\u9ed1\u5ba2": 20, "\u6b22\u8fce\u52a0\u5165": 20, "\u56e2\u961f": 20, "qpython\u6587\u6863\u4f53\u7cfb\u8bf4\u660e": [20, 21], "\u5982\u4f55\u63d0\u4ea4\u6587\u6863": [20, 21], "\u5982\u4f55\u63d0\u4ea4\u7ffb\u8bd1": [20, 21], "\u7684\u6700\u65b0\u7248\u672c1": 21, "\u5df2\u7ecf\u53d1\u5e03": 21, "\u5b83\u5305\u542b\u4e86\u8bb8\u591a\u60ca\u8273\u7684\u7279\u6027": 21, "\u8bf7\u4ece\u5e94\u7528\u5e02\u573a\u5b89\u88c5": 21, "\u5e38\u89c1\u95ee\u9898": 21, "\u5728\u767e\u5ea6\u8d34\u5427\u91cc\u8ba8\u8bba": 21, "\u5728\u5fae\u535a\u95ee\u6211\u4eec\u95ee\u9898": 21, "\u7ed9\u6211\u4eec\u53d1\u90ae\u4ef6": 21, "\u62a5\u544a\u95ee\u9898": 21, "\u8bf7\u52a0\u5165": 21, "\u7528\u6237\u5f00\u53d1\u8005\u7ec4": 21, "\u6765\u548c\u5168\u4e16\u754c\u7684": 21, "\u7528\u6237\u4e00\u5757\u6765\u73a9\u8f6cqpython": 21, "\u52a0\u5165qpython": 21, "qq\u7ec4": 21, "q\u7fa4": 21, "\u6765\u548c\u4e2d\u56fd\u6d3b\u8dc3\u7684qpython": 21, "\u7528\u6237\u4e00\u8d77\u73a9\u8f6c": 21, "\u60f3\u6210\u4e3a": 21, "\u7684\u8d21\u732e\u8005\u4e48": 21, "\u8bf7": 21}, "objects": {"": [[4, 0, 1, "", "NFCBeamMessage"], [4, 0, 1, "", "addContextMenuItem"], [4, 0, 1, "", "addOptionsMenuItem"], [4, 0, 1, "", "batteryCheckPresent"], [4, 0, 1, "", "batteryGetHealth"], [4, 0, 1, "", "batteryGetLevel"], [4, 0, 1, "", "batteryGetPlugType"], [4, 0, 1, "", "batteryGetStatus"], [4, 0, 1, "", "batteryGetTechnology"], [4, 0, 1, "", "batteryGetTemperature"], [4, 0, 1, "", "batteryGetVoltage"], [4, 0, 1, "", "batteryStartMonitoring"], [4, 0, 1, "", "batteryStopMonitoring"], [4, 0, 1, "", "bluetoothAccept"], [4, 0, 1, "", "bluetoothActiveConnections"], [4, 0, 1, "", "bluetoothConnect"], [4, 0, 1, "", "bluetoothDiscoveryCancel"], [4, 0, 1, "", "bluetoothDiscoveryStart"], [4, 0, 1, "", "bluetoothGetConnectedDeviceName"], [4, 0, 1, "", "bluetoothGetLocalAddress"], [4, 0, 1, "", "bluetoothGetLocalName"], [4, 0, 1, "", "bluetoothGetRemoteDeviceName"], [4, 0, 1, "", "bluetoothGetScanMode"], [4, 0, 1, "", "bluetoothIsDiscovering"], [4, 0, 1, "", "bluetoothMakeDiscoverable"], [4, 0, 1, "", "bluetoothRead"], [4, 0, 1, "", "bluetoothReadBinary"], [4, 0, 1, "", "bluetoothReadLine"], [4, 0, 1, "", "bluetoothReadReady"], [4, 0, 1, "", "bluetoothSetLocalName"], [4, 0, 1, "", "bluetoothStop"], [4, 0, 1, "", "bluetoothWrite"], [4, 0, 1, "", "bluetoothWriteBinary"], [4, 0, 1, "", "cameraCapturePicture"], [4, 0, 1, "", "cameraInteractiveCapturePicture"], [4, 0, 1, "", "cameraStartPreview"], [4, 0, 1, "", "cameraStopPreview"], [4, 0, 1, "", "checkAirplaneMode"], [4, 0, 1, "", "checkBluetoothState"], [4, 0, 1, "", "checkNetworkRoaming"], [4, 0, 1, "", "checkRingerSilentMode"], [4, 0, 1, "", "checkScreenOn"], [4, 0, 1, "", "checkWifiState"], [4, 0, 1, "", "contactsGet"], [4, 0, 1, "", "contactsGetAttributes"], [4, 0, 1, "", "contactsGetById"], [4, 0, 1, "", "contactsGetCount"], [4, 0, 1, "", "contactsGetIds"], [4, 0, 1, "", "dialogCreateAlert"], [4, 0, 1, "", "dialogCreateDatePicker"], [4, 0, 1, "", "dialogCreateHorizontalProgress"], [4, 0, 1, "", "dialogCreateInput"], [4, 0, 1, "", "dialogCreateNFCBeamMaster"], [4, 0, 1, "", "dialogCreateNFCBeamSlave"], [4, 0, 1, "", "dialogCreatePassword"], [4, 0, 1, "", "dialogCreateSeekBar"], [4, 0, 1, "", "dialogCreateSpinnerProgress"], [4, 0, 1, "", "dialogCreateTimePicker"], [4, 0, 1, "", "dialogDismiss"], [4, 0, 1, "", "dialogGetInput"], [4, 0, 1, "", "dialogGetPassword"], [4, 0, 1, "", "dialogGetResponse"], [4, 0, 1, "", "dialogGetSelectedItems"], [4, 0, 1, "", "dialogSetCurrentProgress"], [4, 0, 1, "", "dialogSetItems"], [4, 0, 1, "", "dialogSetMaxProgress"], [4, 0, 1, "", "dialogSetMultiChoiceItems"], [4, 0, 1, "", "dialogSetNegativeButtonText"], [4, 0, 1, "", "dialogSetNeutralButtonText"], [4, 0, 1, "", "dialogSetPositiveButtonText"], [4, 0, 1, "", "dialogSetSingleChoiceItems"], [4, 0, 1, "", "dialogShow"], [4, 0, 1, "", "environment"], [4, 0, 1, "", "eventClearBuffer"], [4, 0, 1, "", "eventGetBrodcastCategories"], [4, 0, 1, "", "eventPoll"], [4, 0, 1, "", "eventPost"], [4, 0, 1, "", "eventRegisterForBroadcast"], [4, 0, 1, "", "eventUnregisterForBroadcast"], [4, 0, 1, "", "eventWait"], [4, 0, 1, "", "eventWaitFor"], [4, 0, 1, "", "executeQPy"], [4, 0, 1, "", "forceStopPackage"], [4, 0, 1, "", "fullDismiss"], [4, 0, 1, "", "fullKeyOverride"], [4, 0, 1, "", "fullQuery"], [4, 0, 1, "", "fullQueryDetail"], [4, 0, 1, "", "fullSetList"], [4, 0, 1, "", "fullSetProperty"], [4, 0, 1, "", "fullShow"], [4, 0, 1, "", "generateDtmfTones"], [4, 0, 1, "", "geocode"], [4, 0, 1, "", "getCellLocation"], [4, 0, 1, "", "getClipboard"], [4, 0, 1, "", "getConstants"], [4, 0, 1, "", "getDeviceId"], [4, 0, 1, "", "getDeviceSoftwareVersion"], [4, 0, 1, "", "getInput"], [4, 0, 1, "", "getIntent"], [4, 0, 1, "", "getLastKnownLocation"], [4, 0, 1, "", "getLaunchableApplications"], [4, 0, 1, "", "getLine1Number"], [4, 0, 1, "", "getMaxMediaVolume"], [4, 0, 1, "", "getMaxRingerVolume"], [4, 0, 1, "", "getMediaVolume"], [4, 0, 1, "", "getNeighboringCellInfo"], [4, 0, 1, "", "getNetworkOperator"], [4, 0, 1, "", "getNetworkOperatorName"], [4, 0, 1, "", "getNetworkStatus"], [4, 0, 1, "", "getNetworkType"], [4, 0, 1, "", "getPackageVersion"], [4, 0, 1, "", "getPackageVersionCode"], [4, 0, 1, "", "getPassword"], [4, 0, 1, "", "getPhoneType"], [4, 0, 1, "", "getRingerVolume"], [4, 0, 1, "", "getRunningPackages"], [4, 0, 1, "", "getScreenBrightness"], [4, 0, 1, "", "getScreenTimeout"], [4, 0, 1, "", "getSimCountryIso"], [4, 0, 1, "", "getSimOperator"], [4, 0, 1, "", "getSimOperatorName"], [4, 0, 1, "", "getSimSerialNumber"], [4, 0, 1, "", "getSimState"], [4, 0, 1, "", "getSubscriberId"], [4, 0, 1, "", "getVibrateMode"], [4, 0, 1, "", "getVoiceMailAlphaTag"], [4, 0, 1, "", "getVoiceMailNumber"], [4, 0, 1, "", "launch"], [4, 0, 1, "", "locationProviderEnabled"], [4, 0, 1, "", "locationProviders"], [4, 0, 1, "", "log"], [4, 0, 1, "", "makeIntent"], [4, 0, 1, "", "makeToast"], [4, 0, 1, "", "mediaIsPlaying"], [4, 0, 1, "", "mediaPlay"], [4, 0, 1, "", "mediaPlayClose"], [4, 0, 1, "", "mediaPlayInfo"], [4, 0, 1, "", "mediaPlayList"], [4, 0, 1, "", "mediaPlayPause"], [4, 0, 1, "", "mediaPlaySeek"], [4, 0, 1, "", "mediaPlaySetLooping"], [4, 0, 1, "", "mediaPlayStart"], [4, 0, 1, "", "notify"], [4, 0, 1, "", "phoneCall"], [4, 0, 1, "", "phoneCallNumber"], [4, 0, 1, "", "phoneDial"], [4, 0, 1, "", "phoneDialNumber"], [4, 0, 1, "", "pick"], [4, 0, 1, "", "pickContact"], [4, 0, 1, "", "pickPhone"], [4, 0, 1, "", "prefGetAll"], [4, 0, 1, "", "prefGetValue"], [4, 0, 1, "", "prefPutValue"], [4, 0, 1, "", "queryAttributes"], [4, 0, 1, "", "queryContent"], [4, 0, 1, "", "readBatteryData"], [4, 0, 1, "", "readLocation"], [4, 0, 1, "", "readPhoneState"], [4, 0, 1, "", "readSensors"], [4, 0, 1, "", "readSignalStrengths"], [4, 0, 1, "", "receiveEvent"], [4, 0, 1, "", "recognizeSpeech"], [4, 0, 1, "", "recorderCaptureVideo"], [4, 0, 1, "", "recorderStartMicrophone"], [4, 0, 1, "", "recorderStartVideo"], [4, 0, 1, "", "recorderStop"], [4, 0, 1, "", "requiredVersion"], [4, 0, 1, "", "rpcPostEvent"], [4, 0, 1, "", "scanBarcode"], [4, 0, 1, "", "search"], [4, 0, 1, "", "sendBroadcast"], [4, 0, 1, "", "sendBroadcastIntent"], [4, 0, 1, "", "sendEmail"], [4, 0, 1, "", "sensorsGetAccuracy"], [4, 0, 1, "", "sensorsGetLight"], [4, 0, 1, "", "sensorsReadAccelerometer"], [4, 0, 1, "", "sensorsReadMagnetometer"], [4, 0, 1, "", "sensorsReadOrientation"], [4, 0, 1, "", "setClipboard"], [4, 0, 1, "", "setMediaVolume"], [4, 0, 1, "", "setResultBoolean"], [4, 0, 1, "", "setResultBooleanArray"], [4, 0, 1, "", "setResultByte"], [4, 0, 1, "", "setResultByteArray"], [4, 0, 1, "", "setResultChar"], [4, 0, 1, "", "setResultCharArray"], [4, 0, 1, "", "setResultDouble"], [4, 0, 1, "", "setResultDoubleArray"], [4, 0, 1, "", "setResultFloat"], [4, 0, 1, "", "setResultFloatArray"], [4, 0, 1, "", "setResultInteger"], [4, 0, 1, "", "setResultIntegerArray"], [4, 0, 1, "", "setResultLong"], [4, 0, 1, "", "setResultLongArray"], [4, 0, 1, "", "setResultSerializable"], [4, 0, 1, "", "setResultShort"], [4, 0, 1, "", "setResultShortArray"], [4, 0, 1, "", "setResultString"], [4, 0, 1, "", "setResultStringArray"], [4, 0, 1, "", "setRingerVolume"], [4, 0, 1, "", "setScreenBrightness"], [4, 0, 1, "", "setScreenTimeout"], [4, 0, 1, "", "smsDeleteMessage"], [4, 0, 1, "", "smsGetAttributes"], [4, 0, 1, "", "smsGetMessageById"], [4, 0, 1, "", "smsGetMessageCount"], [4, 0, 1, "", "smsGetMessageIds"], [4, 0, 1, "", "smsGetMessages"], [4, 0, 1, "", "smsMarkMessageRead"], [4, 0, 1, "", "smsSend"], [4, 0, 1, "", "startActivity"], [4, 0, 1, "", "startActivityForResult"], [4, 0, 1, "", "startActivityForResultIntent"], [4, 0, 1, "", "startActivityIntent"], [4, 0, 1, "", "startEventDispatcher"], [4, 0, 1, "", "startInteractiveVideoRecording"], [4, 0, 1, "", "startLocating"], [4, 0, 1, "", "startSensing"], [4, 0, 1, "", "startSensingThreshold"], [4, 0, 1, "", "startSensingTimed"], [4, 0, 1, "", "startTrackingPhoneState"], [4, 0, 1, "", "startTrackingSignalStrengths"], [4, 0, 1, "", "stopEventDispatcher"], [4, 0, 1, "", "stopLocating"], [4, 0, 1, "", "stopSensing"], [4, 0, 1, "", "stopTrackingPhoneState"], [4, 0, 1, "", "stopTrackingSignalStrengths"], [4, 0, 1, "", "toggleAirplaneMode"], [4, 0, 1, "", "toggleBluetoothState"], [4, 0, 1, "", "toggleRingerSilentMode"], [4, 0, 1, "", "toggleVibrateMode"], [4, 0, 1, "", "toggleWifiState"], [4, 0, 1, "", "ttsIsSpeaking"], [4, 0, 1, "", "ttsSpeak"], [4, 0, 1, "", "usbserialActiveConnections"], [4, 0, 1, "", "usbserialConnect"], [4, 0, 1, "", "usbserialDisconnect"], [4, 0, 1, "", "usbserialGetDeviceList"], [4, 0, 1, "", "usbserialGetDeviceName"], [4, 0, 1, "", "usbserialHostEnable"], [4, 0, 1, "", "usbserialRead"], [4, 0, 1, "", "usbserialReadBinary"], [4, 0, 1, "", "usbserialReadReady"], [4, 0, 1, "", "usbserialWrite"], [4, 0, 1, "", "usbserialWriteBinary"], [4, 0, 1, "id0", "vibrate"], [4, 0, 1, "", "view"], [4, 0, 1, "", "viewContacts"], [4, 0, 1, "", "viewHtml"], [4, 0, 1, "", "viewMap"], [4, 0, 1, "", "waitForEvent"], [4, 0, 1, "", "wakeLockAcquireBright"], [4, 0, 1, "", "wakeLockAcquireDim"], [4, 0, 1, "", "wakeLockAcquireFull"], [4, 0, 1, "", "wakeLockAcquirePartial"], [4, 0, 1, "", "wakeLockRelease"], [4, 0, 1, "", "webViewShow"], [4, 0, 1, "", "webcamAdjustQuality"], [4, 0, 1, "", "webcamStart"], [4, 0, 1, "", "wifiDisconnect"], [4, 0, 1, "", "wifiGetConnectionInfo"], [4, 0, 1, "", "wifiGetScanResults"], [4, 0, 1, "", "wifiLockAcquireFull"], [4, 0, 1, "", "wifiLockAcquireScanOnly"], [4, 0, 1, "", "wifiLockRelease"], [4, 0, 1, "", "wifiReassociate"], [4, 0, 1, "", "wifiReconnect"], [4, 0, 1, "", "wifiStartScan"]]}, "objtypes": {"0": "py:function"}, "objnames": {"0": ["py", "function", "Python function"]}, "titleterms": {"contributor": [0, 3], "develop": [0, 3, 5, 11], "commun": [0, 1, 5, 6, 10], "organ": 0, "local": [0, 5], "welcom": [1, 5], "read": [1, 4], "qpython": [1, 5, 7, 8, 10, 12, 13, 16, 17, 21], "guid": [1, 3], "what": [1, 16], "": [1, 8, 13, 16], "new": [1, 16], "thank": 1, "gui": 1, "who": 1, "ar": 1, "contribut": [1, 5], "support": 1, "now": 1, "let": 1, "go": 1, "other": [1, 14], "For": 1, "chines": 1, "user": [1, 5], "faq": 2, "get": [3, 4], "start": [3, 4, 10], "program": [3, 5, 7, 10], "androidfacad": 4, "clipboard": 4, "api": [4, 7, 8, 12], "intent": 4, "startact": 4, "sendbroadcast": 4, "vibrat": 4, "networkstatu": 4, "packagevers": 4, "system": 4, "sendemail": 4, "toast": 4, "getinput": 4, "getpassword": 4, "notifi": 4, "applicationmanagerfacad": 4, "manag": 4, "camerafacad": 4, "commonintentsfacad": 4, "barcod": 4, "view": 4, "contactsfacad": 4, "eventfacad": 4, "locationfacad": 4, "provid": 4, "locat": 4, "geo": 4, "phonefacad": 4, "phonestat": 4, "call": 4, "dia": 4, "inform": 4, "mediarecorderfacad": 4, "audio": 4, "video": 4, "stop": 4, "sensormanagerfacad": 4, "data": 4, "settingsfacad": 4, "screen": 4, "airplanermod": 4, "ringer": 4, "silent": 4, "mode": 4, "media": 4, "volum": 4, "bright": 4, "smsfacad": 4, "speechrecognitionfacad": 4, "tonegeneratorfacad": 4, "wakelockfacad": 4, "wififacad": 4, "batterymanagerfacad": 4, "activityresultfacad": 4, "mediaplayerfacad": 4, "control": 4, "preferencesfacad": 4, "qpyinterfacefacad": 4, "texttospeechfacad": 4, "eyesfreefacad": 4, "bluetoothfacad": 4, "signalstrengthfacad": 4, "webcamfacad": 4, "uifacad": 4, "dialog": 4, "nfc": 4, "progress": 4, "alert": 4, "layout": 4, "webview": 4, "usb": 4, "host": 4, "serial": 4, "facad": 4, "requir": [4, 16], "statu": 4, "author": 4, "how": [5, 10], "help": 5, "test": 5, "document": 5, "translat": 5, "launch": 5, "organis": 5, "share": [5, 8], "event": 5, "becam": 5, "member": 5, "built": [5, 12], "sponsor": 5, "project": 5, "join": 6, "tester": 6, "becom": 6, "report": 6, "suggest": 6, "feedback": 6, "android": [7, 16], "consol": [7, 10], "editor": [7, 10], "file": 7, "brows": 7, "qrcode": 7, "reader": 7, "qsl4a": 7, "core": 7, "python": [7, 12, 17], "2": [7, 10, 16], "x": 7, "3": [7, 10, 16], "kivi": 7, "webapp": 7, "pip": 7, "librari": [7, 9, 10, 12], "quick": 7, "tool": 7, "ftp": 7, "qpy": [7, 8], "io": [7, 8], "enterpris": 7, "servic": [7, 8], "open": 8, "some": 8, "content": 8, "script": 8, "run": 8, "from": [8, 11], "your": [8, 11], "own": 8, "applic": 8, "onlin": 8, "qpypi": [8, 14], "write": 9, "hello": 9, "world": 9, "sl4a": 9, "more": 9, "sampl": 9, "To": 10, "1": [10, 16], "dashboard": 10, "4": 10, "5": 10, "us": 11, "best": 11, "wai": 11, "qeditor": 11, "browser": 11, "comput": 11, "dynload": 12, "stardard": 12, "3rd": 12, "androidhelp": 12, "main": 13, "featur": [13, 16], "why": 13, "should": 13, "i": 13, "choos": 13, "qpysla": 14, "packag": 14, "qsl4ahelp": 14, "aipi": 14, "numpi": 14, "scipi": 14, "3x": 16, "featu": [16, 17], "v3": 16, "0": 16, "publish": 16, "2020": 16, "app": 16, "permiss": [16, 17], "both": [16, 17], "3l": 16, "ox": 17, "ol": 17, "o": 17, "\u5982\u4f55\u5728qpython": 18, "\u4f7f\u7528": 18, "ssh": 18, "\u5982\u4f55\u8fdc\u7a0b\u767b\u5f55": 18, "\u4f60\u7684\u670d\u52a1\u5668": 18, "\u5982\u4f55\u767b\u5f55\u5230\u4f60\u7684\u624b\u673a": 18, "\u5176\u4ed6": 18, "qpython\u6587\u6863\u4f53\u7cfb\u8bf4\u660e": 19, "\u5982\u4f55\u63d0\u4ea4\u6587\u6863": 19, "\u5982\u4f55\u63d0\u4ea4\u7ffb\u8bd1": 19, "\u5feb\u901f\u5f00\u59cb": 20, "\u7f16\u7a0b\u6307\u5357": 20, "qpython\u9ed1\u5ba2\u6307\u5357": 20, "\u8d21\u732e\u8005\u6307\u5357": 20, "\u4e2d\u6587\u7528\u6237\u5411\u5bfc": 21, "\u6b22\u8fce": 21, "\u8d77\u6b65": 21, "\u66f4\u591a\u94fe\u63a5": 21, "\u7528\u6237\u5f00\u53d1\u7ec4": 21, "\u5982\u4f55\u8d21\u732e": 21}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 58}, "alltitles": {"Contributors": [[0, "contributors"]], "Developers": [[0, "developers"]], "Communities Organizers": [[0, "communities-organizers"]], "Localization": [[0, "localization"]], "Welcome to read the QPython guide": [[1, "welcome-to-read-the-qpython-guide"]], "What\u2019s NEW": [[1, "what-s-new"]], "Thanks these guys who are contributing": [[1, "thanks-these-guys-who-are-contributing"]], "QPython Communities": [[1, "qpython-communities"]], "Support": [[1, "support"]], "Now, let\u2019s GO": [[1, "now-let-s-go"]], "Others": [[1, "others"]], "For Chinese users": [[1, "for-chinese-users"]], "FAQ": [[2, "faq"]], "Getting started": [[3, "getting-started"]], "Programming Guide": [[3, "programming-guide"]], "Developer Guide": [[3, "developer-guide"]], "Contributor Guide": [[3, "contributor-guide"]], "AndroidFacade": [[4, "androidfacade"]], "Clipboard APIs": [[4, "clipboard-apis"]], "Intent & startActivity APIs": [[4, "intent-startactivity-apis"]], "SendBroadcast APIs": [[4, "sendbroadcast-apis"]], "Vibrate": [[4, "vibrate"]], "NetworkStatus": [[4, "networkstatus"]], "PackageVersion APIs": [[4, "packageversion-apis"]], "System APIs": [[4, "system-apis"]], "SendEmail": [[4, "sendemail"]], "Toast, getInput, getPassword, notify APIs": [[4, "toast-getinput-getpassword-notify-apis"]], "ApplicationManagerFacade": [[4, "applicationmanagerfacade"]], "Manager APIs": [[4, "manager-apis"]], "CameraFacade": [[4, "camerafacade"]], "CommonIntentsFacade": [[4, "commonintentsfacade"]], "Barcode": [[4, "barcode"]], "View APIs": [[4, "view-apis"]], "ContactsFacade": [[4, "contactsfacade"]], "EventFacade": [[4, "eventfacade"]], "LocationFacade": [[4, "locationfacade"]], "Providers APIs": [[4, "providers-apis"]], "Location APIs": [[4, "location-apis"]], "GEO": [[4, "geo"]], "PhoneFacade": [[4, "phonefacade"]], "PhoneStat APIs": [[4, "phonestat-apis"]], "Call & Dia APIs": [[4, "call-dia-apis"]], "Get information APIs": [[4, "get-information-apis"]], "MediaRecorderFacade": [[4, "mediarecorderfacade"]], "Audio": [[4, "audio"]], "Video APIs": [[4, "video-apis"]], "Stop": [[4, "stop"]], "SensorManagerFacade": [[4, "sensormanagerfacade"]], "Start & Stop": [[4, "start-stop"]], "Read data APIs": [[4, "read-data-apis"]], "SettingsFacade": [[4, "settingsfacade"]], "Screen": [[4, "screen"]], "AirplanerMode": [[4, "airplanermode"]], "Ringer Silent Mode": [[4, "ringer-silent-mode"]], "Vibrate Mode": [[4, "vibrate-mode"]], "Ringer & Media Volume": [[4, "ringer-media-volume"]], "Screen Brightness": [[4, "screen-brightness"]], "SmsFacade": [[4, "smsfacade"]], "SpeechRecognitionFacade": [[4, "speechrecognitionfacade"]], "ToneGeneratorFacade": [[4, "tonegeneratorfacade"]], "WakeLockFacade": [[4, "wakelockfacade"]], "WifiFacade": [[4, "wififacade"]], "BatteryManagerFacade": [[4, "batterymanagerfacade"]], "ActivityResultFacade": [[4, "activityresultfacade"]], "MediaPlayerFacade": [[4, "mediaplayerfacade"]], "Control": [[4, "control"]], "Get Information": [[4, "get-information"]], "PreferencesFacade": [[4, "preferencesfacade"]], "QPyInterfaceFacade": [[4, "qpyinterfacefacade"]], "TextToSpeechFacade": [[4, "texttospeechfacade"]], "EyesFreeFacade": [[4, "eyesfreefacade"]], "BluetoothFacade": [[4, "bluetoothfacade"]], "SignalStrengthFacade": [[4, "signalstrengthfacade"]], "WebCamFacade": [[4, "webcamfacade"]], "UiFacade": [[4, "uifacade"]], "Dialog": [[4, "dialog"]], "NFC": [[4, "nfc"]], "Progress": [[4, "progress"]], "Alert": [[4, "alert"]], "Dialog Control": [[4, "dialog-control"]], "Layout": [[4, "layout"]], "WebView": [[4, "webview"]], "USB Host Serial Facade": [[4, "usb-host-serial-facade"]], "Requirements": [[4, "requirements"]], "Status": [[4, "status"]], "Author": [[4, "author"]], "APIs": [[4, "apis"]], "Welcome contribute": [[5, "welcome-contribute"]], "How to help with test": [[5, "how-to-help-with-test"]], "How to contribute documentation": [[5, "how-to-contribute-documentation"]], "How to translate": [[5, "how-to-translate"]], "How to launch a local QPython users community": [[5, "how-to-launch-a-local-qpython-users-community"]], "How to organise a local qpython user sharing event": [[5, "how-to-organise-a-local-qpython-user-sharing-event"]], "How to became the developer member": [[5, "how-to-became-the-developer-member"]], "How to develop qpython built-in programs": [[5, "how-to-develop-qpython-built-in-programs"]], "How to sponsor QPython project": [[5, "how-to-sponsor-qpython-project"]], "Join the tester community": [[6, "join-the-tester-community"]], "Become a tester": [[6, "become-a-tester"]], "Report or suggest": [[6, "report-or-suggest"]], "Feedback": [[6, "feedback"]], "Android": [[7, "android"]], "Console": [[7, "console"]], "Editor": [[7, "editor"]], "File browsing": [[7, "file-browsing"]], "QRCode reader": [[7, "qrcode-reader"]], "QSL4A": [[7, "qsl4a"]], "QPython Core": [[7, "qpython-core"]], "Python 2.x": [[7, "python-2-x"]], "Python 3.x": [[7, "python-3-x"]], "Console program": [[7, "console-program"]], "Kivy program": [[7, "kivy-program"]], "WebApp program": [[7, "webapp-program"]], "Pip and libraries": [[7, "pip-and-libraries"]], "Pip": [[7, "pip"]], "Libraries": [[7, "libraries"]], "Quick tools": [[7, "quick-tools"]], "QPython API": [[7, "qpython-api"]], "FTP": [[7, "ftp"]], "QPY.IO (Enterprise service)": [[7, "qpy-io-enterprise-service"]], "QPython Open API": [[8, "qpython-open-api"]], "Share some content to QPython\u2019s scripts": [[8, "share-some-content-to-qpython-s-scripts"]], "Run QPython\u2019s script from your own application": [[8, "run-qpython-s-script-from-your-own-application"]], "QPython Online Service": [[8, "qpython-online-service"]], "QPypi": [[8, "qpypi"]], "QPY.IO": [[8, "qpy-io"]], "Writing \u201cHello World\u201d": [[9, "writing-hello-world"]], "Hello world": [[9, "hello-world"]], "SL4A library": [[9, "sl4a-library"]], "More samples": [[9, "more-samples"]], "QPython: How To Start": [[10, "qpython-how-to-start"]], "1. Dashboard": [[10, "dashboard"]], "2. Console and editor": [[10, "console-and-editor"]], "3. Programs": [[10, "programs"]], "4. Libraries": [[10, "libraries"]], "5. Community": [[10, "community"]], "Use the best way for developing": [[11, "use-the-best-way-for-developing"]], "Develop from QEditor": [[11, "develop-from-qeditor"]], "Develop from browser": [[11, "develop-from-browser"]], "Develop from your computer": [[11, "develop-from-your-computer"]], "QPython built-in Libraries": [[12, "qpython-built-in-libraries"]], "QPython dynload libraries": [[12, "qpython-dynload-libraries"]], "QPython stardard libraries": [[12, "qpython-stardard-libraries"]], "Python 3rd Libraries": [[12, "python-3rd-libraries"]], "Androidhelper APIs": [[12, "androidhelper-apis"]], "QPython\u2019s main features": [[13, "qpython-s-main-features"], [13, "id1"]], "Why should I choose QPython": [[13, "why-should-i-choose-qpython"]], "QPYPI": [[14, "qpypi"]], "QPySLA Package": [[14, "qpysla-package"]], "qsl4ahelper": [[14, "qsl4ahelper"]], "AIPY Packages": [[14, "aipy-packages"]], "Numpy": [[14, "numpy"]], "Scipy": [[14, "scipy"]], "Other": [[14, "other"]], "QPython 3x featues": [[16, "qpython-3x-featues"]], "WHAT\u2019S NEW": [[16, "what-s-new"]], "QPython 3x v3.0.0 (Published on 2020/2/1)": [[16, "qpython-3x-v3-0-0-published-on-2020-2-1"]], "App\u2019s Features": [[16, "app-s-features"]], "Android Permissions that QPython requires": [[16, "android-permissions-that-qpython-requires"]], "Both QPython 3S and 3L": [[16, "both-qpython-3s-and-3l"]], "QPython 3S": [[16, "qpython-3s"]], "QPython Ox featues": [[17, "qpython-ox-featues"]], "Python": [[17, "python"]], "Permissions": [[17, "permissions"]], "Both QPython OL and OS": [[17, "both-qpython-ol-and-os"]], "QPython OS": [[17, "qpython-os"]], "\u5982\u4f55\u5728QPython \u4f7f\u7528 SSH": [[18, "qpython-ssh"]], "\u5982\u4f55\u8fdc\u7a0b\u767b\u5f55 \u4f60\u7684\u670d\u52a1\u5668\uff1f": [[18, "id1"]], "\u5982\u4f55\u767b\u5f55\u5230\u4f60\u7684\u624b\u673a?": [[18, "id2"]], "\u5176\u4ed6": [[18, "id9"]], "QPython\u6587\u6863\u4f53\u7cfb\u8bf4\u660e": [[19, "qpython"]], "\u5982\u4f55\u63d0\u4ea4\u6587\u6863": [[19, "id1"]], "\u5982\u4f55\u63d0\u4ea4\u7ffb\u8bd1": [[19, "id2"]], "\u5feb\u901f\u5f00\u59cb": [[20, "id1"]], "\u7f16\u7a0b\u6307\u5357": [[20, "id4"]], "QPython\u9ed1\u5ba2\u6307\u5357": [[20, "id5"]], "\u8d21\u732e\u8005\u6307\u5357": [[20, "id8"]], "\u4e2d\u6587\u7528\u6237\u5411\u5bfc": [[21, "id1"]], "\u6b22\u8fce \uff01": [[21, "id2"]], "QPython \u8d77\u6b65": [[21, "qpython"]], "\u66f4\u591a\u94fe\u63a5": [[21, "id3"]], "QPython \u7528\u6237\u5f00\u53d1\u7ec4": [[21, "id9"]], "\u5982\u4f55\u8d21\u732e": [[21, "id11"]]}, "indexentries": {"nfcbeammessage()": [[4, "NFCBeamMessage"]], "addcontextmenuitem()": [[4, "addContextMenuItem"]], "addoptionsmenuitem()": [[4, "addOptionsMenuItem"]], "batterycheckpresent()": [[4, "batteryCheckPresent"]], "batterygethealth()": [[4, "batteryGetHealth"]], "batterygetlevel()": [[4, "batteryGetLevel"]], "batterygetplugtype()": [[4, "batteryGetPlugType"]], "batterygetstatus()": [[4, "batteryGetStatus"]], "batterygettechnology()": [[4, "batteryGetTechnology"]], "batterygettemperature()": [[4, "batteryGetTemperature"]], "batterygetvoltage()": [[4, "batteryGetVoltage"]], "batterystartmonitoring()": [[4, "batteryStartMonitoring"]], "batterystopmonitoring()": [[4, "batteryStopMonitoring"]], "bluetoothaccept()": [[4, "bluetoothAccept"]], "bluetoothactiveconnections()": [[4, "bluetoothActiveConnections"]], "bluetoothconnect()": [[4, "bluetoothConnect"]], "bluetoothdiscoverycancel()": [[4, "bluetoothDiscoveryCancel"]], "bluetoothdiscoverystart()": [[4, "bluetoothDiscoveryStart"]], "bluetoothgetconnecteddevicename()": [[4, "bluetoothGetConnectedDeviceName"]], "bluetoothgetlocaladdress()": [[4, "bluetoothGetLocalAddress"]], "bluetoothgetlocalname()": [[4, "bluetoothGetLocalName"]], "bluetoothgetremotedevicename()": [[4, "bluetoothGetRemoteDeviceName"]], "bluetoothgetscanmode()": [[4, "bluetoothGetScanMode"]], "bluetoothisdiscovering()": [[4, "bluetoothIsDiscovering"]], "bluetoothmakediscoverable()": [[4, "bluetoothMakeDiscoverable"]], "bluetoothread()": [[4, "bluetoothRead"]], "bluetoothreadbinary()": [[4, "bluetoothReadBinary"]], "bluetoothreadline()": [[4, "bluetoothReadLine"]], "bluetoothreadready()": [[4, "bluetoothReadReady"]], "bluetoothsetlocalname()": [[4, "bluetoothSetLocalName"]], "bluetoothstop()": [[4, "bluetoothStop"]], "bluetoothwrite()": [[4, "bluetoothWrite"]], "bluetoothwritebinary()": [[4, "bluetoothWriteBinary"]], "built-in function": [[4, "NFCBeamMessage"], [4, "addContextMenuItem"], [4, "addOptionsMenuItem"], [4, "batteryCheckPresent"], [4, "batteryGetHealth"], [4, "batteryGetLevel"], [4, "batteryGetPlugType"], [4, "batteryGetStatus"], [4, "batteryGetTechnology"], [4, "batteryGetTemperature"], [4, "batteryGetVoltage"], [4, "batteryStartMonitoring"], [4, "batteryStopMonitoring"], [4, "bluetoothAccept"], [4, "bluetoothActiveConnections"], [4, "bluetoothConnect"], [4, "bluetoothDiscoveryCancel"], [4, "bluetoothDiscoveryStart"], [4, "bluetoothGetConnectedDeviceName"], [4, "bluetoothGetLocalAddress"], [4, "bluetoothGetLocalName"], [4, "bluetoothGetRemoteDeviceName"], [4, "bluetoothGetScanMode"], [4, "bluetoothIsDiscovering"], [4, "bluetoothMakeDiscoverable"], [4, "bluetoothRead"], [4, "bluetoothReadBinary"], [4, "bluetoothReadLine"], [4, "bluetoothReadReady"], [4, "bluetoothSetLocalName"], [4, "bluetoothStop"], [4, "bluetoothWrite"], [4, "bluetoothWriteBinary"], [4, "cameraCapturePicture"], [4, "cameraInteractiveCapturePicture"], [4, "cameraStartPreview"], [4, "cameraStopPreview"], [4, "checkAirplaneMode"], [4, "checkBluetoothState"], [4, "checkNetworkRoaming"], [4, "checkRingerSilentMode"], [4, "checkScreenOn"], [4, "checkWifiState"], [4, "contactsGet"], [4, "contactsGetAttributes"], [4, "contactsGetById"], [4, "contactsGetCount"], [4, "contactsGetIds"], [4, "dialogCreateAlert"], [4, "dialogCreateDatePicker"], [4, "dialogCreateHorizontalProgress"], [4, "dialogCreateInput"], [4, "dialogCreateNFCBeamMaster"], [4, "dialogCreateNFCBeamSlave"], [4, "dialogCreatePassword"], [4, "dialogCreateSeekBar"], [4, "dialogCreateSpinnerProgress"], [4, "dialogCreateTimePicker"], [4, "dialogDismiss"], [4, "dialogGetInput"], [4, "dialogGetPassword"], [4, "dialogGetResponse"], [4, "dialogGetSelectedItems"], [4, "dialogSetCurrentProgress"], [4, "dialogSetItems"], [4, "dialogSetMaxProgress"], [4, "dialogSetMultiChoiceItems"], [4, "dialogSetNegativeButtonText"], [4, "dialogSetNeutralButtonText"], [4, "dialogSetPositiveButtonText"], [4, "dialogSetSingleChoiceItems"], [4, "dialogShow"], [4, "environment"], [4, "eventClearBuffer"], [4, "eventGetBrodcastCategories"], [4, "eventPoll"], [4, "eventPost"], [4, "eventRegisterForBroadcast"], [4, "eventUnregisterForBroadcast"], [4, "eventWait"], [4, "eventWaitFor"], [4, "executeQPy"], [4, "forceStopPackage"], [4, "fullDismiss"], [4, "fullKeyOverride"], [4, "fullQuery"], [4, "fullQueryDetail"], [4, "fullSetList"], [4, "fullSetProperty"], [4, "fullShow"], [4, "generateDtmfTones"], [4, "geocode"], [4, "getCellLocation"], [4, "getClipboard"], [4, "getConstants"], [4, "getDeviceId"], [4, "getDeviceSoftwareVersion"], [4, "getInput"], [4, "getIntent"], [4, "getLastKnownLocation"], [4, "getLaunchableApplications"], [4, "getLine1Number"], [4, "getMaxMediaVolume"], [4, "getMaxRingerVolume"], [4, "getMediaVolume"], [4, "getNeighboringCellInfo"], [4, "getNetworkOperator"], [4, "getNetworkOperatorName"], [4, "getNetworkStatus"], [4, "getNetworkType"], [4, "getPackageVersion"], [4, "getPackageVersionCode"], [4, "getPassword"], [4, "getPhoneType"], [4, "getRingerVolume"], [4, "getRunningPackages"], [4, "getScreenBrightness"], [4, "getScreenTimeout"], [4, "getSimCountryIso"], [4, "getSimOperator"], [4, "getSimOperatorName"], [4, "getSimSerialNumber"], [4, "getSimState"], [4, "getSubscriberId"], [4, "getVibrateMode"], [4, "getVoiceMailAlphaTag"], [4, "getVoiceMailNumber"], [4, "id0"], [4, "launch"], [4, "locationProviderEnabled"], [4, "locationProviders"], [4, "log"], [4, "makeIntent"], [4, "makeToast"], [4, "mediaIsPlaying"], [4, "mediaPlay"], [4, "mediaPlayClose"], [4, "mediaPlayInfo"], [4, "mediaPlayList"], [4, "mediaPlayPause"], [4, "mediaPlaySeek"], [4, "mediaPlaySetLooping"], [4, "mediaPlayStart"], [4, "notify"], [4, "phoneCall"], [4, "phoneCallNumber"], [4, "phoneDial"], [4, "phoneDialNumber"], [4, "pick"], [4, "pickContact"], [4, "pickPhone"], [4, "prefGetAll"], [4, "prefGetValue"], [4, "prefPutValue"], [4, "queryAttributes"], [4, "queryContent"], [4, "readBatteryData"], [4, "readLocation"], [4, "readPhoneState"], [4, "readSensors"], [4, "readSignalStrengths"], [4, "receiveEvent"], [4, "recognizeSpeech"], [4, "recorderCaptureVideo"], [4, "recorderStartMicrophone"], [4, "recorderStartVideo"], [4, "recorderStop"], [4, "requiredVersion"], [4, "rpcPostEvent"], [4, "scanBarcode"], [4, "search"], [4, "sendBroadcast"], [4, "sendBroadcastIntent"], [4, "sendEmail"], [4, "sensorsGetAccuracy"], [4, "sensorsGetLight"], [4, "sensorsReadAccelerometer"], [4, "sensorsReadMagnetometer"], [4, "sensorsReadOrientation"], [4, "setClipboard"], [4, "setMediaVolume"], [4, "setResultBoolean"], [4, "setResultBooleanArray"], [4, "setResultByte"], [4, "setResultByteArray"], [4, "setResultChar"], [4, "setResultCharArray"], [4, "setResultDouble"], [4, "setResultDoubleArray"], [4, "setResultFloat"], [4, "setResultFloatArray"], [4, "setResultInteger"], [4, "setResultIntegerArray"], [4, "setResultLong"], [4, "setResultLongArray"], [4, "setResultSerializable"], [4, "setResultShort"], [4, "setResultShortArray"], [4, "setResultString"], [4, "setResultStringArray"], [4, "setRingerVolume"], [4, "setScreenBrightness"], [4, "setScreenTimeout"], [4, "smsDeleteMessage"], [4, "smsGetAttributes"], [4, "smsGetMessageById"], [4, "smsGetMessageCount"], [4, "smsGetMessageIds"], [4, "smsGetMessages"], [4, "smsMarkMessageRead"], [4, "smsSend"], [4, "startActivity"], [4, "startActivityForResult"], [4, "startActivityForResultIntent"], [4, "startActivityIntent"], [4, "startEventDispatcher"], [4, "startInteractiveVideoRecording"], [4, "startLocating"], [4, "startSensing"], [4, "startSensingThreshold"], [4, "startSensingTimed"], [4, "startTrackingPhoneState"], [4, "startTrackingSignalStrengths"], [4, "stopEventDispatcher"], [4, "stopLocating"], [4, "stopSensing"], [4, "stopTrackingPhoneState"], [4, "stopTrackingSignalStrengths"], [4, "toggleAirplaneMode"], [4, "toggleBluetoothState"], [4, "toggleRingerSilentMode"], [4, "toggleVibrateMode"], [4, "toggleWifiState"], [4, "ttsIsSpeaking"], [4, "ttsSpeak"], [4, "usbserialActiveConnections"], [4, "usbserialConnect"], [4, "usbserialDisconnect"], [4, "usbserialGetDeviceList"], [4, "usbserialGetDeviceName"], [4, "usbserialHostEnable"], [4, "usbserialRead"], [4, "usbserialReadBinary"], [4, "usbserialReadReady"], [4, "usbserialWrite"], [4, "usbserialWriteBinary"], [4, "view"], [4, "viewContacts"], [4, "viewHtml"], [4, "viewMap"], [4, "waitForEvent"], [4, "wakeLockAcquireBright"], [4, "wakeLockAcquireDim"], [4, "wakeLockAcquireFull"], [4, "wakeLockAcquirePartial"], [4, "wakeLockRelease"], [4, "webViewShow"], [4, "webcamAdjustQuality"], [4, "webcamStart"], [4, "wifiDisconnect"], [4, "wifiGetConnectionInfo"], [4, "wifiGetScanResults"], [4, "wifiLockAcquireFull"], [4, "wifiLockAcquireScanOnly"], [4, "wifiLockRelease"], [4, "wifiReassociate"], [4, "wifiReconnect"], [4, "wifiStartScan"]], "cameracapturepicture()": [[4, "cameraCapturePicture"]], "camerainteractivecapturepicture()": [[4, "cameraInteractiveCapturePicture"]], "camerastartpreview()": [[4, "cameraStartPreview"]], "camerastoppreview()": [[4, "cameraStopPreview"]], "checkairplanemode()": [[4, "checkAirplaneMode"]], "checkbluetoothstate()": [[4, "checkBluetoothState"]], "checknetworkroaming()": [[4, "checkNetworkRoaming"]], "checkringersilentmode()": [[4, "checkRingerSilentMode"]], "checkscreenon()": [[4, "checkScreenOn"]], "checkwifistate()": [[4, "checkWifiState"]], "contactsget()": [[4, "contactsGet"]], "contactsgetattributes()": [[4, "contactsGetAttributes"]], "contactsgetbyid()": [[4, "contactsGetById"]], "contactsgetcount()": [[4, "contactsGetCount"]], "contactsgetids()": [[4, "contactsGetIds"]], "dialogcreatealert()": [[4, "dialogCreateAlert"]], "dialogcreatedatepicker()": [[4, "dialogCreateDatePicker"]], "dialogcreatehorizontalprogress()": [[4, "dialogCreateHorizontalProgress"]], "dialogcreateinput()": [[4, "dialogCreateInput"]], "dialogcreatenfcbeammaster()": [[4, "dialogCreateNFCBeamMaster"]], "dialogcreatenfcbeamslave()": [[4, "dialogCreateNFCBeamSlave"]], "dialogcreatepassword()": [[4, "dialogCreatePassword"]], "dialogcreateseekbar()": [[4, "dialogCreateSeekBar"]], "dialogcreatespinnerprogress()": [[4, "dialogCreateSpinnerProgress"]], "dialogcreatetimepicker()": [[4, "dialogCreateTimePicker"]], "dialogdismiss()": [[4, "dialogDismiss"]], "dialoggetinput()": [[4, "dialogGetInput"]], "dialoggetpassword()": [[4, "dialogGetPassword"]], "dialoggetresponse()": [[4, "dialogGetResponse"]], "dialoggetselecteditems()": [[4, "dialogGetSelectedItems"]], "dialogsetcurrentprogress()": [[4, "dialogSetCurrentProgress"]], "dialogsetitems()": [[4, "dialogSetItems"]], "dialogsetmaxprogress()": [[4, "dialogSetMaxProgress"]], "dialogsetmultichoiceitems()": [[4, "dialogSetMultiChoiceItems"]], "dialogsetnegativebuttontext()": [[4, "dialogSetNegativeButtonText"]], "dialogsetneutralbuttontext()": [[4, "dialogSetNeutralButtonText"]], "dialogsetpositivebuttontext()": [[4, "dialogSetPositiveButtonText"]], "dialogsetsinglechoiceitems()": [[4, "dialogSetSingleChoiceItems"]], "dialogshow()": [[4, "dialogShow"]], "environment()": [[4, "environment"]], "eventclearbuffer()": [[4, "eventClearBuffer"]], "eventgetbrodcastcategories()": [[4, "eventGetBrodcastCategories"]], "eventpoll()": [[4, "eventPoll"]], "eventpost()": [[4, "eventPost"]], "eventregisterforbroadcast()": [[4, "eventRegisterForBroadcast"]], "eventunregisterforbroadcast()": [[4, "eventUnregisterForBroadcast"]], "eventwait()": [[4, "eventWait"]], "eventwaitfor()": [[4, "eventWaitFor"]], "executeqpy()": [[4, "executeQPy"]], "forcestoppackage()": [[4, "forceStopPackage"]], "fulldismiss()": [[4, "fullDismiss"]], "fullkeyoverride()": [[4, "fullKeyOverride"]], "fullquery()": [[4, "fullQuery"]], "fullquerydetail()": [[4, "fullQueryDetail"]], "fullsetlist()": [[4, "fullSetList"]], "fullsetproperty()": [[4, "fullSetProperty"]], "fullshow()": [[4, "fullShow"]], "generatedtmftones()": [[4, "generateDtmfTones"]], "geocode()": [[4, "geocode"]], "getcelllocation()": [[4, "getCellLocation"]], "getclipboard()": [[4, "getClipboard"]], "getconstants()": [[4, "getConstants"]], "getdeviceid()": [[4, "getDeviceId"]], "getdevicesoftwareversion()": [[4, "getDeviceSoftwareVersion"]], "getinput()": [[4, "getInput"]], "getintent()": [[4, "getIntent"]], "getlastknownlocation()": [[4, "getLastKnownLocation"]], "getlaunchableapplications()": [[4, "getLaunchableApplications"]], "getline1number()": [[4, "getLine1Number"]], "getmaxmediavolume()": [[4, "getMaxMediaVolume"]], "getmaxringervolume()": [[4, "getMaxRingerVolume"]], "getmediavolume()": [[4, "getMediaVolume"]], "getneighboringcellinfo()": [[4, "getNeighboringCellInfo"]], "getnetworkoperator()": [[4, "getNetworkOperator"]], "getnetworkoperatorname()": [[4, "getNetworkOperatorName"]], "getnetworkstatus()": [[4, "getNetworkStatus"]], "getnetworktype()": [[4, "getNetworkType"]], "getpackageversion()": [[4, "getPackageVersion"]], "getpackageversioncode()": [[4, "getPackageVersionCode"]], "getpassword()": [[4, "getPassword"]], "getphonetype()": [[4, "getPhoneType"]], "getringervolume()": [[4, "getRingerVolume"]], "getrunningpackages()": [[4, "getRunningPackages"]], "getscreenbrightness()": [[4, "getScreenBrightness"]], "getscreentimeout()": [[4, "getScreenTimeout"]], "getsimcountryiso()": [[4, "getSimCountryIso"]], "getsimoperator()": [[4, "getSimOperator"]], "getsimoperatorname()": [[4, "getSimOperatorName"]], "getsimserialnumber()": [[4, "getSimSerialNumber"]], "getsimstate()": [[4, "getSimState"]], "getsubscriberid()": [[4, "getSubscriberId"]], "getvibratemode()": [[4, "getVibrateMode"]], "getvoicemailalphatag()": [[4, "getVoiceMailAlphaTag"]], "getvoicemailnumber()": [[4, "getVoiceMailNumber"]], "launch()": [[4, "launch"]], "locationproviderenabled()": [[4, "locationProviderEnabled"]], "locationproviders()": [[4, "locationProviders"]], "log()": [[4, "log"]], "makeintent()": [[4, "makeIntent"]], "maketoast()": [[4, "makeToast"]], "mediaisplaying()": [[4, "mediaIsPlaying"]], "mediaplay()": [[4, "mediaPlay"]], "mediaplayclose()": [[4, "mediaPlayClose"]], "mediaplayinfo()": [[4, "mediaPlayInfo"]], "mediaplaylist()": [[4, "mediaPlayList"]], "mediaplaypause()": [[4, "mediaPlayPause"]], "mediaplayseek()": [[4, "mediaPlaySeek"]], "mediaplaysetlooping()": [[4, "mediaPlaySetLooping"]], "mediaplaystart()": [[4, "mediaPlayStart"]], "notify()": [[4, "notify"]], "phonecall()": [[4, "phoneCall"]], "phonecallnumber()": [[4, "phoneCallNumber"]], "phonedial()": [[4, "phoneDial"]], "phonedialnumber()": [[4, "phoneDialNumber"]], "pick()": [[4, "pick"]], "pickcontact()": [[4, "pickContact"]], "pickphone()": [[4, "pickPhone"]], "prefgetall()": [[4, "prefGetAll"]], "prefgetvalue()": [[4, "prefGetValue"]], "prefputvalue()": [[4, "prefPutValue"]], "queryattributes()": [[4, "queryAttributes"]], "querycontent()": [[4, "queryContent"]], "readbatterydata()": [[4, "readBatteryData"]], "readlocation()": [[4, "readLocation"]], "readphonestate()": [[4, "readPhoneState"]], "readsensors()": [[4, "readSensors"]], "readsignalstrengths()": [[4, "readSignalStrengths"]], "receiveevent()": [[4, "receiveEvent"]], "recognizespeech()": [[4, "recognizeSpeech"]], "recordercapturevideo()": [[4, "recorderCaptureVideo"]], "recorderstartmicrophone()": [[4, "recorderStartMicrophone"]], "recorderstartvideo()": [[4, "recorderStartVideo"]], "recorderstop()": [[4, "recorderStop"]], "requiredversion()": [[4, "requiredVersion"]], "rpcpostevent()": [[4, "rpcPostEvent"]], "scanbarcode()": [[4, "scanBarcode"]], "search()": [[4, "search"]], "sendbroadcast()": [[4, "sendBroadcast"]], "sendbroadcastintent()": [[4, "sendBroadcastIntent"]], "sendemail()": [[4, "sendEmail"]], "sensorsgetaccuracy()": [[4, "sensorsGetAccuracy"]], "sensorsgetlight()": [[4, "sensorsGetLight"]], "sensorsreadaccelerometer()": [[4, "sensorsReadAccelerometer"]], "sensorsreadmagnetometer()": [[4, "sensorsReadMagnetometer"]], "sensorsreadorientation()": [[4, "sensorsReadOrientation"]], "setclipboard()": [[4, "setClipboard"]], "setmediavolume()": [[4, "setMediaVolume"]], "setresultboolean()": [[4, "setResultBoolean"]], "setresultbooleanarray()": [[4, "setResultBooleanArray"]], "setresultbyte()": [[4, "setResultByte"]], "setresultbytearray()": [[4, "setResultByteArray"]], "setresultchar()": [[4, "setResultChar"]], "setresultchararray()": [[4, "setResultCharArray"]], "setresultdouble()": [[4, "setResultDouble"]], "setresultdoublearray()": [[4, "setResultDoubleArray"]], "setresultfloat()": [[4, "setResultFloat"]], "setresultfloatarray()": [[4, "setResultFloatArray"]], "setresultinteger()": [[4, "setResultInteger"]], "setresultintegerarray()": [[4, "setResultIntegerArray"]], "setresultlong()": [[4, "setResultLong"]], "setresultlongarray()": [[4, "setResultLongArray"]], "setresultserializable()": [[4, "setResultSerializable"]], "setresultshort()": [[4, "setResultShort"]], "setresultshortarray()": [[4, "setResultShortArray"]], "setresultstring()": [[4, "setResultString"]], "setresultstringarray()": [[4, "setResultStringArray"]], "setringervolume()": [[4, "setRingerVolume"]], "setscreenbrightness()": [[4, "setScreenBrightness"]], "setscreentimeout()": [[4, "setScreenTimeout"]], "smsdeletemessage()": [[4, "smsDeleteMessage"]], "smsgetattributes()": [[4, "smsGetAttributes"]], "smsgetmessagebyid()": [[4, "smsGetMessageById"]], "smsgetmessagecount()": [[4, "smsGetMessageCount"]], "smsgetmessageids()": [[4, "smsGetMessageIds"]], "smsgetmessages()": [[4, "smsGetMessages"]], "smsmarkmessageread()": [[4, "smsMarkMessageRead"]], "smssend()": [[4, "smsSend"]], "startactivity()": [[4, "startActivity"]], "startactivityforresult()": [[4, "startActivityForResult"]], "startactivityforresultintent()": [[4, "startActivityForResultIntent"]], "startactivityintent()": [[4, "startActivityIntent"]], "starteventdispatcher()": [[4, "startEventDispatcher"]], "startinteractivevideorecording()": [[4, "startInteractiveVideoRecording"]], "startlocating()": [[4, "startLocating"]], "startsensing()": [[4, "startSensing"]], "startsensingthreshold()": [[4, "startSensingThreshold"]], "startsensingtimed()": [[4, "startSensingTimed"]], "starttrackingphonestate()": [[4, "startTrackingPhoneState"]], "starttrackingsignalstrengths()": [[4, "startTrackingSignalStrengths"]], "stopeventdispatcher()": [[4, "stopEventDispatcher"]], "stoplocating()": [[4, "stopLocating"]], "stopsensing()": [[4, "stopSensing"]], "stoptrackingphonestate()": [[4, "stopTrackingPhoneState"]], "stoptrackingsignalstrengths()": [[4, "stopTrackingSignalStrengths"]], "toggleairplanemode()": [[4, "toggleAirplaneMode"]], "togglebluetoothstate()": [[4, "toggleBluetoothState"]], "toggleringersilentmode()": [[4, "toggleRingerSilentMode"]], "togglevibratemode()": [[4, "toggleVibrateMode"]], "togglewifistate()": [[4, "toggleWifiState"]], "ttsisspeaking()": [[4, "ttsIsSpeaking"]], "ttsspeak()": [[4, "ttsSpeak"]], "usbserialactiveconnections()": [[4, "usbserialActiveConnections"]], "usbserialconnect()": [[4, "usbserialConnect"]], "usbserialdisconnect()": [[4, "usbserialDisconnect"]], "usbserialgetdevicelist()": [[4, "usbserialGetDeviceList"]], "usbserialgetdevicename()": [[4, "usbserialGetDeviceName"]], "usbserialhostenable()": [[4, "usbserialHostEnable"]], "usbserialread()": [[4, "usbserialRead"]], "usbserialreadbinary()": [[4, "usbserialReadBinary"]], "usbserialreadready()": [[4, "usbserialReadReady"]], "usbserialwrite()": [[4, "usbserialWrite"]], "usbserialwritebinary()": [[4, "usbserialWriteBinary"]], "vibrate()": [[4, "id0"]], "view()": [[4, "view"]], "viewcontacts()": [[4, "viewContacts"]], "viewhtml()": [[4, "viewHtml"]], "viewmap()": [[4, "viewMap"]], "waitforevent()": [[4, "waitForEvent"]], "wakelockacquirebright()": [[4, "wakeLockAcquireBright"]], "wakelockacquiredim()": [[4, "wakeLockAcquireDim"]], "wakelockacquirefull()": [[4, "wakeLockAcquireFull"]], "wakelockacquirepartial()": [[4, "wakeLockAcquirePartial"]], "wakelockrelease()": [[4, "wakeLockRelease"]], "webviewshow()": [[4, "webViewShow"]], "webcamadjustquality()": [[4, "webcamAdjustQuality"]], "webcamstart()": [[4, "webcamStart"]], "wifidisconnect()": [[4, "wifiDisconnect"]], "wifigetconnectioninfo()": [[4, "wifiGetConnectionInfo"]], "wifigetscanresults()": [[4, "wifiGetScanResults"]], "wifilockacquirefull()": [[4, "wifiLockAcquireFull"]], "wifilockacquirescanonly()": [[4, "wifiLockAcquireScanOnly"]], "wifilockrelease()": [[4, "wifiLockRelease"]], "wifireassociate()": [[4, "wifiReassociate"]], "wifireconnect()": [[4, "wifiReconnect"]], "wifistartscan()": [[4, "wifiStartScan"]]}}) \ No newline at end of file diff --git a/docs/static/apk_down.png b/docs/static/apk_down.png deleted file mode 100644 index 9488f2f..0000000 Binary files a/docs/static/apk_down.png and /dev/null differ diff --git a/docs/static/basic.css b/docs/static/basic.css deleted file mode 100644 index cfc60b8..0000000 --- a/docs/static/basic.css +++ /dev/null @@ -1,921 +0,0 @@ -/* - * basic.css - * ~~~~~~~~~ - * - * Sphinx stylesheet -- basic theme. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -/* -- main layout ----------------------------------------------------------- */ - -div.clearer { - clear: both; -} - -div.section::after { - display: block; - content: ''; - clear: left; -} - -/* -- relbar ---------------------------------------------------------------- */ - -div.related { - width: 100%; - font-size: 90%; -} - -div.related h3 { - display: none; -} - -div.related ul { - margin: 0; - padding: 0 0 0 10px; - list-style: none; -} - -div.related li { - display: inline; -} - -div.related li.right { - float: right; - margin-right: 5px; -} - -/* -- sidebar --------------------------------------------------------------- */ - -div.sphinxsidebarwrapper { - padding: 10px 5px 0 10px; -} - -div.sphinxsidebar { - float: left; - width: 230px; - margin-left: -100%; - font-size: 90%; - word-wrap: break-word; - overflow-wrap : break-word; -} - -div.sphinxsidebar ul { - list-style: none; -} - -div.sphinxsidebar ul ul, -div.sphinxsidebar ul.want-points { - margin-left: 20px; - list-style: square; -} - -div.sphinxsidebar ul ul { - margin-top: 0; - margin-bottom: 0; -} - -div.sphinxsidebar form { - margin-top: 10px; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - -div.sphinxsidebar #searchbox form.search { - overflow: hidden; -} - -div.sphinxsidebar #searchbox input[type="text"] { - float: left; - width: 80%; - padding: 0.25em; - box-sizing: border-box; -} - -div.sphinxsidebar #searchbox input[type="submit"] { - float: left; - width: 20%; - border-left: none; - padding: 0.25em; - box-sizing: border-box; -} - - -img { - border: 0; - max-width: 100%; -} - -/* -- search page ----------------------------------------------------------- */ - -ul.search { - margin: 10px 0 0 20px; - padding: 0; -} - -ul.search li { - padding: 5px 0 5px 20px; - background-image: url(file.png); - background-repeat: no-repeat; - background-position: 0 7px; -} - -ul.search li a { - font-weight: bold; -} - -ul.search li p.context { - color: #888; - margin: 2px 0 0 30px; - text-align: left; -} - -ul.keywordmatches li.goodmatch a { - font-weight: bold; -} - -/* -- index page ------------------------------------------------------------ */ - -table.contentstable { - width: 90%; - margin-left: auto; - margin-right: auto; -} - -table.contentstable p.biglink { - line-height: 150%; -} - -a.biglink { - font-size: 1.3em; -} - -span.linkdescr { - font-style: italic; - padding-top: 5px; - font-size: 90%; -} - -/* -- general index --------------------------------------------------------- */ - -table.indextable { - width: 100%; -} - -table.indextable td { - text-align: left; - vertical-align: top; -} - -table.indextable ul { - margin-top: 0; - margin-bottom: 0; - list-style-type: none; -} - -table.indextable > tbody > tr > td > ul { - padding-left: 0em; -} - -table.indextable tr.pcap { - height: 10px; -} - -table.indextable tr.cap { - margin-top: 10px; - background-color: #f2f2f2; -} - -img.toggler { - margin-right: 3px; - margin-top: 3px; - cursor: pointer; -} - -div.modindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -div.genindex-jumpbox { - border-top: 1px solid #ddd; - border-bottom: 1px solid #ddd; - margin: 1em 0 1em 0; - padding: 0.4em; -} - -/* -- domain module index --------------------------------------------------- */ - -table.modindextable td { - padding: 2px; - border-collapse: collapse; -} - -/* -- general body styles --------------------------------------------------- */ - -div.body { - min-width: 360px; - max-width: 800px; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - -moz-hyphens: auto; - -ms-hyphens: auto; - -webkit-hyphens: auto; - hyphens: auto; -} - -a.headerlink { - visibility: hidden; -} - -h1:hover > a.headerlink, -h2:hover > a.headerlink, -h3:hover > a.headerlink, -h4:hover > a.headerlink, -h5:hover > a.headerlink, -h6:hover > a.headerlink, -dt:hover > a.headerlink, -caption:hover > a.headerlink, -p.caption:hover > a.headerlink, -div.code-block-caption:hover > a.headerlink { - visibility: visible; -} - -div.body p.caption { - text-align: inherit; -} - -div.body td { - text-align: left; -} - -.first { - margin-top: 0 !important; -} - -p.rubric { - margin-top: 30px; - font-weight: bold; -} - -img.align-left, figure.align-left, .figure.align-left, object.align-left { - clear: left; - float: left; - margin-right: 1em; -} - -img.align-right, figure.align-right, .figure.align-right, object.align-right { - clear: right; - float: right; - margin-left: 1em; -} - -img.align-center, figure.align-center, .figure.align-center, object.align-center { - display: block; - margin-left: auto; - margin-right: auto; -} - -img.align-default, figure.align-default, .figure.align-default { - display: block; - margin-left: auto; - margin-right: auto; -} - -.align-left { - text-align: left; -} - -.align-center { - text-align: center; -} - -.align-default { - text-align: center; -} - -.align-right { - text-align: right; -} - -/* -- sidebars -------------------------------------------------------------- */ - -div.sidebar, -aside.sidebar { - margin: 0 0 0.5em 1em; - border: 1px solid #ddb; - padding: 7px; - background-color: #ffe; - width: 40%; - float: right; - clear: right; - overflow-x: auto; -} - -p.sidebar-title { - font-weight: bold; -} - -nav.contents, -aside.topic, -div.admonition, div.topic, blockquote { - clear: left; -} - -/* -- topics ---------------------------------------------------------------- */ - -nav.contents, -aside.topic, -div.topic { - border: 1px solid #ccc; - padding: 7px; - margin: 10px 0 10px 0; -} - -p.topic-title { - font-size: 1.1em; - font-weight: bold; - margin-top: 10px; -} - -/* -- admonitions ----------------------------------------------------------- */ - -div.admonition { - margin-top: 10px; - margin-bottom: 10px; - padding: 7px; -} - -div.admonition dt { - font-weight: bold; -} - -p.admonition-title { - margin: 0px 10px 5px 0px; - font-weight: bold; -} - -div.body p.centered { - text-align: center; - margin-top: 25px; -} - -/* -- content of sidebars/topics/admonitions -------------------------------- */ - -div.sidebar > :last-child, -aside.sidebar > :last-child, -nav.contents > :last-child, -aside.topic > :last-child, -div.topic > :last-child, -div.admonition > :last-child { - margin-bottom: 0; -} - -div.sidebar::after, -aside.sidebar::after, -nav.contents::after, -aside.topic::after, -div.topic::after, -div.admonition::after, -blockquote::after { - display: block; - content: ''; - clear: both; -} - -/* -- tables ---------------------------------------------------------------- */ - -table.docutils { - margin-top: 10px; - margin-bottom: 10px; - border: 0; - border-collapse: collapse; -} - -table.align-center { - margin-left: auto; - margin-right: auto; -} - -table.align-default { - margin-left: auto; - margin-right: auto; -} - -table caption span.caption-number { - font-style: italic; -} - -table caption span.caption-text { -} - -table.docutils td, table.docutils th { - padding: 1px 8px 1px 5px; - border-top: 0; - border-left: 0; - border-right: 0; - border-bottom: 1px solid #aaa; -} - -th { - text-align: left; - padding-right: 5px; -} - -table.citation { - border-left: solid 1px gray; - margin-left: 1px; -} - -table.citation td { - border-bottom: none; -} - -th > :first-child, -td > :first-child { - margin-top: 0px; -} - -th > :last-child, -td > :last-child { - margin-bottom: 0px; -} - -/* -- figures --------------------------------------------------------------- */ - -div.figure, figure { - margin: 0.5em; - padding: 0.5em; -} - -div.figure p.caption, figcaption { - padding: 0.3em; -} - -div.figure p.caption span.caption-number, -figcaption span.caption-number { - font-style: italic; -} - -div.figure p.caption span.caption-text, -figcaption span.caption-text { -} - -/* -- field list styles ----------------------------------------------------- */ - -table.field-list td, table.field-list th { - border: 0 !important; -} - -.field-list ul { - margin: 0; - padding-left: 1em; -} - -.field-list p { - margin: 0; -} - -.field-name { - -moz-hyphens: manual; - -ms-hyphens: manual; - -webkit-hyphens: manual; - hyphens: manual; -} - -/* -- hlist styles ---------------------------------------------------------- */ - -table.hlist { - margin: 1em 0; -} - -table.hlist td { - vertical-align: top; -} - -/* -- object description styles --------------------------------------------- */ - -.sig { - font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; -} - -.sig-name, code.descname { - background-color: transparent; - font-weight: bold; -} - -.sig-name { - font-size: 1.1em; -} - -code.descname { - font-size: 1.2em; -} - -.sig-prename, code.descclassname { - background-color: transparent; -} - -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - -.sig-param.n { - font-style: italic; -} - -/* C++ specific styling */ - -.sig-inline.c-texpr, -.sig-inline.cpp-texpr { - font-family: unset; -} - -.sig.c .k, .sig.c .kt, -.sig.cpp .k, .sig.cpp .kt { - color: #0033B3; -} - -.sig.c .m, -.sig.cpp .m { - color: #1750EB; -} - -.sig.c .s, .sig.c .sc, -.sig.cpp .s, .sig.cpp .sc { - color: #067D17; -} - - -/* -- other body styles ----------------------------------------------------- */ - -ol.arabic { - list-style: decimal; -} - -ol.loweralpha { - list-style: lower-alpha; -} - -ol.upperalpha { - list-style: upper-alpha; -} - -ol.lowerroman { - list-style: lower-roman; -} - -ol.upperroman { - list-style: upper-roman; -} - -:not(li) > ol > li:first-child > :first-child, -:not(li) > ul > li:first-child > :first-child { - margin-top: 0px; -} - -:not(li) > ol > li:last-child > :last-child, -:not(li) > ul > li:last-child > :last-child { - margin-bottom: 0px; -} - -ol.simple ol p, -ol.simple ul p, -ul.simple ol p, -ul.simple ul p { - margin-top: 0; -} - -ol.simple > li:not(:first-child) > p, -ul.simple > li:not(:first-child) > p { - margin-top: 0; -} - -ol.simple p, -ul.simple p { - margin-bottom: 0; -} - -aside.footnote > span, -div.citation > span { - float: left; -} -aside.footnote > span:last-of-type, -div.citation > span:last-of-type { - padding-right: 0.5em; -} -aside.footnote > p { - margin-left: 2em; -} -div.citation > p { - margin-left: 4em; -} -aside.footnote > p:last-of-type, -div.citation > p:last-of-type { - margin-bottom: 0em; -} -aside.footnote > p:last-of-type:after, -div.citation > p:last-of-type:after { - content: ""; - clear: both; -} - -dl.field-list { - display: grid; - grid-template-columns: fit-content(30%) auto; -} - -dl.field-list > dt { - font-weight: bold; - word-break: break-word; - padding-left: 0.5em; - padding-right: 5px; -} - -dl.field-list > dd { - padding-left: 0.5em; - margin-top: 0em; - margin-left: 0em; - margin-bottom: 0em; -} - -dl { - margin-bottom: 15px; -} - -dd > :first-child { - margin-top: 0px; -} - -dd ul, dd table { - margin-bottom: 10px; -} - -dd { - margin-top: 3px; - margin-bottom: 10px; - margin-left: 30px; -} - -.sig dd { - margin-top: 0px; - margin-bottom: 0px; -} - -.sig dl { - margin-top: 0px; - margin-bottom: 0px; -} - -dl > dd:last-child, -dl > dd:last-child > :last-child { - margin-bottom: 0; -} - -dt:target, span.highlighted { - background-color: #fbe54e; -} - -rect.highlighted { - fill: #fbe54e; -} - -dl.glossary dt { - font-weight: bold; - font-size: 1.1em; -} - -.versionmodified { - font-style: italic; -} - -.system-message { - background-color: #fda; - padding: 5px; - border: 3px solid red; -} - -.footnote:target { - background-color: #ffa; -} - -.line-block { - display: block; - margin-top: 1em; - margin-bottom: 1em; -} - -.line-block .line-block { - margin-top: 0; - margin-bottom: 0; - margin-left: 1.5em; -} - -.guilabel, .menuselection { - font-family: sans-serif; -} - -.accelerator { - text-decoration: underline; -} - -.classifier { - font-style: oblique; -} - -.classifier:before { - font-style: normal; - margin: 0 0.5em; - content: ":"; - display: inline-block; -} - -abbr, acronym { - border-bottom: dotted 1px; - cursor: help; -} - -.translated { - background-color: rgba(207, 255, 207, 0.2) -} - -.untranslated { - background-color: rgba(255, 207, 207, 0.2) -} - -/* -- code displays --------------------------------------------------------- */ - -pre { - overflow: auto; - overflow-y: hidden; /* fixes display issues on Chrome browsers */ -} - -pre, div[class*="highlight-"] { - clear: both; -} - -span.pre { - -moz-hyphens: none; - -ms-hyphens: none; - -webkit-hyphens: none; - hyphens: none; - white-space: nowrap; -} - -div[class*="highlight-"] { - margin: 1em 0; -} - -td.linenos pre { - border: 0; - background-color: transparent; - color: #aaa; -} - -table.highlighttable { - display: block; -} - -table.highlighttable tbody { - display: block; -} - -table.highlighttable tr { - display: flex; -} - -table.highlighttable td { - margin: 0; - padding: 0; -} - -table.highlighttable td.linenos { - padding-right: 0.5em; -} - -table.highlighttable td.code { - flex: 1; - overflow: hidden; -} - -.highlight .hll { - display: block; -} - -div.highlight pre, -table.highlighttable pre { - margin: 0; -} - -div.code-block-caption + div { - margin-top: 0; -} - -div.code-block-caption { - margin-top: 1em; - padding: 2px 5px; - font-size: small; -} - -div.code-block-caption code { - background-color: transparent; -} - -table.highlighttable td.linenos, -span.linenos, -div.highlight span.gp { /* gp: Generic.Prompt */ - user-select: none; - -webkit-user-select: text; /* Safari fallback only */ - -webkit-user-select: none; /* Chrome/Safari */ - -moz-user-select: none; /* Firefox */ - -ms-user-select: none; /* IE10+ */ -} - -div.code-block-caption span.caption-number { - padding: 0.1em 0.3em; - font-style: italic; -} - -div.code-block-caption span.caption-text { -} - -div.literal-block-wrapper { - margin: 1em 0; -} - -code.xref, a code { - background-color: transparent; - font-weight: bold; -} - -h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { - background-color: transparent; -} - -.viewcode-link { - float: right; -} - -.viewcode-back { - float: right; - font-family: sans-serif; -} - -div.viewcode-block:target { - margin: -1px -10px; - padding: 0 10px; -} - -/* -- math display ---------------------------------------------------------- */ - -img.math { - vertical-align: middle; -} - -div.body div.math p { - text-align: center; -} - -span.eqno { - float: right; -} - -span.eqno a.headerlink { - position: absolute; - z-index: 1; -} - -div.math:hover a.headerlink { - visibility: visible; -} - -/* -- printout stylesheet --------------------------------------------------- */ - -@media print { - div.document, - div.documentwrapper, - div.bodywrapper { - margin: 0 !important; - width: 100%; - } - - div.sphinxsidebar, - div.related, - div.footer, - #top-link { - display: none; - } -} \ No newline at end of file diff --git a/docs/static/bootstrap.min.css b/docs/static/bootstrap.min.css deleted file mode 100644 index ed3905e..0000000 --- a/docs/static/bootstrap.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/docs/static/bootstrap.min.js b/docs/static/bootstrap.min.js deleted file mode 100644 index 9bcd2fc..0000000 --- a/docs/static/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under the MIT license - */ -if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/docs/static/doctools.js b/docs/static/doctools.js deleted file mode 100644 index d06a71d..0000000 --- a/docs/static/doctools.js +++ /dev/null @@ -1,156 +0,0 @@ -/* - * doctools.js - * ~~~~~~~~~~~ - * - * Base JavaScript utilities for all Sphinx HTML documentation. - * - * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ -"use strict"; - -const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ - "TEXTAREA", - "INPUT", - "SELECT", - "BUTTON", -]); - -const _ready = (callback) => { - if (document.readyState !== "loading") { - callback(); - } else { - document.addEventListener("DOMContentLoaded", callback); - } -}; - -/** - * Small JavaScript module for the documentation. - */ -const Documentation = { - init: () => { - Documentation.initDomainIndexTable(); - Documentation.initOnKeyListeners(); - }, - - /** - * i18n support - */ - TRANSLATIONS: {}, - PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), - LOCALE: "unknown", - - // gettext and ngettext don't access this so that the functions - // can safely bound to a different name (_ = Documentation.gettext) - gettext: (string) => { - const translated = Documentation.TRANSLATIONS[string]; - switch (typeof translated) { - case "undefined": - return string; // no translation - case "string": - return translated; // translation exists - default: - return translated[0]; // (singular, plural) translation tuple exists - } - }, - - ngettext: (singular, plural, n) => { - const translated = Documentation.TRANSLATIONS[singular]; - if (typeof translated !== "undefined") - return translated[Documentation.PLURAL_EXPR(n)]; - return n === 1 ? singular : plural; - }, - - addTranslations: (catalog) => { - Object.assign(Documentation.TRANSLATIONS, catalog.messages); - Documentation.PLURAL_EXPR = new Function( - "n", - `return (${catalog.plural_expr})` - ); - Documentation.LOCALE = catalog.locale; - }, - - /** - * helper function to focus on search bar - */ - focusSearchBar: () => { - document.querySelectorAll("input[name=q]")[0]?.focus(); - }, - - /** - * Initialise the domain index toggle buttons - */ - initDomainIndexTable: () => { - const toggler = (el) => { - const idNumber = el.id.substr(7); - const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); - if (el.src.substr(-9) === "minus.png") { - el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; - toggledRows.forEach((el) => (el.style.display = "none")); - } else { - el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; - toggledRows.forEach((el) => (el.style.display = "")); - } - }; - - const togglerElements = document.querySelectorAll("img.toggler"); - togglerElements.forEach((el) => - el.addEventListener("click", (event) => toggler(event.currentTarget)) - ); - togglerElements.forEach((el) => (el.style.display = "")); - if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); - }, - - initOnKeyListeners: () => { - // only install a listener if it is really needed - if ( - !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && - !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS - ) - return; - - document.addEventListener("keydown", (event) => { - // bail for input elements - if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; - // bail with special keys - if (event.altKey || event.ctrlKey || event.metaKey) return; - - if (!event.shiftKey) { - switch (event.key) { - case "ArrowLeft": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const prevLink = document.querySelector('link[rel="prev"]'); - if (prevLink && prevLink.href) { - window.location.href = prevLink.href; - event.preventDefault(); - } - break; - case "ArrowRight": - if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; - - const nextLink = document.querySelector('link[rel="next"]'); - if (nextLink && nextLink.href) { - window.location.href = nextLink.href; - event.preventDefault(); - } - break; - } - } - - // some keyboard layouts may need Shift to get / - switch (event.key) { - case "/": - if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; - Documentation.focusSearchBar(); - event.preventDefault(); - } - }); - }, -}; - -// quick alias for translations -const _ = Documentation.gettext; - -_ready(Documentation.init); diff --git a/docs/static/documentation_options.js b/docs/static/documentation_options.js deleted file mode 100644 index e2f43b8..0000000 --- a/docs/static/documentation_options.js +++ /dev/null @@ -1,14 +0,0 @@ -var DOCUMENTATION_OPTIONS = { - URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: '0.9', - LANGUAGE: 'en-US', - COLLAPSE_INDEX: false, - BUILDER: 'html', - FILE_SUFFIX: '.html', - LINK_SUFFIX: '.html', - HAS_SOURCE: true, - SOURCELINK_SUFFIX: '.txt', - NAVIGATION_WITH_KEYS: false, - SHOW_SEARCH_SUMMARY: true, - ENABLE_SEARCH_SHORTCUTS: true, -}; \ No newline at end of file diff --git a/docs/static/file.png b/docs/static/file.png deleted file mode 100644 index a858a41..0000000 Binary files a/docs/static/file.png and /dev/null differ diff --git a/docs/static/ic_appstore@2x.png b/docs/static/ic_appstore@2x.png deleted file mode 100644 index d70ade3..0000000 Binary files a/docs/static/ic_appstore@2x.png and /dev/null differ diff --git a/docs/static/ic_appstore_2x.png b/docs/static/ic_appstore_2x.png deleted file mode 100644 index 1582c40..0000000 Binary files a/docs/static/ic_appstore_2x.png and /dev/null differ diff --git a/docs/static/ic_community@2x.png b/docs/static/ic_community@2x.png deleted file mode 100644 index 6984f28..0000000 Binary files a/docs/static/ic_community@2x.png and /dev/null differ diff --git a/docs/static/ic_facebook.png b/docs/static/ic_facebook.png deleted file mode 100644 index 027c863..0000000 Binary files a/docs/static/ic_facebook.png and /dev/null differ diff --git a/docs/static/ic_faq@2x.png b/docs/static/ic_faq@2x.png deleted file mode 100644 index 1f89df6..0000000 Binary files a/docs/static/ic_faq@2x.png and /dev/null differ diff --git a/docs/static/ic_googleplay@2x.png b/docs/static/ic_googleplay@2x.png deleted file mode 100644 index 3b46dd0..0000000 Binary files a/docs/static/ic_googleplay@2x.png and /dev/null differ diff --git a/docs/static/ic_googleplay_2x.png b/docs/static/ic_googleplay_2x.png deleted file mode 100644 index 1e62373..0000000 Binary files a/docs/static/ic_googleplay_2x.png and /dev/null differ diff --git a/docs/static/ic_googleplay_3_2x.png b/docs/static/ic_googleplay_3_2x.png deleted file mode 100644 index c5086ad..0000000 Binary files a/docs/static/ic_googleplay_3_2x.png and /dev/null differ diff --git a/docs/static/ic_new@2x.png b/docs/static/ic_new@2x.png deleted file mode 100644 index 215bb04..0000000 Binary files a/docs/static/ic_new@2x.png and /dev/null differ diff --git a/docs/static/ic_search.png b/docs/static/ic_search.png deleted file mode 100644 index 0b6623a..0000000 Binary files a/docs/static/ic_search.png and /dev/null differ diff --git a/docs/static/ic_support@2x.png b/docs/static/ic_support@2x.png deleted file mode 100644 index c06804c..0000000 Binary files a/docs/static/ic_support@2x.png and /dev/null differ diff --git a/docs/static/ic_twitter.png b/docs/static/ic_twitter.png deleted file mode 100644 index 8dcf2ee..0000000 Binary files a/docs/static/ic_twitter.png and /dev/null differ diff --git a/docs/static/img_background.png b/docs/static/img_background.png deleted file mode 100644 index f200909..0000000 Binary files a/docs/static/img_background.png and /dev/null differ diff --git a/docs/static/img_banner-1.jpg b/docs/static/img_banner-1.jpg deleted file mode 100644 index 35179f4..0000000 Binary files a/docs/static/img_banner-1.jpg and /dev/null differ diff --git a/docs/static/img_banner-1.png b/docs/static/img_banner-1.png deleted file mode 100644 index 1be1cf3..0000000 Binary files a/docs/static/img_banner-1.png and /dev/null differ diff --git a/docs/static/img_banner-1@2x.png b/docs/static/img_banner-1@2x.png deleted file mode 100644 index 0942fe7..0000000 Binary files a/docs/static/img_banner-1@2x.png and /dev/null differ diff --git a/docs/static/ios_link.png b/docs/static/ios_link.png deleted file mode 100644 index 8bd21ca..0000000 Binary files a/docs/static/ios_link.png and /dev/null differ diff --git a/docs/static/jquery.min.js b/docs/static/jquery.min.js deleted file mode 100644 index 644d35e..0000000 --- a/docs/static/jquery.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), -a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), -null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(" diff --git a/docs/zh/contributorshowto.html b/docs/zh/contributorshowto.html deleted file mode 100644 index 20c5f9a..0000000 --- a/docs/zh/contributorshowto.html +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - - - - QPython文档体系说明 — QPython 0.9 documentation - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
- -
-
- - - - -
-
-
- -
-

QPython文档体系说明

-

QPython 文档体系分为 英文/中文 两部分,我们努力保持两种语言对应内容的准确和同步,其中内容其中又分为

-
    -
  • 快速开始 (使用上的帮助)

  • -
  • 编程指南 (主要是用QPython来进行编程和开发的指南)

  • -
  • QPython黑客指南 (深入折腾的指导)

  • -
  • 贡献者指南 (QPython贡献者指南,分为在QPython team内的,和以外的)

  • -
-
-
-

如何提交文档

-

文档非常重要,我们用sphinx来组织文档,并且文档会通过github page功能直接推到qpython.org网站中 -在想要贡献QPython文档之前仔细阅读我们的指南

-
    -
  • git clone http://github.com/qpython-android/qpython

  • -
  • 进入到 项目的qpython-docs目录中

  • -
  • 按照sphinx规则编辑source中的文件即可

  • -
  • 最后cd到qpython-docs中并运行build.sh

  • -
  • 打开浏览器打开本地文件检查,

  • -
  • 如果检查无问题则可以提交,然后浏览qpython.org即可看到最新的更新

  • -
-
-
-

如何提交翻译

-

QPython是一个支持多语言的应用,你可以通过以下方式来提交对应国家的翻译

-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/zh/howtostart.html b/docs/zh/howtostart.html deleted file mode 100644 index 5a7b462..0000000 --- a/docs/zh/howtostart.html +++ /dev/null @@ -1,224 +0,0 @@ - - - - - - - - - 快速开始 — QPython 0.9 documentation - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
- -
-
- - - - -
-
-
- -
-

快速开始

- -
-
-

编程指南

- -
-
-

QPython黑客指南

- -
-
-

贡献者指南

-

欢迎加入 QPython 团队

- -
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/docs/zhindex.html b/docs/zhindex.html deleted file mode 100644 index b8952f8..0000000 --- a/docs/zhindex.html +++ /dev/null @@ -1,233 +0,0 @@ - - - - - - - - - 中文用户向导 — QPython 0.9 documentation - - - - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
- -
-
- -
    -
  • Guide »
  • - -
  • 中文用户向导
  • -
- - -
-
-
- -
-

中文用户向导

-
-

欢迎 !

-

QPython/QPython3 的最新版本1.3.2(QPython), 1.0.2(QPython3) 已经发布,它包含了许多惊艳的特性,请从应用市场安装

-
-
-

QPython 起步

- -
-
-

更多链接

- -
-
-

QPython 用户开发组

-
    -
  • 请加入 QPython 用户开发者组 来和全世界的 QPython 用户一块来玩转QPython。

  • -
  • 加入QPython QQ组(Q群:540717901)来和中国活跃的QPython 用户一起玩转 QPython

  • -
-
-
-

如何贡献

-

想成为 QPython 的贡献者么?请 给我们发邮件

-
-
- - -
-
-
-
-
-
-
-
-
-
- - -
- - -
- - - diff --git a/mkdocs-zh.yml b/mkdocs-zh.yml new file mode 100644 index 0000000..86ea37c --- /dev/null +++ b/mkdocs-zh.yml @@ -0,0 +1,64 @@ +site_name: QPython +site_url: https://www.qpython.org/zh/ +site_description: QPython - 移动设备上的 Python & AI 开发环境 +theme: + name: material + logo: static/img_logo.png + favicon: static/img_logo.png + palette: + - scheme: default + primary: black + accent: green + toggle: + icon: material/brightness-7 + name: 切换暗色模式 + - scheme: slate + primary: black + accent: green + toggle: + icon: material/brightness-4 + name: 切换亮色模式 + features: + - navigation.tabs + - navigation.sections + - navigation.expand + - search.suggest + - search.highlight + - content.code.copy + font: + text: Roboto + code: Roboto Mono + +extra_css: + - static/extra.css + +docs_dir: source/zh +site_dir: site/zh +clean: false # Don't clean to preserve English build + +nav: + - 首页: index.md + +markdown_extensions: + - pymdownx.highlight: + anchor_linenums: true + - pymdownx.inlinehilite + - pymdownx.snippets + - pymdownx.superfences + - tables + - toc: + permalink: true + +extra: + analytics: + provider: google + property: G-3GZ8CTQYNC + social: + - icon: fontawesome/brands/github + link: https://github.com/qpython-android/qpython + - icon: fontawesome/brands/discord + link: https://discord.gg/hV2chuD + - icon: fontawesome/brands/facebook + link: http://www.facebook.com/qpython + - icon: fontawesome/brands/twitter + link: http://www.twitter.com/qpython diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..058e2a3 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,106 @@ +site_name: QPython +site_url: https://www.qpython.org/en/ +site_description: QPython - AI-Enabled Python IDE for Android +theme: + name: material + logo: static/img_logo.png + favicon: static/img_logo.png + palette: + - scheme: default + primary: black + accent: green + toggle: + icon: material/brightness-7 + name: Switch to dark mode + - scheme: slate + primary: black + accent: green + toggle: + icon: material/brightness-4 + name: Switch to light mode + features: + - navigation.tabs + - navigation.sections + - navigation.expand + - search.suggest + - search.highlight + - content.code.copy + font: + text: Roboto + code: Roboto Mono + +extra_css: + - static/extra.css + +docs_dir: source/en +site_dir: site/en + +nav: + - Home: + - Overview: index.md + - Branches: qpython-x.md + - Updates: whats-new.md + - Guides: + - QPYPI: qpypi-guide.md + - Editor: editor-guide.md + - OpenAPI: external-api.md + - QSL4A: + - Overview: qsl4a/index.md + - Core: + - Android Base: qsl4a/core/android-base.md + - Intent System: qsl4a/core/intent.md + - Event System: qsl4a/core/events.md + - UI: + - Dialogs: qsl4a/ui/dialogs.md + - FullScreen UI: qsl4a/ui/fullscreen.md + - FloatView: qsl4a/ui/floatview.md + - Accessibility: qsl4a/ui/accessibility.md + - System: + - Battery: qsl4a/system/battery.md + - Sensors: qsl4a/system/sensors.md + - Application: qsl4a/system/application.md + - System Info: qsl4a/system/sysinfo.md + - Hardware: + - Bluetooth: qsl4a/hardware/bluetooth.md + - Camera: qsl4a/hardware/camera.md + - Audio/Recorder: qsl4a/hardware/recorder.md + - Connectivity: + - WiFi: qsl4a/connectivity/wifi.md + - Location: qsl4a/connectivity/location.md + - SMS: qsl4a/connectivity/sms.md + - Storage: + - DocumentFile: qsl4a/storage/documentfile.md + - Clipboard: qsl4a/storage/clipboard.md + - Media: + - Media Player: qsl4a/media/mediaplayer.md + - Image Processing: qsl4a/media/image.md + - Special: + - Cipher: qsl4a/special/cipher.md + - PGPT AI: qsl4a/special/pgptai.md + - Tutorial: + - Getting Started: getting-started.md + - Hello World Tutorial: tutorial-hello-world.md + +markdown_extensions: + - pymdownx.highlight: + anchor_linenums: true + - pymdownx.inlinehilite + - pymdownx.snippets + - pymdownx.superfences + - tables + - toc: + permalink: true + +extra: + analytics: + provider: google + property: G-3GZ8CTQYNC + social: + - icon: fontawesome/brands/github + link: https://github.com/qpython-android/qpython + - icon: fontawesome/brands/discord + link: https://discord.gg/hV2chuD + - icon: fontawesome/brands/facebook + link: http://www.facebook.com/qpython + - icon: fontawesome/brands/twitter + link: http://www.twitter.com/qpython diff --git a/qpython-docs/CNAME b/qpython-docs/CNAME deleted file mode 100644 index 4632497..0000000 --- a/qpython-docs/CNAME +++ /dev/null @@ -1 +0,0 @@ -www.qpython.org diff --git a/qpython-docs/Makefile b/qpython-docs/Makefile deleted file mode 100644 index 37eab44..0000000 --- a/qpython-docs/Makefile +++ /dev/null @@ -1,225 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = build - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source - -.PHONY: help -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " applehelp to make an Apple Help Book" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " epub3 to make an epub3" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - @echo " coverage to run coverage check of the documentation (if enabled)" - @echo " dummy to check syntax errors of document sources" - -.PHONY: clean -clean: - rm -rf $(BUILDDIR)/* - -.PHONY: html -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html" - -.PHONY: dirhtml -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -.PHONY: singlehtml -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -.PHONY: pickle -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -.PHONY: json -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -.PHONY: htmlhelp -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -.PHONY: qthelp -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/QPython.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/QPython.qhc" - -.PHONY: applehelp -applehelp: - $(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp - @echo - @echo "Build finished. The help book is in $(BUILDDIR)/applehelp." - @echo "N.B. You won't be able to view it unless you put it in" \ - "~/Library/Documentation/Help or install it in your application" \ - "bundle." - -.PHONY: devhelp -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/QPython" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/QPython" - @echo "# devhelp" - -.PHONY: epub -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -.PHONY: epub3 -epub3: - $(SPHINXBUILD) -b epub3 $(ALLSPHINXOPTS) $(BUILDDIR)/epub3 - @echo - @echo "Build finished. The epub3 file is in $(BUILDDIR)/epub3." - -.PHONY: latex -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -.PHONY: latexpdf -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -.PHONY: latexpdfja -latexpdfja: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -.PHONY: text -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -.PHONY: man -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -.PHONY: texinfo -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -.PHONY: info -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -.PHONY: gettext -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -.PHONY: changes -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -.PHONY: linkcheck -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -.PHONY: doctest -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -.PHONY: coverage -coverage: - $(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage - @echo "Testing of coverage in the sources finished, look at the " \ - "results in $(BUILDDIR)/coverage/python.txt." - -.PHONY: xml -xml: - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." - -.PHONY: pseudoxml -pseudoxml: - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." - -.PHONY: dummy -dummy: - $(SPHINXBUILD) -b dummy $(ALLSPHINXOPTS) $(BUILDDIR)/dummy - @echo - @echo "Build finished. Dummy builder generates no files." diff --git a/qpython-docs/a8.json b/qpython-docs/a8.json deleted file mode 100644 index f08533f..0000000 --- a/qpython-docs/a8.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "link": "http://techslides.com/demos/sample-videos/small.mp4" -} diff --git a/qpython-docs/add-analytics-window.py b/qpython-docs/add-analytics-window.py deleted file mode 100644 index 1be97fa..0000000 --- a/qpython-docs/add-analytics-window.py +++ /dev/null @@ -1,41 +0,0 @@ -import sys -import os - -def process_file(input_file, output_file, extra_file): - # 确保 extra.txt 文件存在 - if not os.path.exists(extra_file): - print(f"Error: The file '{extra_file}' does not exist.") - return - - # 获取 extra.txt 文件内容 - with open(extra_file, 'r', encoding='utf-8') as e: - extra = e.read().replace("{{PTH}}", input_file[1:]) # 用路径替换 {{PTH}} - - # 逐行读取输入文件并处理内容 - with open(input_file, 'r', encoding='utf-8') as f, open(output_file, 'w', encoding='utf-8') as g: - for line in f: - line = line.strip() # 去除行首和行尾空白字符 - if line: # 忽略空行 - # 如果是特定标签,添加 extra 和
内容 - if line == '
': - g.write(extra + "
\n") - else: - g.write(line + '\n') # 写入处理后的行 - - # 替换原始文件 - os.rename(output_file, input_file) - -def main(): - if len(sys.argv) < 2: - print("Usage: python script.py ") - return - - input_file = sys.argv[1] - output_file = './qpydoc.tmp' - extra_file = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'extra.txt') - - # 处理文件 - process_file(input_file, output_file, extra_file) - -if __name__ == '__main__': - main() diff --git a/qpython-docs/add-analytics.py b/qpython-docs/add-analytics.py deleted file mode 100644 index e7273d5..0000000 --- a/qpython-docs/add-analytics.py +++ /dev/null @@ -1,10 +0,0 @@ -import sys,os -with open(sys.argv[1], 'r') as f, open('./qpydoc.tmp', 'wb') as g, open(os.path.dirname(os.path.abspath(__file__))+'/extra.txt','r') as e: - pth = sys.argv[1][1:] - extra = "".join(e.readlines()).replace("{{PTH}}",pth) - g.write('\n'.join( - filter(lambda s: len(s), - map(lambda s: - ('',extra+"
")[s=='
']+s, - map(str.strip, f.readlines()))))) -os.rename('./qpydoc.tmp', sys.argv[1]) diff --git a/qpython-docs/agreement-cn.html b/qpython-docs/agreement-cn.html deleted file mode 100644 index dbdf8b4..0000000 --- a/qpython-docs/agreement-cn.html +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - 用户使用协议 - - - -

用户使用协议

1. 特别提示 -

1.1为使用本手机应用软件及服务,您应当阅读并遵守《用户使用协议》(以下简称“本协议”)。请您务必审慎阅读、充分理解各条款内容,特别是免除或者限制责任的条款,以及同意或使用某项服务的单独协议,并选择接受或不接受。 -

1.2 除非您已阅读并接受本协议所有条款,否则您无权下载、安装或使用本软件及相关服务。您的下载、安装、使用、获取账号、登录等行为即视为您已阅读并同意上述协议的约束。 -

1.3 QPYTHON(以下称“QPYTHON”)同意按照本协议的规定及其不时发布的操作规则提供基于互联网的相关服务(以下称"本服务")。若您需要获得本服务,您(以下称"用户")应当同意本协议的全部条款并按照页面上的提示完成全部的申请程序。 -

- - -

2. 协议适用主体范围

- 本协议是用户与本公司之间关于用户下载、安装、使用、复制本软件,以及使用本公司相关服务所订立的协议。 -

- QPYTHON在网站上公布的服务条款及用户所参加课程的招生方案和班次协议等是本协议的补充。本协议与上述内容存在冲突的,以本协议为准。 本协议内容同时包括QPYTHON可能不断发布的关于本服务的相关协议、业务规则等内容。上述内容一经正式发布,即为本协议不可分割的组成部分,用户若继续使用本公司软件及服务同样应当遵守。 -

-

3. 服务内容与授权使用范围

-

本软件根据用户实际需求提供服务,例如编程工具、在线QPYPI。QPYTHON保留随时变更、中断或终止部分或全部本服务的权利。 -

-

本软件手机应用的授权使用范围:用户可以在手机上安装、使用、显示、运行本软件。 -

-

保留权利:未明示授权的其他一切权利均由本公司所有。

- -

3. 使用规则

-

用户在使用本软件时,必须遵循以下原则:
- 遵守你所在国的有关的法律和法规; -
- 不得为任何非法目的而使用本服务系统;
- 遵守所有与本服务有关的网络协议、规定和程序;
- 不得利用本软件系统进行任何可能对互联网的正常运转造成不利影响的行为;
- 不得利用本软件服务系统进行任何不利于其他用户的行为;
- 如发现任何非法使用用户账号或账号出现安全漏洞的情况, 应立即通知QPYTHON官方 - -

-

4. 知识产权

-

本软件的作者为严河存, 而QPYTHON的商标权、专利权、商业秘密等知识产权,以及与本软件相关的所有信息内容(包括但不限于视频课件、文字、图片、音频、图表、界面设计、版面框架、有关数据或电子文档等)均属于River授权的北京优趣天下信息技术有限公司,北京优趣天下信息技术有限公司享有上述知识产权,除非事先经本公司的合法授权,任何人皆不得擅自以任何形式使用,否则我们可立即终止向该用户提供产品和服务,并依法追究其法律责任,赔偿本QPYTHON的一切损失。

- - - - - diff --git a/qpython-docs/agreement.html b/qpython-docs/agreement.html deleted file mode 100644 index 078dd7b..0000000 --- a/qpython-docs/agreement.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - User Agreement - - - -

User Agreement

1. Special Tips -

1.1 In order to use this mobile application software and services, you should read and abide by the "User Agreement" (hereinafter referred to as "this Agreement"). Please be sure to carefully read and fully understand the contents of each clause, especially the clauses exempting or limiting liability, as well as separate agreements for agreeing to or using a certain service, and choose to accept or not accept it. -

1.2 Unless you have read and accepted all the terms of this agreement, you have no right to download, install or use this software and related services. Your downloading, installation, use, account acquisition, login, etc. are deemed to have read and agreed to be bound by the above agreement. -

1.3 QPYTHON (hereinafter referred to as "QPYTHON") agrees to provide Internet-based related services (hereinafter referred to as the "Service") in accordance with the provisions of this Agreement and its operating rules published from time to time. If you need to obtain this service, you (hereinafter referred to as "User") should agree to all the terms of this agreement and complete the entire application process according to the prompts on the page. -

- - -

2. Scope of application of the agreement

- This agreement is an agreement between the user and the company regarding the user's downloading, installation, use, copying of this software, and use of the company's related services. -

- The terms of service published by QPYTHON on the website and the enrollment plans and class agreements for courses attended by users are supplements to this agreement. If there is any conflict between this Agreement and the above content, this Agreement shall prevail. The content of this agreement also includes relevant agreements, business rules, etc. regarding this service that QPYTHON may publish from time to time. Once the above content is officially released, it will become an integral part of this agreement. Users must also abide by it if they continue to use the company's software and services. -

-

3. Service content and authorized use scope

-

This software provides services based on the actual needs of users, such as programming tools and online QPYPI. QPYTHON reserves the right to change, interrupt or terminate part or all of this service at any time. -

-

The authorized use scope of this software’s mobile application: Users can install, use, display, and run this software on their mobile phones. -

-

Reserved rights: All other rights not expressly authorized are owned by our company.

- -

3. Rules of use

-

Users must follow the following principles when using this software:
- Comply with the relevant laws and regulations of your country; -
- This service system may not be used for any illegal purpose;
- Comply with all network protocols, regulations and procedures related to the Service;
- This software system may not be used to conduct any behavior that may adversely affect the normal operation of the Internet;
- You may not use this software service system to conduct any behavior that is detrimental to other users;
- If you discover any illegal use of user accounts or account security vulnerabilities, you should immediately notify QPYTHON officials. - -

-

4. Intellectual Property

-

The author of this software is Yan Hecun, and QPYTHON’s trademark rights, patent rights, trade secrets and other knowledge The property rights, as well as all information content related to this software (including but not limited to video courseware, text, pictures, audio, charts, interface design, layout framework, relevant data or electronic documents, etc.) belong to Beijing Youqutianxia Information authorized by River. Technology Co., Ltd. and Beijing Youqutianxia Information Technology Co., Ltd. enjoy the above intellectual property rights. Unless legally authorized by the company in advance, no one may use it in any form without authorization. Otherwise, we may immediately terminate the provision of products and services to the user, and Investigate its legal liability in accordance with the law and compensate QPYTHON for all losses.

- - - - diff --git a/qpython-docs/build-window.bat b/qpython-docs/build-window.bat deleted file mode 100644 index e21dc2e..0000000 --- a/qpython-docs/build-window.bat +++ /dev/null @@ -1,50 +0,0 @@ -@echo off -REM 删除 ../docs 目录 -if exist ..\docs rmdir /s /q ..\docs - -cd build/html - -REM 使用 Python 执行 add-analytics.py 脚本 -@REM for /r %%f in (*.html) do ( - python ..\..\add-analytics-window.py "%%f" -@REM ) - -REM 替换 _static 为 static,_images 为 images -for /r %%f in (*.html) do ( - echo Processing: %%f - powershell -Command "(Get-Content '%%f' -Encoding UTF8) -replace '_static', 'static' | Set-Content '%%f' -Encoding UTF8" - powershell -Command "(Get-Content '%%f' -Encoding UTF8) -replace '_images', 'images' | Set-Content '%%f' -Encoding UTF8" -) - -REM 删除临时文件 -for /r %%f in (*-e) do ( - del "%%f" -) - -REM 重命名 _static 为 static,_images 为 images -ren _static static -ren _images images - -REM 返回上级目录 -cd ..\.. - -REM 将 build/html 移动到 ../docs -move build\html ..\docs - -REM 复制其他文件到 ../docs -copy CNAME ..\docs -xcopy quick-start ..\docs /s /e -copy favicon.ico ..\docs -copy index.html ..\docs -copy community.html ..\docs -copy discord.html ..\docs -copy privacy.html ..\docs -copy privacy-cn.html ..\docs -copy agreement-cn.html ..\docs -copy agreement.html ..\docs -copy qlua-privacy.html ..\docs -copy qlua-rate.html ..\docs -copy qpy3-rate.html ..\docs -xcopy market ..\docs /s /e - -echo 部署完成! \ No newline at end of file diff --git a/qpython-docs/build.sh b/qpython-docs/build.sh deleted file mode 100755 index 98f80e2..0000000 --- a/qpython-docs/build.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash -rm -fr ../docs -make html - -#mv static static -#mv sources sources - -cd build/html && find . -name "*.html" -exec python2 ../../add-analytics.py {} \; && find . -name "*.html" -exec sed -i -e 's/_static/static/g;s/_images/images/g' {} \; && find . -name "*-e" -exec rm {} \; && mv _static static && mv _images images - -cd ../.. && mv build/html ../docs && cp CNAME ../docs && cp -r quick-start ../docs && cp favicon.ico ../docs && cp index.html ../docs && cp community.html discord.html privacy.html privacy-cn.html agreement-cn.html agreement.html qlua-privacy.html qlua-rate.html qpy3-rate.html ../docs && cp -r market ../docs diff --git a/qpython-docs/community.html b/qpython-docs/community.html deleted file mode 100644 index d6d01b6..0000000 --- a/qpython-docs/community.html +++ /dev/null @@ -1,22 +0,0 @@ - diff --git a/qpython-docs/discord.html b/qpython-docs/discord.html deleted file mode 100644 index 4f7cb82..0000000 --- a/qpython-docs/discord.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/qpython-docs/docs/doctrees/contributors.doctree b/qpython-docs/docs/doctrees/contributors.doctree deleted file mode 100644 index 41a0da3..0000000 Binary files a/qpython-docs/docs/doctrees/contributors.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/document.doctree b/qpython-docs/docs/doctrees/document.doctree deleted file mode 100644 index 886afd7..0000000 Binary files a/qpython-docs/docs/doctrees/document.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/en/faq.doctree b/qpython-docs/docs/doctrees/en/faq.doctree deleted file mode 100644 index c51781e..0000000 Binary files a/qpython-docs/docs/doctrees/en/faq.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/en/guide.doctree b/qpython-docs/docs/doctrees/en/guide.doctree deleted file mode 100644 index 9360cbf..0000000 Binary files a/qpython-docs/docs/doctrees/en/guide.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/en/guide_androidhelpers.doctree b/qpython-docs/docs/doctrees/en/guide_androidhelpers.doctree deleted file mode 100644 index 6b3587b..0000000 Binary files a/qpython-docs/docs/doctrees/en/guide_androidhelpers.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/en/guide_contributors.doctree b/qpython-docs/docs/doctrees/en/guide_contributors.doctree deleted file mode 100644 index 72e3216..0000000 Binary files a/qpython-docs/docs/doctrees/en/guide_contributors.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/en/guide_contributors_test.doctree b/qpython-docs/docs/doctrees/en/guide_contributors_test.doctree deleted file mode 100644 index eed0740..0000000 Binary files a/qpython-docs/docs/doctrees/en/guide_contributors_test.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/en/guide_developers.doctree b/qpython-docs/docs/doctrees/en/guide_developers.doctree deleted file mode 100644 index 437a8ce..0000000 Binary files a/qpython-docs/docs/doctrees/en/guide_developers.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/en/guide_extend.doctree b/qpython-docs/docs/doctrees/en/guide_extend.doctree deleted file mode 100644 index 5f05cc3..0000000 Binary files a/qpython-docs/docs/doctrees/en/guide_extend.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/en/guide_helloworld.doctree b/qpython-docs/docs/doctrees/en/guide_helloworld.doctree deleted file mode 100644 index 8fd5545..0000000 Binary files a/qpython-docs/docs/doctrees/en/guide_helloworld.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/en/guide_howtostart.doctree b/qpython-docs/docs/doctrees/en/guide_howtostart.doctree deleted file mode 100644 index d618fec..0000000 Binary files a/qpython-docs/docs/doctrees/en/guide_howtostart.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/en/guide_ide.doctree b/qpython-docs/docs/doctrees/en/guide_ide.doctree deleted file mode 100644 index 1c8eb19..0000000 Binary files a/qpython-docs/docs/doctrees/en/guide_ide.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/en/guide_libraries.doctree b/qpython-docs/docs/doctrees/en/guide_libraries.doctree deleted file mode 100644 index 2142646..0000000 Binary files a/qpython-docs/docs/doctrees/en/guide_libraries.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/en/guide_program.doctree b/qpython-docs/docs/doctrees/en/guide_program.doctree deleted file mode 100644 index 12936c4..0000000 Binary files a/qpython-docs/docs/doctrees/en/guide_program.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/en/qpypi.doctree b/qpython-docs/docs/doctrees/en/qpypi.doctree deleted file mode 100644 index 64949b3..0000000 Binary files a/qpython-docs/docs/doctrees/en/qpypi.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/en/qpython3.doctree b/qpython-docs/docs/doctrees/en/qpython3.doctree deleted file mode 100644 index 8788c39..0000000 Binary files a/qpython-docs/docs/doctrees/en/qpython3.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/en/qpython_3x_featues.doctree b/qpython-docs/docs/doctrees/en/qpython_3x_featues.doctree deleted file mode 100644 index 985a87e..0000000 Binary files a/qpython-docs/docs/doctrees/en/qpython_3x_featues.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/en/qpython_ox_featues.doctree b/qpython-docs/docs/doctrees/en/qpython_ox_featues.doctree deleted file mode 100644 index 59bbed5..0000000 Binary files a/qpython-docs/docs/doctrees/en/qpython_ox_featues.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/environment.pickle b/qpython-docs/docs/doctrees/environment.pickle deleted file mode 100644 index cdc86da..0000000 Binary files a/qpython-docs/docs/doctrees/environment.pickle and /dev/null differ diff --git a/qpython-docs/docs/doctrees/features/2018-09-28-dropbear-cn.doctree b/qpython-docs/docs/doctrees/features/2018-09-28-dropbear-cn.doctree deleted file mode 100644 index ec5278e..0000000 Binary files a/qpython-docs/docs/doctrees/features/2018-09-28-dropbear-cn.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/zh/contributorshowto.doctree b/qpython-docs/docs/doctrees/zh/contributorshowto.doctree deleted file mode 100644 index bed9d31..0000000 Binary files a/qpython-docs/docs/doctrees/zh/contributorshowto.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/zh/howtostart.doctree b/qpython-docs/docs/doctrees/zh/howtostart.doctree deleted file mode 100644 index df0209c..0000000 Binary files a/qpython-docs/docs/doctrees/zh/howtostart.doctree and /dev/null differ diff --git a/qpython-docs/docs/doctrees/zhindex.doctree b/qpython-docs/docs/doctrees/zhindex.doctree deleted file mode 100644 index b313ddc..0000000 Binary files a/qpython-docs/docs/doctrees/zhindex.doctree and /dev/null differ diff --git a/qpython-docs/extra.txt b/qpython-docs/extra.txt deleted file mode 100644 index d0d3bdb..0000000 --- a/qpython-docs/extra.txt +++ /dev/null @@ -1,19 +0,0 @@ - - -
- - - - diff --git a/qpython-docs/favicon.ico b/qpython-docs/favicon.ico deleted file mode 100644 index 5650a96..0000000 Binary files a/qpython-docs/favicon.ico and /dev/null differ diff --git a/qpython-docs/img_banner-1.jpg b/qpython-docs/img_banner-1.jpg deleted file mode 100644 index 35179f4..0000000 Binary files a/qpython-docs/img_banner-1.jpg and /dev/null differ diff --git a/qpython-docs/img_banner-1@2x.jpg b/qpython-docs/img_banner-1@2x.jpg deleted file mode 100755 index 51be196..0000000 Binary files a/qpython-docs/img_banner-1@2x.jpg and /dev/null differ diff --git a/qpython-docs/index.html b/qpython-docs/index.html deleted file mode 100755 index dd4a3cb..0000000 --- a/qpython-docs/index.html +++ /dev/null @@ -1,227 +0,0 @@ - - - -QPython - Learn Python & AI on mobile - - - - - - - - - - - - - - - - -
-
- - - - - -
-
- -
-
-
- - -
- - -
-
- -
-
-

About QPython

-
- QPython integrates the Python interpreter, AI model engine and mobile development tool chain, supports Web development, scientific computing and intelligent application construction, provides a complete mobile programming solution, and provides developer courses and community resources to help continuous learning. -
-
    -
  • - -
  • - - - -
-
-
-
- -
-
-
-
    -
  • -
    -

    What's NEW

    -
    -## v3.5.2 (2025/2/25)
    -Achieve seamless integration with the open source LLM deployment tool Ollama and deepseek developed by DeepSeek! This means:
    -✅ Zero threshold to run various large language models locally on mobile devices
    -✅ Quickly deploy cutting-edge AI models such as DeepSeek
    -✅ Enjoy a minimalist API calling experience
    -✅ Build a completely offline intelligent programming environment
    -
    -With this update, you will be able to experience immediately:
    -🔧 Load/manage LLM models directly on the mobile phone
    -⚡ Real-time low-latency response based on local computing
    -
    -
    -
    - -
    -
  • -
  • -
    -

    QPython download resources

    -

    We recommend that you download and install the latest version of QPython and its related resources from your mobile app store first. If you cannot get it from the app store, you can also download it from the following network disk.

    - - - - -
    -
  • -
  • -
    -

    Community & Feedback

    -

    Welcome to join the QPython community to learn and discuss with many QPythoneers.

    - - - 加入中文交流社区
    - - Join QPython Discord
    - - Subscribe the QPython Newsletter
    - -

    We recommend that you contact us and provide feedback through the QPython community, which is a relatively convenient way. Of course, you can also share your feedback with us through the following channels.

    - - Report App's Issue
    - - Request Extension Package
    -
      -
    -
  • -
-
-
-
-
- -
    - -
  • - -
  • - -
-
-
-
-
-
- - - -
- - diff --git a/qpython-docs/make-window.bat b/qpython-docs/make-window.bat deleted file mode 100644 index 39e59af..0000000 --- a/qpython-docs/make-window.bat +++ /dev/null @@ -1,33 +0,0 @@ -@echo off -set SPHINXBUILD=sphinx-build -set BUILDDIR=build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% source - -if "%1" == "" goto help - -if "%1" == "help" ( - goto help -) - -if "%1" == "clean" ( - rmdir /s /q %BUILDDIR% - goto end -) - -%SPHINXBUILD% -b %1 %ALLSPHINXOPTS% %BUILDDIR%/%1 -goto end - -:help -echo Please use `make ^` where ^ is one of -echo html to make standalone HTML files -echo dirhtml to make HTML files named index.html in directories -echo singlehtml to make a single large HTML file -echo latex to make LaTeX files -echo latexpdf to make LaTeX files and run them through pdflatex -echo linkcheck to check all external links for integrity -echo doctest to run all doctests embedded in the documentation -echo coverage to run coverage check of the documentation -echo dummy to check syntax errors of document sources -goto end - -:end \ No newline at end of file diff --git a/qpython-docs/market/default.html b/qpython-docs/market/default.html deleted file mode 100644 index 7dbd944..0000000 --- a/qpython-docs/market/default.html +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/qpython-docs/market/xiaomi.html b/qpython-docs/market/xiaomi.html deleted file mode 100644 index 4812825..0000000 --- a/qpython-docs/market/xiaomi.html +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/qpython-docs/media/logo32x32.png b/qpython-docs/media/logo32x32.png deleted file mode 100644 index 0528050..0000000 Binary files a/qpython-docs/media/logo32x32.png and /dev/null differ diff --git a/qpython-docs/media/qpython-build-as.png b/qpython-docs/media/qpython-build-as.png deleted file mode 100644 index 3bcdc00..0000000 Binary files a/qpython-docs/media/qpython-build-as.png and /dev/null differ diff --git a/qpython-docs/media/qpython-build-ndk-false.jpg b/qpython-docs/media/qpython-build-ndk-false.jpg deleted file mode 100644 index 0e796c5..0000000 Binary files a/qpython-docs/media/qpython-build-ndk-false.jpg and /dev/null differ diff --git a/qpython-docs/media/qpython-build-ndk.jpg b/qpython-docs/media/qpython-build-ndk.jpg deleted file mode 100644 index 5652bd1..0000000 Binary files a/qpython-docs/media/qpython-build-ndk.jpg and /dev/null differ diff --git a/qpython-docs/privacy-cn.html b/qpython-docs/privacy-cn.html deleted file mode 100644 index 2dc5da9..0000000 --- a/qpython-docs/privacy-cn.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - Privacy Policy - - - -

隐私政策

-

本隐私政策于2021年12月12日更新发布并同时生效

-

北京优趣天下信息技术有限公司(以下称“QPYTHON”或“我们”)尊重并保护所有使用QPYTHON服务用户的隐私权,在您使用我们提供的服务时,我们可能会收集和使用您的相关信息,我们希望通过本《隐私政策》向您说明,我们如何收集、存储、保护及使用您的个人信息,以及清楚地向您介绍我们对您个人信息的处理方式。本《隐私政策》与您使用QPYTHON的服务相关,因此我们建议您完整地阅读,以帮助您更好地保护您的隐私。 -

-如您对本《隐私政策》有任何疑问,您可以通过我方平台公布的联系方式与我们联系。如果您不同意本隐私政策任何内容,您应立即停止使用我们的服务。当您使用我们提供的任一服务时,即表示您已同意我们按照本《隐私政策》来合法使用和保护您的个人信息。 -

信息收集和使用

-

QPython在向您提供服务时,可能会收集、储存和使用下列与您有关的信息,收集信息是为了向您提供更好、更优的服务,我们收集信息的范围和用途如下:

-
    -
  • 您在注册账号时提供的信息:在QPython里,登录和注册不是必须的,但是您在注册并登录账号时,需要您提供手机号码或电子邮箱或第三方账号(Github 等)的信息,我们将通过发送短信验证码或邮件的方式来验证您的账号是否有效。您可根据自身需求选择补充填写个人信息(头像、昵称、简介、行业、职业、城市、生日等),这些补充信息并非强制的
  • -
  • 在您使用产品与/或服务的过程中收集的信息:在您那使用QPython编程服务的过程中,我们可能会收集您使用的设备信息(包括操作系统、软件版本、语言设置、IP地址、IMEI、OAID、IMSI、MAC、应用列表等),浏览信息(包括搜索关键词、访问页面链接和访问时间),发表信息(包括程序,文字、图片、视频),交易信息(包括交易记录),身份信息(包括认证作者、创作者时需要提供的身份证号码或者相关职业资质证书号码)。
  • -
  • 交易信息:当您希望购买课程、电子书、专栏,或使用需付费的其它服务时,您需要使用“支付功能”。在收付款的过程中,我们需要收集您提供的身份证号码、收款方式、第三方支付账号(包括微信帐号,支付宝账号、Apple Pay 账号或其他形式的银行卡信息)以提供高效的交易服务。
  • -
  • 第三方向QPYTHON提供的信息:您在第三方产品与/或服务中使用QPYTHON的时候,我们会收集第三方产品与/或服务向我们提供的有关信息,比如账号昵称,邮件、手机号、程序信息等。您提供的上述信息,将在您使用本产品与/或服务期间持续授权我们使用。在您注销账号时,我们将停止使用并删除上述信息。 -
  • -
  • 个人设备信息(IMEI/MAC/Android ID/IDFA/OAID/OpenUDID/GUID/SIM卡IMSI/ICCID等):QPython使用了友盟(Umeng)移动统计SDK,它使用这些信息用于唯一标识设备,以此统计QPython的卸载与安装信息,以及基于位置来获得设备区域统计功能。更详细的友盟统计SDK的隐私可以参考友盟隐私策略。 -
  • -
-

提供上述信息,尤其是个人敏感信息,您可能面临用户信息泄露或用户账号被盗、个人隐私及财产安全难以保障等风险,但我们将尽最大努力避免上述风险发生。 -如您选择不提供上述信息,您可能无法使用我们需要注册和登录才能使用的某些产品与/或服务,或者无法达到相关产品与/或服务拟达到的效果。 -

-

我们会这样使用你的信息

-
    -
  • 向您提供您使用的各项产品与/或服务,并维护、改进这些服务。 -
    1. 发布功能:您可以发布文字、图片、视频,我们需要收集您发布的信息,并展示您的昵称、头像、发布内容b。
    2. -
    3. 搜索功能:您可以使用对关键字进行查询的服务,我们需要使用网络存储机制和应用数据缓存,收集您设备上的信息并进行本地存储,以提供更便捷的搜索服务。
    4. -
    5. 经您同意的其他目的,包括但不限于向您发出产品和服务信息,或通过系统向您展示第三方推广信息,或在征得您同意的情况下与我们的合作伙伴共享信息以便他们向您发送有关其产品和服务的信息。有的信息有可能是您不希望接收的信息。
    6. -
    -
  • -
  • 开展内部数据分析和研究,第三方SDK统计服务,改善我们的产品或服务
    1. 我们收集数据是根据您与我们的互动和您所做出的选择,包括您的隐私设置以及您使用的产品和功能我们收集的数据可能包括 SDK/API/JS 代码版本、浏览器、互联网服务提供商、IP 地址、平台、时间戳、应用标识符、应用程序版本、应用分发渠道、独立设备标识符、iOS 广告标识符(IDFA)、安卓广告主标识符、网卡(MAC)地址、国际移动设备识别码(IMEI)、设备型号、终端制造厂商、终端设备操作系统版本、会话启动/停止时间、语言所在地、时区和网络状态(WiFi等)、硬盘、CPU 和电池使用情况等
  • -
-

- 当我们要将信息用于本策略未载明的其它用途时,会事先征求您的同意。当我们要将基于特定目的收集而来的信息用于其他目的时,会事先征求您的同意。 -

-

我们使用的一些第三方 SDK 服务商可能也会收集您的个人信息,包括

-
  • A. 第三方账号登录功能:为给您提供第三方账号登录的功能,第三方服务商可能会获取您的必要设备信息、网络相关信息,合作的 SDK 包括:微信登录 / Github
  • -
  • B. 支付服务:为了保证您能顺利购买平台的商品以及服务,微信 SDK、支付宝支付可能会收集您必要的设备信息、网络相关信息
  • -
  • C. 数据统计功能:我们会使用 Google Analytics/友盟 以准确记录 App 的活跃情况、设备信息、网络相关信息
  • -
  • D. 消息推送:为给您提供及时的消息推送,第三方推送服务商可能会获取您必要设备信息、手机状态信息、地理位置信息、网络相关信息以便进行消息推送(主要为App版本更新信息),这些SDK包括:腾讯推送,小米推送,华为推送,Oppo推送,Vivo推送。
  • - -
- -

权限

- 要使用Android的某些功能进行编程,QPython需要以下权限:摄像头、麦克风、存储、账号、蓝牙、GPS、剪贴板信息和其他等,如果您不需要这些特性,可以从系统设置中禁用它们。 -

-
    -
  • 为了能使用扫描二维码的便捷功能和让您使用手机的拍照特性进行编程,QPython可能会使用您申请摄像头权限;
  • - -
  • 为了让您能用手机的麦克风、存储进行编程,QPython可能会使用您申请麦克风权限、读写存储等权限
  • -
  • 为了让您使用手机的地理位置用于编程,QPython可能会向您申请位置权限
  • -
  • 为了让您使用手机的账号信息用于编程,QPython可能会向您申请系统设备权限收集设备信息、日志信息
  • -
  • 我们会努力采取各种安全技术保护您的个人信息。未经您同意,我们不会从第三方获取、共享或对外提供您的信息;
  • -
  • 如果不是你主动在系统设置->Apps->QPython权限中管理上述权限,QPython不会自动使用它们
  • -
-

安全

我们珍视您在向我们提供您的个人信息方面的信任,因此我们正在努力使用商业上可接受的方式来保护您的个人信息。但请记住,任何通过互联网的传输方法或电子存储方法都不是100%安全可靠的,我们无法保证其绝对安全性。 -

对本隐私政策的更改

我们可能会不时更新我们的隐私政策。因此,建议您定期查看此页面以了解任何更改。我们将通过在此页面上发布新的隐私政策来通知您任何更改。这些更改在发布到此页面后立即生效。 -

联系我们(support@qpython.org)

如果您对我的隐私政策有任何疑问或建议,请随时与我联系。 -

- - - - - - - - diff --git a/qpython-docs/privacy.html b/qpython-docs/privacy.html deleted file mode 100644 index 9858983..0000000 --- a/qpython-docs/privacy.html +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - Privacy Policy - - - -

Privacy Policy

QPython Team built the QPython/QPython3 apps and their related services. -

This page is used to inform visitors regarding our policies with the collection, use, and - disclosure of Personal Information if anyone decided to use our App and services. -

If you choose to use our app and services, then you agree to the collection and use of information in relation - to this policy. The Personal Information that we collect is used for providing and improving the - App and service. We will not use or share your information with anyone except as described - in this Privacy Policy. -

The terms used in this Privacy Policy have the same meanings as in our Terms and Conditions, which is accessible - at QPython/QPython3 unless otherwise defined in this Privacy Policy. -

Information Collection and Use

-

For a better experience, while using our Service, we may require you to provide us with certain - personally identifiable information, including but not limited to IP address. The information that we request will be retained on your device and is not collected by me in any way. -

- - -

The app does use third party services that may collect information used to identify you.

Link to privacy policy of third party service providers used by the app

-

- Location -

- The Application collects your device's location, which helps the Service Provider determine your approximate geographical location and make use of in below ways: -

  • -Geolocation Services: The Service Provider utilizes location data to provide features such as personalized content, relevant recommendations, and location-based services.
  • -
  • Analytics and Improvements: Aggregated and anonymized location data helps the Service Provider to analyze user behavior, identify trends, and improve the overall performance and functionality of the Application.
  • -
  • Third-Party Services: Periodically, the Service Provider may transmit anonymized location data to external services. These services assist them in enhancing the Application and optimizing their offerings.
  • -
- -

- - - - -

Log Data

We want to inform you that whenever you use my Service, in a case of an - error in the app we collect data and information (through third party products) on your phone - called Log Data. This Log Data may include information such as your device Internet Protocol (“IP”) address, - device name, operating system version, the configuration of the app when utilizing my Service, - the time and date of your use of the Service, and other statistics. -

- - - -

Permissions

- To enable programming with some of Android’s features, QPython/QPythons requires the following permissions: Bluetooth, GPS, and others, etc. -It doesn't require some permissions like access user account, access phone's status, meaning you cannot use some SL4A APIs.
- You can disable them from system's setting if you don't need them. - - -

-

Cookies

Cookies are files with a small amount of data that are commonly used as anonymous unique identifiers. These - are sent to your browser from the websites that you visit and are stored on your device's internal memory. -

This Service does not use these “cookies” explicitly. However, the app may use third party code and libraries - that use “cookies” to collect information and improve their services. You have the option to either - accept or refuse these cookies and know when a cookie is being sent to your device. If you choose to - refuse our cookies, you may not be able to use some portions of this Service. -

Service Providers

We may employ third-party companies and individuals due to the following reasons:

  • To facilitate our Service;
  • To provide the Service on our behalf;
  • To perform Service-related services; or
  • To assist us in analyzing how our Service is used.

We want to inform users of this Service that these third parties have access to your - Personal Information. The reason is to perform the tasks assigned to them on our behalf. However, they - are obligated not to disclose or use the information for any other purpose. -

Security

We value your trust in providing us your Personal Information, thus we are striving - to use commercially acceptable means of protecting it. But remember that no method of transmission over - the internet, or method of electronic storage is 100% secure and reliable, and we cannot guarantee - its absolute security. -

Links to Other Sites

This Service may contain links to other sites. If you click on a third-party link, you will be directed - to that site. Note that these external sites are not operated by me. Therefore, we strongly - advise you to review the Privacy Policy of these websites. We have no control over - and assume no responsibility for the content, privacy policies, or practices of any third-party sites - or services. -

Children’s Privacy

These Services do not address anyone under the age of 13. We do not knowingly collect - personally identifiable information from children under 13. In the case we discover that a child - under 13 has provided me with personal information, we immediately delete this from - our servers. If you are a parent or guardian and you are aware that your child has provided us with personal - information, please contact me so that we will be able to do necessary actions. -

Changes to This Privacy Policy

We may update our Privacy Policy from time to time. Thus, you are advised to review - this page periodically for any changes. We will notify you of any changes by posting - the new Privacy Policy on this page. These changes are effective immediately after they are posted on - this page. -

Contact Us (support at qpython.org)

If you have any questions or suggestions about my Privacy Policy, do not hesitate to contact - me. -

- - - - - - - diff --git a/qpython-docs/qlua-privacy.html b/qpython-docs/qlua-privacy.html deleted file mode 100644 index 2baf1a3..0000000 --- a/qpython-docs/qlua-privacy.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - Privacy Policy - - - -

Privacy Policy

QPython Team built the QLua apps and their related services. -

This page is used to inform visitors regarding our policies with the collection, use, and - disclosure of Personal Information if anyone decided to use our App and services. -

If you choose to use our app and services, then you agree to the collection and use of information in relation - to this policy. The Personal Information that we collect is used for providing and improving the - App and service. We will not use or share your information with anyone except as described - in this Privacy Policy. -

The terms used in this Privacy Policy have the same meanings as in our Terms and Conditions, which is accessible - at QLua unless otherwise defined in this Privacy Policy. -

Information Collection and Use

For a better experience, while using our Service, we may require you to provide us with certain - personally identifiable information, including but not limited to IP address. The information that we request will be retained on your device and is not collected by me in any way. -

The app does use third party services that may collect information used to identify you.

Link to privacy policy of third party service providers used by the app

Log Data

We want to inform you that whenever you use my Service, in a case of an - error in the app we collect data and information (through third party products) on your phone - called Log Data. This Log Data may include information such as your device Internet Protocol (“IP”) address, - device name, operating system version, the configuration of the app when utilizing my Service, - the time and date of your use of the Service, and other statistics. -

- - -

Permissions

- To enable programming with some of Android’s features, QLua requires the following permissions: Bluetooth, GPS, and others, etc. -It doesn't require some permissions like access user account, access phone's status, meaning you cannot use some SL4A APIs.
- You can disable them from system's setting if you don't need them. - - -

-

Cookies

Cookies are files with a small amount of data that are commonly used as anonymous unique identifiers. These - are sent to your browser from the websites that you visit and are stored on your device's internal memory. -

This Service does not use these “cookies” explicitly. However, the app may use third party code and libraries - that use “cookies” to collect information and improve their services. You have the option to either - accept or refuse these cookies and know when a cookie is being sent to your device. If you choose to - refuse our cookies, you may not be able to use some portions of this Service. -

Service Providers

We may employ third-party companies and individuals due to the following reasons:

  • To facilitate our Service;
  • To provide the Service on our behalf;
  • To perform Service-related services; or
  • To assist us in analyzing how our Service is used.

We want to inform users of this Service that these third parties have access to your - Personal Information. The reason is to perform the tasks assigned to them on our behalf. However, they - are obligated not to disclose or use the information for any other purpose. -

Security

We value your trust in providing us your Personal Information, thus we are striving - to use commercially acceptable means of protecting it. But remember that no method of transmission over - the internet, or method of electronic storage is 100% secure and reliable, and we cannot guarantee - its absolute security. -

Links to Other Sites

This Service may contain links to other sites. If you click on a third-party link, you will be directed - to that site. Note that these external sites are not operated by me. Therefore, we strongly - advise you to review the Privacy Policy of these websites. We have no control over - and assume no responsibility for the content, privacy policies, or practices of any third-party sites - or services. -

Children’s Privacy

These Services do not address anyone under the age of 13. We do not knowingly collect - personally identifiable information from children under 13. In the case we discover that a child - under 13 has provided me with personal information, we immediately delete this from - our servers. If you are a parent or guardian and you are aware that your child has provided us with personal - information, please contact me so that we will be able to do necessary actions. -

Changes to This Privacy Policy

We may update our Privacy Policy from time to time. Thus, you are advised to review - this page periodically for any changes. We will notify you of any changes by posting - the new Privacy Policy on this page. These changes are effective immediately after they are posted on - this page. -

Contact Us (support at qpython.org)

If you have any questions or suggestions about my Privacy Policy, do not hesitate to contact - me. -

This privacy policy page was created at privacypolicytemplate.net and modified/generated by App Privacy Policy Generator

- - - diff --git a/qpython-docs/qlua-rate.html b/qpython-docs/qlua-rate.html deleted file mode 100644 index 97e5638..0000000 --- a/qpython-docs/qlua-rate.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/qpython-docs/qpy3-privacy.html b/qpython-docs/qpy3-privacy.html deleted file mode 100644 index 6f8796c..0000000 --- a/qpython-docs/qpy3-privacy.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - Privacy Policy - - - - Privacy Policy

This privacy policy applies to the QPython3 - Python for Android app (hereby referred to as "Application") for mobile devices that was created by 严河存 (hereby referred to as "Service Provider") as a Free service. This service is intended for use "AS IS".


Information Collection and Use

The Application collects information when you download and use it. This information may include information such as

  • Your device's Internet Protocol address (e.g. IP address)
  • The pages of the Application that you visit, the time and date of your visit, the time spent on those pages
  • The time spent on the Application
  • The operating system you use on your mobile device


The Application does not gather precise information about the location of your mobile device.

The Application collects your device's location, which helps the Service Provider determine your approximate geographical location and make use of in below ways:

  • Geolocation Services: The Service Provider utilizes location data to provide features such as personalized content, relevant recommendations, and location-based services.
  • Analytics and Improvements: Aggregated and anonymized location data helps the Service Provider to analyze user behavior, identify trends, and improve the overall performance and functionality of the Application.
  • Third-Party Services: Periodically, the Service Provider may transmit anonymized location data to external services. These services assist them in enhancing the Application and optimizing their offerings.

The Service Provider may use the information you provided to contact you from time to time to provide you with important information, required notices and marketing promotions.


For a better experience, while using the Application, the Service Provider may require you to provide us with certain personally identifiable information. The information that the Service Provider request will be retained by them and used as described in this privacy policy.


Third Party Access

Only aggregated, anonymized data is periodically transmitted to external services to aid the Service Provider in improving the Application and their service. The Service Provider may share your information with third parties in the ways that are described in this privacy statement.


Please note that the Application utilizes third-party services that have their own Privacy Policy about handling data. Below are the links to the Privacy Policy of the third-party service providers used by the Application:


The Service Provider may disclose User Provided and Automatically Collected Information:

  • as required by law, such as to comply with a subpoena, or similar legal process;
  • when they believe in good faith that disclosure is necessary to protect their rights, protect your safety or the safety of others, investigate fraud, or respond to a government request;
  • with their trusted services providers who work on their behalf, do not have an independent use of the information we disclose to them, and have agreed to adhere to the rules set forth in this privacy statement.


Opt-Out Rights

You can stop all collection of information by the Application easily by uninstalling it. You may use the standard uninstall processes as may be available as part of your mobile device or via the mobile application marketplace or network.


Data Retention Policy

The Service Provider will retain User Provided data for as long as you use the Application and for a reasonable time thereafter. If you'd like them to delete User Provided Data that you have provided via the Application, please contact them at support@qpython.org and they will respond in a reasonable time.


Children

The Service Provider does not use the Application to knowingly solicit data from or market to children under the age of 13.


The Application does not address anyone under the age of 13. -The Service Provider does not knowingly collect personally -identifiable information from children under 13 years of age. In the case -the Service Provider discover that a child under 13 has provided -personal information, the Service Provider will immediately -delete this from their servers. If you are a parent or guardian -and you are aware that your child has provided us with -personal information, please contact the Service Provider (support@qpython.org) so that -they will be able to take the necessary actions.


Security

The Service Provider is concerned about safeguarding the confidentiality of your information. The Service Provider provides physical, electronic, and procedural safeguards to protect information the Service Provider processes and maintains.


Changes

This Privacy Policy may be updated from time to time for any reason. The Service Provider will notify you of any changes to the Privacy Policy by updating this page with the new Privacy Policy. You are advised to consult this Privacy Policy regularly for any changes, as continued use is deemed approval of all changes.


This privacy policy is effective as of 2024-10-08


Your Consent

By using the Application, you are consenting to the processing of your information as set forth in this Privacy Policy now and as amended by us.


Contact Us

If you have any questions regarding privacy while using the Application, or have questions about the practices, please contact the Service Provider via email at support@qpython.org.


This privacy policy page was generated by App Privacy Policy Generator

- - - diff --git a/qpython-docs/qpy3-rate.html b/qpython-docs/qpy3-rate.html deleted file mode 100644 index 0437884..0000000 --- a/qpython-docs/qpy3-rate.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/qpython-docs/quick-start/index.html b/qpython-docs/quick-start/index.html deleted file mode 100644 index ec119b5..0000000 --- a/qpython-docs/quick-start/index.html +++ /dev/null @@ -1,203 +0,0 @@ - - - - - - - - - - -Quick Start | QPyPI - - - - - - - -
- - -
-
-
- -
-

Quick Start

-
-
-

A hands-on introduction to Python for beginning programmers

-

If you are a new guy to QPython, you should watch the tutorial video and just follow the steps to learn how to run script with QPython -

-
-
-
-

Running with Console

-

Running QPython’s simple script with console model

-
#qpy:2
-#qpy:console
-#qpy:http://qpython.com/s/qpy-sample.py
-
-class Calculator(object):
-    #define class to simulate a simple calculator
-    def __init__ (self):
-        #start with zero
-        self.current = 0
-    def add(self, amount):
-        #add number to current
-        self.current += amount
-    def getCurrent(self):
-        return self.current
-
-myBuddy = Calculator() # make myBuddy into a Calculator object
-myBuddy.add(2) #use myBuddy's new add method derived from the Calculator class
-print(myBuddy.getCurrent()) #print myBuddy's current instance variable
-
-
-
-
-
-

Running with Kivy

-

Running QPython’s script with GUI model ( Kivy library )

-
#qpy:2
-#qpy:kivy
-#qpy:http://qpython.com/s/qpy-guisample.py
-
-from kivy.app import App
-from kivy.uix.button import Button
-
-class TestApp(App):
-    def build(self):
-        # display a button with the text : Hello QPython 
-        return Button(text='Hello QPython')
-
-TestApp().run()
-
-
-
-
-

Running as Web App

-

Running Web App with QPython

-
#qpy:2
-#qpy:webapp:Hello Qpython
-#qpy://localhost:8080/hello
-"""
-This is a sample for qpython webapp
-"""
-from bottle import route, run
-
-@route('/hello')
-def hello():
-    return "Hello World!"
-
-run(host='localhost', port=8080)
-
-
- -
-
-
-
-

0 pepole donate.Thank you for donating, which should encourage author greatly

-

-
-
-
-
-
-
-
-
- - diff --git a/qpython-docs/requirements.txt b/qpython-docs/requirements.txt deleted file mode 100644 index 26bd5d9..0000000 --- a/qpython-docs/requirements.txt +++ /dev/null @@ -1,24 +0,0 @@ -alabaster==0.7.13 -babel==2.16.0 -certifi==2024.8.30 -charset-normalizer==3.4.0 -docutils==0.20.1 -idna==3.10 -imagesize==1.4.1 -importlib-metadata==8.5.0 -jinja2==3.1.4 -MarkupSafe==2.1.5 -packaging==24.2 -pygments==2.18.0 -pytz==2024.2 -requests==2.32.3 -snowballstemmer==2.2.0 -sphinx==7.1.2 -sphinxcontrib-applehelp==1.0.4 -sphinxcontrib-devhelp==1.0.2 -sphinxcontrib-htmlhelp==2.0.1 -sphinxcontrib-jsmath==1.0.1 -sphinxcontrib-qthelp==1.0.3 -sphinxcontrib-serializinghtml==1.1.5 -urllib3==2.2.3 -zipp==3.20.2 diff --git a/qpython-docs/source/.DS_Store b/qpython-docs/source/.DS_Store deleted file mode 100644 index 8a156ab..0000000 Binary files a/qpython-docs/source/.DS_Store and /dev/null differ diff --git a/qpython-docs/source/_static/1.png b/qpython-docs/source/_static/1.png deleted file mode 100644 index a539f0e..0000000 Binary files a/qpython-docs/source/_static/1.png and /dev/null differ diff --git a/qpython-docs/source/_static/2.png b/qpython-docs/source/_static/2.png deleted file mode 100644 index dd65bc6..0000000 Binary files a/qpython-docs/source/_static/2.png and /dev/null differ diff --git a/qpython-docs/source/_static/3.png b/qpython-docs/source/_static/3.png deleted file mode 100644 index cb9bbea..0000000 Binary files a/qpython-docs/source/_static/3.png and /dev/null differ diff --git a/qpython-docs/source/_static/bestpython.png b/qpython-docs/source/_static/bestpython.png deleted file mode 100755 index 59940ff..0000000 Binary files a/qpython-docs/source/_static/bestpython.png and /dev/null differ diff --git a/qpython-docs/source/_static/guide_extend_pic1.png b/qpython-docs/source/_static/guide_extend_pic1.png deleted file mode 100644 index fae7de0..0000000 Binary files a/qpython-docs/source/_static/guide_extend_pic1.png and /dev/null differ diff --git a/qpython-docs/source/_static/guide_extend_pic2.png b/qpython-docs/source/_static/guide_extend_pic2.png deleted file mode 100644 index bcff864..0000000 Binary files a/qpython-docs/source/_static/guide_extend_pic2.png and /dev/null differ diff --git a/qpython-docs/source/_static/guide_helloworld_pic1.png b/qpython-docs/source/_static/guide_helloworld_pic1.png deleted file mode 100644 index 712e986..0000000 Binary files a/qpython-docs/source/_static/guide_helloworld_pic1.png and /dev/null differ diff --git a/qpython-docs/source/_static/guide_howtostart_pic1.png b/qpython-docs/source/_static/guide_howtostart_pic1.png deleted file mode 100644 index 54c666a..0000000 Binary files a/qpython-docs/source/_static/guide_howtostart_pic1.png and /dev/null differ diff --git a/qpython-docs/source/_static/guide_howtostart_pic2.png b/qpython-docs/source/_static/guide_howtostart_pic2.png deleted file mode 100644 index 296a515..0000000 Binary files a/qpython-docs/source/_static/guide_howtostart_pic2.png and /dev/null differ diff --git a/qpython-docs/source/_static/guide_howtostart_pic3.png b/qpython-docs/source/_static/guide_howtostart_pic3.png deleted file mode 100644 index f7caf8c..0000000 Binary files a/qpython-docs/source/_static/guide_howtostart_pic3.png and /dev/null differ diff --git a/qpython-docs/source/_static/guide_howtostart_pic4.png b/qpython-docs/source/_static/guide_howtostart_pic4.png deleted file mode 100644 index 6d2b2fc..0000000 Binary files a/qpython-docs/source/_static/guide_howtostart_pic4.png and /dev/null differ diff --git a/qpython-docs/source/_static/guide_howtostart_pic5.png b/qpython-docs/source/_static/guide_howtostart_pic5.png deleted file mode 100644 index 9e30aed..0000000 Binary files a/qpython-docs/source/_static/guide_howtostart_pic5.png and /dev/null differ diff --git a/qpython-docs/source/_static/guide_ide_qedit4web.png b/qpython-docs/source/_static/guide_ide_qedit4web.png deleted file mode 100755 index 09f2ccb..0000000 Binary files a/qpython-docs/source/_static/guide_ide_qedit4web.png and /dev/null differ diff --git a/qpython-docs/source/_static/guide_ide_qedit4web_choose.png b/qpython-docs/source/_static/guide_ide_qedit4web_choose.png deleted file mode 100644 index 6f3edfd..0000000 Binary files a/qpython-docs/source/_static/guide_ide_qedit4web_choose.png and /dev/null differ diff --git a/qpython-docs/source/_static/guide_ide_qedit4web_develop.png b/qpython-docs/source/_static/guide_ide_qedit4web_develop.png deleted file mode 100644 index 0fde32c..0000000 Binary files a/qpython-docs/source/_static/guide_ide_qedit4web_develop.png and /dev/null differ diff --git a/qpython-docs/source/_static/guide_program_pic1.png b/qpython-docs/source/_static/guide_program_pic1.png deleted file mode 100644 index 4cdf975..0000000 Binary files a/qpython-docs/source/_static/guide_program_pic1.png and /dev/null differ diff --git a/qpython-docs/source/_static/sl4a.jpg b/qpython-docs/source/_static/sl4a.jpg deleted file mode 100644 index cf45153..0000000 Binary files a/qpython-docs/source/_static/sl4a.jpg and /dev/null differ diff --git a/qpython-docs/source/conf.py b/qpython-docs/source/conf.py deleted file mode 100644 index a79d5b5..0000000 --- a/qpython-docs/source/conf.py +++ /dev/null @@ -1,338 +0,0 @@ -# -*- coding: utf-8 -*- -# -# QPython documentation build configuration file, created by -# sphinx-quickstart on Fri Apr 7 15:07:35 2017. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -# -import os -import sys -sys.path.insert(0, os.path.abspath('.')) -try: - import qpython_theme -except: - print('please install qpython_theme') - - sys.exit(1) - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -# -# needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# -# source_suffix = ['.rst', '.md'] -source_suffix = '.rst' - -# The encoding of source files. -# -# source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'document' - -# General information about the project. -project = u'QPython' -copyright = u'2017, QPython' -author = u'QPython' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = u'0.9' -# The full version, including alpha/beta/rc tags. -release = u'0.9' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -# -# This is also used if you do content translation via gettext catalogs. -# Usually you set "language" from the command line for these cases. -language = "en_US" - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -# -# today = '' -# -# Else, today_fmt is used as the format for a strftime call. -# -# today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -# This patterns also effect to html_static_path and html_extra_path -exclude_patterns = [] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -# -# default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -# -# add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -# -# add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -# -# show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -# modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -# keep_warnings = False - -# If true, `todo` and `todoList` produce output, else they produce nothing. -todo_include_todos = False - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -# -html_theme = 'qpython_theme' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# -# html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -html_theme_path = [qpython_theme.theme_path] - -# The name for this set of Sphinx documents. -# " v documentation" by default. -# -# html_title = u'QPython v0.9' - -# A shorter title for the navigation bar. Default is the same as html_title. -# -# html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -# -# html_logo = None - -# The name of an image file (relative to this directory) to use as a favicon of -# the docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -# -# html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -# -# html_extra_path = [] - -# If not None, a 'Last updated on:' timestamp is inserted at every page -# bottom, using the given strftime format. -# The empty string is equivalent to '%b %d, %Y'. -# -# html_last_updated_fmt = None - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -# -# html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -# -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -# -# html_additional_pages = {} - -# If false, no module index is generated. -# -# html_domain_indices = True - -# If false, no index is generated. -# -# html_use_index = True - -# If true, the index is split into individual pages for each letter. -# -# html_split_index = False - -# If true, links to the reST sources are added to the pages. -# -# html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -# -# html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -# -# html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -# -# html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -# html_file_suffix = None - -# Language to be used for generating the HTML full-text search index. -# Sphinx supports the following languages: -# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' -# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr', 'zh' -# -# html_search_language = 'en' - -# A dictionary with options for the search language support, empty by default. -# 'ja' uses this config value. -# 'zh' user can custom change `jieba` dictionary path. -# -# html_search_options = {'type': 'default'} - -# The name of a javascript file (relative to the configuration directory) that -# implements a search results scorer. If empty, the default will be used. -# -# html_search_scorer = 'scorer.js' - -# Output file base name for HTML help builder. -htmlhelp_basename = 'QPythondoc' - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - # - # 'papersize': 'letterpaper', - - # The font size ('10pt', '11pt' or '12pt'). - # - # 'pointsize': '10pt', - - # Additional stuff for the LaTeX preamble. - # - # 'preamble': '', - - # Latex figure (float) alignment - # - # 'figure_align': 'htbp', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - (master_doc, 'QPython.tex', u'QPython User Guide', - u'River', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -# -# latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -# -# latex_use_parts = False - -# If true, show page references after internal links. -# -# latex_show_pagerefs = False - -# If true, show URL addresses after external links. -# -# latex_show_urls = False - -# Documents to append as an appendix to all manuals. -# -# latex_appendices = [] - -# If false, no module index is generated. -# -# latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - (master_doc, 'qpython', u'QPython Documentation', - [author], 1) -] - -# If true, show URL addresses after external links. -# -# man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - (master_doc, 'QPython', u'QPython User Guide', - author, 'QPython', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -# -# texinfo_appendices = [] - -# If false, no module index is generated. -# -# texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -# -# texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -# -# texinfo_no_detailmenu = False diff --git a/qpython-docs/source/contributors.rst b/qpython-docs/source/contributors.rst deleted file mode 100644 index 1d578cf..0000000 --- a/qpython-docs/source/contributors.rst +++ /dev/null @@ -1,61 +0,0 @@ -Contributors -=============== - -Thanks contributers for helping with QPython projects. - -We want you to join us, If you want to join us, please email us support@qpython.org - - -Developers ------------ -`River `_ - -`乘着船 `_ - -`kyle kersey `_ - -`Mae `_ - -`ZRH `_ - -*How to contribute* - -Please send an email to us with your self introduction and what kind of development do you want to contribute. - - - - -Communities Organizers ----------------------- -`LR `_ (Chinese QQ Group: 540717901) - -*How to run a QPython Community* - -We appreciate that you build a QPython topic community, you can invite us to join for answering any question about qpython by sending an email to us for telling how to join. - - -Localization ----------------------- -`Fogapod `_ (Russian) - -`Frodo821 `_ (Japanese) - -`Darciss Rehot'acc `_ (Turkish) - -`Christo phe `_ (French) - -*How to contribute localization translate* - -We appreciate that you are willing to help with translate QPython / QPython3. - -`This repo `_ is the localization project, you can post pull request and send en email to us, then we will merge it and publish in next update. - - -If you don't want to use git, you can just translate the words which do not contains translatable="false" in the following files. - -- `strings.xml `_ -- `toasts.xml `_ - -And there is the description file - -- `en-US-intro.md `_ diff --git a/qpython-docs/source/document.rst b/qpython-docs/source/document.rst deleted file mode 100644 index 7918285..0000000 --- a/qpython-docs/source/document.rst +++ /dev/null @@ -1,111 +0,0 @@ -.. QPython documentation master file, created by - sphinx-quickstart on Fri Apr 7 15:07:35 2017. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -.. image:: _static/bestpython.png - - -Welcome to read the QPython guide -============================================= - -QPython is a script engine that runs Python on android devices. It lets your android device run Python scripts and projects. It contains the Python interpreter, console, editor, and the SL4A Library for Android. It’s Python on Android! - - -QPython has several millions users in the world already, it's a great project for programming users, welcome to join us for contributing to this project NOW. - - -What's NEW ------------------------- -QPython project include the `QPython `_ and `QPython3 `_ applications. - -QPython application is using the **Python 2.7.2** , and QPython application is using the **Python 3.2.2** . - - -QPython's newest version is 1.3.2 (Released on 2017/5/12) , QPython3's newest version is 1.0.2 (Released on 2017/3/29), New versions include many amazing features, please upgrade to the newest version as soon from google play, amazon appstore etc. - - -Thanks these guys who are contributing ----------------------------------------- -They are pushing on the QPython project moving forward. - -.. image:: https://avatars0.githubusercontent.com/u/3059527?v=3&s=60 - :target: https://github.com/riverfor - :alt: River is the project's organizer and the current online QPython's author. - -.. image:: https://avatars0.githubusercontent.com/u/10812534?v=3&s=60 - :target: https://github.com/pollyfat - :alt: Mae is a beautiful and talented girl developer who is good at python & android programming. - -.. image:: https://avatars0.githubusercontent.com/u/22494?v=3&s=60 - :target: https://github.com/ZoomQuiet - :alt: Zoom.Quiet is a knowledgeable guy who is famous in many opensource communities. - -.. image:: https://avatars3.githubusercontent.com/u/10219741?v=3&s=60 - :target: https://github.com/mathiasluo - :alt: MathiasLuo is a android geek developer - -.. image:: https://avatars2.githubusercontent.com/u/25975283?v=3&s=60 - :target: https://github.com/liyuanrui - :alt: liyuanrui is a Chinese geek - -.. image:: https://avatars3.githubusercontent.com/u/5159173?v=3&s=60 - :target: https://github.com/kylelk - :alt: Kyle kersey is a US geek - - -Do you want to join the great QPython team ? You could `Ask qustions on twitter `_ or `email us `_. -And you could `fork us on github `_ and send pull request. - - -QPython Communities ----------------------- -**There are many active QPython communities where you could meet the QPython users like you** - -* `Join Facebook community `_ -* `Join Google group `_ -* `Join Gitter chat `_ -* `Join G+ community(For QPython testers) `_ -* `QPython on Stackoverflow `_ - -**And you could talk to us through social network** - -* `Like us on facebook `_ -* `Follow us on twitter `_ - -* `Report issue `_ -* `Email us `_ - - -**It's the official QPython Users & Contributors' Guide, please follow these steps for using and contributing.** - -Support -------------- -We are happy to hear feedback from you, but sometimes some bugs or features demand may not be implemented soon for we lack resources. - -So if you have any issue need the core developer team to solve with higher priority, you could try the `bountysource service `_. - - - -Now, let's GO ---------------- -.. toctree:: - :maxdepth: 2 - - en/guide - -Others ---------------- -.. toctree:: - :maxdepth: 2 - - en/faq - - -For Chinese users -------------------- -.. toctree:: - :maxdepth: 2 - - zhindex - diff --git a/qpython-docs/source/en/faq.rst b/qpython-docs/source/en/faq.rst deleted file mode 100644 index 2bee981..0000000 --- a/qpython-docs/source/en/faq.rst +++ /dev/null @@ -1,26 +0,0 @@ -FAQ -==== - - -**How to run qpython script from other terminals ?** - -- You could "share to" qpython from 3rd apps. - -- You need to root the android device first, then soure the env vars (Just like the qpython wiki link you mentioned) and execute the /data/data/org.qpython.qpy/bin/python or /data/data/org.qpython.qpy/bin/python-android5 (for android 5 above) - - -`Share to case sample `_ - - - -**Support pygame ?** - -Even you could import pygame in QPython, but QPython doesn't support pygame now. - -We will consider to support it later, please follow us on facebook to get it's progress. - - -`Pygame case sample `_ - - - diff --git a/qpython-docs/source/en/guide.rst b/qpython-docs/source/en/guide.rst deleted file mode 100644 index f5cef59..0000000 --- a/qpython-docs/source/en/guide.rst +++ /dev/null @@ -1,47 +0,0 @@ -Getting started -========================== -How to start quickly ? Just follow the following steps: - -.. toctree:: - :maxdepth: 2 - - guide_howtostart - guide_helloworld - - -Programming Guide -======================== - -If you you want to know more about how to program through qpython, just follow these steps: - - -.. toctree:: - :maxdepth: 2 - - guide_program - guide_ide - guide_libraries - guide_extend - - -**QPython project is not only a powerful Python engine for android, but is a active technology community also.** - -Developer Guide -======================= -QPython developers' goal is pushing out a great Python for android. - -.. toctree:: - :maxdepth: 2 - - guide_developers - - -Contributor Guide -======================== - -Welcome to join QPython contributors team, you are not just a user, but a creator of QPython. - -.. toctree:: - :maxdepth: 2 - - guide_contributors diff --git a/qpython-docs/source/en/guide_androidhelpers.rst b/qpython-docs/source/en/guide_androidhelpers.rst deleted file mode 100644 index e64294a..0000000 --- a/qpython-docs/source/en/guide_androidhelpers.rst +++ /dev/null @@ -1,2038 +0,0 @@ -The Scripting Layer for Android (abridged as SL4A, and previously named Android Scripting Environment or ASE) is a library that allows the creation and running of scripts written in various scripting languages directly on Android devices. QPython start to extend the SL4A project and integrate it. - - -.. image:: ../_static/sl4a.jpg - -There are many SL4A APIs, if you found any issue, please `report an issue `_. - -AndroidFacade -=============== - -Clipboard APIs ----------------- -.. py:function:: setClipboard(text) - - Put text in the clipboard - - :param str text: text - -.. py:function:: getClipboard(text) - - Read text from the clipboard - - :return: The text in the clipboard - - -:: - - from androidhelper import Android - droid = Android() - - #setClipboard - droid.setClipboard("Hello World") - - #getClipboard - clipboard = droid.getClipboard().result - - -Intent & startActivity APIs ----------------------------------- -.. py:function:: makeIntent(action, uri, type, extras, categories, packagename, classname, flags) - - Starts an activity and returns the result - - :param str action: action - :param str uri(Optional): uri - :param str type(Optional): MIME type/subtype of the URI - :param object extras(Optional): a Map of extras to add to the Intent - :param list categories(Optional): a List of categories to add to the Intent - :param str packagename(Optional): name of package. If used, requires classname to be useful - :param str classname(Optional): name of class. If used, requires packagename to be useful - :param int flags(Optional): Intent flags - - :return: An object representing an Intent - - -:: - - sample code to show makeIntent - - -.. py:function:: getIntent() - - Returns the intent that launched the script - -:: - - sample code to show getIntent - - -.. py:function:: startActivityForResult(action, uri, type, extras, packagename, classname) - - Starts an activity and returns the result - - :param str action: action - :param str uri(Optional): uri - :param str type(Optional): MIME type/subtype of the URI - :param object extras(Optional): a Map of extras to add to the Intent - :param str packagename(Optional): name of package. If used, requires classname to be useful - :param str classname(Optional): name of class. If used, requires packagename to be useful - - :return: A Map representation of the result Intent - - -:: - - sample code to show startActivityForResult - - -.. py:function:: startActivityForResultIntent(intent) - - Starts an activity and returns the result - - :param Intent intent: Intent in the format as returned from makeIntent - - :return: A Map representation of the result Intent - - -:: - - sample code to show startActivityForResultIntent - -.. py:function:: startActivityIntent(intent, wait) - - Starts an activity - - :param Intent intent: Intent in the format as returned from makeIntent - :param bool wait(Optional): block until the user exits the started activity - -:: - - sample code to show startActivityIntent - - -.. py:function:: startActivity(action, uri, type, extras, wait, packagename, classname) - - Starts an activity - - :param str action: action - :param str uri(Optional): uri - :param str type(Optional): MIME type/subtype of the URI - :param object extras(Optional): a Map of extras to add to the Intent - :param bool wait(Optional): block until the user exits the started activity - :param str packagename(Optional): name of package. If used, requires classname to be useful - :param str classname(Optional): name of class. If used, requires packagename to be useful - -:: - - sample code to show startActivityForResultIntent - - -SendBroadcast APIs -------------------- -.. py:function:: sendBroadcast(action, uri, type, extras, packagename, classname) - - Send a broadcast - - :param str action: action - :param str uri(Optional): uri - :param str type(Optional): MIME type/subtype of the URI - :param object extras(Optional): a Map of extras to add to the Intent - :param str packagename(Optional): name of package. If used, requires classname to be useful - :param str classname(Optional): name of class. If used, requires packagename to be useful - - -:: - - sample code to show sendBroadcast - -.. py:function:: sendBroadcastIntent(intent) - - Send a broadcast - - :param Intent intent: Intent in the format as returned from makeIntent - -:: - - sample code to show sendBroadcastIntent - - -Vibrate ----------- -.. py:function:: vibrate(intent) - - Vibrates the phone or a specified duration in milliseconds - - :param int duration: duration in milliseconds - -:: - - sample code to show vibrate - - -NetworkStatus ---------------- -.. py:function:: getNetworkStatus() - - Returns the status of network connection - -:: - - sample code to show getNetworkStatus - -PackageVersion APIs ------------------------------- -.. py:function:: requiredVersion(requiredVersion) - - Checks if version of QPython SL4A is greater than or equal to the specified version - - :param int requiredVersion: requiredVersion - - :return: true or false - - -.. py:function:: getPackageVersionCode(packageName) - - Returns package version code - - :param str packageName: packageName - - :return: Package version code - -.. py:function:: getPackageVersion(packageName) - - Returns package version name - - :param str packageName: packageName - - :return: Package version name - - -:: - - sample code to show getPackageVersionCode & getPackageVersion - - -System APIs --------------------------------- -.. py:function:: getConstants(classname) - - Get list of constants (static final fields) for a class - - :param str classname: classname - - :return: list - -:: - - sample code to show getConstants - -.. py:function:: environment() - - A map of various useful environment details - - :return: environment map object includes id, display, offset, TZ, SDK, download, appcache, availblocks, blocksize, blockcount, sdcard - -:: - - sample code to show environment - -.. py:function:: log(message) - - Writes message to logcat - - :param str message: message - -:: - - sample code to show log - - -SendEmail ----------- -.. py:function:: sendEmail(to, subject, body, attachmentUri) - - Launches an activity that sends an e-mail message to a given recipient - - :param str to: A comma separated list of recipients - :param str subject: subject - :param str body: mail body - :param str attachmentUri(Optional): message - -:: - - sample code to show sendEmail - - -Toast, getInput, getPassword, notify APIs ------------------------------------------------- -.. py:function:: makeToast(message) - - Displays a short-duration Toast notification - - :param str message: message - -:: - - sample code to show makeToast - -.. py:function:: getInput(title, message) - - Queries the user for a text input - - :param str title: title of the input box - :param str message: message to display above the input box - -:: - - sample code to show getInput - -.. py:function:: getPassword(title, message) - - Queries the user for a password - - :param str title: title of the input box - :param str message: message to display above the input box - -:: - - sample code to show getPassword - -.. py:function:: notify(title, message, url) - - Displays a notification that will be canceled when the user clicks on it - - :param str title: title - :param str message: message - :param str url(optional): url - -:: - import androidhelper - droid = androidhelper.Android() - droid.notify('Hello','QPython','http://qpython.org') # you could set the 3rd parameter None also - - - -ApplicationManagerFacade -========================= - -Manager APIs -------------- - -.. py:function:: getLaunchableApplications() - - Returns a list of all launchable application class names - - :return: map object - -:: - - sample code to show getLaunchableApplications - - -.. py:function:: launch(classname) - - Start activity with the given class name - - :param str classname: classname - -:: - - sample code to show launch - -.. py:function:: getRunningPackages() - - Returns a list of packages running activities or services - - :return: List of packages running activities - -:: - - sample code to show getRunningPackages - -.. py:function:: forceStopPackage(packageName) - - Force stops a package - - :param str packageName: packageName - -:: - - sample code to show forceStopPackage - - -CameraFacade -========================= - -.. py:function:: cameraCapturePicture(targetPath) - - Take a picture and save it to the specified path - - :return: A map of Booleans autoFocus and takePicture where True indicates success - -.. py:function:: cameraInteractiveCapturePicture(targetPath) - - Starts the image capture application to take a picture and saves it to the specified path - -CommonIntentsFacade -========================= - -Barcode ----------- -.. py:function:: scanBarcode() - - Starts the barcode scanner - - :return: A Map representation of the result Intent - -View APIs ----------- -.. py:function:: pick(uri) - - Display content to be picked by URI (e.g. contacts) - - :return: A map of result values - -.. py:function:: view(uri, type, extras) - - Start activity with view action by URI (i.e. browser, contacts, etc.) - -.. py:function:: viewMap(query) - - Opens a map search for query (e.g. pizza, 123 My Street) - -.. py:function:: viewContacts() - - Opens the list of contacts - -.. py:function:: viewHtml(path) - - Opens the browser to display a local HTML file - -.. py:function:: search(query) - - Starts a search for the given query - -ContactsFacade -========================= - -.. py:function:: pickContact() - - Displays a list of contacts to pick from - - :return: A map of result values - -.. py:function:: pickPhone() - - Displays a list of phone numbers to pick from - - :return: The selected phone number - -.. py:function:: contactsGetAttributes() - - Returns a List of all possible attributes for contacts - - :return: a List of contacts as Maps - -.. py:function:: contactsGetIds() - - Returns a List of all contact IDs - -.. py:function:: contactsGet(attributes) - - Returns a List of all contacts - -.. py:function:: contactsGetById(id) - - Returns contacts by ID - -.. py:function:: contactsGetCount() - - Returns the number of contacts - -.. py:function:: queryContent(uri, attributes, selection, selectionArgs, order) - - Content Resolver Query - - :return: result of query as Maps - -.. py:function:: queryAttributes(uri) - - Content Resolver Query Attributes - - :return: a list of available columns for a given content uri - -EventFacade -========================= - -.. py:function:: eventClearBuffer() - - Clears all events from the event buffer - -.. py:function:: eventRegisterForBroadcast(category, enqueue) - - Registers a listener for a new broadcast signal - -.. py:function:: eventUnregisterForBroadcast(category) - - Stop listening for a broadcast signal - -.. py:function:: eventGetBrodcastCategories() - - Lists all the broadcast signals we are listening for - -.. py:function:: eventPoll(number_of_events) - - Returns and removes the oldest n events (i.e. location or sensor update, etc.) from the event buffer - - :return: A List of Maps of event properties - -.. py:function:: eventWaitFor(eventName, timeout) - - Blocks until an event with the supplied name occurs. The returned event is not removed from the buffer - - :return: Map of event properties - -.. py:function:: eventWait(timeout) - - Blocks until an event occurs. The returned event is removed from the buffer - - :return: Map of event properties - -.. py:function:: eventPost(name, data, enqueue) - - Post an event to the event queue - -.. py:function:: rpcPostEvent(name, data) - - Post an event to the event queue - -.. py:function:: receiveEvent() - - Returns and removes the oldest event (i.e. location or sensor update, etc.) from the event buffer - - :return: Map of event properties - -.. py:function:: waitForEvent(eventName, timeout) - - Blocks until an event with the supplied name occurs. The returned event is not removed from the buffer - - :return: Map of event properties - -.. py:function:: startEventDispatcher(port) - - Opens up a socket where you can read for events posted - -.. py:function:: stopEventDispatcher() - - Stops the event server, you can't read in the port anymore - -LocationFacade -========================= - -Providers APIs ------------------ - -.. py:function:: locationProviders() - - Returns availables providers on the phone - -.. py:function:: locationProviderEnabled(provider) - - Ask if provider is enabled - -Location APIs ------------------ -.. py:function:: startLocating(minDistance, minUpdateDistance) - - Starts collecting location data - -.. py:function:: readLocation() - - Returns the current location as indicated by all available providers - - :return: A map of location information by provider - -.. py:function:: stopLocating() - - Stops collecting location data - -.. py:function:: getLastKnownLocation() - - Returns the last known location of the device - - :return: A map of location information by provider - -*sample code* -:: - - Droid = androidhelper.Android() - location = Droid.getLastKnownLocation().result - location = location.get('network', location.get('gps')) - - -GEO ------------ -.. py:function:: geocode(latitude, longitude, maxResults) - - Returns a list of addresses for the given latitude and longitude - - :return: A list of addresses - -PhoneFacade -========================= - -PhoneStat APIs ----------------- - -.. py:function:: startTrackingPhoneState() - - Starts tracking phone state - -.. py:function:: readPhoneState() - - Returns the current phone state and incoming number - - :return: A Map of "state" and "incomingNumber" - -.. py:function:: stopTrackingPhoneState() - - Stops tracking phone state - - -Call & Dia APIs ----------------- - -.. py:function:: phoneCall(uri) - - Calls a contact/phone number by URI - -.. py:function:: phoneCallNumber(number) - - Calls a phone number - -.. py:function:: phoneDial(uri) - - Dials a contact/phone number by URI - -.. py:function:: phoneDialNumber(number) - - Dials a phone number - - - -Get information APIs ------------------------- -.. py:function:: getCellLocation() - - Returns the current cell location - -.. py:function:: getNetworkOperator() - - Returns the numeric name (MCC+MNC) of current registered operator - -.. py:function:: getNetworkOperatorName() - - Returns the alphabetic name of current registered operator - -.. py:function:: getNetworkType() - - Returns a the radio technology (network type) currently in use on the device - -.. py:function:: getPhoneType() - - Returns the device phone type - -.. py:function:: getSimCountryIso() - - Returns the ISO country code equivalent for the SIM provider's country code - -.. py:function:: getSimOperator() - - Returns the MCC+MNC (mobile country code + mobile network code) of the provider of the SIM. 5 or 6 decimal digits - -.. py:function:: getSimOperatorName() - - Returns the Service Provider Name (SPN) - -.. py:function:: getSimSerialNumber() - - Returns the serial number of the SIM, if applicable. Return null if it is unavailable - -.. py:function:: getSimState() - - Returns the state of the device SIM card - -.. py:function:: getSubscriberId() - - Returns the unique subscriber ID, for example, the IMSI for a GSM phone. Return null if it is unavailable - -.. py:function:: getVoiceMailAlphaTag() - - Retrieves the alphabetic identifier associated with the voice mail number - -.. py:function:: getVoiceMailNumber() - - Returns the voice mail number. Return null if it is unavailable - -.. py:function:: checkNetworkRoaming() - - Returns true if the device is considered roaming on the current network, for GSM purposes - -.. py:function:: getDeviceId() - - Returns the unique device ID, for example, the IMEI for GSM and the MEID for CDMA phones. Return null if device ID is not available - -.. py:function:: getDeviceSoftwareVersion() - - Returns the software version number for the device, for example, the IMEI/SV for GSM phones. Return null if the software version is not available - -.. py:function:: getLine1Number() - - Returns the phone number string for line 1, for example, the MSISDN for a GSM phone. Return null if it is unavailable - -.. py:function:: getNeighboringCellInfo() - - Returns the neighboring cell information of the device - -MediaRecorderFacade -========================= - - -Audio --------- - -.. py:function:: recorderStartMicrophone(targetPath) - - Records audio from the microphone and saves it to the given location - -Video APIs ------------ - -.. py:function:: recorderStartVideo(targetPath, duration, videoSize) - - Records video from the camera and saves it to the given location. - Duration specifies the maximum duration of the recording session. - If duration is 0 this method will return and the recording will only be stopped - when recorderStop is called or when a scripts exits. - Otherwise it will block for the time period equal to the duration argument. - videoSize: 0=160x120, 1=320x240, 2=352x288, 3=640x480, 4=800x480. - - -.. py:function:: recorderCaptureVideo(targetPath, duration, recordAudio) - - Records video (and optionally audio) from the camera and saves it to the given location. - Duration specifies the maximum duration of the recording session. - If duration is not provided this method will return immediately and the recording will only be stopped - when recorderStop is called or when a scripts exits. - Otherwise it will block for the time period equal to the duration argument. - -.. py:function:: startInteractiveVideoRecording(path) - - Starts the video capture application to record a video and saves it to the specified path - - -Stop --------- -.. py:function:: recorderStop() - - Stops a previously started recording - - -SensorManagerFacade -========================= - -Start & Stop -------------- -.. py:function:: startSensingTimed(sensorNumber, delayTime) - - Starts recording sensor data to be available for polling - -.. py:function:: startSensingThreshold(ensorNumber, threshold, axis) - - Records to the Event Queue sensor data exceeding a chosen threshold - -.. py:function:: startSensing(sampleSize) - - Starts recording sensor data to be available for polling - -.. py:function:: stopSensing() - - Stops collecting sensor data - -Read data APIs ---------------- -.. py:function:: readSensors() - - Returns the most recently recorded sensor data - -.. py:function:: sensorsGetAccuracy() - - Returns the most recently received accuracy value - -.. py:function:: sensorsGetLight() - - Returns the most recently received light value - -.. py:function:: sensorsReadAccelerometer() - - Returns the most recently received accelerometer values - - :return: a List of Floats [(acceleration on the) X axis, Y axis, Z axis] - -.. py:function:: sensorsReadMagnetometer() - - Returns the most recently received magnetic field values - - :return: a List of Floats [(magnetic field value for) X axis, Y axis, Z axis] - -.. py:function:: sensorsReadOrientation() - - Returns the most recently received orientation values - - :return: a List of Doubles [azimuth, pitch, roll] - -*sample code* -:: - - Droid = androidhelper.Android() - Droid.startSensingTimed(1, 250) - sensor = Droid.sensorsReadOrientation().result - Droid.stopSensing() - - -SettingsFacade -========================= - -Screen ----------- - -.. py:function:: setScreenTimeout(value) - - Sets the screen timeout to this number of seconds - - :return: The original screen timeout - -.. py:function:: getScreenTimeout() - - Gets the screen timeout - - :return: the current screen timeout in seconds - -AirplanerMode ---------------------- - -.. py:function:: checkAirplaneMode() - - Checks the airplane mode setting - - :return: True if airplane mode is enabled - -.. py:function:: toggleAirplaneMode(enabled) - - Toggles airplane mode on and off - - :return: True if airplane mode is enabled - -Ringer Silent Mode ---------------------- - -.. py:function:: checkRingerSilentMode() - - Checks the ringer silent mode setting - - :return: True if ringer silent mode is enabled - -.. py:function:: toggleRingerSilentMode(enabled) - - Toggles ringer silent mode on and off - - :return: True if ringer silent mode is enabled - -Vibrate Mode ---------------------- - -.. py:function:: toggleVibrateMode(enabled) - - Toggles vibrate mode on and off. If ringer=true then set Ringer setting, else set Notification setting - - :return: True if vibrate mode is enabled - -.. py:function:: getVibrateMode(ringer) - - Checks Vibration setting. If ringer=true then query Ringer setting, else query Notification setting - - :return: True if vibrate mode is enabled - -Ringer & Media Volume ---------------------- - -.. py:function:: getMaxRingerVolume() - - Returns the maximum ringer volume - -.. py:function:: getRingerVolume() - - Returns the current ringer volume - -.. py:function:: setRingerVolume(volume) - - Sets the ringer volume - -.. py:function:: getMaxMediaVolume() - - Returns the maximum media volume - -.. py:function:: getMediaVolume() - - Returns the current media volume - -.. py:function:: setMediaVolume(volume) - - Sets the media volume - -Screen Brightness ---------------------- - -.. py:function:: getScreenBrightness() - - Returns the screen backlight brightness - - :return: the current screen brightness between 0 and 255 - -.. py:function:: setScreenBrightness(value) - - Sets the the screen backlight brightness - - :return: the original screen brightness - -.. py:function:: checkScreenOn() - - Checks if the screen is on or off (requires API level 7) - - :return: True if the screen is currently on - - -SmsFacade -========================= - -.. py:function:: smsSend(destinationAddress, text) - - Sends an SMS - - :param str destinationAddress: typically a phone number - :param str text: - -.. py:function:: smsGetMessageCount(unreadOnly, folder) - - Returns the number of messages - - :param bool unreadOnly: typically a phone number - :param str folder(optional): default "inbox" - -.. py:function:: smsGetMessageIds(unreadOnly, folder) - - Returns a List of all message IDs - - :param bool unreadOnly: typically a phone number - :param str folder(optional): default "inbox" - -.. py:function:: smsGetMessages(unreadOnly, folder, attributes) - - Returns a List of all messages - - :param bool unreadOnly: typically a phone number - :param str folder: default "inbox" - :param list attributes(optional): attributes - - :return: a List of messages as Maps - -.. py:function:: smsGetMessageById(id, attributes) - - Returns message attributes - - :param int id: message ID - :param list attributes(optional): attributes - - :return: a List of messages as Maps - -.. py:function:: smsGetAttributes() - - Returns a List of all possible message attributes - -.. py:function:: smsDeleteMessage(id) - - Deletes a message - - :param int id: message ID - - :return: True if the message was deleted - -.. py:function:: smsMarkMessageRead(ids, read) - - Marks messages as read - - :param list ids: List of message IDs to mark as read - :param bool read: true or false - - :return: number of messages marked read - -SpeechRecognitionFacade -========================= - -.. py:function:: recognizeSpeech(prompt, language, languageModel) - - Recognizes user's speech and returns the most likely result - - :param str prompt(optional): text prompt to show to the user when asking them to speak - :param str language(optional): language override to inform the recognizer that it should expect speech in a language different than the one set in the java.util.Locale.getDefault() - :param str languageModel(optional): informs the recognizer which speech model to prefer (see android.speech.RecognizeIntent) - - :return: An empty string in case the speech cannot be recongnized - - -ToneGeneratorFacade -========================= - -.. py:function:: generateDtmfTones(phoneNumber, toneDuration) - - Generate DTMF tones for the given phone number - - :param str phoneNumber: phone number - :param int toneDuration(optional): default 100, duration of each tone in milliseconds - - -WakeLockFacade -========================= - -.. py:function:: wakeLockAcquireFull() - - Acquires a full wake lock (CPU on, screen bright, keyboard bright) - -.. py:function:: wakeLockAcquirePartial() - - Acquires a partial wake lock (CPU on) - -.. py:function:: wakeLockAcquireBright() - - Acquires a bright wake lock (CPU on, screen bright) - -.. py:function:: wakeLockAcquireDim() - - Acquires a dim wake lock (CPU on, screen dim) - -.. py:function:: wakeLockRelease() - - Releases the wake lock - -WifiFacade -========================= - -.. py:function:: wifiGetScanResults() - - Returns the list of access points found during the most recent Wifi scan - -.. py:function:: wifiLockAcquireFull() - - Acquires a full Wifi lock - -.. py:function:: wifiLockAcquireScanOnly() - - Acquires a scan only Wifi lock - -.. py:function:: wifiLockRelease() - - Releases a previously acquired Wifi lock - -.. py:function:: wifiStartScan() - - Starts a scan for Wifi access points - - :return: True if the scan was initiated successfully - -.. py:function:: checkWifiState() - - Checks Wifi state - - :return: True if Wifi is enabled - -.. py:function:: toggleWifiState(enabled) - - Toggle Wifi on and off - - :param bool enabled(optional): enabled - - :return: True if Wifi is enabled - -.. py:function:: wifiDisconnect() - - Disconnects from the currently active access point - - :return: True if the operation succeeded - -.. py:function:: wifiGetConnectionInfo() - - Returns information about the currently active access point - -.. py:function:: wifiReassociate() - - Returns information about the currently active access point - - :return: True if the operation succeeded - -.. py:function:: wifiReconnect() - - Reconnects to the currently active access point - - :return: True if the operation succeeded - - -BatteryManagerFacade -========================= - -.. py:function:: readBatteryData() - - Returns the most recently recorded battery data - -.. py:function:: batteryStartMonitoring() - - Starts tracking battery state - -.. py:function:: batteryStopMonitoring() - - Stops tracking battery state - -.. py:function:: batteryGetStatus() - - Returns the most recently received battery status data: - 1 - unknown; - 2 - charging; - 3 - discharging; - 4 - not charging; - 5 - full - -.. py:function:: batteryGetHealth() - - Returns the most recently received battery health data: - 1 - unknown; - 2 - good; - 3 - overheat; - 4 - dead; - 5 - over voltage; - 6 - unspecified failure - -.. py:function:: batteryGetPlugType() - - Returns the most recently received plug type data: - -1 - unknown - 0 - unplugged - 1 - power source is an AC charger - 2 - power source is a USB port - - -.. py:function:: batteryCheckPresent() - - Returns the most recently received battery presence data - -.. py:function:: batteryGetLevel() - - Returns the most recently received battery level (percentage) - -.. py:function:: batteryGetVoltage() - - Returns the most recently received battery voltage - -.. py:function:: batteryGetTemperature() - - Returns the most recently received battery temperature - -.. py:function:: batteryGetTechnology() - - Returns the most recently received battery technology data - - -ActivityResultFacade -========================= - -.. py:function:: setResultBoolean(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - - -.. py:function:: setResultByte(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultShort(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultChar(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - - -.. py:function:: setResultInteger(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultLong(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultFloat(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultDouble(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultString(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultBooleanArray(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultByteArray(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultShortArray(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultCharArray(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultIntegerArray(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultLongArray(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultFloatArray(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultDoubleArray(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultStringArray(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - -.. py:function:: setResultSerializable(resultCode, resultValue) - - Sets the result of a script execution. Whenever the script APK is called via startActivityForResult(), - the resulting intent will contain SCRIPT_RESULT extra with the given value - - :param int resultCode: - :param byte resultValue: - - -MediaPlayerFacade -========================= - -Control ------------------ -.. py:function:: mediaPlay(url, tag, play) - - Open a media file - - :param str url: url of media resource - :param str tag(optional): string identifying resource (default=default) - :param bool play(optional): start playing immediately - - :return: true if play successful - -.. py:function:: mediaPlayPause(tag) - - pause playing media file - - :param str tag: string identifying resource (default=default) - - :return: true if successful - -.. py:function:: mediaPlayStart(tag) - - start playing media file - - :param str tag: string identifying resource (default=default) - - :return: true if successful - -.. py:function:: mediaPlayClose(tag) - - Close media file - - :param str tag: string identifying resource (default=default) - - :return: true if successful - -.. py:function:: mediaIsPlaying(tag) - - Checks if media file is playing - - :param str tag: string identifying resource (default=default) - - :return: true if successful - - -.. py:function:: mediaPlaySetLooping(enabled, tag) - - Set Looping - - :param bool enabled: default true - :param str tag: string identifying resource (default=default) - - :return: True if successful - -.. py:function:: mediaPlaySeek(msec, tag) - - Seek To Position - - :param int msec: default true - :param str tag: string identifying resource (default=default) - - :return: New Position (in ms) - -Get Information ------------------ -.. py:function:: mediaPlayInfo(tag) - - Information on current media - - :param str tag: string identifying resource (default=default) - - :return: Media Information - -.. py:function:: mediaPlayList() - - Lists currently loaded media - - :return: List of Media Tags - - -PreferencesFacade -========================= - -.. py:function:: prefGetValue(key, filename) - - Read a value from shared preferences - - :param str key: key - :param str filename(optional): Desired preferences file. If not defined, uses the default Shared Preferences. - - -.. py:function:: prefPutValue(key, value, filename) - - Write a value to shared preferences - - :param str key: key - :param str value: value - :param str filename(optional): Desired preferences file. If not defined, uses the default Shared Preferences. - -.. py:function:: prefGetAll(filename) - - Get list of Shared Preference Values - - :param str filename(optional): Desired preferences file. If not defined, uses the default Shared Preferences. - - -QPyInterfaceFacade -========================= - -.. py:function:: executeQPy(script) - - Execute a qpython script by absolute path - - :param str script: The absolute path of the qpython script - - :return: bool - - -TextToSpeechFacade -========================= - -.. py:function:: ttsSpeak(message) - - Speaks the provided message via TTS - - :param str message: message - -.. py:function:: ttsIsSpeaking() - - Returns True if speech is currently in progress - -EyesFreeFacade -========================= - - - - -BluetoothFacade -========================= - -.. py:function:: bluetoothActiveConnections() - - Returns active Bluetooth connections - - -.. py:function:: bluetoothWriteBinary(base64, connID) - - Send bytes over the currently open Bluetooth connection - - :param str base64: A base64 encoded String of the bytes to be sent - :param str connID(optional): Connection id - -.. py:function:: bluetoothReadBinary(bufferSize, connID) - - Read up to bufferSize bytes and return a chunked, base64 encoded string - - :param int bufferSize: default 4096 - :param str connID(optional): Connection id - -.. py:function:: bluetoothConnect(uuid, address) - - Connect to a device over Bluetooth. Blocks until the connection is established or fails - - :param str uuid: The UUID passed here must match the UUID used by the server device - :param str address(optional): The user will be presented with a list of discovered devices to choose from if an address is not provided - - :return: True if the connection was established successfully - -.. py:function:: bluetoothAccept(uuid, timeout) - - Listens for and accepts a Bluetooth connection. Blocks until the connection is established or fails - - :param str uuid: The UUID passed here must match the UUID used by the server device - :param int timeout: How long to wait for a new connection, 0 is wait for ever (default=0) - -.. py:function:: bluetoothMakeDiscoverable(duration) - - Requests that the device be discoverable for Bluetooth connections - - :param int duration: period of time, in seconds, during which the device should be discoverable (default=300) - -.. py:function:: bluetoothWrite(ascii, connID) - - Sends ASCII characters over the currently open Bluetooth connection - - :param str ascii: text - :param str connID: Connection id - -.. py:function:: bluetoothReadReady(connID) - - Sends ASCII characters over the currently open Bluetooth connection - - :param str ascii: text - :param str connID: Connection id - -.. py:function:: bluetoothRead(bufferSize, connID) - - Read up to bufferSize ASCII characters - - :param int bufferSize: default=4096 - :param str connID(optional): Connection id - -.. py:function:: bluetoothReadLine(connID) - - Read the next line - - :param str connID(optional): Connection id - -.. py:function:: bluetoothGetRemoteDeviceName(address) - - Queries a remote device for it's name or null if it can't be resolved - - :param str address: Bluetooth Address For Target Device - -.. py:function:: bluetoothGetLocalName() - - Gets the Bluetooth Visible device name - -.. py:function:: bluetoothSetLocalName(name) - - Sets the Bluetooth Visible device name, returns True on success - - :param str name: New local name - -.. py:function:: bluetoothGetScanMode() - - Gets the scan mode for the local dongle. - Return values: - -1 when Bluetooth is disabled. - 0 if non discoverable and non connectable. - 1 connectable non discoverable. - 3 connectable and discoverable. - -.. py:function:: bluetoothGetConnectedDeviceName(connID) - - Returns the name of the connected device - - :param str connID: Connection id - -.. py:function:: checkBluetoothState() - - Checks Bluetooth state - - :return: True if Bluetooth is enabled - -.. py:function:: toggleBluetoothState(enabled, prompt) - - Toggle Bluetooth on and off - - :param bool enabled: - :param str prompt: Prompt the user to confirm changing the Bluetooth state, default=true - - :return: True if Bluetooth is enabled - -.. py:function:: bluetoothStop(connID) - - Stops Bluetooth connection - - :param str connID: Connection id - -.. py:function:: bluetoothGetLocalAddress() - - Returns the hardware address of the local Bluetooth adapter - -.. py:function:: bluetoothDiscoveryStart() - - Start the remote device discovery process - - :return: true on success, false on error - -.. py:function:: bluetoothDiscoveryCancel() - - Cancel the current device discovery process - - :return: true on success, false on error - -.. py:function:: bluetoothIsDiscovering() - - Return true if the local Bluetooth adapter is currently in the device discovery process - - -SignalStrengthFacade -========================= -.. py:function:: startTrackingSignalStrengths() - - Starts tracking signal strengths - -.. py:function:: readSignalStrengths() - - Returns the current signal strengths - - :return: A map of gsm_signal_strength - -.. py:function:: stopTrackingSignalStrengths() - - Stops tracking signal strength - - -WebCamFacade -========================= - -.. py:function:: webcamStart(resolutionLevel, jpegQuality, port) - - Starts an MJPEG stream and returns a Tuple of address and port for the stream - - :param int resolutionLevel: increasing this number provides higher resolution (default=0) - :param int jpegQuality: a number from 0-10 (default=20) - :param int port: If port is specified, the webcam service will bind to port, otherwise it will pick any available port (default=0) - -.. py:function:: webcamAdjustQuality(resolutionLevel, jpegQuality) - - Adjusts the quality of the webcam stream while it is running - - :param int resolutionLevel: increasing this number provides higher resolution (default=0) - :param int jpegQuality: a number from 0-10 (default=20) - -.. py:function:: cameraStartPreview(resolutionLevel, jpegQuality, filepath) - - Start Preview Mode. Throws 'preview' events - - :param int resolutionLevel: increasing this number provides higher resolution (default=0) - :param int jpegQuality: a number from 0-10 (default=20) - :param str filepath: Path to store jpeg files - - :return: True if successful - -.. py:function:: cameraStopPreview() - - Stop the preview mode - - -UiFacade -========================= - -Dialog --------- -.. py:function:: dialogCreateInput(title, message, defaultText, inputType) - - Create a text input dialog - - :param str title: title of the input box - :param str message: message to display above the input box - :param str defaultText(optional): text to insert into the input box - :param str inputType(optional): type of input data, ie number or text - -.. py:function:: dialogCreatePassword(title, message) - - Create a password input dialog - - :param str title: title of the input box - :param str message: message to display above the input box - -.. py:function:: dialogGetInput(title, message, defaultText) - - Create a password input dialog - - :param str title: title of the input box - :param str message: message to display above the input box - :param str defaultText(optional): text to insert into the input box - -.. py:function:: dialogGetPassword(title, message) - - Queries the user for a password - - :param str title: title of the password box - :param str message: message to display above the input box - -.. py:function:: dialogCreateSeekBar(start, maximum, title) - - Create seek bar dialog - - :param int start: default=50 - :param int maximum: default=100 - :param int title: title - -.. py:function:: dialogCreateTimePicker(hour, minute, is24hour) - - Create time picker dialog - - :param int hour: default=0 - :param int miute: default=0 - :param bool is24hour: default=false - -.. py:function:: dialogCreateDatePicker(year, month, day) - - Create date picker dialog - - :param int year: default=1970 - :param int month: default=1 - :param int day: default=1 - - -NFC -------------- -**Data structs** -*QPython NFC json result* -:: - - { - "role": , # could be self/master/slave - "stat": , # could be ok / fail / cancl - "message": - } - -**APIs** - -.. py:function:: dialogCreateNFCBeamMaster(title, message, inputType) - - Create a dialog where you could create a qpython beam master - - :param str title: title of the input box - :param str message: message to display above the input box - :param str inputType(optional): type of input data, ie number or text - -.. py:function:: NFCBeamMessage(content, title, message) - - Create a dialog where you could create a qpython beam master - - :param str content: message you want to sent - :param str title: title of the input box - :param str message: message to display above the input box - :param str inputType(optional): type of input data, ie number or text - -.. py:function:: dialogCreateNFCBeamSlave(title, message) - - Create a qpython beam slave - - :param str title: title of the input box - :param str message: message to display above the input box - -Progress --------------- -.. py:function:: dialogCreateSpinnerProgress(message, maximumProgress) - - Create a spinner progress dialog - - :param str message(optional): message - :param int maximunProgress(optional): dfault=100 - -.. py:function:: dialogSetCurrentProgress(current) - - Set progress dialog current value - - :param int current: current - -.. py:function:: dialogSetMaxProgress(max) - - Set progress dialog maximum value - - :param int max: max - - -.. py:function:: dialogCreateHorizontalProgress(title, message, maximumProgress) - - Create a horizontal progress dialog - - :param str title(optional): title - :param str message(optional): message - :param int maximunProgress(optional): dfault=100 - - -Alert ----------- -.. py:function:: dialogCreateAlert(title, message) - - Create alert dialog - - :param str title(optional): title - :param str message(optional): message - :param int maximunProgress(optional): dfault=100 - - -Dialog Control ---------------- -.. py:function:: dialogSetPositiveButtonText(text) - - Set alert dialog positive button text - - :param str text: text - -.. py:function:: dialogSetNegativeButtonText(text) - - Set alert dialog negative button text - - :param str text: text - -.. py:function:: dialogSetNeutralButtonText(text) - - Set alert dialog button text - - :param str text: text - -.. py:function:: dialogSetItems(items) - - Set alert dialog list items - - :param list items: items - -.. py:function:: dialogSetSingleChoiceItems(items, selected) - - Set alert dialog list items - - :param list items: items - :param int selected: selected item index (default=0) - -.. py:function:: dialogSetMultiChoiceItems(items, selected) - - Set dialog multiple choice items and selection - - :param list items: items - :param int selected: selected item index (default=0) - -.. py:function:: addContextMenuItem(label, event, eventData) - - Adds a new item to context menu - - :param str label: label for this menu item - :param str event: event that will be generated on menu item click - :param object eventData: event object - -.. py:function:: addOptionsMenuItem(label, event, eventData, iconName) - - Adds a new item to context menu - - :param str label: label for this menu item - :param str event: event that will be generated on menu item click - :param object eventData: event object - :param str iconName: Android system menu icon, see http://developer.android.com/reference/android/R.drawable.html - -.. py:function:: dialogGetResponse() - - Returns dialog response - -.. py:function:: dialogGetSelectedItems() - - This method provides list of items user selected - -.. py:function:: dialogDismiss() - - Dismiss dialog - -.. py:function:: dialogShow() - - Show dialog - - -Layout ---------- -.. py:function:: fullShow(layout) - - Show Full Screen - - :param string layout: String containing View layout - -.. py:function:: fullDismiss() - - Dismiss Full Screen - -.. py:function:: fullQuery() - - Get Fullscreen Properties - -.. py:function:: fullQueryDetail(id) - - Get fullscreen properties for a specific widget - - :param str id: id of layout widget - -.. py:function:: fullSetProperty(id) - - Set fullscreen widget property - - :param str id: id of layout widget - :param str property: name of property to set - :param str value: value to set property to - -.. py:function:: fullSetList(id, list) - - Attach a list to a fullscreen widget - - :param str id: id of layout widget - :param list list: List to set - -.. py:function:: fullKeyOverride(keycodes, enable) - - Override default key actions - - :param str keycodes: id of layout widget - :param bool enable: List to set (default=true) - - - -WebView ------------ -.. py:function:: webViewShow() - - Display a WebView with the given URL - - :param str url: url - :param bool wait(optional): block until the user exits the WebView - -USB Host Serial Facade -====================== - -*QPython 1.3.1+ and QPython3 1.0.3+ contains this feature* - -SL4A Facade for USB Serial devices by Android USB Host API. - - -It control the USB-Serial like devices -from Andoroid which has USB Host Controller . - -The sample -`demonstration is also available at youtube video `_ - - -Requirements -------------- -* Android device which has USB Host controller (and enabled in that firmware). -* Android 4.0 (API14) or later. -* USB Serial devices (see [Status](#Status)). -* USB Serial devices were not handled by Android kernel. - - > I heard some android phone handle USB Serial devices - > make /dev/ttyUSB0 in kernel level. - > In this case, Android does not be able to handle the device - > from OS level. - - please check Android Applications be able to grab the target USB Devices, - such as `USB Device Info `_. - -Status ---------------- -* probably work with USB CDC, like FTDI, Arduino or else. - -* 2012/09/10: work with 78K0F0730 device (new RL78) with Tragi BIOS board. - - `M78K0F0730 `_ - -* 2012/09/24: work with some pl2303 devcies. - -Author -------- -This facade developped by `Kuri65536 `_ -you can see the commit log in it. - - -APIs --------- -.. py:function:: usbserialGetDeviceList() - - Returns USB devices reported by USB Host API. - - :return: Returns "Map of id and string information Map - - -.. py:function:: usbserialDisconnect(connID) - - Disconnect all USB-device - - :param str connID: connection ID - -.. py:function:: usbserialActiveConnections() - - Returns active USB-device connections. - - :return: Returns "Active USB-device connections by Map UUID vs device-name." - - -.. py:function:: usbserialWriteBinary(base64, connID) - - Send bytes over the currently open USB Serial connection. - - :param str base64: - :param str connId: - -.. py:function:: usbserialReadBinary(bufferSize, connID) - - Read up to bufferSize bytes and return a chunked, base64 encoded string - - :param int bufferSize: - :param str connId: - -.. py:function:: usbserialConnect(hash, options) - - Connect to a device with USB-Host. request the connection and exit - - :param str hash: - :param str options: - - :return: Returns messages the request status - -.. py:function:: usbserialHostEnable() - - Requests that the host be enable for USB Serial connections. - - :return: True if the USB Device is accesible - -.. py:function:: usbserialWrite(String ascii, String connID) - - Sends ASCII characters over the currently open USB Serial connection - - :param str ascii: - :param str connID: - -.. py:function:: usbserialReadReady(connID) - - :param str connID: - - :return: True if the next read is guaranteed not to block - - -.. py:function:: usbserialRead(connID, bufferSize) - - Read up to bufferSize ASCII characters. - - :param str connID: - :param int bufferSize: - -.. py:function:: usbserialGetDeviceName(connID) - - Queries a remote device for it's name or null if it can't be resolved - - :param str connID: diff --git a/qpython-docs/source/en/guide_contributors.rst b/qpython-docs/source/en/guide_contributors.rst deleted file mode 100644 index 2078554..0000000 --- a/qpython-docs/source/en/guide_contributors.rst +++ /dev/null @@ -1,40 +0,0 @@ -Welcome contribute -=============================== -Thanks for supporting this project, QPython is a greate project, and we hope you join us to help with make it more greater. - -Please send email to us(support at qpython.org) to introduce youself briefly, and which part do you want to contribute. - -Then we will consider to invite you to join the qpython-collaborator group. - -How to help with test -======================== - -.. toctree:: - :maxdepth: 2 - - guide_contributors_test - -How to contribute documentation -================================ - -How to translate -================================ - - -How to launch a local QPython users community -================================================================ - -How to organise a local qpython user sharing event ---------------------------------------------------- - -How to became the developer member -==================================== - -How to develop qpython built-in programs ----------------------------------------- - -How to sponsor QPython project -==================================== - - -More detail coming soon... diff --git a/qpython-docs/source/en/guide_contributors_test.rst b/qpython-docs/source/en/guide_contributors_test.rst deleted file mode 100644 index c4c0093..0000000 --- a/qpython-docs/source/en/guide_contributors_test.rst +++ /dev/null @@ -1,33 +0,0 @@ -QPython is keeping develop! -If you are interested about what we are doing and want to make some contribution, follow this guide to make this project better! - - -Join the tester community --------------------------- -We create a G+ community where you could report bugs or offer suggestions -> `QPython tester G+ community(For QPython testers) `_ - -Join us now! - -.. image:: ../_static/1.png - :scale: 50 % - - -Become a tester ----------------- -After join the tester community, you could become a tester! -Click this and become a tester -> `I'm ready for test `_ - -.. image:: ../_static/2.png - -Report or suggest -------------------- -If you find out any bugs or have any cool idea about QPython, please let us know about it. -You could write down your suggestion or bug report on the community. - -.. image:: ../_static/3.png - - - -Feedback ---------- -Send your feedback to QPython using the contact information: support@qpython.org diff --git a/qpython-docs/source/en/guide_developers.rst b/qpython-docs/source/en/guide_developers.rst deleted file mode 100644 index add6f43..0000000 --- a/qpython-docs/source/en/guide_developers.rst +++ /dev/null @@ -1,75 +0,0 @@ -Android -============================== -Android part offers the common Python user interaction functions, like console, editor, file browsing, QRCode reader etc. - - -Console ---------- - - -Editor ------------ - - -File browsing ---------------- - - -QRCode reader ------------------------- - - -QSL4A -============================== -QSL4A is the folk of SL4A for QPython, which allows users being able to program with Python script for android. - - -QPython Core -============================== -Besides Python core, QPython core offer three types programming mode also. - -Python 2.x ------------ - -Python 3.x ------------ - -Console program ---------------- - -Kivy program ------------- - -WebApp program --------------- - - - -Pip and libraries -============================== -Pip and libraries offer great expansion ability for QPython. - -Pip ---------- - -Libraries ----------- - - -Quick tools -============================== -Quick tools offers better guide for using QPython well for different users. - -QPython API ------------- - -FTP --------- - - -QPY.IO (Enterprise service) -============================== -It's a enterprise service which aim at offering quick android development delivery with QPython. - -It's QPython's maintainers' main paid service, but not a opensource project. - diff --git a/qpython-docs/source/en/guide_extend.rst b/qpython-docs/source/en/guide_extend.rst deleted file mode 100644 index bda077e..0000000 --- a/qpython-docs/source/en/guide_extend.rst +++ /dev/null @@ -1,131 +0,0 @@ -QPython Open API -===================================================== -QPython has an open activity which allow you run qpython from outside. - -The MPyAPI's definition seems like the following: - -:: - - - - - - - - - - - - - - - - - - - - - - - - - - - -**So, with it's help, you could:** - -Share some content to QPython's scripts ---------------------------------------------- -You could choose some content in some app, and share to qpython's script, then you could handle the content with the **sys.argv[2]** - -`Watch the demo video on YouTube `_ - - -Run QPython's script from your own application ------------------------------------------------------- - -You can call QPython to run some script or python code in your application by call this activity, like the following sample: - -:: - - // code sample shows how to call qpython API - String extPlgPlusName = "org.qpython.qpy"; // QPython package name - Intent intent = new Intent(); - intent.setClassName(extPlgPlusName, "org.qpython.qpylib.MPyApi"); - intent.setAction(extPlgPlusName + ".action.MPyApi"); - - Bundle mBundle = new Bundle(); - mBundle.putString("app", "myappid"); - mBundle.putString("act", "onPyApi"); - mBundle.putString("flag", "onQPyExec"); // any String flag you may use in your context - mBundle.putString("param", ""); // param String param you may use in your context - - /* - * The Python code we will run - */ - String code = "import androidhelper\n" + - "droid = androidhelper.Android()\n" + - "line = droid.dialogGetInput()\n" + - "s = 'Hello %s' % line.result\n" + - "droid.makeToast(s)\n" - - mBundle.putString("pycode", code); - intent.putExtras(mBundle); - startActivityForResult(intent, SCRIPT_EXEC_PY); - ... - - - - // And you can handle the qpython callabck result in onActivityResult - @Override - protected void onActivityResult(int requestCode, int resultCode, Intent data) { - if (requestCode == SCRIPT_EXEC_PY) { - if (data!=null) { - Bundle bundle = data.getExtras(); - String flag = bundle.getString("flag"); - String param = bundle.getString("param"); - String result = bundle.getString("result"); // Result your Pycode generate - Toast.makeText(this, "onQPyExec: return ("+result+")", Toast.LENGTH_SHORT).show(); - } else { - Toast.makeText(this, "onQPyExec: data is null", Toast.LENGTH_SHORT).show(); - - } - } - } - - -`Checkout the full project from github `_ - -And there is `a production application - QPython Plugin for Tasker `_ - -QPython Online Service -===================================================== - -Now the QPython online service only open for QPython, not QPython3. - - -QPypi ---------------------------------------------------------- -Can I install some packages which required pre-compiled ? -Sure, you could install some pre-compiled packages from QPypi, you could find it through "Libraries" on dashboard. - - -.. image:: ../_static/guide_extend_pic2.png - -If you couldn't found the package here, you could send email to river@qpython.org . - -QPY.IO ---------------------------------------------------- -Can I build an independent APK from QPython script? - -Sure you can. now the service is **in BETA**, it's a challenging thing. We will publish it as a online service, for we want to let the development process is simple, you don't need to own the development environment set up when you want to build a application. - - -.. image:: ../_static/guide_extend_pic1.png - -If you want to try it out or have some business proposal, please contact with us by sending email to river@qpython.org . diff --git a/qpython-docs/source/en/guide_howtostart.rst b/qpython-docs/source/en/guide_howtostart.rst deleted file mode 100644 index 8575d63..0000000 --- a/qpython-docs/source/en/guide_howtostart.rst +++ /dev/null @@ -1,133 +0,0 @@ - - -QPython: How To Start -======================== -Now, I will introduce the QPython's features through it's interfaces. - -1. Dashboard ------------------- - -.. image:: ../_static/guide_howtostart_pic1.png - :alt: QPython start - - -After you installed QPython, start it in the usual way by tapping its icon in the menu. Screenshot on the top of this post shows what you should see when QPython just started. - -**Start button** - -By tapping the big button with Python logo in the center of the screen you can - -**Launch your local script or project** - -*Get script from QR code* (funny brand new way to share and distribute your code, you can create QRCode through `QPython's QRCode generator `_ - -Now you can install many 3rd libaries ( pure python libraries mainly ) through pip_console.py script. - -If you want QPython to run some script of project when you click the start button, you can make it by setting default program in setting activity. - - -**Developer kit dashboard** - -If you swipe to the left instead of tapping, you will see another (second) main screen of QPython *(Pic. 2)*. As for me, it is much more useful and comfortable for developer. - -.. image:: ../_static/guide_howtostart_pic2.png - :alt: QPython develop dashboard - - -Tools available here: - -* **Console** — yes, it's regular Python console, feel free to comunicate with interpreter directly -* **Editor** — QPython has a nice text editor integrated with the rest, you can write code and run it without leaving the application -* **My QPython** — here you can find your scripts and projects -* **System** — maintain libraries and components: install and uninstall them -* **Package Index** opens the page `QPyPI `_ in browser allowing to install packages listed there -* **Community** leads to `QPython.org `_ page. Feel free to join or ask&answer questions in the QPython community. - -By long clicking on the console or editor, you have chance to create the shortcut on desktop which allow you enter console or editor directly. - -Next, let's see the console and the editor. - -2. Console and editor -------------------------- - -.. image:: ../_static/guide_howtostart_pic3.png - :alt: QPython console - - -As I said before, there is an ordinary Python console. Many people usually use it to explore objects' properties, consult about syntax and test their ideas. You can type your commands directly and Python interpreter will execute them. You can open additional consoles by tapping the plus button (1) and usedrop-down list on the upper left corner to switch between consoles (2). To close the console just tap the close button (3). - -.. image:: ../_static/guide_howtostart_pic4.png - :alt: QPython notification - - -Please note, there will be notification in the notification bar unless you explicitly close the console and you always can reach the open console by tapping the notification. - - - -.. image:: ../_static/guide_howtostart_pic5.png - :alt: QPython editor - - -The editor allows you obviously (hello Cap!) enter and modify text. Here you can develop your scripts, save them and execute. The editor supports Python syntax highlighting and shows line numbers (there is no ability to go to the line by number though). *(above picture)* - -When typing, you can easily control indentation level (which is critical for Python code) using two buttons on the toolbar (1). Next buttons on the toolbar are **Save** and **Save As** (2), then goes **Run** (3), **Undo**, **Search**, **Recent Files** and **Settings** buttons. Also there are two buttons on the top: **Open** and **New** (5). - -When saving, don't forget to add `.py` estension to the file name since the editor don't do it for you. - -3. Programs --------------------- -You can find the scripts or projects in My QPython. My QPython contains the scripts and Projects. - -By long clicking on script or project, you have chance to create the shortcut for the script or project. Once you have created the shortcuts on desktop, you can directly run the script or project from desktop. - - -**Scripts** -Scripts : A single script. The scripts are in the /sdcard/com.hipipal.qpyplus/scripts directory. -If you want your script could be found in My QPython, please upload it to this directory. - -When you click the script, you can choose the following actions: - -- Run : Run the script -- Open : Edit the script with built-in editor -- Rename : Rename the script -- Delete : Delete the script - -**Projects** -Projects : A directory which should contain the main.py as the project's default launch script, and you can put other dependency 3rd libraries or resources in the same directory, if you want your project could be found in My QPython, please upload them into this directory. - -When you click on the project, you can choose the following actions: - -- Run : run the project -- Open : use it to explore project's resources -- Rename : Rename the project -- Delete : Delete the project - -4. Libraries --------------- - -By installing 3rd libraries, you can extend your qpython's programming ability quickly. There are some ways to install libraries. - -**QPypi** - -You can install some pre-built libraries from QPypi, like numpy etc. - -**Pip console** - -You can install most pure python libraries through pip console. - - -Besides the two ways above, you could copy libraries into the /sdcard/qpython/lib/python2.7/site-packages in your device. - - -*Notice:* -Some libraries mixed with c/c++ files could not be install through pip console for the android lacks the compiler environment, you could ask help from qpython developer team. - - -5. Community --------------- -It will redirect to the QPython.org, including somthe source of this documentation, and there are some qpython user communities' link, many questions of qpython usage or programming could be asked in the community. - - - - -`Thanks dmych offer the first draft in his blog `_ diff --git a/qpython-docs/source/en/guide_ide.rst b/qpython-docs/source/en/guide_ide.rst deleted file mode 100644 index 45865c8..0000000 --- a/qpython-docs/source/en/guide_ide.rst +++ /dev/null @@ -1,49 +0,0 @@ -Use the best way for developing -=================================================== - - -Develop from QEditor ----------------------------------------- -QEditor is the QPython's built-in editor, which supports Python / HTML syntax highlight. - - -**QEditor's main features** - -* Edit / View plain text file, like Python, Lua, HTML, Javascript and so on - -* Edit and run Python script & Python syntax highlight - -* Edit and run Shell script - -* Preview HTML with built-in HTML browser - -* Search by keyword, code snippets, code share - -You could run the QPython script directly when you develop from QEditor, so when you are moving it's the most convient way for QPython develop. - - -Develop from browser --------------------------------------- -QPython has a built-in script which is **qedit4web.py**, you could see it when you click the start button and choose "Run local script". -After run it, you could see the result. - -.. image:: ../_static/guide_ide_qedit4web.png - :alt: QPython qedit4web - -Then, you could access the url from your PC/Laptop's browser for developing, just like the below pics. - -.. image:: ../_static/guide_ide_qedit4web_choose.png - :alt: QPython qedit4web choose project or file - -*After choose some project or script, you could start to develop* - -.. image:: ../_static/guide_ide_qedit4web_develop.png - :alt: QPython qedit4web - - -With it's help, you could write from browser and run from your android phone. It is very convenient. - - -Develop from your computer --------------------------- -Besides the above ways, you could develop the script with your way, then upload to your phone and run with QPython also. diff --git a/qpython-docs/source/en/guide_libraries.rst b/qpython-docs/source/en/guide_libraries.rst deleted file mode 100644 index e4bb3ef..0000000 --- a/qpython-docs/source/en/guide_libraries.rst +++ /dev/null @@ -1,292 +0,0 @@ -QPython built-in Libraries -========================== -QPython is using the Python 2.7.2 and it support most Python stardard libraries. And you could see their documentation through Python documentation. - -QPython dynload libraries --------------------------------------------------------------- -Just like Python, QPython contains python built-in .so libraries. - -Usually, you don't need to import them manually, they were used in stardard libraries, and could be imported automatically. - -* _codecs_cn.so -* _codecs_hk.so -* _codecs_iso2022.so -* _codecs_jp.so -* _codecs_kr.so -* _codecs_tw.so -* _csv.so -* _ctypes.so -* _ctypes_test.so -* _hashlib.so -* _heapq.so -* _hotshot.so -* _io.so -* _json.so -* _lsprof.so -* _multibytecodec.so -* _sqlite3.so -* _ssl.so -* _testcapi.so -* audioop.so -* future_builtins.so -* grp.so -* mmap.so -* resource.so -* syslog.so -* termios.so -* unicodedata.so - -QPython stardard libraries ---------------------------- -The following libraries are the stardard QPython libraries which are the same as Python: - -- `BaseHTTPServer.py `_ -- `binhex.py `_ -- `fnmatch.py `_ -- mhlib.py -- quopri.py -- sysconfig.py -- Bastion.py -- bisect.py -- formatter.py -- mimetools.py -- random.py -- tabnanny.py -- CGIHTTPServer.py -- bsddb -- fpformat.py -- mimetypes.py -- re.py -- tarfile.py -- ConfigParser.py -- cProfile.py -- fractions.py -- mimify.py -- repr.py -- telnetlib.py -- Cookie.py -- calendar.py -- ftplib.py -- modulefinder.py -- rexec.py -- tempfile.py -- DocXMLRPCServer.py -- cgi.py -- functools.py -- multifile.py -- rfc822.py -- textwrap.py -- HTMLParser.py -- cgitb.py -- genericpath.py -- mutex.py -- rlcompleter.py -- this.py -- chunk.py -- getopt.py -- netrc.py -- robotparser.py -- threading.py -- MimeWriter.py -- cmd.py -- getpass.py -- new.py -- runpy.py -- timeit.py -- Queue.py -- code.py -- gettext.py -- nntplib.py -- sched.py -- toaiff.py -- SimpleHTTPServer.py -- codecs.py -- glob.py -- ntpath.py -- sets.py -- token.py -- SimpleXMLRPCServer.py -- codeop.py -- gzip.py -- nturl2path.py -- sgmllib.py -- tokenize.py -- SocketServer.py -- collections.py -- hashlib.py -- numbers.py -- sha.py -- trace.py -- StringIO.py -- colorsys.py -- heapq.py -- opcode.py -- shelve.py -- traceback.py -- UserDict.py -- commands.py -- hmac.py -- optparse.py -- shlex.py -- tty.py -- UserList.py -- compileall.py -- hotshot -- os.py -- shutil.py -- types.py -- UserString.py -- compiler -- htmlentitydefs.py -- os2emxpath.py -- site.py -- unittest -- _LWPCookieJar.py -- config -- htmllib.py -- smtpd.py -- urllib.py -- _MozillaCookieJar.py -- contextlib.py -- httplib.py -- pdb.py -- smtplib.py -- urllib2.py -- __future__.py -- cookielib.py -- ihooks.py -- pickle.py -- sndhdr.py -- urlparse.py -- __phello__.foo.py -- copy.py -- imaplib.py -- pickletools.py -- socket.py -- user.py -- _abcoll.py -- copy_reg.py -- imghdr.py -- pipes.py -- sqlite3 -- uu.py -- _pyio.py -- csv.py -- importlib -- pkgutil.py -- sre.py -- uuid.py -- _strptime.py -- ctypes -- imputil.py -- plat-linux4 -- sre_compile.py -- warnings.py -- _threading_local.py -- dbhash.py -- inspect.py -- platform.py -- sre_constants.py -- wave.py -- _weakrefset.py -- decimal.py -- io.py -- plistlib.py -- sre_parse.py -- weakref.py -- abc.py -- difflib.py -- json -- popen2.py -- ssl.py -- webbrowser.py -- aifc.py -- dircache.py -- keyword.py -- poplib.py -- stat.py -- whichdb.py -- antigravity.py -- dis.py -- lib-tk -- posixfile.py -- statvfs.py -- wsgiref -- anydbm.py -- distutils -- linecache.py -- posixpath.py -- string.py -- argparse.py -- doctest.py -- locale.py -- pprint.py -- stringold.py -- xdrlib.py -- ast.py -- dumbdbm.py -- logging -- profile.py -- stringprep.py -- xml -- asynchat.py -- dummy_thread.py -- macpath.py -- pstats.py -- struct.py -- xmllib.py -- asyncore.py -- dummy_threading.py -- macurl2path.py -- pty.py -- subprocess.py -- xmlrpclib.py -- atexit.py -- email -- mailbox.py -- py_compile.py -- sunau.py -- zipfile.py -- audiodev.py -- encodings -- mailcap.py -- pyclbr.py -- sunaudio.py -- base64.py -- filecmp.py -- markupbase.py -- pydoc.py -- symbol.py -- bdb.py -- fileinput.py -- md5.py -- pydoc_data -- symtable.py - - - -Python 3rd Libraries -========================== - -- `BeautifulSoup.py(3) `_ -- pkg_resources.py -- androidhelper -- plyer -- `bottle.py `_ -- qpy.py -- qpythoninit.py -- setuptools -- `pip `_ - - -Androidhelper APIs -======================== -To simplify QPython SL4A development in IDEs with a -"hepler" class derived from the default Android class containing -SL4A facade functions & API documentation - - -.. toctree:: - :maxdepth: 2 - - guide_androidhelpers diff --git a/qpython-docs/source/en/guide_program.rst b/qpython-docs/source/en/guide_program.rst deleted file mode 100644 index 895615c..0000000 --- a/qpython-docs/source/en/guide_program.rst +++ /dev/null @@ -1,191 +0,0 @@ -QPython's main features -==================================== - -**With QPython, you could build android applications with android application and script language now.** - - -Why should I choose QPython ------------------------------------------------- -The smartphone is becomming people's essential information & technical assitant, so an flexiable script engine could help people complete most jobs efficiently without complex development. - -QPython offer **an amazing developing experience**, with it's help, you could implement the program easily without complex installing IDE, compiling, package progress etc. - -QPython's main features -------------------------- -You can do most jobs through QPython just like the way that Python does on PC/Laptop. - - -**Libraries** - -- QPython supports most stardard Python libraries. - -- QPython supports many 3rd Python libraries which implemented with pure Python code. - -- QPython supports some Python libraries mixed with C/C++ code which pre-compiled by QPython develop team. - -- QPython allows you put on the libraries by yourself. - -Besides these, QPython offers some extra features which Python doesn't offer, Like: - -- Android APIs Access(Like SMS, GPS, NFC, BLUETOOTH etc) - -*Why QPython require so many permissions?* - -QPython need these permissions to access Android's API. - - -**Runtime modes** - -QPython supports several runtime modes for android. - -**Console mode** - -It's the default runtime mode in QPython, it's very common in PC/laptop. - - -**Kivy mode** - -QPython supports `Kivy `_ as the GUI programming solution. - - -Kivy is an open source Python library for rapid development of applications that make use of innovative user interfaces, such as multi-touch apps. - -Your device should support opengl2.0 for supporting kivy mode. - -By insert into the following header in your script, you can let your script run with kivy mode. - -:: - - #qpy:kivy - - -*An kivy program in QPython sample* - -:: - - #qpy:kivy - from kivy.app import App - from kivy.uix.button import Button - - class TestApp(App): - def build(self): - return Button(text='Hello World') - - TestApp().run() - - -If your library require the opengl driver, you shoule declare the kivy mode header in your script, like the jnius. - -*NOTE: QPython3 didn't support kivy mode yet, we have plan to support it in the future* - -**WebApp mode** - -We recommend you implement WebApp with QPython for it offer the easy to accomplish UI and Take advantage of Python's fast programming strong point. - -WebApp will start a webview in front, and run a python web service background. -You could use *bottle*(QPython built-in library) to implement the web service, or you could install *django* / *flask* framework also. - - -By insert into the following header in your script, you can let your script run with webapp mode. - -:: - - #qpy:webapp: - #qpy: - #qpy:// - -For example - -:: - - #qpy:webapp:Hello QPython - #qpy://localhost:8080/hello - - -The previous should start a webview which should load the *http://localhost:8080/hello* as the default page, and the webview will keep the titlebar which title is "Hello QPython", if you add the *#qpy:fullscreen* it will hide the titlebar. - - -:: - - #qpy:webapp:Hello Qpython - #qpy://127.0.0.1:8080/ - """ - This is a sample for qpython webapp - """ - - from bottle import Bottle, ServerAdapter - from bottle import run, debug, route, error, static_file, template - - - ######### QPYTHON WEB SERVER ############### - - class MyWSGIRefServer(ServerAdapter): - server = None - - def run(self, handler): - from wsgiref.simple_server import make_server, WSGIRequestHandler - if self.quiet: - class QuietHandler(WSGIRequestHandler): - def log_request(*args, **kw): pass - self.options['handler_class'] = QuietHandler - self.server = make_server(self.host, self.port, handler, **self.options) - self.server.serve_forever() - - def stop(self): - #sys.stderr.close() - import threading - threading.Thread(target=self.server.shutdown).start() - #self.server.shutdown() - self.server.server_close() #<--- alternative but causes bad fd exception - print "# qpyhttpd stop" - - - ######### BUILT-IN ROUTERS ############### - @route('/__exit', method=['GET','HEAD']) - def __exit(): - global server - server.stop() - - @route('/assets/') - def server_static(filepath): - return static_file(filepath, root='/sdcard') - - - ######### WEBAPP ROUTERS ############### - @route('/') - def home(): - return template('

Hello {{name}} !

'+ \ - 'View source',name='QPython') - - - ######### WEBAPP ROUTERS ############### - app = Bottle() - app.route('/', method='GET')(home) - app.route('/__exit', method=['GET','HEAD'])(__exit) - app.route('/assets/', method='GET')(server_static) - - try: - server = MyWSGIRefServer(host="127.0.0.1", port="8080") - app.run(server=server,reloader=False) - except Exception,ex: - print "Exception: %s" % repr(ex) - - -If you want the webapp could be close when you exit the webview, you have to define the *@route('/__exit', method=['GET','HEAD'])* method , for the qpython will request the *http://localhost:8080/__exit* when you exit the webview. So you can release other resource in this function. - -.. image:: ../_static/guide_program_pic1.png - :alt: QPython WebApp Sample - -*Running screenshot* - - -In the other part of the code, you could implement a webserver whish serve on localhost:8080 and make the URL /hello implement as your webapp's homepage. - - -**Q mode** - -If you don't want the QPython display some UI, pelase try to use the QScript mode, it could run a script background, just insert the following header into your script: - -:: - - #qpy:qpyapp diff --git a/qpython-docs/source/en/qpypi.rst b/qpython-docs/source/en/qpypi.rst deleted file mode 100644 index da142e5..0000000 --- a/qpython-docs/source/en/qpypi.rst +++ /dev/null @@ -1,49 +0,0 @@ -QPYPI -====== -You can extend your QPython capabilities by installing packages. -Because of different computer architectures, we cannot guarantee that QPYPI includes all packages in PYPI. -If you want us to support a package that is not currently supported, you can raise an issue in the QPYPI project - - -QPySLA Package --------------- - -qsl4ahelper ->>>>>>>>>>>>>>> -It extends qpysl4a's APIs. Now the below project depends on it. -https://github.com/qpython-android/qpy-calcount - - -AIPY Packages ----------------- - -AIPY is a high-level AI learning app, based on related libraries like Numpy, Scipy, theano, keras, etc.... It was developed with a focus on helping you learn and practise AI programming well and fast. - -Numpy ->>>>>>> -NumPy is the fundamental package needed for scientific computing with Python. This package contains: - -:: - - a powerful N-dimensional array object - sophisticated (broadcasting) functions - basic linear algebra functions - basic Fourier transforms - sophisticated random number capabilities - tools for integrating Fortran code - tools for integrating C/C++ code - - -Scipy ->>>>>>>> -SciPy refers to several related but distinct entities: - -:: - - The SciPy ecosystem, a collection of open source software for scientific computing in Python. - The community of people who use and develop this stack. - Several conferences dedicated to scientific computing in Python - SciPy, EuroSciPy and SciPy.in. - The SciPy library, one component of the SciPy stack, providing many numerical routines. - -Other ------- diff --git a/qpython-docs/source/en/qpython3.rst b/qpython-docs/source/en/qpython3.rst deleted file mode 100644 index 291d604..0000000 --- a/qpython-docs/source/en/qpython3.rst +++ /dev/null @@ -1,53 +0,0 @@ -# About QPython 3L -QPython is the Python engine for android. It contains some amazing features such as Python interpreter, runtime environment, editor and QPYI and integrated SL4A. It makes it easy for you to use Python on Android. And it's FREE. - -QPython already has millions of users worldwide and it is also an open source project. - -For different usage scenarios, QPython has two branches, namely QPython Ox and 3x. - -QPython Ox is mainly aimed at programming learners, and it provides more friendly features for beginners. QPython 3x is mainly for experienced Python users, and it provides some advanced technical features. - -This is the QPython 3L, it is the only Python interpreter which works under android 4.0 in google play. - -# Amazing Features -- Offline Python 3 interpreter: no Internet is required to run Python programs -- It supports running multiple types of projects, including: console program, SL4A program, webapp program -- Convenient QR code reader for transferring codes to your phone -- QPYPI and a custom repository for prebuilt wheel packages for enhanced scientific libraries, such as numpy, scipy, matplotlib, scikit-learn etc -- Easy-to-use editor -- INTEGRATED & EXTENDED SCRIPT LAYER FOR ANDROID LIBRARY (SL4A): IT LETS YOU DRIVE THE ANDROID WORK WITH PYTHON -- Good documentation and customer support - - -# SL4A Features -With SL4A features, you can use Python programming to control Android work: - -- Android Apps API, such as: Application, Activity, Intent & startActivity, SendBroadcast, PackageVersion, System, Toast, Notify, Settings, Preferences, GUI -- Android Resources Manager, such as: Contact, Location, Phone, Sms, ToneGenerator, WakeLock, WifiLock, Clipboard, NetworkStatus, MediaPlayer -- Third App Integrations, such as: Barcode, Browser, SpeechRecongition, SendEmail, TextToSpeech -- Hardwared Manager: Carmer, Sensor, Ringer & Media Volume, Screen Brightness, Battery, Bluetooth, SignalStrength, WebCam, Vibrate, NFC, USB - -[ API Documentation Link ] -https://github.com/qpython-android/qpysl4a/blob/master/README.md - -[ API Samples ] -https://github.com/qpython-android/qpysl4a/issues/1 - -[ IMPORTANT NOTE ] -IT MAY REQUIRE THE BLUETOOTH / LOCATION / READ_SMS / SEND_SMS / CALL_PHONE AND OTHER PERMISSIONS, SO THAT YOU CAN PROGRAM ITH THESE FEATURES. QPYTHON WILL NOT USE THESE PERMISSIONS IN BACKGROUND. - -IF YOU GET EXCEPTION IN RUNTIME WHILE USING SL4A API, PLEASE CHECK WHETHER THE RELEVANT PERMISSIONS IN THE SYSTEM SETTINGS ARE ENABLED. - -# How To Get Professional Customer Support -Please follow the guide to get support https://github.com/qpython-android/qpython/blob/master/README.md - -[ QPython community ] -https://www.facebook.com/groups/qpython - -[ FAQ ] -A: Why can't I use the SMS API of SL4A -Q: Because Google Play and some app stores have strict requirements on the permissions of apps, in QPython 3x, we use x to distinguish branches with different permissions or appstores. For example, L means LIMITED and S means SENSITIVE. -Sometimes you cannot use the corresponding SL4A APIs because the version you installed does not have the corresponding permissions, so you can consider replace what you have installed with the right one. - -You can find other versions here: -https://www.qpython.org/en/qpython_3x_featues.html diff --git a/qpython-docs/source/en/qpython_3x_featues.rst b/qpython-docs/source/en/qpython_3x_featues.rst deleted file mode 100644 index 0fc4578..0000000 --- a/qpython-docs/source/en/qpython_3x_featues.rst +++ /dev/null @@ -1,98 +0,0 @@ -QPython 3x featues -================== - -QPython 3x, Previously it was QPython3. - -A: Why are there so many branches? - -Q: Because Google Play and some appstores have strict requirements for application permissions, -they require different permissions, we use different branch codes, for example, 3 means it was QPython3, -L means LIMITED, S means SENSITIVE permission is required. - -A: I know there was a QPython before, what is the difference between it and QPython 3x? - -Q: It is now called QPython Ox now, which is mainly aimed at programming learners, and -it provides more friendly features for beginners. QPython 3x is mainly for experienced -Python users, and it provides some advanced technical features. - - -A: Where can I get different branches or versions ? - -Q: Take a look at `this link `_. - -WHAT'S NEW ------------ - -QPython 3x v3.0.0 (Published on 2020/2/1) ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - -This is the first version after we restarting the QPython project - -- It added the `qsl4ahelper `_ as a built-in package -- It added a `QPySL4A App project sample `_ into built-in editor, you can create QSLAApp by creating an project -- It rearranged permissions -- It fixed `ssl error `_ bugs - -App's Features ------------------ - -- Offline Python 3 interpreter: no Internet is required to run Python programs -- It supports running multiple types of projects, including: console program, SL4A program, webapp program -- Convenient QR code reader for transferring codes to your phone -- QPYPI and a custom repository for prebuilt wheel packages for enhanced scientific libraries, such as numpy, scipy, matplotlib, scikit-learn etc -- Easy-to-use editor -- INTEGRATED & EXTENDED SCRIPT LAYER FOR ANDROID LIBRARY (SL4A): IT LETS YOU DRIVE THE ANDROID WORK WITH PYTHON -- Good documentation and customer support - - -Android Permissions that QPython requires ------------------------------------------- - -QPython require the BLUETOOTH / LOCATION / BLUETOOTH and OTHER permissions, so that you can program using these FEATURES. AND WE WILL NOT USE THIS PERMISSIONS IN BACKGROUND. - -Both QPython 3S and 3L ->>>>>>>>>>>>>>>>>>>>>> - -- android.permission.INTERNET -- android.permission.WAKE_LOCK -- android.permission.ACCESS_NETWORK_STATE -- android.permission.CHANGE_NETWORK_STATE -- android.permission.ACCESS_WIFI_STATE -- android.permission.CHANGE_WIFI_STATE -- android.permission.RECEIVE_BOOT_COMPLETED -- android.permission.CAMERA -- android.permission.FLASHLIGHT -- android.permission.VIBRATE -- android.permission.RECEIVE_USER_PRESENT -- com.android.vending.BILLING -- com.android.launcher.permission.INSTALL_SHORTCUT -- com.android.launcher.permission.UNINSTALL_SHORTCUT -- android.permission.READ_EXTERNAL_STORAGE -- android.permission.WRITE_EXTERNAL_STORAGE -- android.permission.READ_MEDIA_STORAGE -- android.permission.ACCESS_COARSE_LOCATION -- android.permission.ACCESS_FINE_LOCATION -- android.permission.FOREGROUND_SERVICE -- android.permission.BLUETOOTH -- android.permission.BLUETOOTH_ADMIN -- android.permission.NFC -- android.permission.RECORD_AUDIO -- android.permission.ACCESS_NOTIFICATION_POLICY -- android.permission.KILL_BACKGROUND_PROCESSES -- net.dinglisch.android.tasker.PERMISSION_RUN_TASKS - -QPython 3S ->>>>>>>>>>> -- android.permission.ACCESS_SUPERUSER -- android.permission.READ_SMS -- android.permission.SEND_SMS -- android.permission.RECEIVE_SMS -- android.permission.WRITE_SMS -- android.permission.READ_PHONE_STATE -- android.permission.CALL_PHONE -- android.permission.READ_CALL_LOG -- android.permission.PROCESS_OUTGOING_CALLS -- android.permission.READ_CONTACTS -- android.permission.GET_ACCOUNTS -- android.permission.SYSTEM_ALERT_WINDOW - diff --git a/qpython-docs/source/en/qpython_ox_featues.rst b/qpython-docs/source/en/qpython_ox_featues.rst deleted file mode 100644 index f30c15d..0000000 --- a/qpython-docs/source/en/qpython_ox_featues.rst +++ /dev/null @@ -1,62 +0,0 @@ -QPython Ox featues -====================== - -Because google play and some appstores have strict requirements on the permissions of the app, we use different strategies in different appstores, which is why the branch name will be different. For example, L means Limited, and S means it contains Sensitive permissions. - -Python ---------- -- Python3 + Python2 basis -- QRCode Reader -- Editor -- QPYPI -- Ftp -- Course - -Permissions ----------------- -Both QPython OL and OS ->>>>>>>>>>>>>>>>>>>>>>>>>>> - -- android.permission.INTERNET -- android.permission.WAKE_LOCK -- android.permission.ACCESS_NETWORK_STATE -- android.permission.CHANGE_NETWORK_STATE -- android.permission.ACCESS_WIFI_STATE -- android.permission.CHANGE_WIFI_STATE -- android.permission.RECEIVE_BOOT_COMPLETED -- android.permission.CAMERA -- android.permission.FLASHLIGHT -- android.permission.VIBRATE -- android.permission.RECEIVE_USER_PRESENT -- com.android.vending.BILLING -- com.android.launcher.permission.INSTALL_SHORTCUT -- com.android.launcher.permission.UNINSTALL_SHORTCUT -- android.permission.READ_EXTERNAL_STORAGE -- android.permission.WRITE_EXTERNAL_STORAGE -- android.permission.READ_MEDIA_STORAGE -- android.permission.ACCESS_COARSE_LOCATION -- android.permission.ACCESS_FINE_LOCATION -- android.permission.FOREGROUND_SERVICE -- android.permission.BLUETOOTH -- android.permission.BLUETOOTH_ADMIN -- android.permission.NFC -- android.permission.RECORD_AUDIO -- android.permission.ACCESS_NOTIFICATION_POLICY -- android.permission.KILL_BACKGROUND_PROCESSES -- net.dinglisch.android.tasker.PERMISSION_RUN_TASKS - -QPython OS ->>>>>>>>>>> -- android.permission.ACCESS_SUPERUSER -- android.permission.SEND_SMS -- android.permission.READ_SMS -- android.permission.SEND_SMS -- android.permission.RECEIVE_SMS -- android.permission.WRITE_SMS -- android.permission.READ_PHONE_STATE -- android.permission.CALL_PHONE -- android.permission.READ_CALL_LOG -- android.permission.PROCESS_OUTGOING_CALLS -- android.permission.READ_CONTACTS -- android.permission.GET_ACCOUNTS -- android.permission.SYSTEM_ALERT_WINDOW diff --git a/qpython-docs/source/features/2018-09-28-dropbear-cn.rst b/qpython-docs/source/features/2018-09-28-dropbear-cn.rst deleted file mode 100644 index 11491c4..0000000 --- a/qpython-docs/source/features/2018-09-28-dropbear-cn.rst +++ /dev/null @@ -1,79 +0,0 @@ -如何在QPython 使用 SSH -======================== - -近来悄悄更新了不少好玩的包,但是我最喜欢的是今天介绍的这个特性,刚被集成到QPython中的dropbear SSH工具。 - -Dropbear SSH 是很多嵌入式linux系统首选的ssh工具,结合qpython,能让你方便地进行编程来自动管理服务器或你的手机。 - -如何远程登录 你的服务器? ----------------------------- - -.. image:: https://mmbiz.qpic.cn/mmbiz_jpg/tuObYW62d0iaJIF2ibzmISF2PBd92KzAPnZfLlIbyOglK3NOvD508VccuQafhhic036KuxGeiasAQDqb2YMDmHWo2w/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1 - :alt: 1 Dashboard 长按Terminal, 选择Shell Terminal - -*1 Dashboard 长按Terminal, 选择Shell Terminal* - -.. image:: https://mmbiz.qpic.cn/mmbiz_jpg/tuObYW62d0iaJIF2ibzmISF2PBd92KzAPncIibPKFhA6RtwC5tQyia66nDWcnccv8aSrZJDNKzBiaduvy23rib1oLv5A/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1 - :alt: 2 Shell中输入ssh @ - -*2 Shell中输入ssh @* - -.. image:: https://mmbiz.qpic.cn/mmbiz_jpg/tuObYW62d0iaJIF2ibzmISF2PBd92KzAPnEpC5zNbJJejeGCvnNgEIHDKLX9S72GjVybShlqvtzvPATsh4Fg13Kw/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1 - :alt: 3 已经登录到了远端服务器 - -*3 已经登录到了远端服务器* - - -除了从手机上登录服务器外,你还可以登录到你的手机。 - -如何登录到你的手机? ------------------------ - -这个功能适合高级玩家,因为一些权限的问题,在手机上开sshd服务需要root权限。 -第一次使用,需要从shell terminal中进行下初始化操作 - -``` -su - #切换为root用户, - -mkdir dropbear # 在 /data/data/org.qpython.qpy/files下创建dropbear目录 - -初始化对应的key - -dbkey -t dss -f dropbear/dropbear_dss_host_key - -dbkey -t rsa -f dropbear/dropbear_rsa_host_key - -dbkey -t ecdsa -f dropbear/dropbear_ecdsa_host_key - -``` - -完成上述步骤之后,即可启动sshd服务。 - -.. image:: https://mmbiz.qpic.cn/mmbiz_jpg/tuObYW62d0iaJIF2ibzmISF2PBd92KzAPnLL1eeZvpzyJXLfBLJT1hmbQEKs1QDodeugXPh8vOvJ77HNvHyT6sDg/640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1 - :alt: 启动sshd服务:sshd -p 8088 -P dropbear/db.pid -F # 前台启动,端口 8088 - -*启动sshd服务:sshd -p 8088 -P dropbear/db.pid -F # 前台启动,端口 8088* - -接下来从你的电脑中就可以登录了你的手机了默认密码就是我们的app名字,你懂得。 - -.. image:: https://mmbiz.qpic.cn/mmbiz_png/tuObYW62d0iaJIF2ibzmISF2PBd92KzAPn4FOhNFPVKEpZE8mCibia8Cgf4sUK41cldnFWYpqtaY62LfX6MiabwYquQ/640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1 - :alt: 从你的笔记本登录手机 - -*从你的笔记本登录手机* - -**另外还支持下面高级特性:** - -- ssh 支持证书登录,借助dbconvert,可以把你的openssh证书转换过来,存到对应的目录,用 ssh -i 指定证书即可 -- sshd 支持 authorized_keys, 只需要把该文件保存到你的dropbear目录下,即可 -- scp,远程拷贝文件 - -后续计划移植更多有用的工具 - -其他 ------- - -不想玩了记得kill掉sshd进程,之前需要指定pid文件就是方便你获得 pid - -kill `cat dropbear/db.pid` - -`获得QPython App `_ diff --git a/qpython-docs/source/qpython_theme/.DS_Store b/qpython-docs/source/qpython_theme/.DS_Store deleted file mode 100644 index d8b9a56..0000000 Binary files a/qpython-docs/source/qpython_theme/.DS_Store and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/__init__.py b/qpython-docs/source/qpython_theme/__init__.py deleted file mode 100644 index 1928849..0000000 --- a/qpython-docs/source/qpython_theme/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -#/usr/bin/env python -# -*- coding: utf-8 -*- - -import os.path - -pkg_dir = os.path.abspath(os.path.dirname(__file__)) -theme_path = os.path.split(pkg_dir)[0] diff --git a/qpython-docs/source/qpython_theme/layout.html b/qpython-docs/source/qpython_theme/layout.html deleted file mode 100644 index 045d8d8..0000000 --- a/qpython-docs/source/qpython_theme/layout.html +++ /dev/null @@ -1,176 +0,0 @@ -{% extends "basic/layout.html" %} - -{%- block doctype -%} - - -{%- endblock -%} - -{%- block extrahead %} - - {%- if not embedded and docstitle %} - {%- set titlesuffix = " — "|safe + docstitle|e %} - {%- else %} - {%- set titlesuffix = "" %} - {%- endif %} - - - - - - - -{% endblock %} - -{%- block header %} -
-
- - - - - - - {%- block sidebarsearch %} - - {%- endblock %} -
-
-{% endblock %} - -{% block content %} -
-
-
-
- - -
-
-
-
- {% block breadcrumbs %} - - {% endblock %} - {%- block document %} - {{ super() }} - {%- endblock %} -
-
-
-
-
-
- -{% endblock %} - -{%- block footer %} -
- - -
- -{%- endblock %} - -{% block relbar1 %}{% endblock %} -{% block relbar2 %}{% endblock %} - diff --git a/qpython-docs/source/qpython_theme/static/apk_down.png b/qpython-docs/source/qpython_theme/static/apk_down.png deleted file mode 100755 index 9488f2f..0000000 Binary files a/qpython-docs/source/qpython_theme/static/apk_down.png and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/static/bootstrap.min.css b/qpython-docs/source/qpython_theme/static/bootstrap.min.css deleted file mode 100644 index ed3905e..0000000 --- a/qpython-docs/source/qpython_theme/static/bootstrap.min.css +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} -/*# sourceMappingURL=bootstrap.min.css.map */ \ No newline at end of file diff --git a/qpython-docs/source/qpython_theme/static/bootstrap.min.js b/qpython-docs/source/qpython_theme/static/bootstrap.min.js deleted file mode 100644 index 9bcd2fc..0000000 --- a/qpython-docs/source/qpython_theme/static/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v3.3.7 (http://getbootstrap.com) - * Copyright 2011-2016 Twitter, Inc. - * Licensed under the MIT license - */ -if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); \ No newline at end of file diff --git a/qpython-docs/source/qpython_theme/static/ic_appstore@2x.png b/qpython-docs/source/qpython_theme/static/ic_appstore@2x.png deleted file mode 100755 index d70ade3..0000000 Binary files a/qpython-docs/source/qpython_theme/static/ic_appstore@2x.png and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/static/ic_appstore_2x.png b/qpython-docs/source/qpython_theme/static/ic_appstore_2x.png deleted file mode 100755 index 1582c40..0000000 Binary files a/qpython-docs/source/qpython_theme/static/ic_appstore_2x.png and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/static/ic_community@2x.png b/qpython-docs/source/qpython_theme/static/ic_community@2x.png deleted file mode 100755 index 6984f28..0000000 Binary files a/qpython-docs/source/qpython_theme/static/ic_community@2x.png and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/static/ic_facebook.png b/qpython-docs/source/qpython_theme/static/ic_facebook.png deleted file mode 100755 index 027c863..0000000 Binary files a/qpython-docs/source/qpython_theme/static/ic_facebook.png and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/static/ic_faq@2x.png b/qpython-docs/source/qpython_theme/static/ic_faq@2x.png deleted file mode 100755 index 1f89df6..0000000 Binary files a/qpython-docs/source/qpython_theme/static/ic_faq@2x.png and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/static/ic_googleplay@2x.png b/qpython-docs/source/qpython_theme/static/ic_googleplay@2x.png deleted file mode 100755 index 3b46dd0..0000000 Binary files a/qpython-docs/source/qpython_theme/static/ic_googleplay@2x.png and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/static/ic_googleplay_2x.png b/qpython-docs/source/qpython_theme/static/ic_googleplay_2x.png deleted file mode 100755 index 1e62373..0000000 Binary files a/qpython-docs/source/qpython_theme/static/ic_googleplay_2x.png and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/static/ic_googleplay_3_2x.png b/qpython-docs/source/qpython_theme/static/ic_googleplay_3_2x.png deleted file mode 100755 index c5086ad..0000000 Binary files a/qpython-docs/source/qpython_theme/static/ic_googleplay_3_2x.png and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/static/ic_new@2x.png b/qpython-docs/source/qpython_theme/static/ic_new@2x.png deleted file mode 100755 index 215bb04..0000000 Binary files a/qpython-docs/source/qpython_theme/static/ic_new@2x.png and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/static/ic_search.png b/qpython-docs/source/qpython_theme/static/ic_search.png deleted file mode 100755 index 0b6623a..0000000 Binary files a/qpython-docs/source/qpython_theme/static/ic_search.png and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/static/ic_support@2x.png b/qpython-docs/source/qpython_theme/static/ic_support@2x.png deleted file mode 100755 index c06804c..0000000 Binary files a/qpython-docs/source/qpython_theme/static/ic_support@2x.png and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/static/ic_twitter.png b/qpython-docs/source/qpython_theme/static/ic_twitter.png deleted file mode 100755 index 8dcf2ee..0000000 Binary files a/qpython-docs/source/qpython_theme/static/ic_twitter.png and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/static/img_background.png b/qpython-docs/source/qpython_theme/static/img_background.png deleted file mode 100755 index f200909..0000000 Binary files a/qpython-docs/source/qpython_theme/static/img_background.png and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/static/img_banner-1.jpg b/qpython-docs/source/qpython_theme/static/img_banner-1.jpg deleted file mode 100644 index 35179f4..0000000 Binary files a/qpython-docs/source/qpython_theme/static/img_banner-1.jpg and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/static/img_banner-1.png b/qpython-docs/source/qpython_theme/static/img_banner-1.png deleted file mode 100755 index 1be1cf3..0000000 Binary files a/qpython-docs/source/qpython_theme/static/img_banner-1.png and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/static/img_banner-1@2x.png b/qpython-docs/source/qpython_theme/static/img_banner-1@2x.png deleted file mode 100755 index 0942fe7..0000000 Binary files a/qpython-docs/source/qpython_theme/static/img_banner-1@2x.png and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/static/ios_link.png b/qpython-docs/source/qpython_theme/static/ios_link.png deleted file mode 100755 index 8bd21ca..0000000 Binary files a/qpython-docs/source/qpython_theme/static/ios_link.png and /dev/null differ diff --git a/qpython-docs/source/qpython_theme/static/jquery.min.js b/qpython-docs/source/qpython_theme/static/jquery.min.js deleted file mode 100644 index 644d35e..0000000 --- a/qpython-docs/source/qpython_theme/static/jquery.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), -a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), -null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(" diff --git a/docs/privacy-cn.html b/source/privacy-cn.html similarity index 100% rename from docs/privacy-cn.html rename to source/privacy-cn.html diff --git a/docs/privacy.html b/source/privacy.html similarity index 100% rename from docs/privacy.html rename to source/privacy.html diff --git a/docs/qlua-privacy.html b/source/qlua-privacy.html similarity index 100% rename from docs/qlua-privacy.html rename to source/qlua-privacy.html diff --git a/docs/qlua-rate.html b/source/qlua-rate.html similarity index 100% rename from docs/qlua-rate.html rename to source/qlua-rate.html diff --git a/qpython-docs/market/qq.html b/source/qq.html similarity index 79% rename from qpython-docs/market/qq.html rename to source/qq.html index b16f03f..c802bd4 100644 --- a/qpython-docs/market/qq.html +++ b/source/qq.html @@ -1,3 +1,3 @@ diff --git a/source/xiaomi.html b/source/xiaomi.html new file mode 100644 index 0000000..0bbe220 --- /dev/null +++ b/source/xiaomi.html @@ -0,0 +1,3 @@ + diff --git a/source/zh/index.md b/source/zh/index.md new file mode 100644 index 0000000..dde1ed6 --- /dev/null +++ b/source/zh/index.md @@ -0,0 +1,59 @@ +# QPython 项目 + +**QPython 不仅是一个强大的 Android Python IDE,也是一个活跃的技术社区。** + +![QPython 横幅](static/img_banner2x.jpg) + +## 支持 AI 的 Android Python IDE + +**QPython** 是您进行 Android Python 编程的入口。它集成了 Python 解释器、AI 模型引擎和移动开发工具链,让您能够从移动设备构建 Web 应用程序、执行科学计算和创建智能应用。 + +无论您是在学习编程、构建数据科学项目,还是开发 AI 驱动的应用程序,QPython 都提供了完整的移动编程解决方案,拥有全面的开发者资源和活跃的社区来支持您的旅程。 + +- **[分支版本](qpython-x.md)** – 了解不同的 QPython 版本(IDE、社区版、Plus),选择适合您需求的版本 +- **[更新日志](whats-new.md)** – 随时了解最新功能、改进和发行说明 + +--- + +## 快速开始 + +如何快速入门?请按照以下步骤: + +- [快速入门](getting-started.md) +- [Hello World 教程](tutorial-hello-world.md) + +## 编程指南 + +QPython 不仅提供基础的 Python 接口支持,更重要的是,它还允许您通过 **QSL4A** 接口使用 Python 调用 Android API。 + +- **[Python 标准库](https://docs.python.org/zh-cn/3.12/)** – 通用的 Python 语法和内置库 +- **[QSL4A API](qsl4a/index.md)** – 从 Python 访问 Android 设备功能(相机、传感器、短信等) +- **[QPYPI 指南](qpypi-guide.md)** – 安装额外的 Python 包 +- **[编辑器指南](editor-guide.md)** – 使用内置代码编辑器 +- **[外部 API](external-api.md)** – 与外部应用程序集成 + +--- + +## 下载资源 + +- [Google Drive](https://drive.google.com/drive/folders/1lFqvlmArrV35ikcdW61MdVAx2UUWMcLh?usp=drive_link) +- [微信网盘](https://drive.weixin.qq.com/s?k=AM0A8wffAAc5HYFbqJ) + +## 社区与反馈 + +- [Discord](https://discord.gg/hV2chuD) +- [Facebook 群组](https://www.facebook.com/groups/qpython) +- [中文交流社区](https://www.qpython.com.cn/qpy-forum/) +- [Newsletter (Google Groups)](https://groups.google.com/g/qpython) +- [问题反馈](https://github.com/qpython-android/qpython/issues) +- [功能扩展请求](https://github.com/qpython-android/qpython.org/issues) + +## 关注我们 + +- [Facebook](http://www.facebook.com/qpython) +- [Twitter/X](http://www.twitter.com/qpython) +- [YouTube](https://www.youtube.com/@qpythonplus) + +--- + +© QPython (2012-2026) diff --git a/qpython-docs/.DS_Store b/source/zh/static/.DS_Store similarity index 75% rename from qpython-docs/.DS_Store rename to source/zh/static/.DS_Store index ed0c1d2..b063954 100644 Binary files a/qpython-docs/.DS_Store and b/source/zh/static/.DS_Store differ diff --git a/docs/static/1.png b/source/zh/static/1.png similarity index 100% rename from docs/static/1.png rename to source/zh/static/1.png diff --git a/docs/static/2.png b/source/zh/static/2.png similarity index 100% rename from docs/static/2.png rename to source/zh/static/2.png diff --git a/docs/static/3.png b/source/zh/static/3.png similarity index 100% rename from docs/static/3.png rename to source/zh/static/3.png diff --git a/docs/static/bestpython.png b/source/zh/static/bestpython.png old mode 100644 new mode 100755 similarity index 100% rename from docs/static/bestpython.png rename to source/zh/static/bestpython.png diff --git a/source/zh/static/extra.css b/source/zh/static/extra.css new file mode 100644 index 0000000..e383218 --- /dev/null +++ b/source/zh/static/extra.css @@ -0,0 +1,133 @@ +/* QPython Custom Styles */ + +/* Header styling - black background */ +.md-header { + background-color: #000000 !important; +} + +/* Tab styling - white background for clear navigation separation */ +.md-tabs { + background-color: #ffffff !important; + border-bottom: 1px solid #e0e0e0; +} + +.md-tabs__link { + color: #666 !important; +} + +.md-tabs__link:hover { + color: #49B300 !important; +} + +.md-tabs__link--active { + color: #49B300 !important; + font-weight: 600; +} + +/* Primary color accent - QPython green #49B300 */ +.md-typeset a { + color: #49B300; +} + +.md-typeset a:hover { + color: #3a8f00; +} + +.md-nav__link--active { + color: #49B300; +} + +.md-nav__link:focus, +.md-nav__link:hover { + color: #49B300; +} + +.md-typeset h1 { + color: #4A4A4A; + font-weight: 600; +} + +.md-typeset h2 { + color: #4A4A4A; + font-weight: 600; +} + +.md-typeset h3 { + color: #4A4A4A; + font-weight: 600; +} + +/* Search highlight */ +.md-search-result mark { + background-color: rgba(73, 179, 0, 0.3); + color: inherit; +} + +/* Code block styling */ +.md-typeset code { + background-color: #f5f5f5; + color: #333; +} + +.md-typeset pre { + background-color: #263238; +} + +/* Button styling */ +.md-typeset .md-button { + color: #49B300; + border-color: #49B300; +} + +.md-typeset .md-button:hover { + background-color: #49B300; + border-color: #49B300; + color: white; +} + +.md-typeset .md-button--primary { + background-color: #49B300; + border-color: #49B300; + color: white; +} + +/* Admonition styling */ +.md-typeset .admonition { + border-left-color: #49B300; +} + +.md-typeset .admonition-title { + background-color: rgba(73, 179, 0, 0.1); +} + +/* Table styling */ +.md-typeset table:not([class]) th { + background-color: #49B300; + color: white; +} + +/* Footer styling */ +.md-footer { + background-color: #2F2F2F; +} + +.md-footer-meta { + background-color: #000000; +} + +/* Ensure logo is properly sized */ +.md-header__button.md-logo img { + height: 40px; +} + +/* Dark mode adjustments */ +[data-md-color-scheme="slate"] { + --md-primary-fg-color: #000000; + --md-accent-fg-color: #49B300; +} + +/* Light mode adjustments */ +[data-md-color-scheme="default"] { + --md-primary-fg-color: #000000; + --md-accent-fg-color: #49B300; +} diff --git a/qpython-docs/source/_static/googledrive-.png b/source/zh/static/googledrive-.png similarity index 100% rename from qpython-docs/source/_static/googledrive-.png rename to source/zh/static/googledrive-.png diff --git a/qpython-docs/source/_static/googledrive.jpg b/source/zh/static/googledrive.jpg similarity index 100% rename from qpython-docs/source/_static/googledrive.jpg rename to source/zh/static/googledrive.jpg diff --git a/docs/static/guide_extend_pic1.png b/source/zh/static/guide_extend_pic1.png similarity index 100% rename from docs/static/guide_extend_pic1.png rename to source/zh/static/guide_extend_pic1.png diff --git a/docs/static/guide_extend_pic2.png b/source/zh/static/guide_extend_pic2.png similarity index 100% rename from docs/static/guide_extend_pic2.png rename to source/zh/static/guide_extend_pic2.png diff --git a/docs/static/guide_helloworld_pic1.png b/source/zh/static/guide_helloworld_pic1.png similarity index 100% rename from docs/static/guide_helloworld_pic1.png rename to source/zh/static/guide_helloworld_pic1.png diff --git a/docs/static/guide_howtostart_pic1.png b/source/zh/static/guide_howtostart_pic1.png similarity index 100% rename from docs/static/guide_howtostart_pic1.png rename to source/zh/static/guide_howtostart_pic1.png diff --git a/docs/static/guide_howtostart_pic2.png b/source/zh/static/guide_howtostart_pic2.png similarity index 100% rename from docs/static/guide_howtostart_pic2.png rename to source/zh/static/guide_howtostart_pic2.png diff --git a/docs/static/guide_howtostart_pic3.png b/source/zh/static/guide_howtostart_pic3.png similarity index 100% rename from docs/static/guide_howtostart_pic3.png rename to source/zh/static/guide_howtostart_pic3.png diff --git a/docs/static/guide_howtostart_pic4.png b/source/zh/static/guide_howtostart_pic4.png similarity index 100% rename from docs/static/guide_howtostart_pic4.png rename to source/zh/static/guide_howtostart_pic4.png diff --git a/docs/static/guide_howtostart_pic5.png b/source/zh/static/guide_howtostart_pic5.png similarity index 100% rename from docs/static/guide_howtostart_pic5.png rename to source/zh/static/guide_howtostart_pic5.png diff --git a/docs/static/guide_ide_qedit4web.png b/source/zh/static/guide_ide_qedit4web.png old mode 100644 new mode 100755 similarity index 100% rename from docs/static/guide_ide_qedit4web.png rename to source/zh/static/guide_ide_qedit4web.png diff --git a/docs/static/guide_ide_qedit4web_choose.png b/source/zh/static/guide_ide_qedit4web_choose.png similarity index 100% rename from docs/static/guide_ide_qedit4web_choose.png rename to source/zh/static/guide_ide_qedit4web_choose.png diff --git a/docs/static/guide_ide_qedit4web_develop.png b/source/zh/static/guide_ide_qedit4web_develop.png similarity index 100% rename from docs/static/guide_ide_qedit4web_develop.png rename to source/zh/static/guide_ide_qedit4web_develop.png diff --git a/docs/static/guide_program_pic1.png b/source/zh/static/guide_program_pic1.png similarity index 100% rename from docs/static/guide_program_pic1.png rename to source/zh/static/guide_program_pic1.png diff --git a/qpython-docs/source/qpython_theme/static/img_banner-1@2x.jpg b/source/zh/static/img_banner2x.jpg similarity index 100% rename from qpython-docs/source/qpython_theme/static/img_banner-1@2x.jpg rename to source/zh/static/img_banner2x.jpg diff --git a/qpython-docs/source/qpython_theme/static/img_logo.png b/source/zh/static/img_logo.png old mode 100755 new mode 100644 similarity index 100% rename from qpython-docs/source/qpython_theme/static/img_logo.png rename to source/zh/static/img_logo.png diff --git a/docs/static/sl4a.jpg b/source/zh/static/sl4a.jpg similarity index 100% rename from docs/static/sl4a.jpg rename to source/zh/static/sl4a.jpg diff --git a/qpython-docs/source/_static/taskerplugin-for-qpython.png b/source/zh/static/taskerplugin-for-qpython.png similarity index 100% rename from qpython-docs/source/_static/taskerplugin-for-qpython.png rename to source/zh/static/taskerplugin-for-qpython.png diff --git a/qpython-docs/source/_static/wecomdrive-.png b/source/zh/static/wecomdrive-.png similarity index 100% rename from qpython-docs/source/_static/wecomdrive-.png rename to source/zh/static/wecomdrive-.png diff --git a/qpython-docs/source/_static/wecomdrive.jpg b/source/zh/static/wecomdrive.jpg similarity index 100% rename from qpython-docs/source/_static/wecomdrive.jpg rename to source/zh/static/wecomdrive.jpg