` on the containing page before upload. Default value: false.
43 | - **workspace** - An element within which images are appended before upload (when **debug** is set to true). If not specified, then a new `
` tag will be appended to the end of HTML body where the images will be rendered.
44 |
45 | #### Callback properties ####
46 | - **onScale** - A function which is invoked when final image is generated right before the upload starts. 1 argument passed: image data in data URL format. This callback function is useful for displaying a thumbnail (preview) of the selected image with correct orientation (the autoRotate option should be set to true).
47 | - **onProgress** - A function which is invoked on upload progress, with a single argument of an object containing the following:
48 |
49 | - **total** - The total number of images selected for upload
50 | - **done** - The number of images uploaded so far
51 | - **currentItemTotal** - The number of bytes to be uploaded for the currently uploading image
52 | - **currentItemDone** - The total number of bytes to upload for the current image
53 |
54 | - **onFileComplete** - A function invoked on completion of uploading each selected image which is passed two arguments, the first is the event object from the XmlHttpRequest, and the second if the corresponding File object from the input element
55 | - **onComplete** - A function invoked on completion of all images being uploaded (passed no arguments)
56 |
57 | ## Example ##
58 | Below is an example of using the ImageUploader.js for uploading images on HTML page and further processing of the images at the server.
59 |
60 | ### HTML ###
61 | In our example we have a page with 3 input elements for selecting files that will be uploaded. When user selects a file, it will start to upload automatically. The user can select 1 file per input element.
62 |
63 | We will use the following additional libraries (they are not required by the ImageUploader.js, but we will use them to make our example look pretty):
64 |
65 | - [UIKit](https://getuikit.com/), it allows to apply some nice CSS styles (the name of the classes begin with `uk-` prefix). In our case we will use it to show:
66 | - button for selecting a file instead of standard rectangular input box.
67 | - show progress bar as indicator of uploading progress.
68 | - [jQuery](https://jquery.com/), to write less JavaScript code. If you don't like jQuery, you can still use ImageUploader.js with pure "vanilla" JavaScript.
69 |
70 | Screenshot of the resulting HTML page:
71 |
72 | 
73 |
74 | The progress bar becomes visible when the user selects the image. It becomes hidden after the image upload completes.
75 |
76 | The code of HTML page:
77 |
78 | ```HTML
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
104 |
117 |
130 |
131 |
132 | ```
133 |
134 | Notes:
135 |
136 | - In the code above we use `accept="image/jpeg,image/jpg"` to limit the file types that user can select. This approach works with all modern HTML5 browsers (desktop and mobile). But keep in mind, that the user can bypass this limitation and select arbitrary file. We will do some additional validation of file extension in the JavaScript code below.
137 | - The input tag contains additional attributes such as `data-id` and `data-product`. We use them to show how you can add extra information to your input data and then pass it to the server. It can be useful when the HTML page is generated dynamically by the server (for example, using PHP, Perl or some other script).
138 | - We add class `image-upload` to the input elements in order to mark out those, that should be processed with ImageUploader.js. Such approach allows to have different input elements in HTML page without conflicts.
139 |
140 | ### JavaScript ###
141 | Below is the code of custom.js, which contains code for managing the HTML page (comments are in the code):
142 |
143 | ```javascript
144 | jQuery(document).ready(function($){
145 | /* Initialization of input elements and ImageUploader.js */
146 | $("input.image-upload").each(function(index){
147 | var id=$(this).attr('data-id');
148 | var id_product = $(this).attr('data-product');
149 | var uploader = new ImageUploader({'inputElement': $(this).get(0),
150 | 'onProgress': function(info)
151 | {
152 | /* Updating the progress bar */
153 | if (info['currentItemTotal']<=0)
154 | return;
155 | var progress=info['currentItemDone']*100.0/info['currentItemTotal'];
156 | $('#upload-progress-'+id+' div').css('width',progress+'%');
157 | },
158 | 'onComplete': function()
159 | {
160 | /* Enable upload button */
161 | $('#upload-button-'+id).removeProp('disabled');
162 | /* Hide progress bar */
163 | $("#upload-container-"+id).addClass("uk-hidden");
164 | },
165 | /* Add rand parameter to prevent accidental caching of the image by the server */
166 | 'uploadUrl': 'index.php?action=upload_image&id_image=' + id + '&id_product=' + id_product + '&rand=' + new Date().getTime(),
167 | 'debug': true
168 | });
169 | });
170 |
171 | /* The function below is triggered every time the user selects a file */
172 | $("input.image-upload").change(function(index){
173 | /* We will check additionally the extension of the image if it's correct and we support it */
174 | var extension = $(this).val();
175 | if (extension.length>0){
176 | extension = extension.match(/[^.]+$/).pop().toLowerCase();
177 | extension = ~$.inArray(extension, ['jpg', 'jpeg']);
178 | }
179 | else{
180 | event.preventDefault();
181 | return;
182 | }
183 |
184 | if (!extension)
185 | {
186 | event.preventDefault();
187 | console.error('Unsupported image format');
188 | return;
189 | }
190 | var id=$(this).attr('data-id');
191 | /* Disable upload button until current upload completes */
192 | $('#upload-button-'+id).prop('disabled',true);
193 | /* Show progress bar */
194 | $("#upload-container-"+id).removeClass("uk-hidden");
195 | /* If you want, you can show a preview of the selected image to the user, but to keep the code simple, we will skip this step */
196 | });
197 | });
198 | ```
199 |
200 | ### PHP ###
201 | This part of the example covers the issue of processing the files on the server. In our example we use `index.php` as a file that is used to recieve and save the images from ImageUploader.js. The code below is written in PHP, but you can use it with any other language that you are familiar with.
202 |
203 | ```php
204 |
247 | ```
--------------------------------------------------------------------------------
/images/exif/IMG_7380.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/images/exif/IMG_7380.JPG
--------------------------------------------------------------------------------
/images/exif/IMG_7851.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/images/exif/IMG_7851.JPG
--------------------------------------------------------------------------------
/images/wiki/html-page.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/images/wiki/html-page.jpg
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
3 | 4.0.0
4 | net.rossturner
5 | imageuploader
6 | jar
7 | 0.1-SNAPSHOT
8 | Imageuploader Spark Webapp
9 |
10 | imageuploader
11 |
12 |
13 | org.apache.maven.plugins
14 | maven-compiler-plugin
15 | true
16 |
17 | 1.8
18 | 1.8
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 | com.sparkjava
27 | spark-core
28 | 2.8.0
29 |
30 |
31 | org.projectlombok
32 | lombok
33 | 1.18.2
34 |
35 |
36 | org.slf4j
37 | slf4j-simple
38 | 1.7.25
39 |
40 |
41 |
42 | commons-io
43 | commons-io
44 | 2.5
45 |
46 |
47 | commons-codec
48 | commons-codec
49 | 1.6
50 | jar
51 | compile
52 |
53 |
54 |
55 | 1.8
56 |
57 |
--------------------------------------------------------------------------------
/src/main/java/net/rossturner/imageuploader/ImageResource.java:
--------------------------------------------------------------------------------
1 | package net.rossturner.imageuploader;
2 |
3 | import lombok.extern.slf4j.Slf4j;
4 | import org.apache.commons.codec.binary.Base64;
5 | import org.apache.commons.io.IOUtils;
6 | import spark.Spark;
7 |
8 | import javax.servlet.MultipartConfigElement;
9 | import java.io.*;
10 | import java.nio.file.Files;
11 | import java.nio.file.Path;
12 | import java.nio.file.StandardCopyOption;
13 |
14 |
15 | /**
16 | * Example resource class hosted at the URI path "/myresource"
17 | */
18 | @Slf4j
19 | public class ImageResource {
20 |
21 | public static void main(String[] args) {
22 | Spark.staticFiles.location("/public"); // Static files
23 |
24 | Spark.get("/api/image", (req, res) -> {
25 | res.type("text/plain");
26 | return "Hi there!";
27 | });
28 |
29 | Spark.post("/api/image", (req, res) -> {
30 |
31 | Integer value;
32 |
33 | try (InputStream is = req.raw().getInputStream()) {
34 | StringWriter writer = new StringWriter();
35 | IOUtils.copy(is, writer);
36 | String theString = writer.toString();
37 | value = theString.length();
38 |
39 | counter++;
40 |
41 | File of = new File("./image"+counter+".jpg");
42 | FileOutputStream osf = new FileOutputStream(of);
43 | try {
44 | osf.write(Base64.decodeBase64(theString));
45 | osf.flush();
46 | } finally {
47 | osf.close();
48 | }
49 |
50 | }
51 |
52 | return Integer.toString(value);
53 | });
54 | }
55 |
56 | static int counter = 0;
57 |
58 | }
59 |
--------------------------------------------------------------------------------
/src/main/resources/public/WEB-INF/web.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | Jersey Web Application
7 | com.sun.jersey.spi.container.servlet.ServletContainer
8 |
9 |
10 | com.sun.jersey.config.property.packages
11 | net.rossturner.imageuploader
12 |
13 | 1
14 |
15 |
16 | Jersey Web Application
17 | /api/*
18 |
19 |
20 |
21 |
22 |
23 | default
24 |
25 | useFileMappedBuffer
26 | false
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/src/main/resources/public/css/bootstrap.min.css:
--------------------------------------------------------------------------------
1 | html,body{margin:0;padding:0;}
2 | h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,cite,code,del,dfn,em,img,q,s,samp,small,strike,strong,sub,sup,tt,var,dd,dl,dt,li,ol,ul,fieldset,form,label,legend,button,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;font-weight:normal;font-style:normal;font-size:100%;line-height:1;font-family:inherit;}
3 | table{border-collapse:collapse;border-spacing:0;}
4 | ol,ul{list-style:none;}
5 | q:before,q:after,blockquote:before,blockquote:after{content:"";}
6 | html{overflow-y:scroll;font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;}
7 | a:focus{outline:thin dotted;}
8 | a:hover,a:active{outline:0;}
9 | article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;}
10 | audio,canvas,video{display:inline-block;*display:inline;*zoom:1;}
11 | audio:not([controls]){display:none;}
12 | sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}
13 | sup{top:-0.5em;}
14 | sub{bottom:-0.25em;}
15 | img{border:0;-ms-interpolation-mode:bicubic;}
16 | button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;}
17 | button,input{line-height:normal;*overflow:visible;}
18 | button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;}
19 | button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;}
20 | input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;}
21 | input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;}
22 | textarea{overflow:auto;vertical-align:top;}
23 | body{background-color:#ffffff;margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:18px;color:#404040;}
24 | .container{width:940px;margin-left:auto;margin-right:auto;zoom:1;}.container:before,.container:after{display:table;content:"";zoom:1;}
25 | .container:after{clear:both;}
26 | .container-fluid{position:relative;min-width:940px;padding-left:20px;padding-right:20px;zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";zoom:1;}
27 | .container-fluid:after{clear:both;}
28 | .container-fluid>.sidebar{position:absolute;top:0;left:20px;width:220px;}
29 | .container-fluid>.content{margin-left:240px;}
30 | a{color:#0069d6;text-decoration:none;line-height:inherit;font-weight:inherit;}a:hover{color:#00438a;text-decoration:underline;}
31 | .pull-right{float:right;}
32 | .pull-left{float:left;}
33 | .hide{display:none;}
34 | .show{display:block;}
35 | .row{zoom:1;margin-left:-20px;}.row:before,.row:after{display:table;content:"";zoom:1;}
36 | .row:after{clear:both;}
37 | .row>[class*="span"]{display:inline;float:left;margin-left:20px;}
38 | .span1{width:40px;}
39 | .span2{width:100px;}
40 | .span3{width:160px;}
41 | .span4{width:220px;}
42 | .span5{width:280px;}
43 | .span6{width:340px;}
44 | .span7{width:400px;}
45 | .span8{width:460px;}
46 | .span9{width:520px;}
47 | .span10{width:580px;}
48 | .span11{width:640px;}
49 | .span12{width:700px;}
50 | .span13{width:760px;}
51 | .span14{width:820px;}
52 | .span15{width:880px;}
53 | .span16{width:940px;}
54 | .span17{width:1000px;}
55 | .span18{width:1060px;}
56 | .span19{width:1120px;}
57 | .span20{width:1180px;}
58 | .span21{width:1240px;}
59 | .span22{width:1300px;}
60 | .span23{width:1360px;}
61 | .span24{width:1420px;}
62 | .row>.offset1{margin-left:80px;}
63 | .row>.offset2{margin-left:140px;}
64 | .row>.offset3{margin-left:200px;}
65 | .row>.offset4{margin-left:260px;}
66 | .row>.offset5{margin-left:320px;}
67 | .row>.offset6{margin-left:380px;}
68 | .row>.offset7{margin-left:440px;}
69 | .row>.offset8{margin-left:500px;}
70 | .row>.offset9{margin-left:560px;}
71 | .row>.offset10{margin-left:620px;}
72 | .row>.offset11{margin-left:680px;}
73 | .row>.offset12{margin-left:740px;}
74 | .span-one-third{width:300px;}
75 | .span-two-thirds{width:620px;}
76 | .row>.offset-one-third{margin-left:340px;}
77 | .row>.offset-two-thirds{margin-left:660px;}
78 | p{font-size:13px;font-weight:normal;line-height:18px;margin-bottom:9px;}p small{font-size:11px;color:#bfbfbf;}
79 | h1,h2,h3,h4,h5,h6{font-weight:bold;color:#404040;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:#bfbfbf;}
80 | h1{margin-bottom:18px;font-size:30px;line-height:36px;}h1 small{font-size:18px;}
81 | h2{font-size:24px;line-height:36px;}h2 small{font-size:14px;}
82 | h3,h4,h5,h6{line-height:36px;}
83 | h3{font-size:18px;}h3 small{font-size:14px;}
84 | h4{font-size:16px;}h4 small{font-size:12px;}
85 | h5{font-size:14px;}
86 | h6{font-size:13px;color:#bfbfbf;text-transform:uppercase;}
87 | ul,ol{margin:0 0 18px 25px;}
88 | ul ul,ul ol,ol ol,ol ul{margin-bottom:0;}
89 | ul{list-style:disc;}
90 | ol{list-style:decimal;}
91 | li{line-height:18px;color:#808080;}
92 | ul.unstyled{list-style:none;margin-left:0;}
93 | dl{margin-bottom:18px;}dl dt,dl dd{line-height:18px;}
94 | dl dt{font-weight:bold;}
95 | dl dd{margin-left:9px;}
96 | hr{margin:20px 0 19px;border:0;border-bottom:1px solid #eee;}
97 | strong{font-style:inherit;font-weight:bold;}
98 | em{font-style:italic;font-weight:inherit;line-height:inherit;}
99 | .muted{color:#bfbfbf;}
100 | blockquote{margin-bottom:18px;border-left:5px solid #eee;padding-left:15px;}blockquote p{font-size:14px;font-weight:300;line-height:18px;margin-bottom:0;}
101 | blockquote small{display:block;font-size:12px;font-weight:300;line-height:18px;color:#bfbfbf;}blockquote small:before{content:'\2014 \00A0';}
102 | address{display:block;line-height:18px;margin-bottom:18px;}
103 | code,pre{padding:0 3px 2px;font-family:Monaco, Andale Mono, Courier New, monospace;font-size:12px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
104 | code{background-color:#fee9cc;color:rgba(0, 0, 0, 0.75);padding:1px 3px;}
105 | pre{background-color:#f5f5f5;display:block;padding:8.5px;margin:0 0 18px;line-height:18px;font-size:12px;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;white-space:pre;white-space:pre-wrap;word-wrap:break-word;}
106 | form{margin-bottom:18px;}
107 | fieldset{margin-bottom:18px;padding-top:18px;}fieldset legend{display:block;padding-left:150px;font-size:19.5px;line-height:1;color:#404040;*padding:0 0 5px 145px;*line-height:1.5;}
108 | form .clearfix{margin-bottom:18px;zoom:1;}form .clearfix:before,form .clearfix:after{display:table;content:"";zoom:1;}
109 | form .clearfix:after{clear:both;}
110 | label,input,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:normal;}
111 | label{padding-top:6px;font-size:13px;line-height:18px;float:left;width:130px;text-align:right;color:#404040;}
112 | form .input{margin-left:150px;}
113 | input[type=checkbox],input[type=radio]{cursor:pointer;}
114 | input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;font-size:13px;line-height:18px;color:#808080;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}
115 | select{padding:initial;}
116 | input[type=checkbox],input[type=radio]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;border:none;}
117 | input[type=file]{background-color:#ffffff;padding:initial;border:initial;line-height:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
118 | input[type=button],input[type=reset],input[type=submit]{width:auto;height:auto;}
119 | select,input[type=file]{height:27px;*height:auto;line-height:27px;*margin-top:4px;}
120 | select[multiple]{height:inherit;background-color:#ffffff;}
121 | textarea{height:auto;}
122 | .uneditable-input{background-color:#ffffff;display:block;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;}
123 | :-moz-placeholder{color:#bfbfbf;}
124 | ::-webkit-input-placeholder{color:#bfbfbf;}
125 | input,textarea{-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;-webkit-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);}
126 | input:focus,textarea:focus{outline:0;border-color:rgba(82, 168, 236, 0.8);-webkit-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);}
127 | input[type=file]:focus,input[type=checkbox]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:1px dotted #666;}
128 | form .clearfix.error>label,form .clearfix.error .help-block,form .clearfix.error .help-inline{color:#b94a48;}
129 | form .clearfix.error input,form .clearfix.error textarea{color:#b94a48;border-color:#ee5f5b;}form .clearfix.error input:focus,form .clearfix.error textarea:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;}
130 | form .clearfix.error .input-prepend .add-on,form .clearfix.error .input-append .add-on{color:#b94a48;background-color:#fce6e6;border-color:#b94a48;}
131 | form .clearfix.warning>label,form .clearfix.warning .help-block,form .clearfix.warning .help-inline{color:#c09853;}
132 | form .clearfix.warning input,form .clearfix.warning textarea{color:#c09853;border-color:#ccae64;}form .clearfix.warning input:focus,form .clearfix.warning textarea:focus{border-color:#be9a3f;-webkit-box-shadow:0 0 6px #e5d6b1;-moz-box-shadow:0 0 6px #e5d6b1;box-shadow:0 0 6px #e5d6b1;}
133 | form .clearfix.warning .input-prepend .add-on,form .clearfix.warning .input-append .add-on{color:#c09853;background-color:#d2b877;border-color:#c09853;}
134 | form .clearfix.success>label,form .clearfix.success .help-block,form .clearfix.success .help-inline{color:#468847;}
135 | form .clearfix.success input,form .clearfix.success textarea{color:#468847;border-color:#57a957;}form .clearfix.success input:focus,form .clearfix.success textarea:focus{border-color:#458845;-webkit-box-shadow:0 0 6px #9acc9a;-moz-box-shadow:0 0 6px #9acc9a;box-shadow:0 0 6px #9acc9a;}
136 | form .clearfix.success .input-prepend .add-on,form .clearfix.success .input-append .add-on{color:#468847;background-color:#bcddbc;border-color:#468847;}
137 | .input-mini,input.mini,textarea.mini,select.mini{width:60px;}
138 | .input-small,input.small,textarea.small,select.small{width:90px;}
139 | .input-medium,input.medium,textarea.medium,select.medium{width:150px;}
140 | .input-large,input.large,textarea.large,select.large{width:210px;}
141 | .input-xlarge,input.xlarge,textarea.xlarge,select.xlarge{width:270px;}
142 | .input-xxlarge,input.xxlarge,textarea.xxlarge,select.xxlarge{width:530px;}
143 | textarea.xxlarge{overflow-y:auto;}
144 | input.span1,textarea.span1{display:inline-block;float:none;width:30px;margin-left:0;}
145 | input.span2,textarea.span2{display:inline-block;float:none;width:90px;margin-left:0;}
146 | input.span3,textarea.span3{display:inline-block;float:none;width:150px;margin-left:0;}
147 | input.span4,textarea.span4{display:inline-block;float:none;width:210px;margin-left:0;}
148 | input.span5,textarea.span5{display:inline-block;float:none;width:270px;margin-left:0;}
149 | input.span6,textarea.span6{display:inline-block;float:none;width:330px;margin-left:0;}
150 | input.span7,textarea.span7{display:inline-block;float:none;width:390px;margin-left:0;}
151 | input.span8,textarea.span8{display:inline-block;float:none;width:450px;margin-left:0;}
152 | input.span9,textarea.span9{display:inline-block;float:none;width:510px;margin-left:0;}
153 | input.span10,textarea.span10{display:inline-block;float:none;width:570px;margin-left:0;}
154 | input.span11,textarea.span11{display:inline-block;float:none;width:630px;margin-left:0;}
155 | input.span12,textarea.span12{display:inline-block;float:none;width:690px;margin-left:0;}
156 | input.span13,textarea.span13{display:inline-block;float:none;width:750px;margin-left:0;}
157 | input.span14,textarea.span14{display:inline-block;float:none;width:810px;margin-left:0;}
158 | input.span15,textarea.span15{display:inline-block;float:none;width:870px;margin-left:0;}
159 | input.span16,textarea.span16{display:inline-block;float:none;width:930px;margin-left:0;}
160 | input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#f5f5f5;border-color:#ddd;cursor:not-allowed;}
161 | .actions{background:#f5f5f5;margin-top:18px;margin-bottom:18px;padding:17px 20px 18px 150px;border-top:1px solid #ddd;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;}.actions .secondary-action{float:right;}.actions .secondary-action a{line-height:30px;}.actions .secondary-action a:hover{text-decoration:underline;}
162 | .help-inline,.help-block{font-size:13px;line-height:18px;color:#bfbfbf;}
163 | .help-inline{padding-left:5px;*position:relative;*top:-5px;}
164 | .help-block{display:block;max-width:600px;}
165 | .inline-inputs{color:#808080;}.inline-inputs span{padding:0 2px 0 1px;}
166 | .input-prepend input,.input-append input{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}
167 | .input-prepend .add-on,.input-append .add-on{position:relative;background:#f5f5f5;border:1px solid #ccc;z-index:2;float:left;display:block;width:auto;min-width:16px;height:18px;padding:4px 4px 4px 5px;margin-right:-1px;font-weight:normal;line-height:18px;color:#bfbfbf;text-align:center;text-shadow:0 1px 0 #ffffff;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
168 | .input-prepend .active,.input-append .active{background:#a9dba9;border-color:#46a546;}
169 | .input-prepend .add-on{*margin-top:1px;}
170 | .input-append input{float:left;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;}
171 | .input-append .add-on{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin-right:0;margin-left:-1px;}
172 | .inputs-list{margin:0 0 5px;width:100%;}.inputs-list li{display:block;padding:0;width:100%;}
173 | .inputs-list label{display:block;float:none;width:auto;padding:0;margin-left:20px;line-height:18px;text-align:left;white-space:normal;}.inputs-list label strong{color:#808080;}
174 | .inputs-list label small{font-size:11px;font-weight:normal;}
175 | .inputs-list .inputs-list{margin-left:25px;margin-bottom:10px;padding-top:0;}
176 | .inputs-list:first-child{padding-top:6px;}
177 | .inputs-list li+li{padding-top:2px;}
178 | .inputs-list input[type=radio],.inputs-list input[type=checkbox]{margin-bottom:0;margin-left:-20px;float:left;}
179 | .form-stacked{padding-left:20px;}.form-stacked fieldset{padding-top:9px;}
180 | .form-stacked legend{padding-left:0;}
181 | .form-stacked label{display:block;float:none;width:auto;font-weight:bold;text-align:left;line-height:20px;padding-top:0;}
182 | .form-stacked .clearfix{margin-bottom:9px;}.form-stacked .clearfix div.input{margin-left:0;}
183 | .form-stacked .inputs-list{margin-bottom:0;}.form-stacked .inputs-list li{padding-top:0;}.form-stacked .inputs-list li label{font-weight:normal;padding-top:0;}
184 | .form-stacked div.clearfix.error{padding-top:10px;padding-bottom:10px;padding-left:10px;margin-top:0;margin-left:-10px;}
185 | .form-stacked .actions{margin-left:-20px;padding-left:20px;}
186 | table{width:100%;margin-bottom:18px;padding:0;font-size:13px;border-collapse:collapse;}table th,table td{padding:10px 10px 9px;line-height:18px;text-align:left;}
187 | table th{padding-top:9px;font-weight:bold;vertical-align:middle;}
188 | table td{vertical-align:top;border-top:1px solid #ddd;}
189 | table tbody th{border-top:1px solid #ddd;vertical-align:top;}
190 | .condensed-table th,.condensed-table td{padding:5px 5px 4px;}
191 | .bordered-table{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.bordered-table th+th,.bordered-table td+td,.bordered-table th+td{border-left:1px solid #ddd;}
192 | .bordered-table thead tr:first-child th:first-child,.bordered-table tbody tr:first-child td:first-child{-webkit-border-radius:4px 0 0 0;-moz-border-radius:4px 0 0 0;border-radius:4px 0 0 0;}
193 | .bordered-table thead tr:first-child th:last-child,.bordered-table tbody tr:first-child td:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0;}
194 | .bordered-table tbody tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;}
195 | .bordered-table tbody tr:last-child td:last-child{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0;}
196 | table .span1{width:20px;}
197 | table .span2{width:60px;}
198 | table .span3{width:100px;}
199 | table .span4{width:140px;}
200 | table .span5{width:180px;}
201 | table .span6{width:220px;}
202 | table .span7{width:260px;}
203 | table .span8{width:300px;}
204 | table .span9{width:340px;}
205 | table .span10{width:380px;}
206 | table .span11{width:420px;}
207 | table .span12{width:460px;}
208 | table .span13{width:500px;}
209 | table .span14{width:540px;}
210 | table .span15{width:580px;}
211 | table .span16{width:620px;}
212 | .zebra-striped tbody tr:nth-child(odd) td,.zebra-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;}
213 | .zebra-striped tbody tr:hover td,.zebra-striped tbody tr:hover th{background-color:#f5f5f5;}
214 | table .header{cursor:pointer;}table .header:after{content:"";float:right;margin-top:7px;border-width:0 4px 4px;border-style:solid;border-color:#000 transparent;visibility:hidden;}
215 | table .headerSortUp,table .headerSortDown{background-color:rgba(141, 192, 219, 0.25);text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);}
216 | table .header:hover:after{visibility:visible;}
217 | table .headerSortDown:after,table .headerSortDown:hover:after{visibility:visible;filter:alpha(opacity=60);-khtml-opacity:0.6;-moz-opacity:0.6;opacity:0.6;}
218 | table .headerSortUp:after{border-bottom:none;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000;visibility:visible;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:alpha(opacity=60);-khtml-opacity:0.6;-moz-opacity:0.6;opacity:0.6;}
219 | table .blue{color:#049cdb;border-bottom-color:#049cdb;}
220 | table .headerSortUp.blue,table .headerSortDown.blue{background-color:#ade6fe;}
221 | table .green{color:#46a546;border-bottom-color:#46a546;}
222 | table .headerSortUp.green,table .headerSortDown.green{background-color:#cdeacd;}
223 | table .red{color:#9d261d;border-bottom-color:#9d261d;}
224 | table .headerSortUp.red,table .headerSortDown.red{background-color:#f4c8c5;}
225 | table .yellow{color:#ffc40d;border-bottom-color:#ffc40d;}
226 | table .headerSortUp.yellow,table .headerSortDown.yellow{background-color:#fff6d9;}
227 | table .orange{color:#f89406;border-bottom-color:#f89406;}
228 | table .headerSortUp.orange,table .headerSortDown.orange{background-color:#fee9cc;}
229 | table .purple{color:#7a43b6;border-bottom-color:#7a43b6;}
230 | table .headerSortUp.purple,table .headerSortDown.purple{background-color:#e2d5f0;}
231 | .topbar{height:40px;position:fixed;top:0;left:0;right:0;z-index:10000;overflow:visible;}.topbar a{color:#bfbfbf;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);}
232 | .topbar h3 a:hover,.topbar .brand:hover,.topbar ul .active>a{background-color:#333;background-color:rgba(255, 255, 255, 0.05);color:#ffffff;text-decoration:none;}
233 | .topbar h3{position:relative;}
234 | .topbar h3 a,.topbar .brand{float:left;display:block;padding:8px 20px 12px;margin-left:-20px;color:#ffffff;font-size:20px;font-weight:200;line-height:1;}
235 | .topbar p{margin:0;line-height:40px;}.topbar p a:hover{background-color:transparent;color:#ffffff;}
236 | .topbar form{float:left;margin:5px 0 0 0;position:relative;filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1;}
237 | .topbar form.pull-right{float:right;}
238 | .topbar input{background-color:#444;background-color:rgba(255, 255, 255, 0.3);font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:normal;font-weight:13px;line-height:1;padding:4px 9px;color:#ffffff;color:rgba(255, 255, 255, 0.75);border:1px solid #111;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.topbar input:-moz-placeholder{color:#e6e6e6;}
239 | .topbar input::-webkit-input-placeholder{color:#e6e6e6;}
240 | .topbar input:hover{background-color:#bfbfbf;background-color:rgba(255, 255, 255, 0.5);color:#ffffff;}
241 | .topbar input:focus,.topbar input.focused{outline:0;background-color:#ffffff;color:#404040;text-shadow:0 1px 0 #ffffff;border:0;padding:5px 10px;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);}
242 | .topbar-inner,.topbar .fill{background-color:#222;background-color:#222222;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222));background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);}
243 | .topbar div>ul,.nav{display:block;float:left;margin:0 10px 0 0;position:relative;left:0;}.topbar div>ul>li,.nav>li{display:block;float:left;}
244 | .topbar div>ul a,.nav a{display:block;float:none;padding:10px 10px 11px;line-height:19px;text-decoration:none;}.topbar div>ul a:hover,.nav a:hover{color:#ffffff;text-decoration:none;}
245 | .topbar div>ul .active>a,.nav .active>a{background-color:#222;background-color:rgba(0, 0, 0, 0.5);}
246 | .topbar div>ul.secondary-nav,.nav.secondary-nav{float:right;margin-left:10px;margin-right:0;}.topbar div>ul.secondary-nav .menu-dropdown,.nav.secondary-nav .menu-dropdown,.topbar div>ul.secondary-nav .dropdown-menu,.nav.secondary-nav .dropdown-menu{right:0;border:0;}
247 | .topbar div>ul a.menu:hover,.nav a.menu:hover,.topbar div>ul li.open .menu,.nav li.open .menu,.topbar div>ul .dropdown-toggle:hover,.nav .dropdown-toggle:hover,.topbar div>ul .dropdown.open .dropdown-toggle,.nav .dropdown.open .dropdown-toggle{background:#444;background:rgba(255, 255, 255, 0.05);}
248 | .topbar div>ul .menu-dropdown,.nav .menu-dropdown,.topbar div>ul .dropdown-menu,.nav .dropdown-menu{background-color:#333;}.topbar div>ul .menu-dropdown a.menu,.nav .menu-dropdown a.menu,.topbar div>ul .dropdown-menu a.menu,.nav .dropdown-menu a.menu,.topbar div>ul .menu-dropdown .dropdown-toggle,.nav .menu-dropdown .dropdown-toggle,.topbar div>ul .dropdown-menu .dropdown-toggle,.nav .dropdown-menu .dropdown-toggle{color:#ffffff;}.topbar div>ul .menu-dropdown a.menu.open,.nav .menu-dropdown a.menu.open,.topbar div>ul .dropdown-menu a.menu.open,.nav .dropdown-menu a.menu.open,.topbar div>ul .menu-dropdown .dropdown-toggle.open,.nav .menu-dropdown .dropdown-toggle.open,.topbar div>ul .dropdown-menu .dropdown-toggle.open,.nav .dropdown-menu .dropdown-toggle.open{background:#444;background:rgba(255, 255, 255, 0.05);}
249 | .topbar div>ul .menu-dropdown li a,.nav .menu-dropdown li a,.topbar div>ul .dropdown-menu li a,.nav .dropdown-menu li a{color:#999;text-shadow:0 1px 0 rgba(0, 0, 0, 0.5);}.topbar div>ul .menu-dropdown li a:hover,.nav .menu-dropdown li a:hover,.topbar div>ul .dropdown-menu li a:hover,.nav .dropdown-menu li a:hover{background-color:#191919;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#292929), to(#191919));background-image:-moz-linear-gradient(top, #292929, #191919);background-image:-ms-linear-gradient(top, #292929, #191919);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #191919));background-image:-webkit-linear-gradient(top, #292929, #191919);background-image:-o-linear-gradient(top, #292929, #191919);background-image:linear-gradient(top, #292929, #191919);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#191919', GradientType=0);color:#ffffff;}
250 | .topbar div>ul .menu-dropdown .active a,.nav .menu-dropdown .active a,.topbar div>ul .dropdown-menu .active a,.nav .dropdown-menu .active a{color:#ffffff;}
251 | .topbar div>ul .menu-dropdown .divider,.nav .menu-dropdown .divider,.topbar div>ul .dropdown-menu .divider,.nav .dropdown-menu .divider{background-color:#222;border-color:#444;}
252 | .topbar ul .menu-dropdown li a,.topbar ul .dropdown-menu li a{padding:4px 15px;}
253 | li.menu,.dropdown{position:relative;}
254 | a.menu:after,.dropdown-toggle:after{width:0;height:0;display:inline-block;content:"↓";text-indent:-99999px;vertical-align:top;margin-top:8px;margin-left:4px;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #ffffff;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;}
255 | .menu-dropdown,.dropdown-menu{background-color:#ffffff;float:left;display:none;position:absolute;top:40px;z-index:900;min-width:160px;max-width:220px;_width:160px;margin-left:0;margin-right:0;padding:6px 0;zoom:1;border-color:#999;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:0 1px 1px;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.menu-dropdown li,.dropdown-menu li{float:none;display:block;background-color:none;}
256 | .menu-dropdown .divider,.dropdown-menu .divider{height:1px;margin:5px 0;overflow:hidden;background-color:#eee;border-bottom:1px solid #ffffff;}
257 | .topbar .dropdown-menu a,.dropdown-menu a{display:block;padding:4px 15px;clear:both;font-weight:normal;line-height:18px;color:#808080;text-shadow:0 1px 0 #ffffff;}.topbar .dropdown-menu a:hover,.dropdown-menu a:hover,.topbar .dropdown-menu a.hover,.dropdown-menu a.hover{background-color:#dddddd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#eeeeee), to(#dddddd));background-image:-moz-linear-gradient(top, #eeeeee, #dddddd);background-image:-ms-linear-gradient(top, #eeeeee, #dddddd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #eeeeee), color-stop(100%, #dddddd));background-image:-webkit-linear-gradient(top, #eeeeee, #dddddd);background-image:-o-linear-gradient(top, #eeeeee, #dddddd);background-image:linear-gradient(top, #eeeeee, #dddddd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#dddddd', GradientType=0);color:#404040;text-decoration:none;-webkit-box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);}
258 | .open .menu,.dropdown.open .menu,.open .dropdown-toggle,.dropdown.open .dropdown-toggle{color:#ffffff;background:#ccc;background:rgba(0, 0, 0, 0.3);}
259 | .open .menu-dropdown,.dropdown.open .menu-dropdown,.open .dropdown-menu,.dropdown.open .dropdown-menu{display:block;}
260 | .tabs,.pills{margin:0 0 18px;padding:0;list-style:none;zoom:1;}.tabs:before,.pills:before,.tabs:after,.pills:after{display:table;content:"";zoom:1;}
261 | .tabs:after,.pills:after{clear:both;}
262 | .tabs>li,.pills>li{float:left;}.tabs>li>a,.pills>li>a{display:block;}
263 | .tabs{border-color:#ddd;border-style:solid;border-width:0 0 1px;}.tabs>li{position:relative;margin-bottom:-1px;}.tabs>li>a{padding:0 15px;margin-right:2px;line-height:34px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.tabs>li>a:hover{text-decoration:none;background-color:#eee;border-color:#eee #eee #ddd;}
264 | .tabs .active>a,.tabs .active>a:hover{color:#808080;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;}
265 | .tabs .menu-dropdown,.tabs .dropdown-menu{top:35px;border-width:1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;}
266 | .tabs a.menu:after,.tabs .dropdown-toggle:after{border-top-color:#999;margin-top:15px;margin-left:5px;}
267 | .tabs li.open.menu .menu,.tabs .open.dropdown .dropdown-toggle{border-color:#999;}
268 | .tabs li.open a.menu:after,.tabs .dropdown.open .dropdown-toggle:after{border-top-color:#555;}
269 | .pills a{margin:5px 3px 5px 0;padding:0 15px;line-height:30px;text-shadow:0 1px 1px #ffffff;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;}.pills a:hover{color:#ffffff;text-decoration:none;text-shadow:0 1px 1px rgba(0, 0, 0, 0.25);background-color:#00438a;}
270 | .pills .active a{color:#ffffff;text-shadow:0 1px 1px rgba(0, 0, 0, 0.25);background-color:#0069d6;}
271 | .pills-vertical>li{float:none;}
272 | .tab-content>.tab-pane,.pill-content>.pill-pane,.tab-content>div,.pill-content>div{display:none;}
273 | .tab-content>.active,.pill-content>.active{display:block;}
274 | .breadcrumb{padding:7px 14px;margin:0 0 18px;background-color:#f5f5f5;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5));background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline;text-shadow:0 1px 0 #ffffff;}
275 | .breadcrumb .divider{padding:0 5px;color:#bfbfbf;}
276 | .breadcrumb .active a{color:#404040;}
277 | .hero-unit{background-color:#f5f5f5;margin-bottom:30px;padding:60px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;}
278 | .hero-unit p{font-size:18px;font-weight:200;line-height:27px;}
279 | footer{margin-top:17px;padding-top:17px;border-top:1px solid #eee;}
280 | .page-header{margin-bottom:17px;border-bottom:1px solid #ddd;-webkit-box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);-moz-box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);}.page-header h1{margin-bottom:8px;}
281 | .btn.danger,.alert-message.danger,.btn.danger:hover,.alert-message.danger:hover,.btn.error,.alert-message.error,.btn.error:hover,.alert-message.error:hover,.btn.success,.alert-message.success,.btn.success:hover,.alert-message.success:hover,.btn.info,.alert-message.info,.btn.info:hover,.alert-message.info:hover{color:#ffffff;}
282 | .btn .close,.alert-message .close{font-family:Arial,sans-serif;line-height:18px;}
283 | .btn.danger,.alert-message.danger,.btn.error,.alert-message.error{background-color:#c43c35;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#c43c35 #c43c35 #882a25;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);}
284 | .btn.success,.alert-message.success{background-color:#57a957;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#57a957 #57a957 #3d773d;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);}
285 | .btn.info,.alert-message.info{background-color:#339bb9;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9));background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#339bb9 #339bb9 #22697d;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);}
286 | .btn{cursor:pointer;display:inline-block;background-color:#e6e6e6;background-repeat:no-repeat;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);padding:5px 14px 6px;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);color:#333;font-size:13px;line-height:normal;border:1px solid #ccc;border-bottom-color:#bbb;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-webkit-transition:0.1s linear all;-moz-transition:0.1s linear all;-ms-transition:0.1s linear all;-o-transition:0.1s linear all;transition:0.1s linear all;}.btn:hover{background-position:0 -15px;color:#333;text-decoration:none;}
287 | .btn:focus{outline:1px dotted #666;}
288 | .btn.primary{color:#ffffff;background-color:#0064cd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));background-image:-moz-linear-gradient(top, #049cdb, #0064cd);background-image:-ms-linear-gradient(top, #049cdb, #0064cd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));background-image:-webkit-linear-gradient(top, #049cdb, #0064cd);background-image:-o-linear-gradient(top, #049cdb, #0064cd);background-image:linear-gradient(top, #049cdb, #0064cd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#0064cd #0064cd #003f81;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);}
289 | .btn.active,.btn:active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);}
290 | .btn.disabled{cursor:default;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=65);-khtml-opacity:0.65;-moz-opacity:0.65;opacity:0.65;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
291 | .btn[disabled]{cursor:default;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=65);-khtml-opacity:0.65;-moz-opacity:0.65;opacity:0.65;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}
292 | .btn.large{font-size:15px;line-height:normal;padding:9px 14px 9px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}
293 | .btn.small{padding:7px 9px 7px;font-size:11px;}
294 | :root .alert-message,:root .btn{border-radius:0 \0;}
295 | button.btn::-moz-focus-inner,input[type=submit].btn::-moz-focus-inner{padding:0;border:0;}
296 | .close{float:right;color:#000000;font-size:20px;font-weight:bold;line-height:13.5px;text-shadow:0 1px 0 #ffffff;filter:alpha(opacity=25);-khtml-opacity:0.25;-moz-opacity:0.25;opacity:0.25;}.close:hover{color:#000000;text-decoration:none;filter:alpha(opacity=40);-khtml-opacity:0.4;-moz-opacity:0.4;opacity:0.4;}
297 | .alert-message{position:relative;padding:7px 15px;margin-bottom:18px;color:#404040;background-color:#eedc94;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94));background-image:-moz-linear-gradient(top, #fceec1, #eedc94);background-image:-ms-linear-gradient(top, #fceec1, #eedc94);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94));background-image:-webkit-linear-gradient(top, #fceec1, #eedc94);background-image:-o-linear-gradient(top, #fceec1, #eedc94);background-image:linear-gradient(top, #fceec1, #eedc94);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#eedc94 #eedc94 #e4c652;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);border-width:1px;border-style:solid;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);}.alert-message .close{margin-top:1px;*margin-top:0;}
298 | .alert-message a{font-weight:bold;color:#404040;}
299 | .alert-message.danger p a,.alert-message.error p a,.alert-message.success p a,.alert-message.info p a{color:#ffffff;}
300 | .alert-message h5{line-height:18px;}
301 | .alert-message p{margin-bottom:0;}
302 | .alert-message div{margin-top:5px;margin-bottom:2px;line-height:28px;}
303 | .alert-message .btn{-webkit-box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);-moz-box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);}
304 | .alert-message.block-message{background-image:none;background-color:#fdf5d9;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);padding:14px;border-color:#fceec1;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}.alert-message.block-message ul,.alert-message.block-message p{margin-right:30px;}
305 | .alert-message.block-message ul{margin-bottom:0;}
306 | .alert-message.block-message li{color:#404040;}
307 | .alert-message.block-message .alert-actions{margin-top:5px;}
308 | .alert-message.block-message.error,.alert-message.block-message.success,.alert-message.block-message.info{color:#404040;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);}
309 | .alert-message.block-message.error{background-color:#fddfde;border-color:#fbc7c6;}
310 | .alert-message.block-message.success{background-color:#d1eed1;border-color:#bfe7bf;}
311 | .alert-message.block-message.info{background-color:#ddf4fb;border-color:#c6edf9;}
312 | .alert-message.block-message.danger p a,.alert-message.block-message.error p a,.alert-message.block-message.success p a,.alert-message.block-message.info p a{color:#404040;}
313 | .pagination{height:36px;margin:18px 0;}.pagination ul{float:left;margin:0;border:1px solid #ddd;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);}
314 | .pagination li{display:inline;}
315 | .pagination a{float:left;padding:0 14px;line-height:34px;border-right:1px solid;border-right-color:#ddd;border-right-color:rgba(0, 0, 0, 0.15);*border-right-color:#ddd;text-decoration:none;}
316 | .pagination a:hover,.pagination .active a{background-color:#c7eefe;}
317 | .pagination .disabled a,.pagination .disabled a:hover{background-color:transparent;color:#bfbfbf;}
318 | .pagination .next a{border:0;}
319 | .well{background-color:#f5f5f5;margin-bottom:20px;padding:19px;min-height:20px;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);}
320 | .modal-backdrop{background-color:#000000;position:fixed;top:0;left:0;right:0;bottom:0;z-index:10000;}.modal-backdrop.fade{opacity:0;}
321 | .modal-backdrop,.modal-backdrop.fade.in{filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;}
322 | .modal{position:fixed;top:50%;left:50%;z-index:11000;max-height:500px;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal .close{margin-top:7px;}
323 | .modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;}
324 | .modal.fade.in{top:50%;}
325 | .modal-header{border-bottom:1px solid #eee;padding:5px 15px;}
326 | .modal-body{padding:15px;}
327 | .modal-body form{margin-bottom:0;}
328 | .modal-footer{background-color:#f5f5f5;padding:14px 15px 15px;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;zoom:1;margin-bottom:0;}.modal-footer:before,.modal-footer:after{display:table;content:"";zoom:1;}
329 | .modal-footer:after{clear:both;}
330 | .modal-footer .btn{float:right;margin-left:5px;}
331 | .modal .popover,.modal .twipsy{z-index:12000;}
332 | .twipsy{display:block;position:absolute;visibility:visible;padding:5px;font-size:11px;z-index:1000;filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;}.twipsy.fade.in{filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;}
333 | .twipsy.above .twipsy-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;}
334 | .twipsy.left .twipsy-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;}
335 | .twipsy.below .twipsy-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;}
336 | .twipsy.right .twipsy-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;}
337 | .twipsy-inner{padding:3px 8px;background-color:#000000;color:white;text-align:center;max-width:200px;text-decoration:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}
338 | .twipsy-arrow{position:absolute;width:0;height:0;}
339 | .popover{position:absolute;top:0;left:0;z-index:1000;padding:5px;display:none;}.popover.above .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;}
340 | .popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;}
341 | .popover.below .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;}
342 | .popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;}
343 | .popover .arrow{position:absolute;width:0;height:0;}
344 | .popover .inner{background:#000000;background:rgba(0, 0, 0, 0.8);padding:3px;overflow:hidden;width:280px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);}
345 | .popover .title{background-color:#f5f5f5;padding:9px 15px;line-height:1;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;border-bottom:1px solid #eee;}
346 | .popover .content{background-color:#ffffff;padding:14px;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover .content p,.popover .content ul,.popover .content ol{margin-bottom:0;}
347 | .fade{-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;opacity:0;}.fade.in{opacity:1;}
348 | .label{padding:1px 3px 2px;font-size:9.75px;font-weight:bold;color:#ffffff;text-transform:uppercase;white-space:nowrap;background-color:#bfbfbf;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;text-shadow:none;}.label.important{background-color:#c43c35;}
349 | .label.warning{background-color:#f89406;}
350 | .label.success{background-color:#46a546;}
351 | .label.notice{background-color:#62cffc;}
352 | .media-grid{margin-left:-20px;margin-bottom:0;zoom:1;}.media-grid:before,.media-grid:after{display:table;content:"";zoom:1;}
353 | .media-grid:after{clear:both;}
354 | .media-grid li{display:inline;}
355 | .media-grid a{float:left;padding:4px;margin:0 0 18px 20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);}.media-grid a img{display:block;}
356 | .media-grid a:hover{border-color:#0069d6;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);}
357 |
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/css/start/images/ui-bg_flat_55_999999_40x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/src/main/resources/public/demo-only/css/start/images/ui-bg_flat_55_999999_40x100.png
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/css/start/images/ui-bg_flat_75_aaaaaa_40x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/src/main/resources/public/demo-only/css/start/images/ui-bg_flat_75_aaaaaa_40x100.png
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/css/start/images/ui-bg_glass_45_0078ae_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/src/main/resources/public/demo-only/css/start/images/ui-bg_glass_45_0078ae_1x400.png
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/css/start/images/ui-bg_glass_55_f8da4e_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/src/main/resources/public/demo-only/css/start/images/ui-bg_glass_55_f8da4e_1x400.png
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/css/start/images/ui-bg_glass_75_79c9ec_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/src/main/resources/public/demo-only/css/start/images/ui-bg_glass_75_79c9ec_1x400.png
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/css/start/images/ui-bg_gloss-wave_45_e14f1c_500x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/src/main/resources/public/demo-only/css/start/images/ui-bg_gloss-wave_45_e14f1c_500x100.png
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/css/start/images/ui-bg_gloss-wave_50_6eac2c_500x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/src/main/resources/public/demo-only/css/start/images/ui-bg_gloss-wave_50_6eac2c_500x100.png
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/css/start/images/ui-bg_gloss-wave_75_2191c0_500x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/src/main/resources/public/demo-only/css/start/images/ui-bg_gloss-wave_75_2191c0_500x100.png
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/css/start/images/ui-bg_inset-hard_100_fcfdfd_1x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/src/main/resources/public/demo-only/css/start/images/ui-bg_inset-hard_100_fcfdfd_1x100.png
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/css/start/images/ui-icons_0078ae_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/src/main/resources/public/demo-only/css/start/images/ui-icons_0078ae_256x240.png
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/css/start/images/ui-icons_056b93_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/src/main/resources/public/demo-only/css/start/images/ui-icons_056b93_256x240.png
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/css/start/images/ui-icons_d8e7f3_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/src/main/resources/public/demo-only/css/start/images/ui-icons_d8e7f3_256x240.png
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/css/start/images/ui-icons_e0fdff_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/src/main/resources/public/demo-only/css/start/images/ui-icons_e0fdff_256x240.png
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/css/start/images/ui-icons_f5e175_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/src/main/resources/public/demo-only/css/start/images/ui-icons_f5e175_256x240.png
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/css/start/images/ui-icons_f7a50d_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/src/main/resources/public/demo-only/css/start/images/ui-icons_f7a50d_256x240.png
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/css/start/images/ui-icons_fcd113_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rossturner/HTML5-ImageUploader/e17efaf0d44d4223d1b235011e9fd25c3f8f0ded/src/main/resources/public/demo-only/css/start/images/ui-icons_fcd113_256x240.png
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/css/start/jquery-ui-1.8.17.custom.css:
--------------------------------------------------------------------------------
1 | /*
2 | * jQuery UI CSS Framework 1.8.17
3 | *
4 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
5 | * Dual licensed under the MIT or GPL Version 2 licenses.
6 | * http://jquery.org/license
7 | *
8 | * http://docs.jquery.com/UI/Theming/API
9 | */
10 |
11 | /* Layout helpers
12 | ----------------------------------*/
13 | .ui-helper-hidden { display: none; }
14 | .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
15 | .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
16 | .ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; }
17 | .ui-helper-clearfix:after { clear: both; }
18 | .ui-helper-clearfix { zoom: 1; }
19 | .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
20 |
21 |
22 | /* Interaction Cues
23 | ----------------------------------*/
24 | .ui-state-disabled { cursor: default !important; }
25 |
26 |
27 | /* Icons
28 | ----------------------------------*/
29 |
30 | /* states and images */
31 | .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
32 |
33 |
34 | /* Misc visuals
35 | ----------------------------------*/
36 |
37 | /* Overlays */
38 | .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
39 |
40 |
41 | /*
42 | * jQuery UI CSS Framework 1.8.17
43 | *
44 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
45 | * Dual licensed under the MIT or GPL Version 2 licenses.
46 | * http://jquery.org/license
47 | *
48 | * http://docs.jquery.com/UI/Theming/API
49 | *
50 | * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=5px&bgColorHeader=2191c0&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=75&borderColorHeader=4297d7&fcHeader=eaf5f7&iconColorHeader=d8e7f3&bgColorContent=fcfdfd&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=a6c9e2&fcContent=222222&iconColorContent=0078ae&bgColorDefault=0078ae&bgTextureDefault=02_glass.png&bgImgOpacityDefault=45&borderColorDefault=77d5f7&fcDefault=ffffff&iconColorDefault=e0fdff&bgColorHover=79c9ec&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=448dae&fcHover=026890&iconColorHover=056b93&bgColorActive=6eac2c&bgTextureActive=12_gloss_wave.png&bgImgOpacityActive=50&borderColorActive=acdd4a&fcActive=ffffff&iconColorActive=f5e175&bgColorHighlight=f8da4e&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcd113&fcHighlight=915608&iconColorHighlight=f7a50d&bgColorError=e14f1c&bgTextureError=12_gloss_wave.png&bgImgOpacityError=45&borderColorError=cd0a0a&fcError=ffffff&iconColorError=fcd113&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=75&opacityOverlay=30&bgColorShadow=999999&bgTextureShadow=01_flat.png&bgImgOpacityShadow=55&opacityShadow=45&thicknessShadow=0px&offsetTopShadow=5px&offsetLeftShadow=5px&cornerRadiusShadow=5px
51 | */
52 |
53 |
54 | /* Component containers
55 | ----------------------------------*/
56 | .ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
57 | .ui-widget .ui-widget { font-size: 1em; }
58 | .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
59 | .ui-widget-content { border: 1px solid #a6c9e2; background: #fcfdfd url(images/ui-bg_inset-hard_100_fcfdfd_1x100.png) 50% bottom repeat-x; color: #222222; }
60 | .ui-widget-content a { color: #222222; }
61 | .ui-widget-header { border: 1px solid #4297d7; background: #2191c0 url(images/ui-bg_gloss-wave_75_2191c0_500x100.png) 50% 50% repeat-x; color: #eaf5f7; font-weight: bold; }
62 | .ui-widget-header a { color: #eaf5f7; }
63 |
64 | /* Interaction states
65 | ----------------------------------*/
66 | .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #77d5f7; background: #0078ae url(images/ui-bg_glass_45_0078ae_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #ffffff; }
67 | .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #ffffff; text-decoration: none; }
68 | .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 { border: 1px solid #448dae; background: #79c9ec url(images/ui-bg_glass_75_79c9ec_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #026890; }
69 | .ui-state-hover a, .ui-state-hover a:hover { color: #026890; text-decoration: none; }
70 | .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #acdd4a; background: #6eac2c url(images/ui-bg_gloss-wave_50_6eac2c_500x100.png) 50% 50% repeat-x; font-weight: normal; color: #ffffff; }
71 | .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; }
72 | .ui-widget :active { outline: none; }
73 |
74 | /* Interaction Cues
75 | ----------------------------------*/
76 | .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcd113; background: #f8da4e url(images/ui-bg_glass_55_f8da4e_1x400.png) 50% 50% repeat-x; color: #915608; }
77 | .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #915608; }
78 | .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #e14f1c url(images/ui-bg_gloss-wave_45_e14f1c_500x100.png) 50% top repeat-x; color: #ffffff; }
79 | .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
80 | .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
81 | .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
82 | .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
83 | .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
84 |
85 | /* Icons
86 | ----------------------------------*/
87 |
88 | /* states and images */
89 | .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_0078ae_256x240.png); }
90 | .ui-widget-content .ui-icon {background-image: url(images/ui-icons_0078ae_256x240.png); }
91 | .ui-widget-header .ui-icon {background-image: url(images/ui-icons_d8e7f3_256x240.png); }
92 | .ui-state-default .ui-icon { background-image: url(images/ui-icons_e0fdff_256x240.png); }
93 | .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_056b93_256x240.png); }
94 | .ui-state-active .ui-icon {background-image: url(images/ui-icons_f5e175_256x240.png); }
95 | .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_f7a50d_256x240.png); }
96 | .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_fcd113_256x240.png); }
97 |
98 | /* positioning */
99 | .ui-icon-carat-1-n { background-position: 0 0; }
100 | .ui-icon-carat-1-ne { background-position: -16px 0; }
101 | .ui-icon-carat-1-e { background-position: -32px 0; }
102 | .ui-icon-carat-1-se { background-position: -48px 0; }
103 | .ui-icon-carat-1-s { background-position: -64px 0; }
104 | .ui-icon-carat-1-sw { background-position: -80px 0; }
105 | .ui-icon-carat-1-w { background-position: -96px 0; }
106 | .ui-icon-carat-1-nw { background-position: -112px 0; }
107 | .ui-icon-carat-2-n-s { background-position: -128px 0; }
108 | .ui-icon-carat-2-e-w { background-position: -144px 0; }
109 | .ui-icon-triangle-1-n { background-position: 0 -16px; }
110 | .ui-icon-triangle-1-ne { background-position: -16px -16px; }
111 | .ui-icon-triangle-1-e { background-position: -32px -16px; }
112 | .ui-icon-triangle-1-se { background-position: -48px -16px; }
113 | .ui-icon-triangle-1-s { background-position: -64px -16px; }
114 | .ui-icon-triangle-1-sw { background-position: -80px -16px; }
115 | .ui-icon-triangle-1-w { background-position: -96px -16px; }
116 | .ui-icon-triangle-1-nw { background-position: -112px -16px; }
117 | .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
118 | .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
119 | .ui-icon-arrow-1-n { background-position: 0 -32px; }
120 | .ui-icon-arrow-1-ne { background-position: -16px -32px; }
121 | .ui-icon-arrow-1-e { background-position: -32px -32px; }
122 | .ui-icon-arrow-1-se { background-position: -48px -32px; }
123 | .ui-icon-arrow-1-s { background-position: -64px -32px; }
124 | .ui-icon-arrow-1-sw { background-position: -80px -32px; }
125 | .ui-icon-arrow-1-w { background-position: -96px -32px; }
126 | .ui-icon-arrow-1-nw { background-position: -112px -32px; }
127 | .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
128 | .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
129 | .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
130 | .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
131 | .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
132 | .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
133 | .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
134 | .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
135 | .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
136 | .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
137 | .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
138 | .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
139 | .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
140 | .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
141 | .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
142 | .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
143 | .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
144 | .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
145 | .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
146 | .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
147 | .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
148 | .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
149 | .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
150 | .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
151 | .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
152 | .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
153 | .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
154 | .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
155 | .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
156 | .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
157 | .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
158 | .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
159 | .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
160 | .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
161 | .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
162 | .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
163 | .ui-icon-arrow-4 { background-position: 0 -80px; }
164 | .ui-icon-arrow-4-diag { background-position: -16px -80px; }
165 | .ui-icon-extlink { background-position: -32px -80px; }
166 | .ui-icon-newwin { background-position: -48px -80px; }
167 | .ui-icon-refresh { background-position: -64px -80px; }
168 | .ui-icon-shuffle { background-position: -80px -80px; }
169 | .ui-icon-transfer-e-w { background-position: -96px -80px; }
170 | .ui-icon-transferthick-e-w { background-position: -112px -80px; }
171 | .ui-icon-folder-collapsed { background-position: 0 -96px; }
172 | .ui-icon-folder-open { background-position: -16px -96px; }
173 | .ui-icon-document { background-position: -32px -96px; }
174 | .ui-icon-document-b { background-position: -48px -96px; }
175 | .ui-icon-note { background-position: -64px -96px; }
176 | .ui-icon-mail-closed { background-position: -80px -96px; }
177 | .ui-icon-mail-open { background-position: -96px -96px; }
178 | .ui-icon-suitcase { background-position: -112px -96px; }
179 | .ui-icon-comment { background-position: -128px -96px; }
180 | .ui-icon-person { background-position: -144px -96px; }
181 | .ui-icon-print { background-position: -160px -96px; }
182 | .ui-icon-trash { background-position: -176px -96px; }
183 | .ui-icon-locked { background-position: -192px -96px; }
184 | .ui-icon-unlocked { background-position: -208px -96px; }
185 | .ui-icon-bookmark { background-position: -224px -96px; }
186 | .ui-icon-tag { background-position: -240px -96px; }
187 | .ui-icon-home { background-position: 0 -112px; }
188 | .ui-icon-flag { background-position: -16px -112px; }
189 | .ui-icon-calendar { background-position: -32px -112px; }
190 | .ui-icon-cart { background-position: -48px -112px; }
191 | .ui-icon-pencil { background-position: -64px -112px; }
192 | .ui-icon-clock { background-position: -80px -112px; }
193 | .ui-icon-disk { background-position: -96px -112px; }
194 | .ui-icon-calculator { background-position: -112px -112px; }
195 | .ui-icon-zoomin { background-position: -128px -112px; }
196 | .ui-icon-zoomout { background-position: -144px -112px; }
197 | .ui-icon-search { background-position: -160px -112px; }
198 | .ui-icon-wrench { background-position: -176px -112px; }
199 | .ui-icon-gear { background-position: -192px -112px; }
200 | .ui-icon-heart { background-position: -208px -112px; }
201 | .ui-icon-star { background-position: -224px -112px; }
202 | .ui-icon-link { background-position: -240px -112px; }
203 | .ui-icon-cancel { background-position: 0 -128px; }
204 | .ui-icon-plus { background-position: -16px -128px; }
205 | .ui-icon-plusthick { background-position: -32px -128px; }
206 | .ui-icon-minus { background-position: -48px -128px; }
207 | .ui-icon-minusthick { background-position: -64px -128px; }
208 | .ui-icon-close { background-position: -80px -128px; }
209 | .ui-icon-closethick { background-position: -96px -128px; }
210 | .ui-icon-key { background-position: -112px -128px; }
211 | .ui-icon-lightbulb { background-position: -128px -128px; }
212 | .ui-icon-scissors { background-position: -144px -128px; }
213 | .ui-icon-clipboard { background-position: -160px -128px; }
214 | .ui-icon-copy { background-position: -176px -128px; }
215 | .ui-icon-contact { background-position: -192px -128px; }
216 | .ui-icon-image { background-position: -208px -128px; }
217 | .ui-icon-video { background-position: -224px -128px; }
218 | .ui-icon-script { background-position: -240px -128px; }
219 | .ui-icon-alert { background-position: 0 -144px; }
220 | .ui-icon-info { background-position: -16px -144px; }
221 | .ui-icon-notice { background-position: -32px -144px; }
222 | .ui-icon-help { background-position: -48px -144px; }
223 | .ui-icon-check { background-position: -64px -144px; }
224 | .ui-icon-bullet { background-position: -80px -144px; }
225 | .ui-icon-radio-off { background-position: -96px -144px; }
226 | .ui-icon-radio-on { background-position: -112px -144px; }
227 | .ui-icon-pin-w { background-position: -128px -144px; }
228 | .ui-icon-pin-s { background-position: -144px -144px; }
229 | .ui-icon-play { background-position: 0 -160px; }
230 | .ui-icon-pause { background-position: -16px -160px; }
231 | .ui-icon-seek-next { background-position: -32px -160px; }
232 | .ui-icon-seek-prev { background-position: -48px -160px; }
233 | .ui-icon-seek-end { background-position: -64px -160px; }
234 | .ui-icon-seek-start { background-position: -80px -160px; }
235 | /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
236 | .ui-icon-seek-first { background-position: -80px -160px; }
237 | .ui-icon-stop { background-position: -96px -160px; }
238 | .ui-icon-eject { background-position: -112px -160px; }
239 | .ui-icon-volume-off { background-position: -128px -160px; }
240 | .ui-icon-volume-on { background-position: -144px -160px; }
241 | .ui-icon-power { background-position: 0 -176px; }
242 | .ui-icon-signal-diag { background-position: -16px -176px; }
243 | .ui-icon-signal { background-position: -32px -176px; }
244 | .ui-icon-battery-0 { background-position: -48px -176px; }
245 | .ui-icon-battery-1 { background-position: -64px -176px; }
246 | .ui-icon-battery-2 { background-position: -80px -176px; }
247 | .ui-icon-battery-3 { background-position: -96px -176px; }
248 | .ui-icon-circle-plus { background-position: 0 -192px; }
249 | .ui-icon-circle-minus { background-position: -16px -192px; }
250 | .ui-icon-circle-close { background-position: -32px -192px; }
251 | .ui-icon-circle-triangle-e { background-position: -48px -192px; }
252 | .ui-icon-circle-triangle-s { background-position: -64px -192px; }
253 | .ui-icon-circle-triangle-w { background-position: -80px -192px; }
254 | .ui-icon-circle-triangle-n { background-position: -96px -192px; }
255 | .ui-icon-circle-arrow-e { background-position: -112px -192px; }
256 | .ui-icon-circle-arrow-s { background-position: -128px -192px; }
257 | .ui-icon-circle-arrow-w { background-position: -144px -192px; }
258 | .ui-icon-circle-arrow-n { background-position: -160px -192px; }
259 | .ui-icon-circle-zoomin { background-position: -176px -192px; }
260 | .ui-icon-circle-zoomout { background-position: -192px -192px; }
261 | .ui-icon-circle-check { background-position: -208px -192px; }
262 | .ui-icon-circlesmall-plus { background-position: 0 -208px; }
263 | .ui-icon-circlesmall-minus { background-position: -16px -208px; }
264 | .ui-icon-circlesmall-close { background-position: -32px -208px; }
265 | .ui-icon-squaresmall-plus { background-position: -48px -208px; }
266 | .ui-icon-squaresmall-minus { background-position: -64px -208px; }
267 | .ui-icon-squaresmall-close { background-position: -80px -208px; }
268 | .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
269 | .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
270 | .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
271 | .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
272 | .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
273 | .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
274 |
275 |
276 | /* Misc visuals
277 | ----------------------------------*/
278 |
279 | /* Corner radius */
280 | .ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 5px; -webkit-border-top-left-radius: 5px; -khtml-border-top-left-radius: 5px; border-top-left-radius: 5px; }
281 | .ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 5px; -webkit-border-top-right-radius: 5px; -khtml-border-top-right-radius: 5px; border-top-right-radius: 5px; }
282 | .ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 5px; -webkit-border-bottom-left-radius: 5px; -khtml-border-bottom-left-radius: 5px; border-bottom-left-radius: 5px; }
283 | .ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 5px; -webkit-border-bottom-right-radius: 5px; -khtml-border-bottom-right-radius: 5px; border-bottom-right-radius: 5px; }
284 |
285 | /* Overlays */
286 | .ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_75_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
287 | .ui-widget-shadow { margin: 5px 0 0 5px; padding: 0px; background: #999999 url(images/ui-bg_flat_55_999999_40x100.png) 50% 50% repeat-x; opacity: .45;filter:Alpha(Opacity=45); -moz-border-radius: 5px; -khtml-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*
288 | * jQuery UI Progressbar 1.8.17
289 | *
290 | * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
291 | * Dual licensed under the MIT or GPL Version 2 licenses.
292 | * http://jquery.org/license
293 | *
294 | * http://docs.jquery.com/UI/Progressbar#theming
295 | */
296 | .ui-progressbar { height:2em; text-align: left; overflow: hidden; }
297 | .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; }
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/js/CFInstall.min.js:
--------------------------------------------------------------------------------
1 | // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 | // Use of this source code is governed by a BSD-style license that can be
3 | // found in the LICENSE file.
4 |
5 | (function(e){if(!e.CFInstall){var f=function(a,b){return typeof a=="string"?(b||document).getElementById(a):a},h=function(){if(e.CFInstall._force)return e.CFInstall._forceValue;if(navigator.userAgent.toLowerCase().indexOf("chromeframe")>=0)return true;if(typeof window.ActiveXObject!="undefined")try{var a=new ActiveXObject("ChromeTab.ChromeFrame");if(a){a.registerBhoIfNeeded();return true}}catch(b){}return false},i=function(a){try{var b=document.createElement("style");b.setAttribute("type","text/css");
6 | if(b.styleSheet)b.styleSheet.cssText=a;else b.appendChild(document.createTextNode(a));var c=document.getElementsByTagName("head")[0];c.insertBefore(b,c.firstChild)}catch(g){}},j=false,k=false,l=function(){if(!k){i(".chromeFrameOverlayContent { display: none; }.chromeFrameOverlayUnderlay { display: none; }");document.cookie="disableGCFCheck=1;path=/;max-age=31536000000";k=true}},m=function(a){var b=document.createElement("iframe");b.setAttribute("frameborder","0");b.setAttribute("border","0");var c=
7 | f(a.node);b.id=a.id||(c?c.id||getUid(c):"");b.style.cssText=" "+(a.cssText||"");b.className=a.className||"";b.src=a.src||"about:blank";c&&c.parentNode.replaceChild(b,c);return b},n=function(a){a.className="chromeFrameInstallDefaultStyle "+(a.className||"");a=m(a);a.parentNode||document.body.insertBefore(a,document.body.firstChild)},o=function(a){if(!f("chromeFrameOverlayContent")){var b=document.createElement("span");b.innerHTML='
';
8 | for(var c=document.body;b.firstChild;)c.insertBefore(b.lastChild,c.firstChild);a=m(a);f("chromeFrameIframeHolder").appendChild(a);f("chromeFrameCloseButton").onclick=l}},d={};d.check=function(a){a=a||{};var b=navigator.userAgent,c=/MSIE (\S+); Windows NT/,g=false;if(c.test(b)){if(parseFloat(c.exec(b)[1])<6&&b.indexOf("SV1")<0)g=true}else g=true;if(!g){if(!j){i('.chromeFrameInstallDefaultStyle {width: 800px;height: 600px;position: absolute;left: 50%;top: 50%;margin-left: -400px;margin-top: -300px;}.chromeFrameOverlayContent {position: absolute;margin-left: -400px;margin-top: -300px;left: 50%;top: 50%;border: 1px solid #93B4D9;background-color: white;z-index: 2001;}.chromeFrameOverlayContent iframe {width: 800px;height: 600px;border: none;}.chromeFrameOverlayCloseBar {height: 1em;text-align: right;background-color: #CADEF4;}.chromeFrameOverlayUnderlay {position: absolute;width: 100%;height: 100%;background-color: white;opacity: 0.5;-moz-opacity: 0.5;-webkit-opacity: 0.5;-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";filter: alpha(opacity=50);z-index: 2000;}');
9 | j=true}document.cookie.indexOf("disableGCFCheck=1")>=0&&l();b=(document.location.protocol=="https:"?"https:":"http:")+"//www.google.com/chromeframe";if(!h()){a.onmissing&&a.onmissing();a.src=a.url||b;b=a.mode||"inline";if(!(a.preventPrompt||0))if(b=="inline")n(a);else b=="overlay"?o(a):window.open(a.src);if(!a.preventInstallDetection)var p=setInterval(function(){if(h()){a.oninstall&&a.oninstall();clearInterval(p);window.location=a.destination||window.location}},2E3)}}};d._force=false;d._forceValue=
10 | false;d.isAvailable=h;e.CFInstall=d}})(this.ChromeFrameInstallScope||this);
--------------------------------------------------------------------------------
/src/main/resources/public/demo-only/js/jquery-1.7.1.min.js:
--------------------------------------------------------------------------------
1 | /*! jQuery v1.7.1 jquery.com | jquery.org/license */
2 | (function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g
0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;ca ",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o=""+"",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
3 | f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c ",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML=" ",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="
";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,""," "],thead:[1,""],tr:[2,""],td:[3,""],col:[2,""],area:[1,""," "],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div","
"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
4 | {for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>$2>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/
17 |
18 |
19 |
20 |
21 |
22 |
23 |
34 | HTML5 ImageUploader Example
35 |
36 | Jersey resource
37 |
38 |
39 | Todo List
40 |
41 | Input type file (multiple) for image selection
42 |
43 | Javascript unit tests on behaviour of ImageUploader module
44 | Drag and drop image selection
45 | Client-side image preview in div / img / canvas
46 |
47 | Upload progress bar
48 | Client side resize to specified max width and/or
49 | height using Canvas and bilinear
51 | interpolation
52 |
53 |
54 | web workers if supported for client side operations such as
55 | resize algorithm
56 | XMLHttpRequest2 for file upload with progress status
57 | Check for required javascript APIs (XMLHttpRequest2 and
58 | FileReader?) in current browser with optional callback for behaviour
59 | Handle on error of XMLHttpRequest
60 | Optional timeout in config to trigger on error
61 |
62 |
63 | The ImageUploader in all its glory!
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
95 |
96 |
97 |
--------------------------------------------------------------------------------
/src/main/resources/public/js/ImageUploader.js:
--------------------------------------------------------------------------------
1 | /**
2 | * ImageUploader.js - a client-side image resize and upload javascript module
3 | *
4 | * @author Ross Turner (https://github.com/rossturner)
5 | */
6 | var ImageUploader = function(config) {
7 | if (!config || (!config.inputElement) || (!config.inputElement.getAttribute) || config.inputElement.getAttribute('type') !== 'file') {
8 | throw new Error('Config object passed to ImageUploader constructor must include "inputElement" set to be an element of type="file"');
9 | }
10 | this.setConfig(config);
11 |
12 | var This = this;
13 | this.config.inputElement.addEventListener('change', function(event) {
14 | var fileArray = [];
15 | var cursor = 0;
16 | for (; cursor < This.config.inputElement.files.length; ++cursor) {
17 | fileArray.push(This.config.inputElement.files[cursor]);
18 | }
19 | This.progressObject = {
20 | total : parseInt(fileArray.length, 10),
21 | done : 0,
22 | currentItemTotal : 0,
23 | currentItemDone : 0
24 | };
25 | if (typeof This.config.onProgress === 'function') {
26 | This.config.onProgress(This.progressObject);
27 | }
28 | This.handleFileList(fileArray, This.progressObject);
29 | }, false);
30 |
31 | if (This.config.debug) {
32 | console.log('Initialised ImageUploader for ' + This.config.inputElement);
33 | }
34 |
35 | };
36 |
37 | ImageUploader.prototype.handleFileList = function(fileArray) {
38 | var This = this;
39 | if (fileArray.length > 1) {
40 | var file = fileArray.shift();
41 | this.handleFileSelection(file, function() {
42 | This.handleFileList(fileArray);
43 | });
44 | } else if (fileArray.length === 1) {
45 | this.handleFileSelection(fileArray[0], function() {
46 | if (typeof This.config.onComplete === 'function') {
47 | This.config.onComplete(This.progressObject);
48 | }
49 | });
50 | }
51 | };
52 |
53 | ImageUploader.prototype.handleFileSelection = function(file, completionCallback) {
54 | var img = document.createElement('img');
55 | this.currentFile = file;
56 | var reader = new FileReader();
57 | var This = this;
58 | reader.onload = function(e) {
59 | img.src = e.target.result;
60 |
61 | img.onload = function () {
62 | //Rotate image first if required
63 | if (This.config.autoRotate) {
64 | if (This.config.debug) {
65 | console.log('ImageUploader: detecting image orientation...');
66 | }
67 | if ((typeof EXIF.getData === "function") && (typeof EXIF.getTag === "function")) {
68 | EXIF.getData(img, function () {
69 | var orientation = EXIF.getTag(this, "Orientation");
70 | if (This.config.debug) {
71 | console.log('ImageUploader: image orientation from EXIF tag = ' + orientation);
72 | }
73 | This.scaleImage(img, completionCallback, orientation);
74 | });
75 | } else {
76 | console.error("ImageUploader: can't read EXIF data, the Exif.js library not found");
77 | This.scaleImage(img, completionCallback);
78 | }
79 | } else {
80 | //No rotation, just scale the image
81 | This.scaleImage(img, completionCallback);
82 | }
83 | };
84 | };
85 | reader.readAsDataURL(file);
86 | };
87 |
88 | ImageUploader.prototype.drawImage = function(context, img, x, y, width, height, deg, flip, flop, center) {
89 | context.save();
90 |
91 | if(typeof width === "undefined") { width = img.width; }
92 | if(typeof height === "undefined") { height = img.height; }
93 | if(typeof center === "undefined") { center = false; }
94 |
95 | // Set rotation point to center of image, instead of top/left
96 | if(center) {
97 | x -= width/2;
98 | y -= height/2;
99 | }
100 |
101 | // Set the origin to the center of the image
102 | context.translate(x + width/2, y + height/2);
103 |
104 | // Rotate the canvas around the origin
105 | var rad = 2 * Math.PI - deg * Math.PI / 180;
106 | context.rotate(rad);
107 |
108 | // Flip/flop the canvas
109 | if(flip) { flipScale = -1; } else { flipScale = 1; }
110 | if(flop) { flopScale = -1; } else { flopScale = 1; }
111 | context.scale(flipScale, flopScale);
112 |
113 | // Draw the image
114 | context.drawImage(img, -width/2, -height/2, width, height);
115 |
116 | context.restore();
117 | };
118 |
119 | //run ratio allows the code to keep shrinking an image until the POST data is under a target
120 | ImageUploader.prototype.scaleImage = function(img, completionCallback, orientation, run_ratio =1) {
121 | var canvas = document.createElement('canvas');
122 | canvas.width = img.width;
123 | canvas.height = img.height;
124 | var ctx = canvas.getContext('2d');
125 | ctx.save();
126 |
127 | //Good explanation of EXIF orientation is here http://www.daveperrett.com/articles/2012/07/28/exif-orientation-handling-is-a-ghetto/
128 | var width = canvas.width;
129 | var styleWidth = canvas.style.width;
130 | var height = canvas.height;
131 | var styleHeight = canvas.style.height;
132 | if (typeof orientation === 'undefined') {
133 | orientation = 1;
134 | }
135 | if (orientation) {
136 | if (orientation > 4) {
137 | canvas.width = height;
138 | canvas.style.width = styleHeight;
139 | canvas.height = width;
140 | canvas.style.height = styleWidth;
141 | }
142 | switch (orientation) {
143 | case 2:
144 | ctx.translate(width, 0);
145 | ctx.scale(-1,1);
146 | break;
147 | case 3:
148 | ctx.translate(width,height);
149 | ctx.rotate(Math.PI);
150 | break;
151 | case 4:
152 | ctx.translate(0,height);
153 | ctx.scale(1,-1);
154 | break;
155 | case 5:
156 | ctx.rotate(0.5 * Math.PI);
157 | ctx.scale(1,-1);
158 | break;
159 | case 6:
160 | ctx.rotate(0.5 * Math.PI);
161 | ctx.translate(0,-height);
162 | break;
163 | case 7:
164 | ctx.rotate(0.5 * Math.PI);
165 | ctx.translate(width,-height);
166 | ctx.scale(-1,1);
167 | break;
168 | case 8:
169 | ctx.rotate(-0.5 * Math.PI);
170 | ctx.translate(-width,0);
171 | break;
172 | }
173 | }
174 | ctx.drawImage(img, 0, 0);
175 | ctx.restore();
176 |
177 | //Let's find the max available width for scaled image
178 | var ratio = canvas.width/canvas.height;
179 | var mWidth = Math.min(this.config.maxWidth, ratio*this.config.maxHeight, this.config.maxWidth * run_ratio);
180 | if ( (this.config.maxSize>0) && (this.config.maxSize= (2 * mWidth)) {
196 | canvas = this.getHalfScaleCanvas(canvas);
197 | }
198 |
199 | if (canvas.width > mWidth) {
200 | canvas = this.scaleCanvasWithAlgorithm(canvas, mWidth);
201 | }
202 |
203 | var imageData = canvas.toDataURL('image/jpeg', this.config.quality);
204 | if (typeof this.config.onScale === 'function') {
205 | this.config.onScale(imageData);
206 | }
207 | if (this.config.debug) {
208 | console.log('upload candidate size is ' + imageData.length);
209 | }
210 | if (imageData.length > this.config.maxUpload) {
211 | if (this.config.debug) { console.log("retrying resize at " + run_ratio); }
212 | this.scaleImage(img, filename, completionCallback, orientation,run_ratio - 0.1)
213 | return false;
214 | }
215 | this.performUpload(imageData, completionCallback);
216 | };
217 |
218 | ImageUploader.prototype.performUpload = function(imageData, completionCallback) {
219 | var xhr = new XMLHttpRequest();
220 | var This = this;
221 | var uploadInProgress = true;
222 | var headers = this.config.requestHeaders;
223 | var headersArray;
224 | var i;
225 |
226 | xhr.onload = function(e) {
227 | uploadInProgress = false;
228 | This.uploadComplete(e, completionCallback);
229 | };
230 | xhr.upload.addEventListener("progress", function(e) {
231 | This.progressUpdate(e.loaded, e.total);
232 | }, false);
233 | xhr.open('POST', this.config.uploadUrl, true);
234 |
235 | if(typeof headers === 'object' && headers !== null) {
236 | Object.keys(headers).forEach(function(key,index) {
237 | if(typeof headers[key] !== 'string') {
238 | headersArray = headers[key];
239 | for(i = 0, j = headersArray.length; i < j; i++) {
240 | xhr.setRequestHeader(key, headersArray[i]);
241 | }
242 | } else {
243 | xhr.setRequestHeader(key, headers[key]);
244 | }
245 | });
246 | }
247 |
248 | xhr.send(imageData.split(',')[1]);
249 |
250 | if (this.config.timeout) {
251 | setTimeout(function() {
252 | if (uploadInProgress) {
253 | xhr.abort();
254 | This.uploadComplete({
255 | target: {
256 | status: 'Timed out'
257 | }
258 | }, completionCallback);
259 | }
260 | }, this.config.timeout);
261 | }
262 |
263 | if (this.config.debug) {
264 | var resizedImage = document.createElement('img');
265 | this.config.workspace.appendChild(document.createElement('br'));
266 | this.config.workspace.appendChild(resizedImage);
267 |
268 | resizedImage.src = imageData;
269 | }
270 | };
271 |
272 | ImageUploader.prototype.uploadComplete = function(event, completionCallback) {
273 | this.progressObject.done++;
274 | this.progressUpdate(0, 0);
275 | completionCallback();
276 | if (typeof this.config.onFileComplete === 'function') {
277 | this.config.onFileComplete(event, this.currentFile);
278 | }
279 | };
280 |
281 | ImageUploader.prototype.progressUpdate = function(itemDone, itemTotal) {
282 | console.log('Uploaded '+itemDone+' of '+itemTotal);
283 | this.progressObject.currentItemDone = itemDone;
284 | this.progressObject.currentItemTotal = itemTotal;
285 | if (this.config.onProgress) {
286 | this.config.onProgress(this.progressObject);
287 | }
288 | };
289 |
290 | ImageUploader.prototype.scaleCanvasWithAlgorithm = function(canvas, maxWidth) {
291 | var scaledCanvas = document.createElement('canvas');
292 |
293 | var scale = maxWidth / canvas.width;
294 |
295 | scaledCanvas.width = canvas.width * scale;
296 | scaledCanvas.height = canvas.height * scale;
297 |
298 | var srcImgData = canvas.getContext('2d').getImageData(0, 0, canvas.width, canvas.height);
299 | var destImgData = scaledCanvas.getContext('2d').createImageData(scaledCanvas.width, scaledCanvas.height);
300 |
301 | this.applyBilinearInterpolation(srcImgData, destImgData, scale);
302 |
303 | scaledCanvas.getContext('2d').putImageData(destImgData, 0, 0);
304 |
305 | return scaledCanvas;
306 | };
307 |
308 | ImageUploader.prototype.getHalfScaleCanvas = function(canvas) {
309 | var halfCanvas = document.createElement('canvas');
310 | halfCanvas.width = canvas.width / 2;
311 | halfCanvas.height = canvas.height / 2;
312 |
313 | halfCanvas.getContext('2d').drawImage(canvas, 0, 0, halfCanvas.width, halfCanvas.height);
314 |
315 | return halfCanvas;
316 | };
317 |
318 | ImageUploader.prototype.applyBilinearInterpolation = function(srcCanvasData, destCanvasData, scale) {
319 | function inner(f00, f10, f01, f11, x, y) {
320 | var un_x = 1.0 - x;
321 | var un_y = 1.0 - y;
322 | return (f00 * un_x * un_y + f10 * x * un_y + f01 * un_x * y + f11 * x * y);
323 | }
324 | var i, j;
325 | var iyv, iy0, iy1, ixv, ix0, ix1;
326 | var idxD, idxS00, idxS10, idxS01, idxS11;
327 | var dx, dy;
328 | var r, g, b, a;
329 | for (i = 0; i < destCanvasData.height; ++i) {
330 | iyv = i / scale;
331 | iy0 = Math.floor(iyv);
332 | // Math.ceil can go over bounds
333 | iy1 = (Math.ceil(iyv) > (srcCanvasData.height - 1) ? (srcCanvasData.height - 1) : Math.ceil(iyv));
334 | for (j = 0; j < destCanvasData.width; ++j) {
335 | ixv = j / scale;
336 | ix0 = Math.floor(ixv);
337 | // Math.ceil can go over bounds
338 | ix1 = (Math.ceil(ixv) > (srcCanvasData.width - 1) ? (srcCanvasData.width - 1) : Math.ceil(ixv));
339 | idxD = (j + destCanvasData.width * i) * 4;
340 | // matrix to vector indices
341 | idxS00 = (ix0 + srcCanvasData.width * iy0) * 4;
342 | idxS10 = (ix1 + srcCanvasData.width * iy0) * 4;
343 | idxS01 = (ix0 + srcCanvasData.width * iy1) * 4;
344 | idxS11 = (ix1 + srcCanvasData.width * iy1) * 4;
345 | // overall coordinates to unit square
346 | dx = ixv - ix0;
347 | dy = iyv - iy0;
348 | // I let the r, g, b, a on purpose for debugging
349 | r = inner(srcCanvasData.data[idxS00], srcCanvasData.data[idxS10], srcCanvasData.data[idxS01], srcCanvasData.data[idxS11], dx, dy);
350 | destCanvasData.data[idxD] = r;
351 |
352 | g = inner(srcCanvasData.data[idxS00 + 1], srcCanvasData.data[idxS10 + 1], srcCanvasData.data[idxS01 + 1], srcCanvasData.data[idxS11 + 1], dx, dy);
353 | destCanvasData.data[idxD + 1] = g;
354 |
355 | b = inner(srcCanvasData.data[idxS00 + 2], srcCanvasData.data[idxS10 + 2], srcCanvasData.data[idxS01 + 2], srcCanvasData.data[idxS11 + 2], dx, dy);
356 | destCanvasData.data[idxD + 2] = b;
357 |
358 | a = inner(srcCanvasData.data[idxS00 + 3], srcCanvasData.data[idxS10 + 3], srcCanvasData.data[idxS01 + 3], srcCanvasData.data[idxS11 + 3], dx, dy);
359 | destCanvasData.data[idxD + 3] = a;
360 | }
361 | }
362 | };
363 |
364 | ImageUploader.prototype.setConfig = function(customConfig) {
365 | this.config = customConfig;
366 | this.config.debug = this.config.debug || false;
367 | this.config.quality = 1.00;
368 | if (0.00 < customConfig.quality && customConfig.quality <= 1.00) {
369 | this.config.quality = customConfig.quality;
370 | }
371 | if ( (!this.config.maxWidth) || (this.config.maxWidth<0) ){
372 | this.config.maxWidth = 1024;
373 | }
374 | if ( (!this.config.maxHeight) || (this.config.maxHeight<0) ) {
375 | this.config.maxHeight = 1024;
376 | }
377 | if ( (!this.config.maxSize) || (this.config.maxSize<0) ) {
378 | this.config.maxSize = null;
379 | }
380 | if ( (!this.config.scaleRatio) || (this.config.scaleRatio <= 0) || (this.config.scaleRatio >= 1) ) {
381 | this.config.scaleRatio = null;
382 | }
383 | this.config.autoRotate = true;
384 | if (typeof customConfig.autoRotate === 'boolean') {
385 | this.config.autoRotate = customConfig.autoRotate;
386 | }
387 |
388 | // Create container if none set
389 | if (!this.config.workspace) {
390 | this.config.workspace = document.createElement('div');
391 | document.body.appendChild(this.config.workspace);
392 | }
393 | };
394 |
--------------------------------------------------------------------------------