@ -0,0 +1,7 @@ |
||||
* |
||||
|
||||
! setup.py |
||||
! requirements*.txt |
||||
! asl_rulebook2/ |
||||
! docker/ |
||||
! LICENSE.txt |
@ -0,0 +1,38 @@ |
||||
# NOTE: Use the run-container.sh script to build and launch this container. |
||||
|
||||
FROM centos:8 |
||||
|
||||
# update packages |
||||
RUN dnf -y upgrade-minimal |
||||
|
||||
# install Python |
||||
RUN dnf install -y python38 python3-pip && \ |
||||
pip3 install -U pip setuptools |
||||
|
||||
# install the application requirements |
||||
COPY requirements.txt requirements-dev.txt ./ |
||||
RUN pip3 install -r requirements.txt |
||||
ARG CONTROL_TESTS_PORT |
||||
RUN if [ -n "$CONTROL_TESTS_PORT" ]; then \ |
||||
pip3 install -r requirements-dev.txt \ |
||||
; fi |
||||
|
||||
# clean up |
||||
RUN dnf clean all |
||||
|
||||
# install the application |
||||
WORKDIR /app |
||||
COPY asl_rulebook2/ ./asl_rulebook2/ |
||||
COPY setup.py requirements.txt requirements-dev.txt LICENSE.txt ./ |
||||
RUN pip3 install --editable . |
||||
|
||||
# install the config files |
||||
COPY docker/config/ ./asl_rulebook2/webapp/config/ |
||||
|
||||
# create a new user |
||||
RUN useradd --create-home app |
||||
USER app |
||||
|
||||
EXPOSE 5020 |
||||
COPY docker/run.sh ./ |
||||
CMD ./run.sh |
@ -0,0 +1,83 @@ |
||||
""" Initialize the webapp. """ |
||||
|
||||
import os |
||||
import threading |
||||
import signal |
||||
import configparser |
||||
import logging |
||||
import logging.config |
||||
|
||||
from flask import Flask |
||||
import flask.cli |
||||
import yaml |
||||
|
||||
from asl_rulebook2.webapp.config.constants import BASE_DIR |
||||
|
||||
shutdown_event = threading.Event() |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
def _load_config( fname, section ): |
||||
"""Load config settings from a file.""" |
||||
if not os.path.isfile( fname ): |
||||
return |
||||
config_parser = configparser.ConfigParser() |
||||
config_parser.optionxform = str # preserve case for the keys :-/ |
||||
config_parser.read( fname ) |
||||
app.config.update( dict( config_parser.items( section ) ) ) |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
def _on_sigint( signum, stack ): #pylint: disable=unused-argument |
||||
"""Clean up after a SIGINT.""" |
||||
|
||||
# notify everyone that we're shutting down |
||||
shutdown_event.set() |
||||
|
||||
# call any registered cleanup handlers |
||||
from asl_rulebook2.webapp import globvars #pylint: disable=cyclic-import |
||||
for handler in globvars.cleanup_handlers: |
||||
handler() |
||||
|
||||
# exit the application |
||||
raise SystemExit() |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
# disable the Flask startup banner |
||||
flask.cli.show_server_banner = lambda *args: None |
||||
|
||||
# initialize Flask |
||||
app = Flask( __name__ ) |
||||
|
||||
# load the application configuration |
||||
config_dir = os.path.join( BASE_DIR, "config" ) |
||||
_fname = os.path.join( config_dir, "app.cfg" ) |
||||
_load_config( _fname, "System" ) |
||||
|
||||
# load any site configuration |
||||
_fname = os.path.join( config_dir, "site.cfg" ) |
||||
_load_config( _fname, "Site Config" ) |
||||
|
||||
# load any debug configuration |
||||
_fname = os.path.join( config_dir, "debug.cfg" ) |
||||
if os.path.isfile( _fname ) : |
||||
_load_config( _fname, "Debug" ) |
||||
|
||||
# initialize logging |
||||
_fname = os.path.join( config_dir, "logging.yaml" ) |
||||
if os.path.isfile( _fname ): |
||||
with open( _fname, "r", encoding="utf-8" ) as fp: |
||||
try: |
||||
logging.config.dictConfig( yaml.safe_load( fp ) ) |
||||
except Exception as ex: #pylint: disable=broad-except |
||||
logging.error( "Can't load the logging config: %s", ex ) |
||||
else: |
||||
# stop Flask from logging every request :-/ |
||||
logging.getLogger( "werkzeug" ).setLevel( logging.WARNING ) |
||||
|
||||
# load the application |
||||
import asl_rulebook2.webapp.main #pylint: disable=wrong-import-position,cyclic-import |
||||
|
||||
# install our signal handler |
||||
signal.signal( signal.SIGINT, _on_sigint ) |
@ -0,0 +1,3 @@ |
||||
site.cfg |
||||
debug.cfg |
||||
logging.yaml |
@ -0,0 +1,3 @@ |
||||
[System] |
||||
|
||||
FLASK_PORT_NO = 5020 |
@ -0,0 +1,9 @@ |
||||
""" Application constants. """ |
||||
|
||||
import os |
||||
|
||||
APP_NAME = "ASL Rulebook" |
||||
APP_VERSION = "v0.1" # nb: also update setup.py |
||||
APP_DESCRIPTION = "Search engine for the ASL Rulebook." |
||||
|
||||
BASE_DIR = os.path.abspath( os.path.join( os.path.dirname(__file__), ".." ) ) |
@ -0,0 +1,19 @@ |
||||
""" Global variables. """ |
||||
|
||||
from asl_rulebook2.webapp import app |
||||
from asl_rulebook2.webapp.config.constants import APP_NAME, APP_VERSION |
||||
|
||||
cleanup_handlers = [] |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
@app.context_processor |
||||
def inject_template_params(): |
||||
"""Inject template parameters into Jinja2.""" |
||||
web_debug = app.config.get( "WEB_DEBUG" ) |
||||
return { |
||||
"APP_NAME": APP_NAME, |
||||
"APP_VERSION": APP_VERSION, |
||||
"WEB_DEBUG": web_debug, |
||||
"WEB_DEBUG_MIN": "" if web_debug else ".min", |
||||
} |
@ -0,0 +1,96 @@ |
||||
""" Main webapp handlers. """ |
||||
|
||||
import os |
||||
import threading |
||||
import concurrent |
||||
import logging |
||||
|
||||
from flask import render_template, jsonify, abort |
||||
|
||||
from asl_rulebook2.webapp import app, globvars, shutdown_event |
||||
from asl_rulebook2.webapp.utils import parse_int |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
@app.route( "/" ) |
||||
def main(): |
||||
"""Return the main page.""" |
||||
return render_template( "index.html" ) |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
_control_tests_port_no = None |
||||
|
||||
@app.route( "/control-tests" ) |
||||
def get_control_tests(): |
||||
"""Return information about the remote test control service.""" |
||||
|
||||
def get_port(): |
||||
"""Get the configured gRPC service port.""" |
||||
# NOTE: The Docker container configures this setting via an environment variable. |
||||
return app.config.get( "CONTROL_TESTS_PORT", os.environ.get("CONTROL_TESTS_PORT") ) |
||||
|
||||
# check if the test control service should be made available |
||||
port_no = get_port() |
||||
if not port_no: |
||||
abort( 404 ) |
||||
|
||||
# check if we've already started the service |
||||
if not _control_tests_port_no: |
||||
|
||||
# nope - make it so |
||||
print( "*** WARNING: Remote test control enabled! ***" ) |
||||
started_event = threading.Event() |
||||
|
||||
def run_service(): |
||||
# start the gRPC service |
||||
import grpc |
||||
server = grpc.server( concurrent.futures.ThreadPoolExecutor( max_workers=1 ) ) |
||||
from asl_rulebook2.webapp.tests.proto.generated.control_tests_pb2_grpc \ |
||||
import add_ControlTestsServicer_to_server |
||||
from asl_rulebook2.webapp.tests.control_tests_servicer \ |
||||
import ControlTestsServicer #pylint: disable=cyclic-import |
||||
servicer = ControlTestsServicer( app ) |
||||
add_ControlTestsServicer_to_server( servicer, server ) |
||||
port_no = parse_int( get_port(), -1 ) # nb: have to get this again?! |
||||
if port_no <= 0: |
||||
# NOTE: Requesting port 0 tells grpc to use any free port, which is usually OK, unless |
||||
# we're running inside a Docker container, in which case it needs to be pre-defined, |
||||
# so that the port can be mapped to an external port when the container is started. |
||||
port_no = 0 |
||||
port_no = server.add_insecure_port( "[::]:{}".format( port_no ) ) |
||||
logging.getLogger( "control_tests" ).debug( |
||||
"Started the gRPC test control service: port=%s", str(port_no) |
||||
) |
||||
server.start() |
||||
global _control_tests_port_no |
||||
_control_tests_port_no = port_no |
||||
# notify the caller that the service has started |
||||
started_event.set() |
||||
# wait for the application to end |
||||
shutdown_event.wait() |
||||
# stop the service |
||||
server.stop( None ) |
||||
server.wait_for_termination() |
||||
|
||||
# start the service in a background thread |
||||
thread = threading.Thread( target=run_service, daemon=True ) |
||||
thread.start() |
||||
# NOTE: We wait for the service to start (since the caller will probably try to connect |
||||
# to it as soon as we return a response). |
||||
started_event.wait( timeout=10 ) |
||||
|
||||
# make sure the gRPC server gets cleaned up when we shutdown |
||||
def cleanup(): #pylint: disable=missing-docstring |
||||
thread.join() |
||||
globvars.cleanup_handlers.append( cleanup ) |
||||
|
||||
# return the service info to the caller |
||||
return jsonify( { "port": _control_tests_port_no } ) |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
@app.route( "/ping" ) |
||||
def ping(): |
||||
"""Let the caller know we're alive.""" |
||||
return "pong" |
@ -0,0 +1,62 @@ |
||||
#!/usr/bin/env python3 |
||||
""" Run the webapp server. """ |
||||
|
||||
import os |
||||
import glob |
||||
|
||||
import click |
||||
|
||||
from asl_rulebook2.webapp import app |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
@click.command() |
||||
@click.option( "--addr","-a","bind_addr", help="Webapp server address (host:port)." ) |
||||
@click.option( "--debug","flask_debug", is_flag=True, default=False, help="Run Flask in debug mode." ) |
||||
def main( bind_addr, flask_debug ): |
||||
"""Run the webapp server.""" |
||||
|
||||
# initialize |
||||
port = None |
||||
if bind_addr: |
||||
words = bind_addr.split( ":" ) |
||||
host = words[0] |
||||
if len(words) > 1: |
||||
port = words[1] |
||||
else: |
||||
host = app.config.get( "FLASK_HOST", "localhost" ) |
||||
if not port: |
||||
port = app.config.get( "FLASK_PORT_NO" ) |
||||
if not flask_debug: |
||||
flask_debug = app.config.get( "FLASK_DEBUG", False ) |
||||
|
||||
# validate the configuration |
||||
if not host: |
||||
raise RuntimeError( "The server host was not set." ) |
||||
if not port: |
||||
raise RuntimeError( "The server port was not set." ) |
||||
|
||||
# monitor extra files for changes |
||||
extra_files = [] |
||||
fspecs = [ "static/", "templates/", "config/" ] |
||||
for fspec in fspecs: |
||||
fspec = os.path.abspath( os.path.join( os.path.dirname(__file__), fspec ) ) |
||||
if os.path.isdir( fspec ): |
||||
files = [ os.path.join(fspec,f) for f in os.listdir(fspec) ] |
||||
files = [ |
||||
f for f in files |
||||
if os.path.isfile(f) and os.path.splitext(f)[1] not in [".swp"] |
||||
] |
||||
else: |
||||
files = glob.glob( fspec ) |
||||
extra_files.extend( files ) |
||||
|
||||
# run the server |
||||
app.run( host=host, port=port, debug=flask_debug, |
||||
extra_files = extra_files |
||||
) |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
if __name__ == "__main__": |
||||
main() #pylint: disable=no-value-for-parameter |
After Width: | Height: | Size: 284 KiB |
@ -0,0 +1,333 @@ |
||||
Authors ordered by first contribution |
||||
A list of current team members is available at http://jqueryui.com/about |
||||
|
||||
Paul Bakaus <paul.bakaus@gmail.com> |
||||
Richard Worth <rdworth@gmail.com> |
||||
Yehuda Katz <wycats@gmail.com> |
||||
Sean Catchpole <sean@sunsean.com> |
||||
John Resig <jeresig@gmail.com> |
||||
Tane Piper <piper.tane@gmail.com> |
||||
Dmitri Gaskin <dmitrig01@gmail.com> |
||||
Klaus Hartl <klaus.hartl@gmail.com> |
||||
Stefan Petre <stefan.petre@gmail.com> |
||||
Gilles van den Hoven <gilles@webunity.nl> |
||||
Micheil Bryan Smith <micheil@brandedcode.com> |
||||
Jörn Zaefferer <joern.zaefferer@gmail.com> |
||||
Marc Grabanski <m@marcgrabanski.com> |
||||
Keith Wood <kbwood@iinet.com.au> |
||||
Brandon Aaron <brandon.aaron@gmail.com> |
||||
Scott González <scott.gonzalez@gmail.com> |
||||
Eduardo Lundgren <eduardolundgren@gmail.com> |
||||
Aaron Eisenberger <aaronchi@gmail.com> |
||||
Joan Piedra <theneojp@gmail.com> |
||||
Bruno Basto <b.basto@gmail.com> |
||||
Remy Sharp <remy@leftlogic.com> |
||||
Bohdan Ganicky <bohdan.ganicky@gmail.com> |
||||
David Bolter <david.bolter@gmail.com> |
||||
Chi Cheng <cloudream@gmail.com> |
||||
Ca-Phun Ung <pazu2k@gmail.com> |
||||
Ariel Flesler <aflesler@gmail.com> |
||||
Maggie Wachs <maggie@filamentgroup.com> |
||||
Scott Jehl <scottjehl@gmail.com> |
||||
Todd Parker <todd@filamentgroup.com> |
||||
Andrew Powell <andrew@shellscape.org> |
||||
Brant Burnett <btburnett3@gmail.com> |
||||
Douglas Neiner <doug@dougneiner.com> |
||||
Paul Irish <paul.irish@gmail.com> |
||||
Ralph Whitbeck <ralph.whitbeck@gmail.com> |
||||
Thibault Duplessis <thibault.duplessis@gmail.com> |
||||
Dominique Vincent <dominique.vincent@toitl.com> |
||||
Jack Hsu <jack.hsu@gmail.com> |
||||
Adam Sontag <ajpiano@ajpiano.com> |
||||
Carl Fürstenberg <carl@excito.com> |
||||
Kevin Dalman <development@allpro.net> |
||||
Alberto Fernández Capel <afcapel@gmail.com> |
||||
Jacek Jędrzejewski (http://jacek.jedrzejewski.name) |
||||
Ting Kuei <ting@kuei.com> |
||||
Samuel Cormier-Iijima <sam@chide.it> |
||||
Jon Palmer <jonspalmer@gmail.com> |
||||
Ben Hollis <bhollis@amazon.com> |
||||
Justin MacCarthy <Justin@Rubystars.biz> |
||||
Eyal Kobrigo <kobrigo@hotmail.com> |
||||
Tiago Freire <tiago.freire@gmail.com> |
||||
Diego Tres <diegotres@gmail.com> |
||||
Holger Rüprich <holger@rueprich.de> |
||||
Ziling Zhao <zilingzhao@gmail.com> |
||||
Mike Alsup <malsup@gmail.com> |
||||
Robson Braga Araujo <robsonbraga@gmail.com> |
||||
Pierre-Henri Ausseil <ph.ausseil@gmail.com> |
||||
Christopher McCulloh <cmcculloh@gmail.com> |
||||
Andrew Newcomb <ext.github@preceptsoftware.co.uk> |
||||
Lim Chee Aun <cheeaun@gmail.com> |
||||
Jorge Barreiro <yortx.barry@gmail.com> |
||||
Daniel Steigerwald <daniel@steigerwald.cz> |
||||
John Firebaugh <john_firebaugh@bigfix.com> |
||||
John Enters <github@darkdark.net> |
||||
Andrey Kapitcyn <ru.m157y@gmail.com> |
||||
Dmitry Petrov <dpetroff@gmail.com> |
||||
Eric Hynds <eric@hynds.net> |
||||
Chairat Sunthornwiphat <pipo@sixhead.com> |
||||
Josh Varner <josh.varner@gmail.com> |
||||
Stéphane Raimbault <stephane.raimbault@gmail.com> |
||||
Jay Merrifield <fracmak@gmail.com> |
||||
J. Ryan Stinnett <jryans@gmail.com> |
||||
Peter Heiberg <peter@heiberg.se> |
||||
Alex Dovenmuehle <adovenmuehle@gmail.com> |
||||
Jamie Gegerson <git@jamiegegerson.com> |
||||
Raymond Schwartz <skeetergraphics@gmail.com> |
||||
Phillip Barnes <philbar@gmail.com> |
||||
Kyle Wilkinson <kai@wikyd.org> |
||||
Khaled AlHourani <me@khaledalhourani.com> |
||||
Marian Rudzynski <mr@impaled.org> |
||||
Jean-Francois Remy <jeff@melix.org> |
||||
Doug Blood <dougblood@gmail.com> |
||||
Filippo Cavallarin <filippo.cavallarin@codseq.it> |
||||
Heiko Henning <heiko@thehennings.ch> |
||||
Aliaksandr Rahalevich <saksmlz@gmail.com> |
||||
Mario Visic <mario@mariovisic.com> |
||||
Xavi Ramirez <xavi.rmz@gmail.com> |
||||
Max Schnur <max.schnur@gmail.com> |
||||
Saji Nediyanchath <saji89@gmail.com> |
||||
Corey Frang <gnarf37@gmail.com> |
||||
Aaron Peterson <aaronp123@yahoo.com> |
||||
Ivan Peters <ivan@ivanpeters.com> |
||||
Mohamed Cherif Bouchelaghem <cherifbouchelaghem@yahoo.fr> |
||||
Marcos Sousa <falecomigo@marcossousa.com> |
||||
Michael DellaNoce <mdellanoce@mailtrust.com> |
||||
George Marshall <echosx@gmail.com> |
||||
Tobias Brunner <tobias@strongswan.org> |
||||
Martin Solli <msolli@gmail.com> |
||||
David Petersen <public@petersendidit.com> |
||||
Dan Heberden <danheberden@gmail.com> |
||||
William Kevin Manire <williamkmanire@gmail.com> |
||||
Gilmore Davidson <gilmoreorless@gmail.com> |
||||
Michael Wu <michaelmwu@gmail.com> |
||||
Adam Parod <mystic414@gmail.com> |
||||
Guillaume Gautreau <guillaume+github@ghusse.com> |
||||
Marcel Toele <EleotleCram@gmail.com> |
||||
Dan Streetman <ddstreet@ieee.org> |
||||
Matt Hoskins <matt@nipltd.com> |
||||
Giovanni Giacobbi <giovanni@giacobbi.net> |
||||
Kyle Florence <kyle.florence@gmail.com> |
||||
Pavol Hluchý <lopo@losys.sk> |
||||
Hans Hillen <hans.hillen@gmail.com> |
||||
Mark Johnson <virgofx@live.com> |
||||
Trey Hunner <treyhunner@gmail.com> |
||||
Shane Whittet <whittet@gmail.com> |
||||
Edward A Faulkner <ef@alum.mit.edu> |
||||
Adam Baratz <adam@adambaratz.com> |
||||
Kato Kazuyoshi <kato.kazuyoshi@gmail.com> |
||||
Eike Send <eike.send@gmail.com> |
||||
Kris Borchers <kris.borchers@gmail.com> |
||||
Eddie Monge <eddie@eddiemonge.com> |
||||
Israel Tsadok <itsadok@gmail.com> |
||||
Carson McDonald <carson@ioncannon.net> |
||||
Jason Davies <jason@jasondavies.com> |
||||
Garrison Locke <gplocke@gmail.com> |
||||
David Murdoch <david@davidmurdoch.com> |
||||
Benjamin Scott Boyle <benjamins.boyle@gmail.com> |
||||
Jesse Baird <jebaird@gmail.com> |
||||
Jonathan Vingiano <jvingiano@gmail.com> |
||||
Dylan Just <dev@ephox.com> |
||||
Hiroshi Tomita <tomykaira@gmail.com> |
||||
Glenn Goodrich <glenn.goodrich@gmail.com> |
||||
Tarafder Ashek-E-Elahi <mail.ashek@gmail.com> |
||||
Ryan Neufeld <ryan@neufeldmail.com> |
||||
Marc Neuwirth <marc.neuwirth@gmail.com> |
||||
Philip Graham <philip.robert.graham@gmail.com> |
||||
Benjamin Sterling <benjamin.sterling@kenzomedia.com> |
||||
Wesley Walser <waw325@gmail.com> |
||||
Kouhei Sutou <kou@clear-code.com> |
||||
Karl Kirch <karlkrch@gmail.com> |
||||
Chris Kelly <ckdake@ckdake.com> |
||||
Jason Oster <jay@kodewerx.org> |
||||
Felix Nagel <info@felixnagel.com> |
||||
Alexander Polomoshnov <alex.polomoshnov@gmail.com> |
||||
David Leal <dgleal@gmail.com> |
||||
Igor Milla <igor.fsp.milla@gmail.com> |
||||
Dave Methvin <dave.methvin@gmail.com> |
||||
Florian Gutmann <f.gutmann@chronimo.com> |
||||
Marwan Al Jubeh <marwan.aljubeh@gmail.com> |
||||
Milan Broum <midlis@googlemail.com> |
||||
Sebastian Sauer <info@dynpages.de> |
||||
Gaëtan Muller <m.gaetan89@gmail.com> |
||||
Michel Weimerskirch <michel@weimerskirch.net> |
||||
William Griffiths <william@ycymro.com> |
||||
Stojce Slavkovski <stojce@gmail.com> |
||||
David Soms <david.soms@gmail.com> |
||||
David De Sloovere <david.desloovere@outlook.com> |
||||
Michael P. Jung <michael.jung@terreon.de> |
||||
Shannon Pekary <spekary@gmail.com> |
||||
Dan Wellman <danwellman@hotmail.com> |
||||
Matthew Edward Hutton <meh@corefiling.co.uk> |
||||
James Khoury <james@jameskhoury.com> |
||||
Rob Loach <robloach@gmail.com> |
||||
Alberto Monteiro <betimbrasil@gmail.com> |
||||
Alex Rhea <alex.rhea@gmail.com> |
||||
Krzysztof Rosiński <rozwell69@gmail.com> |
||||
Ryan Olton <oltonr@gmail.com> |
||||
Genie <386@mail.com> |
||||
Rick Waldron <waldron.rick@gmail.com> |
||||
Ian Simpson <spoonlikesham@gmail.com> |
||||
Lev Kitsis <spam4lev@gmail.com> |
||||
TJ VanToll <tj.vantoll@gmail.com> |
||||
Justin Domnitz <jdomnitz@gmail.com> |
||||
Douglas Cerna <douglascerna@yahoo.com> |
||||
Bert ter Heide <bertjh@hotmail.com> |
||||
Jasvir Nagra <jasvir@gmail.com> |
||||
Yuriy Khabarov <13real008@gmail.com> |
||||
Harri Kilpiö <harri.kilpio@gmail.com> |
||||
Lado Lomidze <lado.lomidze@gmail.com> |
||||
Amir E. Aharoni <amir.aharoni@mail.huji.ac.il> |
||||
Simon Sattes <simon.sattes@gmail.com> |
||||
Jo Liss <joliss42@gmail.com> |
||||
Guntupalli Karunakar <karunakarg@yahoo.com> |
||||
Shahyar Ghobadpour <shahyar@gmail.com> |
||||
Lukasz Lipinski <uzza17@gmail.com> |
||||
Timo Tijhof <krinklemail@gmail.com> |
||||
Jason Moon <jmoon@socialcast.com> |
||||
Martin Frost <martinf55@hotmail.com> |
||||
Eneko Illarramendi <eneko@illarra.com> |
||||
EungJun Yi <semtlenori@gmail.com> |
||||
Courtland Allen <courtlandallen@gmail.com> |
||||
Viktar Varvanovich <non4eg@gmail.com> |
||||
Danny Trunk <dtrunk90@gmail.com> |
||||
Pavel Stetina <pavel.stetina@nangu.tv> |
||||
Michael Stay <metaweta@gmail.com> |
||||
Steven Roussey <sroussey@gmail.com> |
||||
Michael Hollis <hollis21@gmail.com> |
||||
Lee Rowlands <lee.rowlands@previousnext.com.au> |
||||
Timmy Willison <timmywillisn@gmail.com> |
||||
Karl Swedberg <kswedberg@gmail.com> |
||||
Baoju Yuan <the_guy_1987@hotmail.com> |
||||
Maciej Mroziński <maciej.k.mrozinski@gmail.com> |
||||
Luis Dalmolin <luis.nh@gmail.com> |
||||
Mark Aaron Shirley <maspwr@gmail.com> |
||||
Martin Hoch <martin@fidion.de> |
||||
Jiayi Yang <tr870829@gmail.com> |
||||
Philipp Benjamin Köppchen <xgxtpbk@gws.ms> |
||||
Sindre Sorhus <sindresorhus@gmail.com> |
||||
Bernhard Sirlinger <bernhard.sirlinger@tele2.de> |
||||
Jared A. Scheel <jared@jaredscheel.com> |
||||
Rafael Xavier de Souza <rxaviers@gmail.com> |
||||
John Chen <zhang.z.chen@intel.com> |
||||
Robert Beuligmann <robertbeuligmann@gmail.com> |
||||
Dale Kocian <dale.kocian@gmail.com> |
||||
Mike Sherov <mike.sherov@gmail.com> |
||||
Andrew Couch <andy@couchand.com> |
||||
Marc-Andre Lafortune <github@marc-andre.ca> |
||||
Nate Eagle <nate.eagle@teamaol.com> |
||||
David Souther <davidsouther@gmail.com> |
||||
Mathias Stenbom <mathias@stenbom.com> |
||||
Sergey Kartashov <ebishkek@yandex.ru> |
||||
Avinash R <nashpapa@gmail.com> |
||||
Ethan Romba <ethanromba@gmail.com> |
||||
Cory Gackenheimer <cory.gack@gmail.com> |
||||
Juan Pablo Kaniefsky <jpkaniefsky@gmail.com> |
||||
Roman Salnikov <bardt.dz@gmail.com> |
||||
Anika Henke <anika@selfthinker.org> |
||||
Samuel Bovée <samycookie2000@yahoo.fr> |
||||
Fabrício Matté <ult_combo@hotmail.com> |
||||
Viktor Kojouharov <vkojouharov@gmail.com> |
||||
Pawel Maruszczyk (http://hrabstwo.net) |
||||
Pavel Selitskas <p.selitskas@gmail.com> |
||||
Bjørn Johansen <post@bjornjohansen.no> |
||||
Matthieu Penant <thieum22@hotmail.com> |
||||
Dominic Barnes <dominic@dbarnes.info> |
||||
David Sullivan <david.sullivan@gmail.com> |
||||
Thomas Jaggi <thomas@responsive.ch> |
||||
Vahid Sohrabloo <vahid4134@gmail.com> |
||||
Travis Carden <travis.carden@gmail.com> |
||||
Bruno M. Custódio <bruno@brunomcustodio.com> |
||||
Nathanael Silverman <nathanael.silverman@gmail.com> |
||||
Christian Wenz <christian@wenz.org> |
||||
Steve Urmston <steve@urm.st> |
||||
Zaven Muradyan <megalivoithos@gmail.com> |
||||
Woody Gilk <shadowhand@deviantart.com> |
||||
Zbigniew Motyka <zbigniew.motyka@gmail.com> |
||||
Suhail Alkowaileet <xsoh.k7@gmail.com> |
||||
Toshi MARUYAMA <marutosijp2@yahoo.co.jp> |
||||
David Hansen <hansede@gmail.com> |
||||
Brian Grinstead <briangrinstead@gmail.com> |
||||
Christian Klammer <christian314159@gmail.com> |
||||
Steven Luscher <jquerycla@steveluscher.com> |
||||
Gan Eng Chin <engchin.gan@gmail.com> |
||||
Gabriel Schulhof <gabriel.schulhof@intel.com> |
||||
Alexander Schmitz <arschmitz@gmail.com> |
||||
Vilhjálmur Skúlason <vis@dmm.is> |
||||
Siebrand Mazeland <siebrand@kitano.nl> |
||||
Mohsen Ekhtiari <mohsenekhtiari@yahoo.com> |
||||
Pere Orga <gotrunks@gmail.com> |
||||
Jasper de Groot <mail@ugomobi.com> |
||||
Stephane Deschamps <stephane.deschamps@gmail.com> |
||||
Jyoti Deka <dekajp@gmail.com> |
||||
Andrei Picus <office.nightcrawler@gmail.com> |
||||
Ondrej Novy <novy@ondrej.org> |
||||
Jacob McCutcheon <jacob.mccutcheon@gmail.com> |
||||
Monika Piotrowicz <monika.piotrowicz@gmail.com> |
||||
Imants Horsts <imants.horsts@inbox.lv> |
||||
Eric Dahl <eric.c.dahl@gmail.com> |
||||
Dave Stein <dave@behance.com> |
||||
Dylan Barrell <dylan@barrell.com> |
||||
Daniel DeGroff <djdegroff@gmail.com> |
||||
Michael Wiencek <mwtuea@gmail.com> |
||||
Thomas Meyer <meyertee@gmail.com> |
||||
Ruslan Yakhyaev <ruslan@ruslan.io> |
||||
Brian J. Dowling <bjd-dev@simplicity.net> |
||||
Ben Higgins <ben@extrahop.com> |
||||
Yermo Lamers <yml@yml.com> |
||||
Patrick Stapleton <github@gdi2290.com> |
||||
Trisha Crowley <trisha.crowley@gmail.com> |
||||
Usman Akeju <akeju00+github@gmail.com> |
||||
Rodrigo Menezes <rod333@gmail.com> |
||||
Jacques Perrault <jacques_perrault@us.ibm.com> |
||||
Frederik Elvhage <frederik.elvhage@googlemail.com> |
||||
Will Holley <willholley@gmail.com> |
||||
Uri Gilad <antishok@gmail.com> |
||||
Richard Gibson <richard.gibson@gmail.com> |
||||
Simen Bekkhus <sbekkhus91@gmail.com> |
||||
Chen Eshchar <eshcharc@gmail.com> |
||||
Bruno Pérel <brunoperel@gmail.com> |
||||
Mohammed Alshehri <m@dralshehri.com> |
||||
Lisa Seacat DeLuca <ldeluca@us.ibm.com> |
||||
Anne-Gaelle Colom <coloma@westminster.ac.uk> |
||||
Adam Foster <slimfoster@gmail.com> |
||||
Luke Page <luke.a.page@gmail.com> |
||||
Daniel Owens <daniel@matchstickmixup.com> |
||||
Michael Orchard <morchard@scottlogic.co.uk> |
||||
Marcus Warren <marcus@envoke.com> |
||||
Nils Heuermann <nils@world-of-scripts.de> |
||||
Marco Ziech <marco@ziech.net> |
||||
Patricia Juarez <patrixd@gmail.com> |
||||
Ben Mosher <me@benmosher.com> |
||||
Ablay Keldibek <atomio.ak@gmail.com> |
||||
Thomas Applencourt <thomas.applencourt@irsamc.ups-tlse.fr> |
||||
Jiabao Wu <jiabao.foss@gmail.com> |
||||
Eric Lee Carraway <github@ericcarraway.com> |
||||
Victor Homyakov <vkhomyackov@gmail.com> |
||||
Myeongjin Lee <aranet100@gmail.com> |
||||
Liran Sharir <lsharir@gmail.com> |
||||
Weston Ruter <weston@xwp.co> |
||||
Mani Mishra <manimishra902@gmail.com> |
||||
Hannah Methvin <hannahmethvin@gmail.com> |
||||
Leonardo Balter <leonardo.balter@gmail.com> |
||||
Benjamin Albert <benjamin_a5@yahoo.com> |
||||
Michał Gołębiowski <m.goleb@gmail.com> |
||||
Alyosha Pushak <alyosha.pushak@gmail.com> |
||||
Fahad Ahmad <fahadahmad41@hotmail.com> |
||||
Matt Brundage <github@mattbrundage.com> |
||||
Francesc Baeta <francesc.baeta@gmail.com> |
||||
Piotr Baran <piotros@wp.pl> |
||||
Mukul Hase <mukulhase@gmail.com> |
||||
Konstantin Dinev <kdinev@mail.bw.edu> |
||||
Rand Scullard <rand@randscullard.com> |
||||
Dan Strohl <dan@wjcg.net> |
||||
Maksim Ryzhikov <rv.maksim@gmail.com> |
||||
Amine HADDAD <haddad@allegorie.tv> |
||||
Amanpreet Singh <apsdehal@gmail.com> |
||||
Alexey Balchunas <bleshik@gmail.com> |
||||
Peter Kehl <peter.kehl@gmail.com> |
||||
Peter Dave Hello <hsu@peterdavehello.org> |
||||
Johannes Schäfer <johnschaefer@gmx.de> |
||||
Ville Skyttä <ville.skytta@iki.fi> |
||||
Ryan Oriecuia <ryan.oriecuia@visioncritical.com> |
@ -0,0 +1,43 @@ |
||||
Copyright jQuery Foundation and other contributors, https://jquery.org/ |
||||
|
||||
This software consists of voluntary contributions made by many |
||||
individuals. For exact contribution history, see the revision history |
||||
available at https://github.com/jquery/jquery-ui |
||||
|
||||
The following license applies to all parts of this software except as |
||||
documented below: |
||||
|
||||
==== |
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining |
||||
a copy of this software and associated documentation files (the |
||||
"Software"), to deal in the Software without restriction, including |
||||
without limitation the rights to use, copy, modify, merge, publish, |
||||
distribute, sublicense, and/or sell copies of the Software, and to |
||||
permit persons to whom the Software is furnished to do so, subject to |
||||
the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be |
||||
included in all copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
||||
|
||||
==== |
||||
|
||||
Copyright and related rights for sample code are waived via CC0. Sample |
||||
code is defined as all source code contained within the demos directory. |
||||
|
||||
CC0: http://creativecommons.org/publicdomain/zero/1.0/ |
||||
|
||||
==== |
||||
|
||||
All files located in the node_modules and external directories are |
||||
externally maintained libraries used by this software which have their |
||||
own licenses; we recommend you read them, as their terms may differ from |
||||
the terms above. |
After Width: | Height: | Size: 6.9 KiB |
After Width: | Height: | Size: 6.9 KiB |
After Width: | Height: | Size: 4.5 KiB |
After Width: | Height: | Size: 6.9 KiB |
After Width: | Height: | Size: 4.5 KiB |
After Width: | Height: | Size: 6.3 KiB |
@ -0,0 +1,503 @@ |
||||
<!doctype html> |
||||
<html lang="us"> |
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title>jQuery UI Example Page</title> |
||||
<link href="jquery-ui.css" rel="stylesheet"> |
||||
<style> |
||||
body{ |
||||
font-family: "Trebuchet MS", sans-serif; |
||||
margin: 50px; |
||||
} |
||||
.demoHeaders { |
||||
margin-top: 2em; |
||||
} |
||||
#dialog-link { |
||||
padding: .4em 1em .4em 20px; |
||||
text-decoration: none; |
||||
position: relative; |
||||
} |
||||
#dialog-link span.ui-icon { |
||||
margin: 0 5px 0 0; |
||||
position: absolute; |
||||
left: .2em; |
||||
top: 50%; |
||||
margin-top: -8px; |
||||
} |
||||
#icons { |
||||
margin: 0; |
||||
padding: 0; |
||||
} |
||||
#icons li { |
||||
margin: 2px; |
||||
position: relative; |
||||
padding: 4px 0; |
||||
cursor: pointer; |
||||
float: left; |
||||
list-style: none; |
||||
} |
||||
#icons span.ui-icon { |
||||
float: left; |
||||
margin: 0 4px; |
||||
} |
||||
.fakewindowcontain .ui-widget-overlay { |
||||
position: absolute; |
||||
} |
||||
select { |
||||
width: 200px; |
||||
} |
||||
</style> |
||||
</head> |
||||
<body> |
||||
|
||||
<h1>Welcome to jQuery UI!</h1> |
||||
|
||||
<div class="ui-widget"> |
||||
<p>This page demonstrates the widgets and theme you selected in Download Builder. Please make sure you are using them with a compatible jQuery version.</p> |
||||
</div> |
||||
|
||||
<h1>YOUR COMPONENTS:</h1> |
||||
|
||||
<!-- Accordion --> |
||||
<h2 class="demoHeaders">Accordion</h2> |
||||
<div id="accordion"> |
||||
<h3>First</h3> |
||||
<div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div> |
||||
<h3>Second</h3> |
||||
<div>Phasellus mattis tincidunt nibh.</div> |
||||
<h3>Third</h3> |
||||
<div>Nam dui erat, auctor a, dignissim quis.</div> |
||||
</div> |
||||
|
||||
<!-- Autocomplete --> |
||||
<h2 class="demoHeaders">Autocomplete</h2> |
||||
<div> |
||||
<input id="autocomplete" title="type "a""> |
||||
</div> |
||||
|
||||
<!-- Button --> |
||||
<h2 class="demoHeaders">Button</h2> |
||||
<button id="button">A button element</button> |
||||
<button id="button-icon">An icon-only button</button> |
||||
|
||||
<!-- Checkboxradio --> |
||||
<h2 class="demoHeaders">Checkboxradio</h2> |
||||
<form style="margin-top: 1em;"> |
||||
<div id="radioset"> |
||||
<input type="radio" id="radio1" name="radio"><label for="radio1">Choice 1</label> |
||||
<input type="radio" id="radio2" name="radio" checked="checked"><label for="radio2">Choice 2</label> |
||||
<input type="radio" id="radio3" name="radio"><label for="radio3">Choice 3</label> |
||||
</div> |
||||
</form> |
||||
|
||||
<!-- Controlgroup --> |
||||
<h2 class="demoHeaders">Controlgroup</h2> |
||||
<fieldset> |
||||
<legend>Rental Car</legend> |
||||
<div id="controlgroup"> |
||||
<select id="car-type"> |
||||
<option>Compact car</option> |
||||
<option>Midsize car</option> |
||||
<option>Full size car</option> |
||||
<option>SUV</option> |
||||
<option>Luxury</option> |
||||
<option>Truck</option> |
||||
<option>Van</option> |
||||
</select> |
||||
<label for="transmission-standard">Standard</label> |
||||
<input type="radio" name="transmission" id="transmission-standard"> |
||||
<label for="transmission-automatic">Automatic</label> |
||||
<input type="radio" name="transmission" id="transmission-automatic"> |
||||
<label for="insurance">Insurance</label> |
||||
<input type="checkbox" name="insurance" id="insurance"> |
||||
<label for="horizontal-spinner" class="ui-controlgroup-label"># of cars</label> |
||||
<input id="horizontal-spinner" class="ui-spinner-input"> |
||||
<button>Book Now!</button> |
||||
</div> |
||||
</fieldset> |
||||
|
||||
<!-- Tabs --> |
||||
<h2 class="demoHeaders">Tabs</h2> |
||||
<div id="tabs"> |
||||
<ul> |
||||
<li><a href="#tabs-1">First</a></li> |
||||
<li><a href="#tabs-2">Second</a></li> |
||||
<li><a href="#tabs-3">Third</a></li> |
||||
</ul> |
||||
<div id="tabs-1">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div> |
||||
<div id="tabs-2">Phasellus mattis tincidunt nibh. Cras orci urna, blandit id, pretium vel, aliquet ornare, felis. Maecenas scelerisque sem non nisl. Fusce sed lorem in enim dictum bibendum.</div> |
||||
<div id="tabs-3">Nam dui erat, auctor a, dignissim quis, sollicitudin eu, felis. Pellentesque nisi urna, interdum eget, sagittis et, consequat vestibulum, lacus. Mauris porttitor ullamcorper augue.</div> |
||||
</div> |
||||
|
||||
<h2 class="demoHeaders">Dialog</h2> |
||||
<p> |
||||
<button id="dialog-link" class="ui-button ui-corner-all ui-widget"> |
||||
<span class="ui-icon ui-icon-newwin"></span>Open Dialog |
||||
</button> |
||||
</p> |
||||
|
||||
<h2 class="demoHeaders">Overlay and Shadow Classes</h2> |
||||
<div style="position: relative; width: 96%; height: 200px; padding:1% 2%; overflow:hidden;" class="fakewindowcontain"> |
||||
<p>Lorem ipsum dolor sit amet, Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. </p><p>Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. </p><p>Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. </p><p>Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. </p> |
||||
|
||||
<!-- ui-dialog --> |
||||
<div class="ui-widget-overlay ui-front"></div> |
||||
<div style="position: absolute; width: 320px; left: 50px; top: 30px; padding: 1.2em" class="ui-widget ui-front ui-widget-content ui-corner-all ui-widget-shadow"> |
||||
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. |
||||
</div> |
||||
|
||||
</div> |
||||
|
||||
<!-- ui-dialog --> |
||||
<div id="dialog" title="Dialog Title"> |
||||
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> |
||||
</div> |
||||
|
||||
|
||||
<h2 class="demoHeaders">Framework Icons (content color preview)</h2> |
||||
<ul id="icons" class="ui-widget ui-helper-clearfix"> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-n"><span class="ui-icon ui-icon-caret-1-n"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-ne"><span class="ui-icon ui-icon-caret-1-ne"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-e"><span class="ui-icon ui-icon-caret-1-e"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-se"><span class="ui-icon ui-icon-caret-1-se"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-s"><span class="ui-icon ui-icon-caret-1-s"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-sw"><span class="ui-icon ui-icon-caret-1-sw"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-w"><span class="ui-icon ui-icon-caret-1-w"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-1-nw"><span class="ui-icon ui-icon-caret-1-nw"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-2-n-s"><span class="ui-icon ui-icon-caret-2-n-s"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-caret-2-e-w"><span class="ui-icon ui-icon-caret-2-e-w"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-n"><span class="ui-icon ui-icon-triangle-1-n"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-ne"><span class="ui-icon ui-icon-triangle-1-ne"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-e"><span class="ui-icon ui-icon-triangle-1-e"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-se"><span class="ui-icon ui-icon-triangle-1-se"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-s"><span class="ui-icon ui-icon-triangle-1-s"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-sw"><span class="ui-icon ui-icon-triangle-1-sw"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-w"><span class="ui-icon ui-icon-triangle-1-w"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-1-nw"><span class="ui-icon ui-icon-triangle-1-nw"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-n-s"><span class="ui-icon ui-icon-triangle-2-n-s"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-triangle-2-e-w"><span class="ui-icon ui-icon-triangle-2-e-w"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-n"><span class="ui-icon ui-icon-arrow-1-n"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-ne"><span class="ui-icon ui-icon-arrow-1-ne"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-e"><span class="ui-icon ui-icon-arrow-1-e"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-se"><span class="ui-icon ui-icon-arrow-1-se"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-s"><span class="ui-icon ui-icon-arrow-1-s"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-sw"><span class="ui-icon ui-icon-arrow-1-sw"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-w"><span class="ui-icon ui-icon-arrow-1-w"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-1-nw"><span class="ui-icon ui-icon-arrow-1-nw"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-n-s"><span class="ui-icon ui-icon-arrow-2-n-s"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-ne-sw"><span class="ui-icon ui-icon-arrow-2-ne-sw"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-e-w"><span class="ui-icon ui-icon-arrow-2-e-w"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-2-se-nw"><span class="ui-icon ui-icon-arrow-2-se-nw"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-n"><span class="ui-icon ui-icon-arrowstop-1-n"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-e"><span class="ui-icon ui-icon-arrowstop-1-e"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-s"><span class="ui-icon ui-icon-arrowstop-1-s"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowstop-1-w"><span class="ui-icon ui-icon-arrowstop-1-w"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-n"><span class="ui-icon ui-icon-arrowthick-1-n"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-ne"><span class="ui-icon ui-icon-arrowthick-1-ne"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-e"><span class="ui-icon ui-icon-arrowthick-1-e"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-se"><span class="ui-icon ui-icon-arrowthick-1-se"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-s"><span class="ui-icon ui-icon-arrowthick-1-s"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-sw"><span class="ui-icon ui-icon-arrowthick-1-sw"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-w"><span class="ui-icon ui-icon-arrowthick-1-w"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-1-nw"><span class="ui-icon ui-icon-arrowthick-1-nw"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-n-s"><span class="ui-icon ui-icon-arrowthick-2-n-s"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-ne-sw"><span class="ui-icon ui-icon-arrowthick-2-ne-sw"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-e-w"><span class="ui-icon ui-icon-arrowthick-2-e-w"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthick-2-se-nw"><span class="ui-icon ui-icon-arrowthick-2-se-nw"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-n"><span class="ui-icon ui-icon-arrowthickstop-1-n"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-e"><span class="ui-icon ui-icon-arrowthickstop-1-e"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-s"><span class="ui-icon ui-icon-arrowthickstop-1-s"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowthickstop-1-w"><span class="ui-icon ui-icon-arrowthickstop-1-w"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-w"><span class="ui-icon ui-icon-arrowreturnthick-1-w"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-n"><span class="ui-icon ui-icon-arrowreturnthick-1-n"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-e"><span class="ui-icon ui-icon-arrowreturnthick-1-e"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturnthick-1-s"><span class="ui-icon ui-icon-arrowreturnthick-1-s"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-w"><span class="ui-icon ui-icon-arrowreturn-1-w"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-n"><span class="ui-icon ui-icon-arrowreturn-1-n"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-e"><span class="ui-icon ui-icon-arrowreturn-1-e"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowreturn-1-s"><span class="ui-icon ui-icon-arrowreturn-1-s"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-w"><span class="ui-icon ui-icon-arrowrefresh-1-w"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-n"><span class="ui-icon ui-icon-arrowrefresh-1-n"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-e"><span class="ui-icon ui-icon-arrowrefresh-1-e"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrowrefresh-1-s"><span class="ui-icon ui-icon-arrowrefresh-1-s"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4"><span class="ui-icon ui-icon-arrow-4"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-arrow-4-diag"><span class="ui-icon ui-icon-arrow-4-diag"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-extlink"><span class="ui-icon ui-icon-extlink"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-newwin"><span class="ui-icon ui-icon-newwin"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-refresh"><span class="ui-icon ui-icon-refresh"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-shuffle"><span class="ui-icon ui-icon-shuffle"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-transfer-e-w"><span class="ui-icon ui-icon-transfer-e-w"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-transferthick-e-w"><span class="ui-icon ui-icon-transferthick-e-w"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-folder-collapsed"><span class="ui-icon ui-icon-folder-collapsed"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-folder-open"><span class="ui-icon ui-icon-folder-open"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-document"><span class="ui-icon ui-icon-document"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-document-b"><span class="ui-icon ui-icon-document-b"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-note"><span class="ui-icon ui-icon-note"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-mail-closed"><span class="ui-icon ui-icon-mail-closed"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-mail-open"><span class="ui-icon ui-icon-mail-open"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-suitcase"><span class="ui-icon ui-icon-suitcase"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-comment"><span class="ui-icon ui-icon-comment"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-person"><span class="ui-icon ui-icon-person"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-print"><span class="ui-icon ui-icon-print"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-trash"><span class="ui-icon ui-icon-trash"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-locked"><span class="ui-icon ui-icon-locked"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-unlocked"><span class="ui-icon ui-icon-unlocked"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-bookmark"><span class="ui-icon ui-icon-bookmark"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-tag"><span class="ui-icon ui-icon-tag"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-home"><span class="ui-icon ui-icon-home"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-flag"><span class="ui-icon ui-icon-flag"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-calculator"><span class="ui-icon ui-icon-calculator"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-cart"><span class="ui-icon ui-icon-cart"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-pencil"><span class="ui-icon ui-icon-pencil"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-clock"><span class="ui-icon ui-icon-clock"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-disk"><span class="ui-icon ui-icon-disk"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-calendar"><span class="ui-icon ui-icon-calendar"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-zoomin"><span class="ui-icon ui-icon-zoomin"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-zoomout"><span class="ui-icon ui-icon-zoomout"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-search"><span class="ui-icon ui-icon-search"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-wrench"><span class="ui-icon ui-icon-wrench"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-gear"><span class="ui-icon ui-icon-gear"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-heart"><span class="ui-icon ui-icon-heart"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-star"><span class="ui-icon ui-icon-star"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-link"><span class="ui-icon ui-icon-link"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-cancel"><span class="ui-icon ui-icon-cancel"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-plus"><span class="ui-icon ui-icon-plus"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-plusthick"><span class="ui-icon ui-icon-plusthick"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-minus"><span class="ui-icon ui-icon-minus"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-minusthick"><span class="ui-icon ui-icon-minusthick"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-close"><span class="ui-icon ui-icon-close"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-closethick"><span class="ui-icon ui-icon-closethick"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-key"><span class="ui-icon ui-icon-key"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-lightbulb"><span class="ui-icon ui-icon-lightbulb"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-scissors"><span class="ui-icon ui-icon-scissors"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-clipboard"><span class="ui-icon ui-icon-clipboard"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-copy"><span class="ui-icon ui-icon-copy"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-contact"><span class="ui-icon ui-icon-contact"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-image"><span class="ui-icon ui-icon-image"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-video"><span class="ui-icon ui-icon-video"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-script"><span class="ui-icon ui-icon-script"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-alert"><span class="ui-icon ui-icon-alert"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-info"><span class="ui-icon ui-icon-info"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-notice"><span class="ui-icon ui-icon-notice"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-help"><span class="ui-icon ui-icon-help"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-check"><span class="ui-icon ui-icon-check"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-bullet"><span class="ui-icon ui-icon-bullet"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-radio-off"><span class="ui-icon ui-icon-radio-off"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-radio-on"><span class="ui-icon ui-icon-radio-on"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-pin-w"><span class="ui-icon ui-icon-pin-w"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-pin-s"><span class="ui-icon ui-icon-pin-s"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-play"><span class="ui-icon ui-icon-play"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-pause"><span class="ui-icon ui-icon-pause"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-next"><span class="ui-icon ui-icon-seek-next"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-prev"><span class="ui-icon ui-icon-seek-prev"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-end"><span class="ui-icon ui-icon-seek-end"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-seek-first"><span class="ui-icon ui-icon-seek-first"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-stop"><span class="ui-icon ui-icon-stop"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-eject"><span class="ui-icon ui-icon-eject"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-volume-off"><span class="ui-icon ui-icon-volume-off"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-volume-on"><span class="ui-icon ui-icon-volume-on"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-power"><span class="ui-icon ui-icon-power"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-signal-diag"><span class="ui-icon ui-icon-signal-diag"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-signal"><span class="ui-icon ui-icon-signal"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-0"><span class="ui-icon ui-icon-battery-0"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-1"><span class="ui-icon ui-icon-battery-1"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-2"><span class="ui-icon ui-icon-battery-2"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-battery-3"><span class="ui-icon ui-icon-battery-3"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-plus"><span class="ui-icon ui-icon-circle-plus"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-minus"><span class="ui-icon ui-icon-circle-minus"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-close"><span class="ui-icon ui-icon-circle-close"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-e"><span class="ui-icon ui-icon-circle-triangle-e"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-s"><span class="ui-icon ui-icon-circle-triangle-s"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-w"><span class="ui-icon ui-icon-circle-triangle-w"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-triangle-n"><span class="ui-icon ui-icon-circle-triangle-n"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-e"><span class="ui-icon ui-icon-circle-arrow-e"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-s"><span class="ui-icon ui-icon-circle-arrow-s"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-w"><span class="ui-icon ui-icon-circle-arrow-w"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-arrow-n"><span class="ui-icon ui-icon-circle-arrow-n"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomin"><span class="ui-icon ui-icon-circle-zoomin"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-zoomout"><span class="ui-icon ui-icon-circle-zoomout"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circle-check"><span class="ui-icon ui-icon-circle-check"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-plus"><span class="ui-icon ui-icon-circlesmall-plus"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-minus"><span class="ui-icon ui-icon-circlesmall-minus"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-circlesmall-close"><span class="ui-icon ui-icon-circlesmall-close"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-plus"><span class="ui-icon ui-icon-squaresmall-plus"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-minus"><span class="ui-icon ui-icon-squaresmall-minus"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-squaresmall-close"><span class="ui-icon ui-icon-squaresmall-close"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-vertical"><span class="ui-icon ui-icon-grip-dotted-vertical"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-dotted-horizontal"><span class="ui-icon ui-icon-grip-dotted-horizontal"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-vertical"><span class="ui-icon ui-icon-grip-solid-vertical"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-solid-horizontal"><span class="ui-icon ui-icon-grip-solid-horizontal"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-gripsmall-diagonal-se"><span class="ui-icon ui-icon-gripsmall-diagonal-se"></span></li> |
||||
<li class="ui-state-default ui-corner-all" title=".ui-icon-grip-diagonal-se"><span class="ui-icon ui-icon-grip-diagonal-se"></span></li> |
||||
</ul> |
||||
|
||||
<!-- Slider --> |
||||
<h2 class="demoHeaders">Slider</h2> |
||||
<div id="slider"></div> |
||||
|
||||
<!-- Datepicker --> |
||||
<h2 class="demoHeaders">Datepicker</h2> |
||||
<div id="datepicker"></div> |
||||
|
||||
<!-- Progressbar --> |
||||
<h2 class="demoHeaders">Progressbar</h2> |
||||
<div id="progressbar"></div> |
||||
|
||||
<!-- Progressbar --> |
||||
<h2 class="demoHeaders">Selectmenu</h2> |
||||
<select id="selectmenu"> |
||||
<option>Slower</option> |
||||
<option>Slow</option> |
||||
<option selected="selected">Medium</option> |
||||
<option>Fast</option> |
||||
<option>Faster</option> |
||||
</select> |
||||
|
||||
<!-- Spinner --> |
||||
<h2 class="demoHeaders">Spinner</h2> |
||||
<input id="spinner"> |
||||
|
||||
<!-- Menu --> |
||||
<h2 class="demoHeaders">Menu</h2> |
||||
<ul style="width:100px;" id="menu"> |
||||
<li><div>Item 1</div></li> |
||||
<li><div>Item 2</div></li> |
||||
<li><div>Item 3</div> |
||||
<ul> |
||||
<li><div>Item 3-1</div></li> |
||||
<li><div>Item 3-2</div></li> |
||||
<li><div>Item 3-3</div></li> |
||||
<li><div>Item 3-4</div></li> |
||||
<li><div>Item 3-5</div></li> |
||||
</ul> |
||||
</li> |
||||
<li><div>Item 4</div></li> |
||||
<li><div>Item 5</div></li> |
||||
</ul> |
||||
|
||||
<!-- Tooltip --> |
||||
<h2 class="demoHeaders">Tooltip</h2> |
||||
<p id="tooltip"> |
||||
<a href="#" title="That's what this widget is">Tooltips</a> can be attached to any element. When you hover |
||||
the element with your mouse, the title attribute is displayed in a little box next to the element, just like a native tooltip. |
||||
</p> |
||||
|
||||
<!-- Highlight / Error --> |
||||
<h2 class="demoHeaders">Highlight / Error</h2> |
||||
<div class="ui-widget"> |
||||
<div class="ui-state-highlight ui-corner-all" style="margin-top: 20px; padding: 0 .7em;"> |
||||
<p><span class="ui-icon ui-icon-info" style="float: left; margin-right: .3em;"></span> |
||||
<strong>Hey!</strong> Sample ui-state-highlight style.</p> |
||||
</div> |
||||
</div> |
||||
<br> |
||||
<div class="ui-widget"> |
||||
<div class="ui-state-error ui-corner-all" style="padding: 0 .7em;"> |
||||
<p><span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span> |
||||
<strong>Alert:</strong> Sample ui-state-error style.</p> |
||||
</div> |
||||
</div> |
||||
|
||||
<script src="external/jquery/jquery.js"></script> |
||||
<script src="jquery-ui.js"></script> |
||||
<script> |
||||
$( "#accordion" ).accordion(); |
||||
|
||||
var availableTags = [ |
||||
"ActionScript", |
||||
"AppleScript", |
||||
"Asp", |
||||
"BASIC", |
||||
"C", |
||||
"C++", |
||||
"Clojure", |
||||
"COBOL", |
||||
"ColdFusion", |
||||
"Erlang", |
||||
"Fortran", |
||||
"Groovy", |
||||
"Haskell", |
||||
"Java", |
||||
"JavaScript", |
||||
"Lisp", |
||||
"Perl", |
||||
"PHP", |
||||
"Python", |
||||
"Ruby", |
||||
"Scala", |
||||
"Scheme" |
||||
]; |
||||
$( "#autocomplete" ).autocomplete({ |
||||
source: availableTags |
||||
}); |
||||
|
||||
$( "#button" ).button(); |
||||
$( "#button-icon" ).button({ |
||||
icon: "ui-icon-gear", |
||||
showLabel: false |
||||
}); |
||||
|
||||
$( "#radioset" ).buttonset(); |
||||
|
||||
$( "#controlgroup" ).controlgroup(); |
||||
|
||||
$( "#tabs" ).tabs(); |
||||
|
||||
$( "#dialog" ).dialog({ |
||||
autoOpen: false, |
||||
width: 400, |
||||
buttons: [ |
||||
{ |
||||
text: "Ok", |
||||
click: function() { |
||||
$( this ).dialog( "close" ); |
||||
} |
||||
}, |
||||
{ |
||||
text: "Cancel", |
||||
click: function() { |
||||
$( this ).dialog( "close" ); |
||||
} |
||||
} |
||||
] |
||||
}); |
||||
|
||||
// Link to open the dialog |
||||
$( "#dialog-link" ).click(function( event ) { |
||||
$( "#dialog" ).dialog( "open" ); |
||||
event.preventDefault(); |
||||
}); |
||||
|
||||
$( "#datepicker" ).datepicker({ |
||||
inline: true |
||||
}); |
||||
|
||||
$( "#slider" ).slider({ |
||||
range: true, |
||||
values: [ 17, 67 ] |
||||
}); |
||||
|
||||
$( "#progressbar" ).progressbar({ |
||||
value: 20 |
||||
}); |
||||
|
||||
$( "#spinner" ).spinner(); |
||||
|
||||
$( "#menu" ).menu(); |
||||
|
||||
$( "#tooltip" ).tooltip(); |
||||
|
||||
$( "#selectmenu" ).selectmenu(); |
||||
|
||||
// Hover states on the static widgets |
||||
$( "#dialog-link, #icons li" ).hover( |
||||
function() { |
||||
$( this ).addClass( "ui-state-hover" ); |
||||
}, |
||||
function() { |
||||
$( this ).removeClass( "ui-state-hover" ); |
||||
} |
||||
); |
||||
</script> |
||||
</body> |
||||
</html> |
@ -0,0 +1,886 @@ |
||||
/*! |
||||
* jQuery UI CSS Framework 1.12.1 |
||||
* http://jqueryui.com |
||||
* |
||||
* Copyright jQuery Foundation and other contributors |
||||
* Released under the MIT license. |
||||
* http://jquery.org/license |
||||
* |
||||
* http://api.jqueryui.com/category/theming/ |
||||
*/ |
||||
.ui-draggable-handle { |
||||
-ms-touch-action: none; |
||||
touch-action: none; |
||||
} |
||||
/* Layout helpers |
||||
----------------------------------*/ |
||||
.ui-helper-hidden { |
||||
display: none; |
||||
} |
||||
.ui-helper-hidden-accessible { |
||||
border: 0; |
||||
clip: rect(0 0 0 0); |
||||
height: 1px; |
||||
margin: -1px; |
||||
overflow: hidden; |
||||
padding: 0; |
||||
position: absolute; |
||||
width: 1px; |
||||
} |
||||
.ui-helper-reset { |
||||
margin: 0; |
||||
padding: 0; |
||||
border: 0; |
||||
outline: 0; |
||||
line-height: 1.3; |
||||
text-decoration: none; |
||||
font-size: 100%; |
||||
list-style: none; |
||||
} |
||||
.ui-helper-clearfix:before, |
||||
.ui-helper-clearfix:after { |
||||
content: ""; |
||||
display: table; |
||||
border-collapse: collapse; |
||||
} |
||||
.ui-helper-clearfix:after { |
||||
clear: both; |
||||
} |
||||
.ui-helper-zfix { |
||||
width: 100%; |
||||
height: 100%; |
||||
top: 0; |
||||
left: 0; |
||||
position: absolute; |
||||
opacity: 0; |
||||
filter:Alpha(Opacity=0); /* support: IE8 */ |
||||
} |
||||
|
||||
.ui-front { |
||||
z-index: 100; |
||||
} |
||||
|
||||
|
||||
/* Interaction Cues |
||||
----------------------------------*/ |
||||
.ui-state-disabled { |
||||
cursor: default !important; |
||||
pointer-events: none; |
||||
} |
||||
|
||||
|
||||
/* Icons |
||||
----------------------------------*/ |
||||
.ui-icon { |
||||
display: inline-block; |
||||
vertical-align: middle; |
||||
margin-top: -.25em; |
||||
position: relative; |
||||
text-indent: -99999px; |
||||
overflow: hidden; |
||||
background-repeat: no-repeat; |
||||
} |
||||
|
||||
.ui-widget-icon-block { |
||||
left: 50%; |
||||
margin-left: -8px; |
||||
display: block; |
||||
} |
||||
|
||||
/* Misc visuals |
||||
----------------------------------*/ |
||||
|
||||
/* Overlays */ |
||||
.ui-widget-overlay { |
||||
position: fixed; |
||||
top: 0; |
||||
left: 0; |
||||
width: 100%; |
||||
height: 100%; |
||||
} |
||||
.ui-resizable { |
||||
position: relative; |
||||
} |
||||
.ui-resizable-handle { |
||||
position: absolute; |
||||
font-size: 0.1px; |
||||
display: block; |
||||
-ms-touch-action: none; |
||||
touch-action: none; |
||||
} |
||||
.ui-resizable-disabled .ui-resizable-handle, |
||||
.ui-resizable-autohide .ui-resizable-handle { |
||||
display: none; |
||||
} |
||||
.ui-resizable-n { |
||||
cursor: n-resize; |
||||
height: 7px; |
||||
width: 100%; |
||||
top: -5px; |
||||
left: 0; |
||||
} |
||||
.ui-resizable-s { |
||||
cursor: s-resize; |
||||
height: 7px; |
||||
width: 100%; |
||||
bottom: -5px; |
||||
left: 0; |
||||
} |
||||
.ui-resizable-e { |
||||
cursor: e-resize; |
||||
width: 7px; |
||||
right: -5px; |
||||
top: 0; |
||||
height: 100%; |
||||
} |
||||
.ui-resizable-w { |
||||
cursor: w-resize; |
||||
width: 7px; |
||||
left: -5px; |
||||
top: 0; |
||||
height: 100%; |
||||
} |
||||
.ui-resizable-se { |
||||
cursor: se-resize; |
||||
width: 12px; |
||||
height: 12px; |
||||
right: 1px; |
||||
bottom: 1px; |
||||
} |
||||
.ui-resizable-sw { |
||||
cursor: sw-resize; |
||||
width: 9px; |
||||
height: 9px; |
||||
left: -5px; |
||||
bottom: -5px; |
||||
} |
||||
.ui-resizable-nw { |
||||
cursor: nw-resize; |
||||
width: 9px; |
||||
height: 9px; |
||||
left: -5px; |
||||
top: -5px; |
||||
} |
||||
.ui-resizable-ne { |
||||
cursor: ne-resize; |
||||
width: 9px; |
||||
height: 9px; |
||||
right: -5px; |
||||
top: -5px; |
||||
} |
||||
.ui-selectable { |
||||
-ms-touch-action: none; |
||||
touch-action: none; |
||||
} |
||||
.ui-selectable-helper { |
||||
position: absolute; |
||||
z-index: 100; |
||||
border: 1px dotted black; |
||||
} |
||||
.ui-sortable-handle { |
||||
-ms-touch-action: none; |
||||
touch-action: none; |
||||
} |
||||
.ui-accordion .ui-accordion-header { |
||||
display: block; |
||||
cursor: pointer; |
||||
position: relative; |
||||
margin: 2px 0 0 0; |
||||
padding: .5em .5em .5em .7em; |
||||
font-size: 100%; |
||||
} |
||||
.ui-accordion .ui-accordion-content { |
||||
padding: 1em 2.2em; |
||||
border-top: 0; |
||||
overflow: auto; |
||||
} |
||||
.ui-autocomplete { |
||||
position: absolute; |
||||
top: 0; |
||||
left: 0; |
||||
cursor: default; |
||||
} |
||||
.ui-menu { |
||||
list-style: none; |
||||
padding: 0; |
||||
margin: 0; |
||||
display: block; |
||||
outline: 0; |
||||
} |
||||
.ui-menu .ui-menu { |
||||
position: absolute; |
||||
} |
||||
.ui-menu .ui-menu-item { |
||||
margin: 0; |
||||
cursor: pointer; |
||||
/* support: IE10, see #8844 */ |
||||
list-style-image: url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"); |
||||
} |
||||
.ui-menu .ui-menu-item-wrapper { |
||||
position: relative; |
||||
padding: 3px 1em 3px .4em; |
||||
} |
||||
.ui-menu .ui-menu-divider { |
||||
margin: 5px 0; |
||||
height: 0; |
||||
font-size: 0; |
||||
line-height: 0; |
||||
border-width: 1px 0 0 0; |
||||
} |
||||
.ui-menu .ui-state-focus, |
||||
.ui-menu .ui-state-active { |
||||
margin: -1px; |
||||
} |
||||
|
||||
/* icon support */ |
||||
.ui-menu-icons { |
||||
position: relative; |
||||
} |
||||
.ui-menu-icons .ui-menu-item-wrapper { |
||||
padding-left: 2em; |
||||
} |
||||
|
||||
/* left-aligned */ |
||||
.ui-menu .ui-icon { |
||||
position: absolute; |
||||
top: 0; |
||||
bottom: 0; |
||||
left: .2em; |
||||
margin: auto 0; |
||||
} |
||||
|
||||
/* right-aligned */ |
||||
.ui-menu .ui-menu-icon { |
||||
left: auto; |
||||
right: 0; |
||||
} |
||||
.ui-button { |
||||
padding: .4em 1em; |
||||
display: inline-block; |
||||
position: relative; |
||||
line-height: normal; |
||||
margin-right: .1em; |
||||
cursor: pointer; |
||||
vertical-align: middle; |
||||
text-align: center; |
||||
-webkit-user-select: none; |
||||
-moz-user-select: none; |
||||
-ms-user-select: none; |
||||
user-select: none; |
||||
|
||||
/* Support: IE <= 11 */ |
||||
overflow: visible; |
||||
} |
||||
|
||||
.ui-button, |
||||
.ui-button:link, |
||||
.ui-button:visited, |
||||
.ui-button:hover, |
||||
.ui-button:active { |
||||
text-decoration: none; |
||||
} |
||||
|
||||
/* to make room for the icon, a width needs to be set here */ |
||||
.ui-button-icon-only { |
||||
width: 2em; |
||||
box-sizing: border-box; |
||||
text-indent: -9999px; |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
/* no icon support for input elements */ |
||||
input.ui-button.ui-button-icon-only { |
||||
text-indent: 0; |
||||
} |
||||
|
||||
/* button icon element(s) */ |
||||
.ui-button-icon-only .ui-icon { |
||||
position: absolute; |
||||
top: 50%; |
||||
left: 50%; |
||||
margin-top: -8px; |
||||
margin-left: -8px; |
||||
} |
||||
|
||||
.ui-button.ui-icon-notext .ui-icon { |
||||
padding: 0; |
||||
width: 2.1em; |
||||
height: 2.1em; |
||||
text-indent: -9999px; |
||||
white-space: nowrap; |
||||
|
||||
} |
||||
|
||||
input.ui-button.ui-icon-notext .ui-icon { |
||||
width: auto; |
||||
height: auto; |
||||
text-indent: 0; |
||||
white-space: normal; |
||||
padding: .4em 1em; |
||||
} |
||||
|
||||
/* workarounds */ |
||||
/* Support: Firefox 5 - 40 */ |
||||
input.ui-button::-moz-focus-inner, |
||||
button.ui-button::-moz-focus-inner { |
||||
border: 0; |
||||
padding: 0; |
||||
} |
||||
.ui-controlgroup { |
||||
vertical-align: middle; |
||||
display: inline-block; |
||||
} |
||||
.ui-controlgroup > .ui-controlgroup-item { |
||||
float: left; |
||||
margin-left: 0; |
||||
margin-right: 0; |
||||
} |
||||
.ui-controlgroup > .ui-controlgroup-item:focus, |
||||
.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { |
||||
z-index: 9999; |
||||
} |
||||
.ui-controlgroup-vertical > .ui-controlgroup-item { |
||||
display: block; |
||||
float: none; |
||||
width: 100%; |
||||
margin-top: 0; |
||||
margin-bottom: 0; |
||||
text-align: left; |
||||
} |
||||
.ui-controlgroup-vertical .ui-controlgroup-item { |
||||
box-sizing: border-box; |
||||
} |
||||
.ui-controlgroup .ui-controlgroup-label { |
||||
padding: .4em 1em; |
||||
} |
||||
.ui-controlgroup .ui-controlgroup-label span { |
||||
font-size: 80%; |
||||
} |
||||
.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { |
||||
border-left: none; |
||||
} |
||||
.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { |
||||
border-top: none; |
||||
} |
||||
.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { |
||||
border-right: none; |
||||
} |
||||
.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { |
||||
border-bottom: none; |
||||
} |
||||
|
||||
/* Spinner specific style fixes */ |
||||
.ui-controlgroup-vertical .ui-spinner-input { |
||||
|
||||
/* Support: IE8 only, Android < 4.4 only */ |
||||
width: 75%; |
||||
width: calc( 100% - 2.4em ); |
||||
} |
||||
.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { |
||||
border-top-style: solid; |
||||
} |
||||
|
||||
.ui-checkboxradio-label .ui-icon-background { |
||||
box-shadow: inset 1px 1px 1px #ccc; |
||||
border-radius: .12em; |
||||
border: none; |
||||
} |
||||
.ui-checkboxradio-radio-label .ui-icon-background { |
||||
width: 16px; |
||||
height: 16px; |
||||
border-radius: 1em; |
||||
overflow: visible; |
||||
border: none; |
||||
} |
||||
.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, |
||||
.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { |
||||
background-image: none; |
||||
width: 8px; |
||||
height: 8px; |
||||
border-width: 4px; |
||||
border-style: solid; |
||||
} |
||||
.ui-checkboxradio-disabled { |
||||
pointer-events: none; |
||||
} |
||||
.ui-datepicker { |
||||
width: 17em; |
||||
padding: .2em .2em 0; |
||||
display: none; |
||||
} |
||||
.ui-datepicker .ui-datepicker-header { |
||||
position: relative; |
||||
padding: .2em 0; |
||||
} |
||||
.ui-datepicker .ui-datepicker-prev, |
||||
.ui-datepicker .ui-datepicker-next { |
||||
position: absolute; |
||||
top: 2px; |
||||
width: 1.8em; |
||||
height: 1.8em; |
||||
} |
||||
.ui-datepicker .ui-datepicker-prev-hover, |
||||
.ui-datepicker .ui-datepicker-next-hover { |
||||
top: 1px; |
||||
} |
||||
.ui-datepicker .ui-datepicker-prev { |
||||
left: 2px; |
||||
} |
||||
.ui-datepicker .ui-datepicker-next { |
||||
right: 2px; |
||||
} |
||||
.ui-datepicker .ui-datepicker-prev-hover { |
||||
left: 1px; |
||||
} |
||||
.ui-datepicker .ui-datepicker-next-hover { |
||||
right: 1px; |
||||
} |
||||
.ui-datepicker .ui-datepicker-prev span, |
||||
.ui-datepicker .ui-datepicker-next span { |
||||
display: block; |
||||
position: absolute; |
||||
left: 50%; |
||||
margin-left: -8px; |
||||
top: 50%; |
||||
margin-top: -8px; |
||||
} |
||||
.ui-datepicker .ui-datepicker-title { |
||||
margin: 0 2.3em; |
||||
line-height: 1.8em; |
||||
text-align: center; |
||||
} |
||||
.ui-datepicker .ui-datepicker-title select { |
||||
font-size: 1em; |
||||
margin: 1px 0; |
||||
} |
||||
.ui-datepicker select.ui-datepicker-month, |
||||
.ui-datepicker select.ui-datepicker-year { |
||||
width: 45%; |
||||
} |
||||
.ui-datepicker table { |
||||
width: 100%; |
||||
font-size: .9em; |
||||
border-collapse: collapse; |
||||
margin: 0 0 .4em; |
||||
} |
||||
.ui-datepicker th { |
||||
padding: .7em .3em; |
||||
text-align: center; |
||||
font-weight: bold; |
||||
border: 0; |
||||
} |
||||
.ui-datepicker td { |
||||
border: 0; |
||||
padding: 1px; |
||||
} |
||||
.ui-datepicker td span, |
||||
.ui-datepicker td a { |
||||
display: block; |
||||
padding: .2em; |
||||
text-align: right; |
||||
text-decoration: none; |
||||
} |
||||
.ui-datepicker .ui-datepicker-buttonpane { |
||||
background-image: none; |
||||
margin: .7em 0 0 0; |
||||
padding: 0 .2em; |
||||
border-left: 0; |
||||
border-right: 0; |
||||
border-bottom: 0; |
||||
} |
||||
.ui-datepicker .ui-datepicker-buttonpane button { |
||||
float: right; |
||||
margin: .5em .2em .4em; |
||||
cursor: pointer; |
||||
padding: .2em .6em .3em .6em; |
||||
width: auto; |
||||
overflow: visible; |
||||
} |
||||
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { |
||||
float: left; |
||||
} |
||||
|
||||
/* with multiple calendars */ |
||||
.ui-datepicker.ui-datepicker-multi { |
||||
width: auto; |
||||
} |
||||
.ui-datepicker-multi .ui-datepicker-group { |
||||
float: left; |
||||
} |
||||
.ui-datepicker-multi .ui-datepicker-group table { |
||||
width: 95%; |
||||
margin: 0 auto .4em; |
||||
} |
||||
.ui-datepicker-multi-2 .ui-datepicker-group { |
||||
width: 50%; |
||||
} |
||||
.ui-datepicker-multi-3 .ui-datepicker-group { |
||||
width: 33.3%; |
||||
} |
||||
.ui-datepicker-multi-4 .ui-datepicker-group { |
||||
width: 25%; |
||||
} |
||||
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, |
||||
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { |
||||
border-left-width: 0; |
||||
} |
||||
.ui-datepicker-multi .ui-datepicker-buttonpane { |
||||
clear: left; |
||||
} |
||||
.ui-datepicker-row-break { |
||||
clear: both; |
||||
width: 100%; |
||||
font-size: 0; |
||||
} |
||||
|
||||
/* RTL support */ |
||||
.ui-datepicker-rtl { |
||||
direction: rtl; |
||||
} |
||||
.ui-datepicker-rtl .ui-datepicker-prev { |
||||
right: 2px; |
||||
left: auto; |
||||
} |
||||
.ui-datepicker-rtl .ui-datepicker-next { |
||||
left: 2px; |
||||
right: auto; |
||||
} |
||||
.ui-datepicker-rtl .ui-datepicker-prev:hover { |
||||
right: 1px; |
||||
left: auto; |
||||
} |
||||
.ui-datepicker-rtl .ui-datepicker-next:hover { |
||||
left: 1px; |
||||
right: auto; |
||||
} |
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane { |
||||
clear: right; |
||||
} |
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button { |
||||
float: left; |
||||
} |
||||
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, |
||||
.ui-datepicker-rtl .ui-datepicker-group { |
||||
float: right; |
||||
} |
||||
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, |
||||
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { |
||||
border-right-width: 0; |
||||
border-left-width: 1px; |
||||
} |
||||
|
||||
/* Icons */ |
||||
.ui-datepicker .ui-icon { |
||||
display: block; |
||||
text-indent: -99999px; |
||||
overflow: hidden; |
||||
background-repeat: no-repeat; |
||||
left: .5em; |
||||
top: .3em; |
||||
} |
||||
.ui-dialog { |
||||
position: absolute; |
||||
top: 0; |
||||
left: 0; |
||||
padding: .2em; |
||||
outline: 0; |
||||
} |
||||
.ui-dialog .ui-dialog-titlebar { |
||||
padding: .4em 1em; |
||||
position: relative; |
||||
} |
||||
.ui-dialog .ui-dialog-title { |
||||
float: left; |
||||
margin: .1em 0; |
||||
white-space: nowrap; |
||||
width: 90%; |
||||
overflow: hidden; |
||||
text-overflow: ellipsis; |
||||
} |
||||
.ui-dialog .ui-dialog-titlebar-close { |
||||
position: absolute; |
||||
right: .3em; |
||||
top: 50%; |
||||
width: 20px; |
||||
margin: -10px 0 0 0; |
||||
padding: 1px; |
||||
height: 20px; |
||||
} |
||||
.ui-dialog .ui-dialog-content { |
||||
position: relative; |
||||
border: 0; |
||||
padding: .5em 1em; |
||||
background: none; |
||||
overflow: auto; |
||||
} |
||||
.ui-dialog .ui-dialog-buttonpane { |
||||
text-align: left; |
||||
border-width: 1px 0 0 0; |
||||
background-image: none; |
||||
margin-top: .5em; |
||||
padding: .3em 1em .5em .4em; |
||||
} |
||||
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { |
||||
float: right; |
||||
} |
||||
.ui-dialog .ui-dialog-buttonpane button { |
||||
margin: .5em .4em .5em 0; |
||||
cursor: pointer; |
||||
} |
||||
.ui-dialog .ui-resizable-n { |
||||
height: 2px; |
||||
top: 0; |
||||
} |
||||
.ui-dialog .ui-resizable-e { |
||||
width: 2px; |
||||
right: 0; |
||||
} |
||||
.ui-dialog .ui-resizable-s { |
||||
height: 2px; |
||||
bottom: 0; |
||||
} |
||||
.ui-dialog .ui-resizable-w { |
||||
width: 2px; |
||||
left: 0; |
||||
} |
||||
.ui-dialog .ui-resizable-se, |
||||
.ui-dialog .ui-resizable-sw, |
||||
.ui-dialog .ui-resizable-ne, |
||||
.ui-dialog .ui-resizable-nw { |
||||
width: 7px; |
||||
height: 7px; |
||||
} |
||||
.ui-dialog .ui-resizable-se { |
||||
right: 0; |
||||
bottom: 0; |
||||
} |
||||
.ui-dialog .ui-resizable-sw { |
||||
left: 0; |
||||
bottom: 0; |
||||
} |
||||
.ui-dialog .ui-resizable-ne { |
||||
right: 0; |
||||
top: 0; |
||||
} |
||||
.ui-dialog .ui-resizable-nw { |
||||
left: 0; |
||||
top: 0; |
||||
} |
||||
.ui-draggable .ui-dialog-titlebar { |
||||
cursor: move; |
||||
} |
||||
.ui-progressbar { |
||||
height: 2em; |
||||
text-align: left; |
||||
overflow: hidden; |
||||
} |
||||
.ui-progressbar .ui-progressbar-value { |
||||
margin: -1px; |
||||
height: 100%; |
||||
} |
||||
.ui-progressbar .ui-progressbar-overlay { |
||||
background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); |
||||
height: 100%; |
||||
filter: alpha(opacity=25); /* support: IE8 */ |
||||
opacity: 0.25; |
||||
} |
||||
.ui-progressbar-indeterminate .ui-progressbar-value { |
||||
background-image: none; |
||||
} |
||||
.ui-selectmenu-menu { |
||||
padding: 0; |
||||
margin: 0; |
||||
position: absolute; |
||||
top: 0; |
||||
left: 0; |
||||
display: none; |
||||
} |
||||
.ui-selectmenu-menu .ui-menu { |
||||
overflow: auto; |
||||
overflow-x: hidden; |
||||
padding-bottom: 1px; |
||||
} |
||||
.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { |
||||
font-size: 1em; |
||||
font-weight: bold; |
||||
line-height: 1.5; |
||||
padding: 2px 0.4em; |
||||
margin: 0.5em 0 0 0; |
||||
height: auto; |
||||
border: 0; |
||||
} |
||||
.ui-selectmenu-open { |
||||
display: block; |
||||
} |
||||
.ui-selectmenu-text { |
||||
display: block; |
||||
margin-right: 20px; |
||||
overflow: hidden; |
||||
text-overflow: ellipsis; |
||||
} |
||||
.ui-selectmenu-button.ui-button { |
||||
text-align: left; |
||||
white-space: nowrap; |
||||
width: 14em; |
||||
} |
||||
.ui-selectmenu-icon.ui-icon { |
||||
float: right; |
||||
margin-top: 0; |
||||
} |
||||
.ui-slider { |
||||
position: relative; |
||||
text-align: left; |
||||
} |
||||
.ui-slider .ui-slider-handle { |
||||
position: absolute; |
||||
z-index: 2; |
||||
width: 1.2em; |
||||
height: 1.2em; |
||||
cursor: default; |
||||
-ms-touch-action: none; |
||||
touch-action: none; |
||||
} |
||||
.ui-slider .ui-slider-range { |
||||
position: absolute; |
||||
z-index: 1; |
||||
font-size: .7em; |
||||
display: block; |
||||
border: 0; |
||||
background-position: 0 0; |
||||
} |
||||
|
||||
/* support: IE8 - See #6727 */ |
||||
.ui-slider.ui-state-disabled .ui-slider-handle, |
||||
.ui-slider.ui-state-disabled .ui-slider-range { |
||||
filter: inherit; |
||||
} |
||||
|
||||
.ui-slider-horizontal { |
||||
height: .8em; |
||||
} |
||||
.ui-slider-horizontal .ui-slider-handle { |
||||
top: -.3em; |
||||
margin-left: -.6em; |
||||
} |
||||
.ui-slider-horizontal .ui-slider-range { |
||||
top: 0; |
||||
height: 100%; |
||||
} |
||||
.ui-slider-horizontal .ui-slider-range-min { |
||||
left: 0; |
||||
} |
||||
.ui-slider-horizontal .ui-slider-range-max { |
||||
right: 0; |
||||
} |
||||
|
||||
.ui-slider-vertical { |
||||
width: .8em; |
||||
height: 100px; |
||||
} |
||||
.ui-slider-vertical .ui-slider-handle { |
||||
left: -.3em; |
||||
margin-left: 0; |
||||
margin-bottom: -.6em; |
||||
} |
||||
.ui-slider-vertical .ui-slider-range { |
||||
left: 0; |
||||
width: 100%; |
||||
} |
||||
.ui-slider-vertical .ui-slider-range-min { |
||||
bottom: 0; |
||||
} |
||||
.ui-slider-vertical .ui-slider-range-max { |
||||
top: 0; |
||||
} |
||||
.ui-spinner { |
||||
position: relative; |
||||
display: inline-block; |
||||
overflow: hidden; |
||||
padding: 0; |
||||
vertical-align: middle; |
||||
} |
||||
.ui-spinner-input { |
||||
border: none; |
||||
background: none; |
||||
color: inherit; |
||||
padding: .222em 0; |
||||
margin: .2em 0; |
||||
vertical-align: middle; |
||||
margin-left: .4em; |
||||
margin-right: 2em; |
||||
} |
||||
.ui-spinner-button { |
||||
width: 1.6em; |
||||
height: 50%; |
||||
font-size: .5em; |
||||
padding: 0; |
||||
margin: 0; |
||||
text-align: center; |
||||
position: absolute; |
||||
cursor: default; |
||||
display: block; |
||||
overflow: hidden; |
||||
right: 0; |
||||
} |
||||
/* more specificity required here to override default borders */ |
||||
.ui-spinner a.ui-spinner-button { |
||||
border-top-style: none; |
||||
border-bottom-style: none; |
||||
border-right-style: none; |
||||
} |
||||
.ui-spinner-up { |
||||
top: 0; |
||||
} |
||||
.ui-spinner-down { |
||||
bottom: 0; |
||||
} |
||||
.ui-tabs { |
||||
position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ |
||||
padding: .2em; |
||||
} |
||||
.ui-tabs .ui-tabs-nav { |
||||
margin: 0; |
||||
padding: .2em .2em 0; |
||||
} |
||||
.ui-tabs .ui-tabs-nav li { |
||||
list-style: none; |
||||
float: left; |
||||
position: relative; |
||||
top: 0; |
||||
margin: 1px .2em 0 0; |
||||
border-bottom-width: 0; |
||||
padding: 0; |
||||
white-space: nowrap; |
||||
} |
||||
.ui-tabs .ui-tabs-nav .ui-tabs-anchor { |
||||
float: left; |
||||
padding: .5em 1em; |
||||
text-decoration: none; |
||||
} |
||||
.ui-tabs .ui-tabs-nav li.ui-tabs-active { |
||||
margin-bottom: -1px; |
||||
padding-bottom: 1px; |
||||
} |
||||
.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, |
||||
.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, |
||||
.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { |
||||
cursor: text; |
||||
} |
||||
.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { |
||||
cursor: pointer; |
||||
} |
||||
.ui-tabs .ui-tabs-panel { |
||||
display: block; |
||||
border-width: 0; |
||||
padding: 1em 1.4em; |
||||
background: none; |
||||
} |
||||
.ui-tooltip { |
||||
padding: 8px; |
||||
position: absolute; |
||||
z-index: 9999; |
||||
max-width: 300px; |
||||
} |
||||
body .ui-tooltip { |
||||
border-width: 2px; |
||||
} |
@ -0,0 +1,443 @@ |
||||
/*! |
||||
* jQuery UI CSS Framework 1.12.1 |
||||
* http://jqueryui.com |
||||
* |
||||
* Copyright jQuery Foundation and other contributors |
||||
* Released under the MIT license. |
||||
* http://jquery.org/license |
||||
* |
||||
* http://api.jqueryui.com/category/theming/ |
||||
* |
||||
* To view and modify this theme, visit http://jqueryui.com/themeroller/?scope=&folderName=base&cornerRadiusShadow=8px&offsetLeftShadow=0px&offsetTopShadow=0px&thicknessShadow=5px&opacityShadow=30&bgImgOpacityShadow=0&bgTextureShadow=flat&bgColorShadow=666666&opacityOverlay=30&bgImgOpacityOverlay=0&bgTextureOverlay=flat&bgColorOverlay=aaaaaa&iconColorError=cc0000&fcError=5f3f3f&borderColorError=f1a899&bgTextureError=flat&bgColorError=fddfdf&iconColorHighlight=777620&fcHighlight=777620&borderColorHighlight=dad55e&bgTextureHighlight=flat&bgColorHighlight=fffa90&iconColorActive=ffffff&fcActive=ffffff&borderColorActive=003eff&bgTextureActive=flat&bgColorActive=007fff&iconColorHover=555555&fcHover=2b2b2b&borderColorHover=cccccc&bgTextureHover=flat&bgColorHover=ededed&iconColorDefault=777777&fcDefault=454545&borderColorDefault=c5c5c5&bgTextureDefault=flat&bgColorDefault=f6f6f6&iconColorContent=444444&fcContent=333333&borderColorContent=dddddd&bgTextureContent=flat&bgColorContent=ffffff&iconColorHeader=444444&fcHeader=333333&borderColorHeader=dddddd&bgTextureHeader=flat&bgColorHeader=e9e9e9&cornerRadius=3px&fwDefault=normal&fsDefault=1em&ffDefault=Arial%2CHelvetica%2Csans-serif |
||||
*/ |
||||
|
||||
|
||||
/* Component containers |
||||
----------------------------------*/ |
||||
.ui-widget { |
||||
font-family: Arial,Helvetica,sans-serif; |
||||
font-size: 1em; |
||||
} |
||||
.ui-widget .ui-widget { |
||||
font-size: 1em; |
||||
} |
||||
.ui-widget input, |
||||
.ui-widget select, |
||||
.ui-widget textarea, |
||||
.ui-widget button { |
||||
font-family: Arial,Helvetica,sans-serif; |
||||
font-size: 1em; |
||||
} |
||||
.ui-widget.ui-widget-content { |
||||
border: 1px solid #c5c5c5; |
||||
} |
||||
.ui-widget-content { |
||||
border: 1px solid #dddddd; |
||||
background: #ffffff; |
||||
color: #333333; |
||||
} |
||||
.ui-widget-content a { |
||||
color: #333333; |
||||
} |
||||
.ui-widget-header { |
||||
border: 1px solid #dddddd; |
||||
background: #e9e9e9; |
||||
color: #333333; |
||||
font-weight: bold; |
||||
} |
||||
.ui-widget-header a { |
||||
color: #333333; |
||||
} |
||||
|
||||
/* Interaction states |
||||
----------------------------------*/ |
||||
.ui-state-default, |
||||
.ui-widget-content .ui-state-default, |
||||
.ui-widget-header .ui-state-default, |
||||
.ui-button, |
||||
|
||||
/* We use html here because we need a greater specificity to make sure disabled |
||||
works properly when clicked or hovered */ |
||||
html .ui-button.ui-state-disabled:hover, |
||||
html .ui-button.ui-state-disabled:active { |
||||
border: 1px solid #c5c5c5; |
||||
background: #f6f6f6; |
||||
font-weight: normal; |
||||
color: #454545; |
||||
} |
||||
.ui-state-default a, |
||||
.ui-state-default a:link, |
||||
.ui-state-default a:visited, |
||||
a.ui-button, |
||||
a:link.ui-button, |
||||
a:visited.ui-button, |
||||
.ui-button { |
||||
color: #454545; |
||||
text-decoration: none; |
||||
} |
||||
.ui-state-hover, |
||||
.ui-widget-content .ui-state-hover, |
||||
.ui-widget-header .ui-state-hover, |
||||
.ui-state-focus, |
||||
.ui-widget-content .ui-state-focus, |
||||
.ui-widget-header .ui-state-focus, |
||||
.ui-button:hover, |
||||
.ui-button:focus { |
||||
border: 1px solid #cccccc; |
||||
background: #ededed; |
||||
font-weight: normal; |
||||
color: #2b2b2b; |
||||
} |
||||
.ui-state-hover a, |
||||
.ui-state-hover a:hover, |
||||
.ui-state-hover a:link, |
||||
.ui-state-hover a:visited, |
||||
.ui-state-focus a, |
||||
.ui-state-focus a:hover, |
||||
.ui-state-focus a:link, |
||||
.ui-state-focus a:visited, |
||||
a.ui-button:hover, |
||||
a.ui-button:focus { |
||||
color: #2b2b2b; |
||||
text-decoration: none; |
||||
} |
||||
|
||||
.ui-visual-focus { |
||||
box-shadow: 0 0 3px 1px rgb(94, 158, 214); |
||||
} |
||||
.ui-state-active, |
||||
.ui-widget-content .ui-state-active, |
||||
.ui-widget-header .ui-state-active, |
||||
a.ui-button:active, |
||||
.ui-button:active, |
||||
.ui-button.ui-state-active:hover { |
||||
border: 1px solid #003eff; |
||||
background: #007fff; |
||||
font-weight: normal; |
||||
color: #ffffff; |
||||
} |
||||
.ui-icon-background, |
||||
.ui-state-active .ui-icon-background { |
||||
border: #003eff; |
||||
background-color: #ffffff; |
||||
} |
||||
.ui-state-active a, |
||||
.ui-state-active a:link, |
||||
.ui-state-active a:visited { |
||||
color: #ffffff; |
||||
text-decoration: none; |
||||
} |
||||
|
||||
/* Interaction Cues |
||||
----------------------------------*/ |
||||
.ui-state-highlight, |
||||
.ui-widget-content .ui-state-highlight, |
||||
.ui-widget-header .ui-state-highlight { |
||||
border: 1px solid #dad55e; |
||||
background: #fffa90; |
||||
color: #777620; |
||||
} |
||||
.ui-state-checked { |
||||
border: 1px solid #dad55e; |
||||
background: #fffa90; |
||||
} |
||||
.ui-state-highlight a, |
||||
.ui-widget-content .ui-state-highlight a, |
||||
.ui-widget-header .ui-state-highlight a { |
||||
color: #777620; |
||||
} |
||||
.ui-state-error, |
||||
.ui-widget-content .ui-state-error, |
||||
.ui-widget-header .ui-state-error { |
||||
border: 1px solid #f1a899; |
||||
background: #fddfdf; |
||||
color: #5f3f3f; |
||||
} |
||||
.ui-state-error a, |
||||
.ui-widget-content .ui-state-error a, |
||||
.ui-widget-header .ui-state-error a { |
||||
color: #5f3f3f; |
||||
} |
||||
.ui-state-error-text, |
||||
.ui-widget-content .ui-state-error-text, |
||||
.ui-widget-header .ui-state-error-text { |
||||
color: #5f3f3f; |
||||
} |
||||
.ui-priority-primary, |
||||
.ui-widget-content .ui-priority-primary, |
||||
.ui-widget-header .ui-priority-primary { |
||||
font-weight: bold; |
||||
} |
||||
.ui-priority-secondary, |
||||
.ui-widget-content .ui-priority-secondary, |
||||
.ui-widget-header .ui-priority-secondary { |
||||
opacity: .7; |
||||
filter:Alpha(Opacity=70); /* support: IE8 */ |
||||
font-weight: normal; |
||||
} |
||||
.ui-state-disabled, |
||||
.ui-widget-content .ui-state-disabled, |
||||
.ui-widget-header .ui-state-disabled { |
||||
opacity: .35; |
||||
filter:Alpha(Opacity=35); /* support: IE8 */ |
||||
background-image: none; |
||||
} |
||||
.ui-state-disabled .ui-icon { |
||||
filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ |
||||
} |
||||
|
||||
/* Icons |
||||
----------------------------------*/ |
||||
|
||||
/* states and images */ |
||||
.ui-icon { |
||||
width: 16px; |
||||
height: 16px; |
||||
} |
||||
.ui-icon, |
||||
.ui-widget-content .ui-icon { |
||||
background-image: url("images/ui-icons_444444_256x240.png"); |
||||
} |
||||
.ui-widget-header .ui-icon { |
||||
background-image: url("images/ui-icons_444444_256x240.png"); |
||||
} |
||||
.ui-state-hover .ui-icon, |
||||
.ui-state-focus .ui-icon, |
||||
.ui-button:hover .ui-icon, |
||||
.ui-button:focus .ui-icon { |
||||
background-image: url("images/ui-icons_555555_256x240.png"); |
||||
} |
||||
.ui-state-active .ui-icon, |
||||
.ui-button:active .ui-icon { |
||||
background-image: url("images/ui-icons_ffffff_256x240.png"); |
||||
} |
||||
.ui-state-highlight .ui-icon, |
||||
.ui-button .ui-state-highlight.ui-icon { |
||||
background-image: url("images/ui-icons_777620_256x240.png"); |
||||
} |
||||
.ui-state-error .ui-icon, |
||||
.ui-state-error-text .ui-icon { |
||||
background-image: url("images/ui-icons_cc0000_256x240.png"); |
||||
} |
||||
.ui-button .ui-icon { |
||||
background-image: url("images/ui-icons_777777_256x240.png"); |
||||
} |
||||
|
||||
/* positioning */ |
||||
.ui-icon-blank { background-position: 16px 16px; } |
||||
.ui-icon-caret-1-n { background-position: 0 0; } |
||||
.ui-icon-caret-1-ne { background-position: -16px 0; } |
||||
.ui-icon-caret-1-e { background-position: -32px 0; } |
||||
.ui-icon-caret-1-se { background-position: -48px 0; } |
||||
.ui-icon-caret-1-s { background-position: -65px 0; } |
||||
.ui-icon-caret-1-sw { background-position: -80px 0; } |
||||
.ui-icon-caret-1-w { background-position: -96px 0; } |
||||
.ui-icon-caret-1-nw { background-position: -112px 0; } |
||||
.ui-icon-caret-2-n-s { background-position: -128px 0; } |
||||
.ui-icon-caret-2-e-w { background-position: -144px 0; } |
||||
.ui-icon-triangle-1-n { background-position: 0 -16px; } |
||||
.ui-icon-triangle-1-ne { background-position: -16px -16px; } |
||||
.ui-icon-triangle-1-e { background-position: -32px -16px; } |
||||
.ui-icon-triangle-1-se { background-position: -48px -16px; } |
||||
.ui-icon-triangle-1-s { background-position: -65px -16px; } |
||||
.ui-icon-triangle-1-sw { background-position: -80px -16px; } |
||||
.ui-icon-triangle-1-w { background-position: -96px -16px; } |
||||
.ui-icon-triangle-1-nw { background-position: -112px -16px; } |
||||
.ui-icon-triangle-2-n-s { background-position: -128px -16px; } |
||||
.ui-icon-triangle-2-e-w { background-position: -144px -16px; } |
||||
.ui-icon-arrow-1-n { background-position: 0 -32px; } |
||||
.ui-icon-arrow-1-ne { background-position: -16px -32px; } |
||||
.ui-icon-arrow-1-e { background-position: -32px -32px; } |
||||
.ui-icon-arrow-1-se { background-position: -48px -32px; } |
||||
.ui-icon-arrow-1-s { background-position: -65px -32px; } |
||||
.ui-icon-arrow-1-sw { background-position: -80px -32px; } |
||||
.ui-icon-arrow-1-w { background-position: -96px -32px; } |
||||
.ui-icon-arrow-1-nw { background-position: -112px -32px; } |
||||
.ui-icon-arrow-2-n-s { background-position: -128px -32px; } |
||||
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } |
||||
.ui-icon-arrow-2-e-w { background-position: -160px -32px; } |
||||
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } |
||||
.ui-icon-arrowstop-1-n { background-position: -192px -32px; } |
||||
.ui-icon-arrowstop-1-e { background-position: -208px -32px; } |
||||
.ui-icon-arrowstop-1-s { background-position: -224px -32px; } |
||||
.ui-icon-arrowstop-1-w { background-position: -240px -32px; } |
||||
.ui-icon-arrowthick-1-n { background-position: 1px -48px; } |
||||
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } |
||||
.ui-icon-arrowthick-1-e { background-position: -32px -48px; } |
||||
.ui-icon-arrowthick-1-se { background-position: -48px -48px; } |
||||
.ui-icon-arrowthick-1-s { background-position: -64px -48px; } |
||||
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } |
||||
.ui-icon-arrowthick-1-w { background-position: -96px -48px; } |
||||
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } |
||||
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } |
||||
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } |
||||
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } |
||||
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } |
||||
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } |
||||
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } |
||||
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } |
||||
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } |
||||
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } |
||||
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } |
||||
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } |
||||
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } |
||||
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } |
||||
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } |
||||
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } |
||||
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } |
||||
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } |
||||
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } |
||||
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } |
||||
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } |
||||
.ui-icon-arrow-4 { background-position: 0 -80px; } |
||||
.ui-icon-arrow-4-diag { background-position: -16px -80px; } |
||||
.ui-icon-extlink { background-position: -32px -80px; } |
||||
.ui-icon-newwin { background-position: -48px -80px; } |
||||
.ui-icon-refresh { background-position: -64px -80px; } |
||||
.ui-icon-shuffle { background-position: -80px -80px; } |
||||
.ui-icon-transfer-e-w { background-position: -96px -80px; } |
||||
.ui-icon-transferthick-e-w { background-position: -112px -80px; } |
||||
.ui-icon-folder-collapsed { background-position: 0 -96px; } |
||||
.ui-icon-folder-open { background-position: -16px -96px; } |
||||
.ui-icon-document { background-position: -32px -96px; } |
||||
.ui-icon-document-b { background-position: -48px -96px; } |
||||
.ui-icon-note { background-position: -64px -96px; } |
||||
.ui-icon-mail-closed { background-position: -80px -96px; } |
||||
.ui-icon-mail-open { background-position: -96px -96px; } |
||||
.ui-icon-suitcase { background-position: -112px -96px; } |
||||
.ui-icon-comment { background-position: -128px -96px; } |
||||
.ui-icon-person { background-position: -144px -96px; } |
||||
.ui-icon-print { background-position: -160px -96px; } |
||||
.ui-icon-trash { background-position: -176px -96px; } |
||||
.ui-icon-locked { background-position: -192px -96px; } |
||||
.ui-icon-unlocked { background-position: -208px -96px; } |
||||
.ui-icon-bookmark { background-position: -224px -96px; } |
||||
.ui-icon-tag { background-position: -240px -96px; } |
||||
.ui-icon-home { background-position: 0 -112px; } |
||||
.ui-icon-flag { background-position: -16px -112px; } |
||||
.ui-icon-calendar { background-position: -32px -112px; } |
||||
.ui-icon-cart { background-position: -48px -112px; } |
||||
.ui-icon-pencil { background-position: -64px -112px; } |
||||
.ui-icon-clock { background-position: -80px -112px; } |
||||
.ui-icon-disk { background-position: -96px -112px; } |
||||
.ui-icon-calculator { background-position: -112px -112px; } |
||||
.ui-icon-zoomin { background-position: -128px -112px; } |
||||
.ui-icon-zoomout { background-position: -144px -112px; } |
||||
.ui-icon-search { background-position: -160px -112px; } |
||||
.ui-icon-wrench { background-position: -176px -112px; } |
||||
.ui-icon-gear { background-position: -192px -112px; } |
||||
.ui-icon-heart { background-position: -208px -112px; } |
||||
.ui-icon-star { background-position: -224px -112px; } |
||||
.ui-icon-link { background-position: -240px -112px; } |
||||
.ui-icon-cancel { background-position: 0 -128px; } |
||||
.ui-icon-plus { background-position: -16px -128px; } |
||||
.ui-icon-plusthick { background-position: -32px -128px; } |
||||
.ui-icon-minus { background-position: -48px -128px; } |
||||
.ui-icon-minusthick { background-position: -64px -128px; } |
||||
.ui-icon-close { background-position: -80px -128px; } |
||||
.ui-icon-closethick { background-position: -96px -128px; } |
||||
.ui-icon-key { background-position: -112px -128px; } |
||||
.ui-icon-lightbulb { background-position: -128px -128px; } |
||||
.ui-icon-scissors { background-position: -144px -128px; } |
||||
.ui-icon-clipboard { background-position: -160px -128px; } |
||||
.ui-icon-copy { background-position: -176px -128px; } |
||||
.ui-icon-contact { background-position: -192px -128px; } |
||||
.ui-icon-image { background-position: -208px -128px; } |
||||
.ui-icon-video { background-position: -224px -128px; } |
||||
.ui-icon-script { background-position: -240px -128px; } |
||||
.ui-icon-alert { background-position: 0 -144px; } |
||||
.ui-icon-info { background-position: -16px -144px; } |
||||
.ui-icon-notice { background-position: -32px -144px; } |
||||
.ui-icon-help { background-position: -48px -144px; } |
||||
.ui-icon-check { background-position: -64px -144px; } |
||||
.ui-icon-bullet { background-position: -80px -144px; } |
||||
.ui-icon-radio-on { background-position: -96px -144px; } |
||||
.ui-icon-radio-off { background-position: -112px -144px; } |
||||
.ui-icon-pin-w { background-position: -128px -144px; } |
||||
.ui-icon-pin-s { background-position: -144px -144px; } |
||||
.ui-icon-play { background-position: 0 -160px; } |
||||
.ui-icon-pause { background-position: -16px -160px; } |
||||
.ui-icon-seek-next { background-position: -32px -160px; } |
||||
.ui-icon-seek-prev { background-position: -48px -160px; } |
||||
.ui-icon-seek-end { background-position: -64px -160px; } |
||||
.ui-icon-seek-start { background-position: -80px -160px; } |
||||
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ |
||||
.ui-icon-seek-first { background-position: -80px -160px; } |
||||
.ui-icon-stop { background-position: -96px -160px; } |
||||
.ui-icon-eject { background-position: -112px -160px; } |
||||
.ui-icon-volume-off { background-position: -128px -160px; } |
||||
.ui-icon-volume-on { background-position: -144px -160px; } |
||||
.ui-icon-power { background-position: 0 -176px; } |
||||
.ui-icon-signal-diag { background-position: -16px -176px; } |
||||
.ui-icon-signal { background-position: -32px -176px; } |
||||
.ui-icon-battery-0 { background-position: -48px -176px; } |
||||
.ui-icon-battery-1 { background-position: -64px -176px; } |
||||
.ui-icon-battery-2 { background-position: -80px -176px; } |
||||
.ui-icon-battery-3 { background-position: -96px -176px; } |
||||
.ui-icon-circle-plus { background-position: 0 -192px; } |
||||
.ui-icon-circle-minus { background-position: -16px -192px; } |
||||
.ui-icon-circle-close { background-position: -32px -192px; } |
||||
.ui-icon-circle-triangle-e { background-position: -48px -192px; } |
||||
.ui-icon-circle-triangle-s { background-position: -64px -192px; } |
||||
.ui-icon-circle-triangle-w { background-position: -80px -192px; } |
||||
.ui-icon-circle-triangle-n { background-position: -96px -192px; } |
||||
.ui-icon-circle-arrow-e { background-position: -112px -192px; } |
||||
.ui-icon-circle-arrow-s { background-position: -128px -192px; } |
||||
.ui-icon-circle-arrow-w { background-position: -144px -192px; } |
||||
.ui-icon-circle-arrow-n { background-position: -160px -192px; } |
||||
.ui-icon-circle-zoomin { background-position: -176px -192px; } |
||||
.ui-icon-circle-zoomout { background-position: -192px -192px; } |
||||
.ui-icon-circle-check { background-position: -208px -192px; } |
||||
.ui-icon-circlesmall-plus { background-position: 0 -208px; } |
||||
.ui-icon-circlesmall-minus { background-position: -16px -208px; } |
||||
.ui-icon-circlesmall-close { background-position: -32px -208px; } |
||||
.ui-icon-squaresmall-plus { background-position: -48px -208px; } |
||||
.ui-icon-squaresmall-minus { background-position: -64px -208px; } |
||||
.ui-icon-squaresmall-close { background-position: -80px -208px; } |
||||
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } |
||||
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } |
||||
.ui-icon-grip-solid-vertical { background-position: -32px -224px; } |
||||
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } |
||||
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } |
||||
.ui-icon-grip-diagonal-se { background-position: -80px -224px; } |
||||
|
||||
|
||||
/* Misc visuals |
||||
----------------------------------*/ |
||||
|
||||
/* Corner radius */ |
||||
.ui-corner-all, |
||||
.ui-corner-top, |
||||
.ui-corner-left, |
||||
.ui-corner-tl { |
||||
border-top-left-radius: 3px; |
||||
} |
||||
.ui-corner-all, |
||||
.ui-corner-top, |
||||
.ui-corner-right, |
||||
.ui-corner-tr { |
||||
border-top-right-radius: 3px; |
||||
} |
||||
.ui-corner-all, |
||||
.ui-corner-bottom, |
||||
.ui-corner-left, |
||||
.ui-corner-bl { |
||||
border-bottom-left-radius: 3px; |
||||
} |
||||
.ui-corner-all, |
||||
.ui-corner-bottom, |
||||
.ui-corner-right, |
||||
.ui-corner-br { |
||||
border-bottom-right-radius: 3px; |
||||
} |
||||
|
||||
/* Overlays */ |
||||
.ui-widget-overlay { |
||||
background: #aaaaaa; |
||||
opacity: .3; |
||||
filter: Alpha(Opacity=30); /* support: IE8 */ |
||||
} |
||||
.ui-widget-shadow { |
||||
-webkit-box-shadow: 0px 0px 5px #666666; |
||||
box-shadow: 0px 0px 5px #666666; |
||||
} |
@ -0,0 +1,74 @@ |
||||
{ |
||||
"name": "jquery-ui", |
||||
"title": "jQuery UI", |
||||
"description": "A curated set of user interface interactions, effects, widgets, and themes built on top of the jQuery JavaScript Library.", |
||||
"version": "1.12.1", |
||||
"homepage": "http://jqueryui.com", |
||||
"author": { |
||||
"name": "jQuery Foundation and other contributors", |
||||
"url": "https://github.com/jquery/jquery-ui/blob/1.12.1/AUTHORS.txt" |
||||
}, |
||||
"main": "ui/widget.js", |
||||
"maintainers": [ |
||||
{ |
||||
"name": "Scott González", |
||||
"email": "scott.gonzalez@gmail.com", |
||||
"url": "http://scottgonzalez.com" |
||||
}, |
||||
{ |
||||
"name": "Jörn Zaefferer", |
||||
"email": "joern.zaefferer@gmail.com", |
||||
"url": "http://bassistance.de" |
||||
}, |
||||
{ |
||||
"name": "Mike Sherov", |
||||
"email": "mike.sherov@gmail.com", |
||||
"url": "http://mike.sherov.com" |
||||
}, |
||||
{ |
||||
"name": "TJ VanToll", |
||||
"email": "tj.vantoll@gmail.com", |
||||
"url": "http://tjvantoll.com" |
||||
}, |
||||
{ |
||||
"name": "Felix Nagel", |
||||
"email": "info@felixnagel.com", |
||||
"url": "http://www.felixnagel.com" |
||||
}, |
||||
{ |
||||
"name": "Alex Schmitz", |
||||
"email": "arschmitz@gmail.com", |
||||
"url": "https://github.com/arschmitz" |
||||
} |
||||
], |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "git://github.com/jquery/jquery-ui.git" |
||||
}, |
||||
"bugs": "https://bugs.jqueryui.com/", |
||||
"license": "MIT", |
||||
"scripts": { |
||||
"test": "grunt" |
||||
}, |
||||
"dependencies": {}, |
||||
"devDependencies": { |
||||
"commitplease": "2.3.0", |
||||
"grunt": "0.4.5", |
||||
"grunt-bowercopy": "1.2.4", |
||||
"grunt-cli": "0.1.13", |
||||
"grunt-compare-size": "0.4.0", |
||||
"grunt-contrib-concat": "0.5.1", |
||||
"grunt-contrib-csslint": "0.5.0", |
||||
"grunt-contrib-jshint": "0.12.0", |
||||
"grunt-contrib-qunit": "1.0.1", |
||||
"grunt-contrib-requirejs": "0.4.4", |
||||
"grunt-contrib-uglify": "0.11.1", |
||||
"grunt-git-authors": "3.1.0", |
||||
"grunt-html": "6.0.0", |
||||
"grunt-jscs": "2.1.0", |
||||
"load-grunt-tasks": "3.4.0", |
||||
"rimraf": "2.5.1", |
||||
"testswarm": "1.1.0" |
||||
}, |
||||
"keywords": [] |
||||
} |
@ -0,0 +1,16 @@ |
||||
gMainApp.component( "main-app", { |
||||
|
||||
data() { return { |
||||
isLoaded: false, |
||||
} ; }, |
||||
|
||||
template: ` |
||||
<div> Hello, world! </div> |
||||
<div v-if="isLoaded" id="_mainapp-loaded_" /> |
||||
`,
|
||||
|
||||
mounted() { |
||||
this.isLoaded = true ; |
||||
}, |
||||
|
||||
} ) ; |
@ -0,0 +1,82 @@ |
||||
'use strict'; |
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true }); |
||||
|
||||
var runtimeDom = require('@vue/runtime-dom'); |
||||
var shared = require('@vue/shared'); |
||||
var compilerDom = require('@vue/compiler-dom'); |
||||
|
||||
function _interopNamespace(e) { |
||||
if (e && e.__esModule) return e; |
||||
var n = Object.create(null); |
||||
if (e) { |
||||
Object.keys(e).forEach(function (k) { |
||||
n[k] = e[k]; |
||||
}); |
||||
} |
||||
n['default'] = e; |
||||
return Object.freeze(n); |
||||
} |
||||
|
||||
var runtimeDom__namespace = /*#__PURE__*/_interopNamespace(runtimeDom); |
||||
|
||||
function initDev() { |
||||
const target = shared.getGlobalThis(); |
||||
target.__VUE__ = true; |
||||
runtimeDom.setDevtoolsHook(target.__VUE_DEVTOOLS_GLOBAL_HOOK__); |
||||
} |
||||
|
||||
// This entry is the "full-build" that includes both the runtime
|
||||
initDev(); |
||||
const compileCache = Object.create(null); |
||||
function compileToFunction(template, options) { |
||||
if (!shared.isString(template)) { |
||||
if (template.nodeType) { |
||||
template = template.innerHTML; |
||||
} |
||||
else { |
||||
runtimeDom.warn(`invalid template option: `, template); |
||||
return shared.NOOP; |
||||
} |
||||
} |
||||
const key = template; |
||||
const cached = compileCache[key]; |
||||
if (cached) { |
||||
return cached; |
||||
} |
||||
if (template[0] === '#') { |
||||
const el = document.querySelector(template); |
||||
if ( !el) { |
||||
runtimeDom.warn(`Template element not found or is empty: ${template}`); |
||||
} |
||||
// __UNSAFE__
|
||||
// Reason: potential execution of JS expressions in in-DOM template.
|
||||
// The user must make sure the in-DOM template is trusted. If it's rendered
|
||||
// by the server, the template should not contain any user data.
|
||||
template = el ? el.innerHTML : ``; |
||||
} |
||||
const { code } = compilerDom.compile(template, shared.extend({ |
||||
hoistStatic: true, |
||||
onError(err) { |
||||
{ |
||||
const message = `Template compilation error: ${err.message}`; |
||||
const codeFrame = err.loc && |
||||
shared.generateCodeFrame(template, err.loc.start.offset, err.loc.end.offset); |
||||
runtimeDom.warn(codeFrame ? `${message}\n${codeFrame}` : message); |
||||
} |
||||
} |
||||
}, options)); |
||||
// The wildcard import results in a huge object with every export
|
||||
// with keys that cannot be mangled, and can be quite heavy size-wise.
|
||||
// In the global build we know `Vue` is available globally so we can avoid
|
||||
// the wildcard object.
|
||||
const render = ( new Function('Vue', code)(runtimeDom__namespace)); |
||||
render._rc = true; |
||||
return (compileCache[key] = render); |
||||
} |
||||
runtimeDom.registerRuntimeCompiler(compileToFunction); |
||||
|
||||
Object.keys(runtimeDom).forEach(function (k) { |
||||
if (k !== 'default') exports[k] = runtimeDom[k]; |
||||
}); |
||||
exports.compile = compileToFunction; |
@ -0,0 +1,69 @@ |
||||
'use strict'; |
||||
|
||||
Object.defineProperty(exports, '__esModule', { value: true }); |
||||
|
||||
var runtimeDom = require('@vue/runtime-dom'); |
||||
var shared = require('@vue/shared'); |
||||
var compilerDom = require('@vue/compiler-dom'); |
||||
|
||||
function _interopNamespace(e) { |
||||
if (e && e.__esModule) return e; |
||||
var n = Object.create(null); |
||||
if (e) { |
||||
Object.keys(e).forEach(function (k) { |
||||
n[k] = e[k]; |
||||
}); |
||||
} |
||||
n['default'] = e; |
||||
return Object.freeze(n); |
||||
} |
||||
|
||||
var runtimeDom__namespace = /*#__PURE__*/_interopNamespace(runtimeDom); |
||||
|
||||
// This entry is the "full-build" that includes both the runtime
|
||||
const compileCache = Object.create(null); |
||||
function compileToFunction(template, options) { |
||||
if (!shared.isString(template)) { |
||||
if (template.nodeType) { |
||||
template = template.innerHTML; |
||||
} |
||||
else { |
||||
return shared.NOOP; |
||||
} |
||||
} |
||||
const key = template; |
||||
const cached = compileCache[key]; |
||||
if (cached) { |
||||
return cached; |
||||
} |
||||
if (template[0] === '#') { |
||||
const el = document.querySelector(template); |
||||
// __UNSAFE__
|
||||
// Reason: potential execution of JS expressions in in-DOM template.
|
||||
// The user must make sure the in-DOM template is trusted. If it's rendered
|
||||
// by the server, the template should not contain any user data.
|
||||
template = el ? el.innerHTML : ``; |
||||
} |
||||
const { code } = compilerDom.compile(template, shared.extend({ |
||||
hoistStatic: true, |
||||
onError(err) { |
||||
{ |
||||
/* istanbul ignore next */ |
||||
throw err; |
||||
} |
||||
} |
||||
}, options)); |
||||
// The wildcard import results in a huge object with every export
|
||||
// with keys that cannot be mangled, and can be quite heavy size-wise.
|
||||
// In the global build we know `Vue` is available globally so we can avoid
|
||||
// the wildcard object.
|
||||
const render = ( new Function('Vue', code)(runtimeDom__namespace)); |
||||
render._rc = true; |
||||
return (compileCache[key] = render); |
||||
} |
||||
runtimeDom.registerRuntimeCompiler(compileToFunction); |
||||
|
||||
Object.keys(runtimeDom).forEach(function (k) { |
||||
if (k !== 'default') exports[k] = runtimeDom[k]; |
||||
}); |
||||
exports.compile = compileToFunction; |
@ -0,0 +1,8 @@ |
||||
import { CompilerOptions } from '@vue/compiler-dom'; |
||||
import { RenderFunction } from '@vue/runtime-dom'; |
||||
|
||||
export declare function compile(template: string | HTMLElement, options?: CompilerOptions): RenderFunction; |
||||
|
||||
export * from "@vue/runtime-dom"; |
||||
|
||||
export { } |
@ -0,0 +1,72 @@ |
||||
import * as runtimeDom from '@vue/runtime-dom'; |
||||
import { setDevtoolsHook, initCustomFormatter, warn, registerRuntimeCompiler } from '@vue/runtime-dom'; |
||||
export * from '@vue/runtime-dom'; |
||||
import { getGlobalThis, isString, NOOP, extend, generateCodeFrame } from '@vue/shared'; |
||||
import { compile } from '@vue/compiler-dom'; |
||||
|
||||
function initDev() { |
||||
const target = getGlobalThis(); |
||||
target.__VUE__ = true; |
||||
setDevtoolsHook(target.__VUE_DEVTOOLS_GLOBAL_HOOK__); |
||||
{ |
||||
console.info(`You are running a development build of Vue.\n` + |
||||
`Make sure to use the production build (*.prod.js) when deploying for production.`); |
||||
initCustomFormatter(); |
||||
} |
||||
} |
||||
|
||||
// This entry is the "full-build" that includes both the runtime
|
||||
(process.env.NODE_ENV !== 'production') && initDev(); |
||||
const compileCache = Object.create(null); |
||||
function compileToFunction(template, options) { |
||||
if (!isString(template)) { |
||||
if (template.nodeType) { |
||||
template = template.innerHTML; |
||||
} |
||||
else { |
||||
(process.env.NODE_ENV !== 'production') && warn(`invalid template option: `, template); |
||||
return NOOP; |
||||
} |
||||
} |
||||
const key = template; |
||||
const cached = compileCache[key]; |
||||
if (cached) { |
||||
return cached; |
||||
} |
||||
if (template[0] === '#') { |
||||
const el = document.querySelector(template); |
||||
if ((process.env.NODE_ENV !== 'production') && !el) { |
||||
warn(`Template element not found or is empty: ${template}`); |
||||
} |
||||
// __UNSAFE__
|
||||
// Reason: potential execution of JS expressions in in-DOM template.
|
||||
// The user must make sure the in-DOM template is trusted. If it's rendered
|
||||
// by the server, the template should not contain any user data.
|
||||
template = el ? el.innerHTML : ``; |
||||
} |
||||
const { code } = compile(template, extend({ |
||||
hoistStatic: true, |
||||
onError(err) { |
||||
if ((process.env.NODE_ENV !== 'production')) { |
||||
const message = `Template compilation error: ${err.message}`; |
||||
const codeFrame = err.loc && |
||||
generateCodeFrame(template, err.loc.start.offset, err.loc.end.offset); |
||||
warn(codeFrame ? `${message}\n${codeFrame}` : message); |
||||
} |
||||
else { |
||||
/* istanbul ignore next */ |
||||
throw err; |
||||
} |
||||
} |
||||
}, options)); |
||||
// The wildcard import results in a huge object with every export
|
||||
// with keys that cannot be mangled, and can be quite heavy size-wise.
|
||||
// In the global build we know `Vue` is available globally so we can avoid
|
||||
// the wildcard object.
|
||||
const render = ( new Function('Vue', code)(runtimeDom)); |
||||
render._rc = true; |
||||
return (compileCache[key] = render); |
||||
} |
||||
registerRuntimeCompiler(compileToFunction); |
||||
|
||||
export { compileToFunction as compile }; |
@ -0,0 +1,26 @@ |
||||
import { setDevtoolsHook, initCustomFormatter, warn } from '@vue/runtime-dom'; |
||||
export * from '@vue/runtime-dom'; |
||||
import { getGlobalThis } from '@vue/shared'; |
||||
|
||||
function initDev() { |
||||
const target = getGlobalThis(); |
||||
target.__VUE__ = true; |
||||
setDevtoolsHook(target.__VUE_DEVTOOLS_GLOBAL_HOOK__); |
||||
{ |
||||
console.info(`You are running a development build of Vue.\n` + |
||||
`Make sure to use the production build (*.prod.js) when deploying for production.`); |
||||
initCustomFormatter(); |
||||
} |
||||
} |
||||
|
||||
// This entry exports the runtime only, and is built as
|
||||
(process.env.NODE_ENV !== 'production') && initDev(); |
||||
const compile = () => { |
||||
if ((process.env.NODE_ENV !== 'production')) { |
||||
warn(`Runtime compilation is not supported in this build of Vue.` + |
||||
( ` Configure your bundler to alias "vue" to "vue/dist/vue.esm-bundler.js".` |
||||
) /* should not happen */); |
||||
} |
||||
}; |
||||
|
||||
export { compile }; |
@ -0,0 +1,38 @@ |
||||
<!DOCTYPE html> |
||||
<html lang="en"> |
||||
|
||||
<head> |
||||
<meta charset="utf-8"> |
||||
<title> {{APP_NAME}} </title> |
||||
<link rel="shortcut icon" href="{{url_for('static', filename='images/favicon.ico')}}"> |
||||
<link rel="stylesheet" type="text/css" href="{{ url_for( 'static', |
||||
filename = 'jquery-ui/jquery-ui' + WEB_DEBUG_MIN + '.css' |
||||
) }}" /> |
||||
</head> |
||||
|
||||
<body> |
||||
<div id="main-app"></div> |
||||
</body> |
||||
|
||||
{%if WEB_DEBUG%} |
||||
<script src="{{ url_for( 'static', filename='vue/vue.global.js' ) }}"></script> |
||||
{%else%} |
||||
<script src="{{ url_for( 'static', filename='vue/vue.global.prod.js' ) }}"></script> |
||||
{%endif%} |
||||
<script src="{{ url_for( 'static', |
||||
filename = 'jquery/jquery-3.6.0' + WEB_DEBUG_MIN + '.js' |
||||
) }}"></script> |
||||
<script src="{{ url_for( 'static', |
||||
filename = 'jquery-ui/jquery-ui' + WEB_DEBUG_MIN + '.js' |
||||
) }}"></script> |
||||
|
||||
<script> |
||||
// create the main application |
||||
gMainApp = Vue.createApp( { |
||||
template: "<main-app />", |
||||
} ) ; |
||||
</script> |
||||
<script src="{{url_for('static',filename='src/MainApp.js')}}"></script> |
||||
<script> gMainApp.mount( "#main-app" ) ; </script> |
||||
|
||||
</html> |
@ -0,0 +1,3 @@ |
||||
""" Module definitions. """ |
||||
|
||||
pytest_options = None |
@ -0,0 +1,17 @@ |
||||
cd $( dirname "$0" )/proto |
||||
|
||||
# initialize |
||||
rm -rf generated 2>/dev/null |
||||
mkdir generated |
||||
|
||||
# compile the protobuf definitions |
||||
python -m grpc_tools.protoc \ |
||||
--proto_path . \ |
||||
--python_out=generated/ \ |
||||
--grpc_python_out=generated/ \ |
||||
control_tests.proto |
||||
|
||||
# FUDGE! Fix a bogus import :-/ |
||||
sed --in-place \ |
||||
's/^import control_tests_pb2 as control__tests__pb2$/import asl_rulebook2.webapp.tests.proto.generated.control_tests_pb2 as control__tests__pb2/' \ |
||||
generated/control_tests_pb2_grpc.py |
@ -0,0 +1,27 @@ |
||||
""" Allow the test suite to control a remote webapp server. """ |
||||
|
||||
import grpc |
||||
from google.protobuf.empty_pb2 import Empty |
||||
|
||||
from asl_rulebook2.webapp.tests.proto.generated.control_tests_pb2_grpc import ControlTestsStub |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
# NOTE: The API for this class should be kept in sync with ControlTestsServicer. |
||||
|
||||
class ControlTests: |
||||
"""Control a remote webapp server.""" |
||||
|
||||
def __init__( self, addr ): |
||||
# initialize |
||||
channel = grpc.insecure_channel( addr ) |
||||
self._stub = ControlTestsStub( channel ) |
||||
|
||||
def start_tests( self ): |
||||
"""Start a new test run.""" |
||||
self._stub.startTests( Empty() ) |
||||
return self |
||||
|
||||
def end_tests( self ): |
||||
"""End a test run.""" |
||||
self._stub.endTests( Empty() ) |
@ -0,0 +1,49 @@ |
||||
""" gRPC servicer that allows the webapp server to be controlled. """ |
||||
|
||||
import inspect |
||||
import logging |
||||
|
||||
from google.protobuf.empty_pb2 import Empty |
||||
|
||||
from asl_rulebook2.webapp.tests.proto.generated.control_tests_pb2_grpc \ |
||||
import ControlTestsServicer as BaseControlTestsServicer |
||||
|
||||
_logger = logging.getLogger( "control_tests" ) |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
# NOTE: The API for this class should be kept in sync with ControlTests. |
||||
|
||||
class ControlTestsServicer( BaseControlTestsServicer ): |
||||
"""Allows a webapp server to be controlled by a remote client.""" |
||||
|
||||
def __init__( self, webapp ): |
||||
# initialize |
||||
self._webapp = webapp |
||||
|
||||
def __del__( self ): |
||||
# clean up |
||||
self.cleanup() |
||||
|
||||
def cleanup( self ): |
||||
"""Clean up.""" |
||||
# nb: nothing required here, for now |
||||
|
||||
def startTests( self, request, context ): |
||||
"""Start a new test run.""" |
||||
self._log_request( request, context ) |
||||
return Empty() |
||||
|
||||
def endTests( self, request, context ): |
||||
"""End a test run.""" |
||||
self._log_request( request, context ) |
||||
self.cleanup() |
||||
return Empty() |
||||
|
||||
@staticmethod |
||||
def _log_request( req, ctx ): #pylint: disable=unused-argument |
||||
"""Log a request.""" |
||||
# get the entry-point name |
||||
msg = "{}()".format( inspect.currentframe().f_back.f_code.co_name ) |
||||
# log the message |
||||
_logger.info( "TEST CONTROL: %s", msg ) |
@ -0,0 +1,11 @@ |
||||
syntax = "proto3" ; |
||||
|
||||
import "google/protobuf/empty.proto" ; |
||||
|
||||
// -------------------------------------------------------------------- |
||||
|
||||
service ControlTests |
||||
{ |
||||
rpc startTests( google.protobuf.Empty ) returns ( google.protobuf.Empty ) ; |
||||
rpc endTests( google.protobuf.Empty ) returns ( google.protobuf.Empty ) ; |
||||
} |
@ -0,0 +1,68 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by the protocol buffer compiler. DO NOT EDIT! |
||||
# source: control_tests.proto |
||||
"""Generated protocol buffer code.""" |
||||
from google.protobuf import descriptor as _descriptor |
||||
from google.protobuf import message as _message |
||||
from google.protobuf import reflection as _reflection |
||||
from google.protobuf import symbol_database as _symbol_database |
||||
# @@protoc_insertion_point(imports) |
||||
|
||||
_sym_db = _symbol_database.Default() |
||||
|
||||
|
||||
from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 |
||||
|
||||
|
||||
DESCRIPTOR = _descriptor.FileDescriptor( |
||||
name='control_tests.proto', |
||||
package='', |
||||
syntax='proto3', |
||||
serialized_options=None, |
||||
create_key=_descriptor._internal_create_key, |
||||
serialized_pb=b'\n\x13\x63ontrol_tests.proto\x1a\x1bgoogle/protobuf/empty.proto2\x88\x01\n\x0c\x43ontrolTests\x12<\n\nstartTests\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Empty\x12:\n\x08\x65ndTests\x12\x16.google.protobuf.Empty\x1a\x16.google.protobuf.Emptyb\x06proto3' |
||||
, |
||||
dependencies=[google_dot_protobuf_dot_empty__pb2.DESCRIPTOR,]) |
||||
|
||||
|
||||
|
||||
_sym_db.RegisterFileDescriptor(DESCRIPTOR) |
||||
|
||||
|
||||
|
||||
_CONTROLTESTS = _descriptor.ServiceDescriptor( |
||||
name='ControlTests', |
||||
full_name='ControlTests', |
||||
file=DESCRIPTOR, |
||||
index=0, |
||||
serialized_options=None, |
||||
create_key=_descriptor._internal_create_key, |
||||
serialized_start=53, |
||||
serialized_end=189, |
||||
methods=[ |
||||
_descriptor.MethodDescriptor( |
||||
name='startTests', |
||||
full_name='ControlTests.startTests', |
||||
index=0, |
||||
containing_service=None, |
||||
input_type=google_dot_protobuf_dot_empty__pb2._EMPTY, |
||||
output_type=google_dot_protobuf_dot_empty__pb2._EMPTY, |
||||
serialized_options=None, |
||||
create_key=_descriptor._internal_create_key, |
||||
), |
||||
_descriptor.MethodDescriptor( |
||||
name='endTests', |
||||
full_name='ControlTests.endTests', |
||||
index=1, |
||||
containing_service=None, |
||||
input_type=google_dot_protobuf_dot_empty__pb2._EMPTY, |
||||
output_type=google_dot_protobuf_dot_empty__pb2._EMPTY, |
||||
serialized_options=None, |
||||
create_key=_descriptor._internal_create_key, |
||||
), |
||||
]) |
||||
_sym_db.RegisterServiceDescriptor(_CONTROLTESTS) |
||||
|
||||
DESCRIPTOR.services_by_name['ControlTests'] = _CONTROLTESTS |
||||
|
||||
# @@protoc_insertion_point(module_scope) |
@ -0,0 +1,105 @@ |
||||
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT! |
||||
"""Client and server classes corresponding to protobuf-defined services.""" |
||||
import grpc |
||||
|
||||
from google.protobuf import empty_pb2 as google_dot_protobuf_dot_empty__pb2 |
||||
|
||||
|
||||
class ControlTestsStub(object): |
||||
"""-------------------------------------------------------------------- |
||||
|
||||
""" |
||||
|
||||
def __init__(self, channel): |
||||
"""Constructor. |
||||
|
||||
Args: |
||||
channel: A grpc.Channel. |
||||
""" |
||||
self.startTests = channel.unary_unary( |
||||
'/ControlTests/startTests', |
||||
request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, |
||||
response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, |
||||
) |
||||
self.endTests = channel.unary_unary( |
||||
'/ControlTests/endTests', |
||||
request_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, |
||||
response_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, |
||||
) |
||||
|
||||
|
||||
class ControlTestsServicer(object): |
||||
"""-------------------------------------------------------------------- |
||||
|
||||
""" |
||||
|
||||
def startTests(self, request, context): |
||||
"""Missing associated documentation comment in .proto file.""" |
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED) |
||||
context.set_details('Method not implemented!') |
||||
raise NotImplementedError('Method not implemented!') |
||||
|
||||
def endTests(self, request, context): |
||||
"""Missing associated documentation comment in .proto file.""" |
||||
context.set_code(grpc.StatusCode.UNIMPLEMENTED) |
||||
context.set_details('Method not implemented!') |
||||
raise NotImplementedError('Method not implemented!') |
||||
|
||||
|
||||
def add_ControlTestsServicer_to_server(servicer, server): |
||||
rpc_method_handlers = { |
||||
'startTests': grpc.unary_unary_rpc_method_handler( |
||||
servicer.startTests, |
||||
request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, |
||||
response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, |
||||
), |
||||
'endTests': grpc.unary_unary_rpc_method_handler( |
||||
servicer.endTests, |
||||
request_deserializer=google_dot_protobuf_dot_empty__pb2.Empty.FromString, |
||||
response_serializer=google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, |
||||
), |
||||
} |
||||
generic_handler = grpc.method_handlers_generic_handler( |
||||
'ControlTests', rpc_method_handlers) |
||||
server.add_generic_rpc_handlers((generic_handler,)) |
||||
|
||||
|
||||
# This class is part of an EXPERIMENTAL API. |
||||
class ControlTests(object): |
||||
"""-------------------------------------------------------------------- |
||||
|
||||
""" |
||||
|
||||
@staticmethod |
||||
def startTests(request, |
||||
target, |
||||
options=(), |
||||
channel_credentials=None, |
||||
call_credentials=None, |
||||
insecure=False, |
||||
compression=None, |
||||
wait_for_ready=None, |
||||
timeout=None, |
||||
metadata=None): |
||||
return grpc.experimental.unary_unary(request, target, '/ControlTests/startTests', |
||||
google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, |
||||
google_dot_protobuf_dot_empty__pb2.Empty.FromString, |
||||
options, channel_credentials, |
||||
insecure, call_credentials, compression, wait_for_ready, timeout, metadata) |
||||
|
||||
@staticmethod |
||||
def endTests(request, |
||||
target, |
||||
options=(), |
||||
channel_credentials=None, |
||||
call_credentials=None, |
||||
insecure=False, |
||||
compression=None, |
||||
wait_for_ready=None, |
||||
timeout=None, |
||||
metadata=None): |
||||
return grpc.experimental.unary_unary(request, target, '/ControlTests/endTests', |
||||
google_dot_protobuf_dot_empty__pb2.Empty.SerializeToString, |
||||
google_dot_protobuf_dot_empty__pb2.Empty.FromString, |
||||
options, channel_credentials, |
||||
insecure, call_credentials, compression, wait_for_ready, timeout, metadata) |
@ -0,0 +1,10 @@ |
||||
""" Test basic functionality. """ |
||||
|
||||
from asl_rulebook2.webapp.tests.utils import init_webapp |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
def test_hello( webapp, webdriver ): |
||||
"""Test basic functionality.""" |
||||
|
||||
init_webapp( webapp, webdriver ) |
@ -0,0 +1,50 @@ |
||||
""" Helper utilities. """ |
||||
|
||||
from selenium.webdriver.support.ui import WebDriverWait |
||||
from selenium.common.exceptions import NoSuchElementException |
||||
|
||||
_webapp = None |
||||
_webdriver = None |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
def init_webapp( webapp, webdriver, **options ): |
||||
"""Initialize the webapp.""" |
||||
|
||||
# initialize |
||||
global _webapp, _webdriver |
||||
_webapp = webapp |
||||
_webdriver = webdriver |
||||
|
||||
# load the webapp |
||||
webdriver.get( webapp.url_for( "main", **options ) ) |
||||
_wait_for_webapp() |
||||
|
||||
# reset the user settings |
||||
webdriver.delete_all_cookies() |
||||
|
||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
||||
|
||||
def _wait_for_webapp(): |
||||
"""Wait for the webapp to finish initialization.""" |
||||
timeout = 5 |
||||
wait_for( timeout, lambda: find_child("#_mainapp-loaded_") ) |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
def find_child( sel, parent=None ): |
||||
"""Find a single child element.""" |
||||
try: |
||||
if parent is None: |
||||
parent = _webdriver |
||||
return parent.find_element_by_css_selector( sel ) |
||||
except NoSuchElementException: |
||||
return None |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
def wait_for( timeout, func ): |
||||
"""Wait for a condition to become true.""" |
||||
WebDriverWait( _webdriver, timeout, poll_frequency=0.1 ).until( |
||||
lambda driver: func() |
||||
) |
@ -0,0 +1,10 @@ |
||||
"""Helper functions.""" |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
def parse_int( val, default=None ): |
||||
"""Parse an integer.""" |
||||
try: |
||||
return int( val ) |
||||
except (ValueError, TypeError): |
||||
return default |
@ -0,0 +1,3 @@ |
||||
[Site Config] |
||||
|
||||
IS_CONTAINER = 1 |
@ -0,0 +1,5 @@ |
||||
#!/bin/sh |
||||
|
||||
# run the webapp server |
||||
python3 /app/asl_rulebook2/webapp/run_server.py \ |
||||
--addr 0.0.0.0 |
@ -1,2 +1,5 @@ |
||||
pytest==6.2.2 |
||||
selenium==3.141.0 |
||||
grpcio==1.36.1 |
||||
protobuf==3.15.6 |
||||
pylint==2.6.2 |
||||
|
@ -1,5 +1,7 @@ |
||||
# python 3.8.7 |
||||
|
||||
flask==1.1.2 |
||||
pdfminer.six==20201018 |
||||
pikepdf==2.5.2 |
||||
pyyaml==5.4.1 |
||||
click==7.1.2 |
||||
|
@ -0,0 +1,104 @@ |
||||
#!/usr/bin/env bash |
||||
# Helper script that builds and launches the Docker container. |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
function main |
||||
{ |
||||
# initialize |
||||
cd $( dirname "$0" ) |
||||
PORT=5020 |
||||
IMAGE_TAG=latest |
||||
CONTAINER_NAME=asl-rulebook2 |
||||
DETACH= |
||||
NO_BUILD= |
||||
CONTROL_TESTS_PORT= |
||||
|
||||
# parse the command-line arguments |
||||
if [ $# -eq 0 ]; then |
||||
print_help |
||||
exit 0 |
||||
fi |
||||
params="$(getopt -o p:t:d -l port:,tag:,name:,detach,no-build,control-tests-port:,help --name "$0" -- "$@")" |
||||
if [ $? -ne 0 ]; then exit 1; fi |
||||
eval set -- "$params" |
||||
while true; do |
||||
case "$1" in |
||||
-p | --port ) |
||||
PORT=$2 |
||||
shift 2 ;; |
||||
-t | --tag ) |
||||
IMAGE_TAG=$2 |
||||
shift 2 ;; |
||||
--name ) |
||||
CONTAINER_NAME=$2 |
||||
shift 2 ;; |
||||
-d | --detach ) |
||||
DETACH=--detach |
||||
shift 1 ;; |
||||
--no-build ) |
||||
NO_BUILD=1 |
||||
shift 1 ;; |
||||
--control-tests-port ) |
||||
CONTROL_TESTS_PORT=$2 |
||||
shift 2 ;; |
||||
--help ) |
||||
print_help |
||||
exit 0 ;; |
||||
-- ) shift ; break ;; |
||||
* ) |
||||
echo "Unknown option: $1" >&2 |
||||
exit 1 ;; |
||||
esac |
||||
done |
||||
|
||||
# check if testing has been enabled |
||||
if [ -n "$CONTROL_TESTS_PORT" ]; then |
||||
CONTROL_TESTS_PORT_BUILD="--build-arg CONTROL_TESTS_PORT=$CONTROL_TESTS_PORT" |
||||
CONTROL_TESTS_PORT_RUN="--env CONTROL_TESTS_PORT=$CONTROL_TESTS_PORT --publish $CONTROL_TESTS_PORT:$CONTROL_TESTS_PORT" |
||||
fi |
||||
|
||||
# build the image |
||||
if [ -z "$NO_BUILD" ]; then |
||||
echo Building the \"$IMAGE_TAG\" image... |
||||
docker build \ |
||||
--tag asl-rulebook2:$IMAGE_TAG \ |
||||
$CONTROL_TESTS_PORT_BUILD \ |
||||
. 2>&1 \ |
||||
| sed -e 's/^/ /' |
||||
if [ ${PIPESTATUS[0]} -ne 0 ]; then exit 10 ; fi |
||||
echo |
||||
fi |
||||
|
||||
# launch the container |
||||
echo Launching the \"$IMAGE_TAG\" image as \"$CONTAINER_NAME\"... |
||||
docker run \ |
||||
--name $CONTAINER_NAME \ |
||||
--publish $PORT:5020 \ |
||||
-it --rm \ |
||||
$CONTROL_TESTS_PORT_RUN \ |
||||
asl-rulebook2:$IMAGE_TAG \ |
||||
2>&1 \ |
||||
| sed -e 's/^/ /' |
||||
exit ${PIPESTATUS[0]} |
||||
} |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
function print_help { |
||||
echo "`basename "$0"` {options}" |
||||
cat <<EOM |
||||
Build and launch the "asl-rulebook2" container. |
||||
|
||||
-p --port Web server port number. |
||||
|
||||
-t --tag Docker image tag. |
||||
--name Docker container name. |
||||
-d --detach Detach from the container and let it run in the background. |
||||
--no-build Launch the container as-is (i.e. without rebuilding the image first). |
||||
EOM |
||||
} |
||||
|
||||
# --------------------------------------------------------------------- |
||||
|
||||
main "$@" |