/home/mip/mip/public/vendor/laravel-filemanager/files/folder-1/821668/jquery-autotab.zip
PK @]��;��5 �5
index.htmlnu �Iw�� <!DOCTYPE html>
<html>
<head>
<title>jQuery Autotab Demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script src="js/jquery.autotab.js"></script>
<script>
$(function () {
$.autotab({ tabOnSelect: true });
$('.number').autotab('filter', 'number');
$('.text').autotab('filter', 'text');
$('.alpha').autotab('filter', 'alpha');
$('.alphanumeric').autotab('filter', { format: 'alphanumeric', uppercase: true });
$('#regex').autotab('filter', { format: 'custom', pattern: '[^0-9\.]', maxlength: 15 });
$('#function').autotab('filter', function (value, element) {
var parsedValue = parseInt(value, 10);
if (!value || parsedValue != value) {
return '';
}
var newValue = element.value + value;
if (newValue > 12) {
$.autotab.next();
return 2;
}
else if (element.value.length == 0 && value > 1) {
$.autotab.next();
return value;
}
else if (element.value.length == 1 && parsedValue === 0 && newValue != 10) {
$.autotab.next();
return 1;
}
return value;
});
$('.hexadecimal').autotab('filter', 'hexadecimal');
$('.ip').autotab('filter', { format: 'number', trigger: '.' });
$('.pin').autotab('filter', 'number');
$('#remove-autotab').on('click', function () {
$.autotab.remove();
$('#autotab-status span').removeClass('on').addClass('off').text('Off');
});
$('#restore-autotab').on('click', function () {
$.autotab.restore();
$('#autotab-status span').removeClass('off').addClass('on').text('On');
});
});
</script>
<style>
body {
background-color: #f7f7f9;
color: #333;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
line-height: 20px;
}
hr {
border: 0;
border-top: 1px solid #eee;
border-bottom: 1px solid #fff;
}
#container {
background-color: #fff;
border: 1px solid #e1e1e8;
border-radius: 10px;
box-sizing: border-box;
margin: auto;
padding: 20px;
width: 800px;
}
pre,
code {
background-color: #f7f7f9;
border: 1px solid #e1e1e8;
border-radius: 5px;
padding: 2px 4px;
word-wrap: break-word;
}
code {
display: inline-block;
}
.example {
}
.example label {
display: block;
font-weight: bold;
margin-bottom: 5px;
}
button {
background-color: #f3f3f3;
border: 1px solid #ccc;
border-radius: 4px;
color: #333;
cursor: pointer;
display: inline-block;
font-size: 14px;
margin: 10px 0;
/*outline: none;*/
padding: 6px 12px;
position: relative;
text-align: center;
vertical-align: middle;
white-space: nowrap;
}
button:hover {
background-color: #eee;
}
button:active {
top: 1px;
}
.on {
color: green;
}
.off {
color: red;
}
</style>
</head>
<body>
<div id="container">
<h1>jQuery Autotab Demo</h1>
<p>Autotab's full documentation can be found in <a href="https://github.com/Mathachew/jquery-autotab/blob/master/README.md">ReadMe.md</a> on GitHub.</p>
<hr>
<p><strong>Note:</strong> For the purposes of this demo, I am calling <code>$.autotab({ tabOnSelect: true });</code> to initialize the auto tabbing order.</p>
<hr>
<div>
<p>Use the buttons below to turn Autotab on or off. Turning Autotab off will remove both auto tabbing and filtering.</p>
<button id="restore-autotab">Turn On</button>
<button id="remove-autotab">Turn Off</button>
<span id="autotab-status">Autotab status: <span class="on">On</span></span>
</div>
<hr>
<div>
<div class="example">
<label for="number1">Phone Number</label>
<input type="text" id="number1" class="number" maxlength="3" size="3">
-
<input type="text" id="number2" class="number" maxlength="3" size="3">
-
<input type="text" id="number3" class="number" maxlength="4" size="5">
</div>
<pre>
$('.number').autotab('filter', 'number');
</pre>
</div>
<hr>
<div>
<div class="example">
<label for="text1">Text characters only</label>
<input type="text" id="text1" class="text" maxlength="5" size="4">
-
<input type="text" id="text2" class="text" maxlength="4" size="4">
-
<input type="text" id="text3" class="text" maxlength="5" size="4">
</div>
<pre>
$('.text').autotab('filter', 'text');
</pre>
</div>
<hr>
<div>
<div class="example">
<label for="alpha1">Alpha only</label>
<input type="text" id="alpha1" class="alpha" maxlength="5" size="4">
-
<input type="text" id="alpha2" class="alpha" maxlength="5" size="4">
-
<input type="text" id="alpha3" class="alpha" maxlength="5" size="4">
-
<input type="text" id="alpha4" class="alpha" maxlength="5" size="4">
-
<input type="text" id="alpha5" class="alpha" maxlength="5" size="4">
</div>
<pre>
$('.alpha').autotab('filter', 'alpha');
</pre>
</div>
<hr>
<div>
<div class="example">
<label for="alphanumeric1">Uppercase letters and numbers</label>
<input type="text" id="alphanumeric1" class="alphanumeric" maxlength="5" size="4">
-
<input type="text" id="alphanumeric2" class="alphanumeric" maxlength="5" size="4">
-
<input type="text" id="alphanumeric3" class="alphanumeric" maxlength="5" size="4">
-
<input type="text" id="alphanumeric4" class="alphanumeric" maxlength="5" size="4">
-
<input type="text" id="alphanumeric5" class="alphanumeric" maxlength="5" size="4">
</div>
<pre>
$('.alphanumeric').autotab('filter', { format: 'alphanumeric', uppercase: true });
</pre>
</div>
<hr>
<div>
<div class="example">
<label for="regex">Regular Expression (Allows numbers and periods)</label>
<input type="text" id="regex" maxlength="15" size="13">
</div>
<pre>
$('#regex').autotab({ format: 'custom', pattern: '[^0-9\.]' });
</pre>
</div>
<hr>
<div>
<div class="example">
<label for="function">Custom Function that forces a number range of 1 to 12</label>
<input type="text" id="function" maxlength="2" size="3">
</div>
<pre>
$('#function').autotab(function (value, element) {
var parsedValue = parseInt(value, 10);
if (!value || parsedValue != value) {
return '';
}
var newValue = element.value + value;
if (newValue > 12) {
$.autotab.next();
return 2;
}
else if (element.value.length == 0 && value > 1) {
$.autotab.next();
return value;
}
else if (element.value.length == 1 && parsedValue === 0 && newValue != 10) {
$.autotab.next();
return 1;
}
return value;
});
</pre>
</div>
<hr>
<div>
<div class="example">
<label for="regex">Hexadecimal (Allows numbers, a-f, and A-F)</label>
<input type="text" id="hexadecimal1" class="hexadecimal" maxlength="4" size="3">
:
<input type="text" id="hexadecimal2" class="hexadecimal" maxlength="4" size="3">
:
<input type="text" id="hexadecimal3" class="hexadecimal" maxlength="4" size="3">
:
<input type="text" id="hexadecimal4" class="hexadecimal" maxlength="4" size="3">
:
<input type="text" id="hexadecimal5" class="hexadecimal" maxlength="4" size="3">
:
<input type="text" id="hexadecimal6" class="hexadecimal" maxlength="4" size="3">
:
<input type="text" id="hexadecimal7" class="hexadecimal" maxlength="4" size="3">
:
<input type="text" id="hexadecimal8" class="hexadecimal" maxlength="4" size="3">
</div>
<pre>
$('.hexadecimal').autotab('filter', 'hexadecimal');
</pre>
</div>
<hr>
<div>
<div class="example">
<label for="ip1">Numbers only with support for auto tabbing on periods</label>
<input type="text" id="ip1" class="ip" maxlength="3" size="4">
.
<input type="text" id="ip2" class="ip" maxlength="3" size="4">
.
<input type="text" id="ip3" class="ip" maxlength="3" size="4">
.
<input type="text" id="ip4" class="ip" maxlength="3" size="4">
</div>
<pre>
$('.ip').autotab('filter', { format: 'number', trigger: '.' });
</pre>
</div>
<hr>
<div>
<div class="example">
<label for="pin1">Filtering and auto tabbing on password fields</label>
<input type="password" id="pin1" class="pin" maxlength="3" size="4">
.
<input type="password" id="pin2" class="pin" maxlength="3" size="4">
</div>
<pre>
$('.pin').autotab('filter', 'number');
</pre>
</div>
<hr>
<div>
<div class="example">
<label for="all1">Any and all characters with tabbing support on non-text form fields. Textarea will auto tab when the defined <code>maxlength</code> is reached, disabled fields are skipped entirely, and the select list will auto tab when a value is selected. Auto tabbing on select lists only applies for single select and is configurable using <code>tabOnSelect</code>.</label>
<input type="text" id="all1" class="all" maxlength="5" size="4">
<input type="text" id="all2" class="all" maxlength="3" size="1" disabled="disabled" value="zxy">
<input type="text" id="all3" class="all" maxlength="5" size="4">
<br>
<button value="button">Standard Button</button> <input type="submit" value="Submit Button"> <button value="button" disabled="disabled">Disabled Button</button>
<br>
<select>
<option>First</option>
<option>Second</option>
<option>Third</option>
</select>
<br>
<input type="radio" name="radio">
<br>
<input type="checkbox">
<br>
<textarea cols="20" rows="2" maxlength="10" class="all"></textarea>
<br>
<input type="text" id="all4" class="all" maxlength="5" size="4">
</div>
<pre>
// Note: This call is not necessary as 'all' is the default format
$('.all').autotab('filter', 'all');
</pre>
</div>
</div>
<script>
(function (p) {
if (p.indexOf('file:') == 0) {
return;
}
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-16922340-11', 'auto');
ga('send', 'pageview');
})(window.location.protocol);
</script>
</body>
</html>
PK @]F���y y autotab.jquery.jsonnu �Iw�� {
"name": "autotab",
"title": "jQuery Autotab",
"description": "A jQuery plugin that provides auto tabbing and filtering on text fields in a form.",
"keywords": [
"filter",
"autotab"
],
"version": "1.7.1",
"author": {
"name": "Mathachew",
"url": "https://github.com/Mathachew"
},
"maintainers": [
{
"name": "Matthew Miller",
"url": "https://github.com/Mathachew"
}
],
"licenses": [
{
"type": "MIT",
"url": "http://www.opensource.org/licenses/mit-license.php"
}
],
"bugs": "https://github.com/Mathachew/jquery-autotab/issues",
"homepage": "https://github.com/Mathachew/jquery-autotab",
"docs": "https://github.com/Mathachew/jquery-autotab/blob/master/README.md",
"dependencies": {
"jquery": ">=1.7"
}
}PK @]�\q�D D CHANGELOG.mdnu �Iw�� ## 1.7.1 (2014-08-21)
Bug fixes:
* fixes an issue when using deprecated methods `autotab_magic` and `autotab_filter` in a method chain
## 1.7 (2014-07-26)
Features:
* added support for additional fields and removed hidden fields from the selected elements, including maxlength support for textarea (#14)
* added option to auto tab on single value select lists when selecting a value
* added global methods to setup, remove and restore Autotab
* elements passed to Autotab now filter out hidden form fields
Bug fixes:
* fixes an issue with tabbing to a previous field that is disabled, resulting in the value being modified (#47)
## 1.6 (2014-04-30)
Features:
* restores the ability to apply a filter only (#36)
* added support to filter and tab on password fields (#36)
## 1.5.5 (2014-01-31)
Bug fixes:
* fixes a cursor position issue in IE6+ when replacing the value of a text box that is currently selected (#32)
## 1.5.4 (2014-01-15)
Features:
* added a check to apply filtering only to text fields, as support for other input types varies and may not support selection, while preserving auto tabbing functionality
Bug fixes:
* fixes an issue with multiple characters appearing after typing one when applying a filter rule more than once
* fixes an issue with maxLength and Firefox, which defaults to -1
## 1.5.3 (2014-01-13)
Bug fixes:
* addresses an issue with forms not submitting from the on-screen keyboard (#22)
## 1.5.2 (2014-01-13)
Bug fixes:
* refactoring caused filtering rules, like uppercase or lowercase, to not work correctly (#23)
## 1.5.1 (2013-12-17)
Bug fixes:
* in Internet Explorer, reaching the max length caused the last character to appear in the target element after auto tabbing (#19)
## 1.5 (2013-12-12)
Features:
* added support for auto tabbing by specific keys
* refactored various areas dealing with boolean evaulations and checking for iOS and Firefox
Bug fixes:
* fixed a bug that prevented the `change` event from triggering (#17)
## 1.4 (2013-11-12)
Features:
* pasting support has been greatly improved and behaves more intelligently
* improved support in Firefox so that special keys no longer have to be tracked in order to be allowed
Bug fixes:
* fixed a bug where the `del` key would do nothing in Firefox (introduced in 1.3)
* fixed several instances of bad evaluations of boolean values as a result of browsers storing data-* differently (introduced in 1.3)
## 1.3 (2013-11-09)
Features:
* added a 1ms timer to `$.autotab.next()` and `$.autotab.previous()` so that the calls perform as expected when the keypress event is complete
* added the ability to turn auto tab and filtering on or off at will (#4)
* added Firefox detection so that code specific to it can run separate from everything else
* improved support for using a function as the format
* refactored how Autotab's settings are stored as the previous method caused issues with turning it off and on again
* added support for loading filter formats using `data-autotab-format`
* added support for hexadecimal filtering
Bug fixes:
* if a selector has no matches, but `.autotab()` is still called, an error would occur
* if allowing periods in a text box, Firefox would display two periods when only one was typed
## 1.2 (2013-11-02)
Features:
* updated `autotab()` to be the primary means of setting up auto tabbing and filtering (see documentation for more details)
* greatly improved filtering by preventing illegal characters from appearing by changing `keyup` to `keypress`
* improved functionality when making multiple calls for auto tab and/or filtering that prevents multiple triggers of the auto tabbing and filtering from occuring
* added `$.autotab.next()` and `$.autotab.previous()`, which can be used to manually trigger the `autotab-next` and `autotab-previous` events respectively
* added support to prevent double tabbing using a timer, ie. pressing tab immediately after auto tabbing has occurred
* added basic support for pasting
* improved auto tabbing by moving to the next element when the current one reaches its maxlength while holding down a key
* auto tabbing forward will select the target element's value (#1)
* while auto tabbing does not work on iOS devices, the behavior of the script has improved, including input validation
* fully backwards compatible with Autotab 1.1b
Bug fixes:
* if rapidly typing illegal characters, the next element received focused despite the previous element not reaching it's maxlength
* addressed sevearl behavioral issues in some of the latest versions of Firefox
## 1.1b (2008-09-10)
Features:
* refactored auto tabbing and filtering functionality so that one or the other could be applied
* added `autotab_magic()`, simplifying the setup of `target` and `previous` elements
* added `custom` format option, which requires a regular expression to be passed in the `pattern` field
* updated `format` to support functions
Bug fixes:
* in Safari, pressing backspace in an empty text box would not focus on the `previous` element
* in IE, pressing the left arrow key would force the cursor to the end of the field's content
## 1.0 (2008-05-22)
Initial Release
PK @]�,KA? A? README.mdnu �Iw�� jQuery Autotab
==============
Autotab is a jQuery plugin that provides auto tabbing and filtering on text fields in a form. Once the maximum number of characters has been reached within a text field, the focus is automatically set to a defined element. Likewise, clearing out the text field's content by pressing backspace eventually places the focus on a previous element.
## Why jQuery Autotab?
* Auto tabbing behaves logically, in both tabbing forward and tabbing backwards.
* Allow your users to easily modify your text in a tab that would otherwise auto tab away.
* Reduce the amount of bad data submitted in a form by filtering text fields.
* Populate multiple text fields by pasting into one.
* Enhance text fields by auto tabbing when a specific character is pressed.
* It is small, fast, easy to load and built on the powerful jQuery library.
## Demo
Always running the latest and greatest version of Autotab: http://autotab.mathachew.com/
## Table of Contents
* [Requirements](#requirements)
* [Installation](#installation)
* [Setup and Usage](#setup-and-usage)
* [Auto Tabbing](#auto-tabbing)
* [Examples](#examples)
* [Remove and Restore](#remove-and-restore)
* [Examples](#examples-1)
* [Filtering](#filtering)
* [Examples](#examples-2)
* [Global Methods](#global-methods)
* [Options](#options)
* [Filter Formats](#filter-formats)
* [Minify](#minify)
* [Feedback](#feedback)
* [Copyright and License](#copyright-and-license)
## Requirements
Autotab works in both jQuery 1.7+ and 2.x. If your site supports Internet Explorer 6, 7, and/or 8, use jQuery 1.7+ since 2.x drops support for these browsers.
## Installation
Add a reference to jquery.autotab.js.
```html
<script src="jquery.autotab.js"></script>
```
## Setup and Usage
Autotab can be setup in several different ways within jQuery's `$(document).ready()` event. The two components that make up Autotab, auto tabbing and filtering, can be managed independently from one another, providing numerous ways of achieving the same result, depending on how indepth you want to setup your form.
### Auto Tabbing
__Note:__ If the selector matches multiple elements, the target and previous fields will be overwritten if previously set.
<table width="100%">
<tr>
<td width="25%">.autotab()</td>
<td>Accepts no arguments and applies auto tabbing rules only.</td>
</tr>
<tr>
<td valign="top">.autotab(string)</td>
<td>
<strong>string</strong>: Can be a filter format or a value that tells the script to remove or restore auto tab and filtering functionality.
<br />
<strong>Note</strong>: Previous auto tabbing order will be overwritten. To change the filter only, call <code>.autotab('filter', '')</code>
</td>
</tr>
<tr>
<td>.autotab(object)</td>
<td><strong>object</strong>: Applies the specified options to all matched elements.</td>
</tr>
</table>
#### Examples
Establishes auto tabbing rules only and forces each field to have a `maxlength` of 1.
```js
$('.answer').autotab({ maxlength: 1 });
```
```html
<div>
<label>Answer 1</label>
<input type="text" id="answer1" class="answer" size="3" /> -
<label>Answer 2</label>
<input type="text" id="answer2" class="answer" size="3" /> -
<label>Answer 3</label>
<input type="text" id="answer3" class="answer" size="3" /> -
</div>
```
Automatically establishes auto tabbing order and number filtering.
```js
$('.number').autotab('number');
```
```html
<div>
<label>Phone Number</label>
<input type="text" id="number1" class="number" maxlength="3" size="3" /> -
<input type="text" id="number2" class="number" maxlength="3" size="3" /> -
<input type="text" id="number3" class="number" maxlength="4" size="5" />
</div>
```
Manually defines auto tabbing order and alphanumeric filtering.
```js
$('#alphanumeric1').autotab({ format: 'alphanumeric', target: '#alphanumeric2' });
$('#alphanumeric2').autotab({ format: 'alphanumeric', target: '#alphanumeric3', previous: '#alphanumeric1' });
$('#alphanumeric3').autotab({ format: 'alphanumeric', target: '#alphanumeric4', previous: '#alphanumeric2' });
$('#alphanumeric4').autotab({ format: 'alphanumeric', target: '#alphanumeric5', previous: '#alphanumeric3' });
$('#alphanumeric5').autotab({ format: 'alphanumeric', previous: '#alphanumeric4' });
```
```html
<div>
<label>Product Key</label>
<input type="text" id="alphanumeric1" class="alphanumeric" maxlength="5" size="4" /> -
<input type="text" id="alphanumeric2" class="alphanumeric" maxlength="5" size="4" /> -
<input type="text" id="alphanumeric3" class="alphanumeric" maxlength="5" size="4" /> -
<input type="text" id="alphanumeric4" class="alphanumeric" maxlength="5" size="4" /> -
<input type="text" id="alphanumeric5" class="alphanumeric" maxlength="5" size="4" />
</div>
```
### Remove and Restore
<table width="100%">
<tr>
<td width="35%" valign="top">
.autotab('remove|destroy|disable')
</td>
<td>
<strong>string</strong>: Disables auto tab and filtering functionality on all matched elements.
<br />
<strong>Note</strong>: Both <code>destroy</code> and <code>remove</code> will disable auto tab and filtering. Standard and custom event bindings persist as they check the status of an element when called. Removing the <code>keydown</code> and <code>keypress</code> can have a negative impact in both user and developer experience if the same events have been bound in other areas.
</td>
</tr>
<tr>
<td valign="top">.autotab('restore|enable')</td>
<td>
<strong>string</strong>: Restores auto tab and filtering functionality on all matched elements.
</td>
</tr>
</table>
#### Examples
Manually turn off auto tab and filtering functionality on all text boxes.
```js
$('#remove-autotab').on('click', function () {
$('input[type=text]').autotab('remove');
});
```
```html
<button id="remove-autotab">Turn Off</button>
```
Manually turn on auto tab and filtering functionality on all text boxes.
```js
$('#restore-autotab').on('click', function () {
$('input[type=text]').autotab('restore');
});
```
```html
<button id="restore-autotab">Turn On</button>
```
### Filtering
__Note:__ If passing an object, the target and previous fields are ignored, if included, to preserve previously established auto tab rules. Use `.autotab(object)` to modify the target and previous fields.
<table width="100%">
<tr>
<td width="25%">.autotab('filter', string)</td>
<td><strong>string</strong>: Applies the specified filter format to all matched elements.</td>
</tr>
<tr>
<td valign="top">.autotab('filter', object)</td>
<td>
<strong>object</strong>: Applies the specified filter options to all matched elements. The target and previous fields are ignored.
</td>
</tr>
</table>
Because of how Autotab's settings are stored, it is possible to define the filter format using `data-autotab-format`. If using `custom`, place your regular expression in `data-autotab-pattern`.
#### Examples
Manually defines text filtering.
```js
$('#salt').autotab('filter', 'text');
```
```html
<div>
<label>Salt</label>
<input type="text" id="salt" maxlength="16" size="12" />
</div>
```
Manually defines alphanumeric filtering and converts all alpha characters to uppercase format.
```js
$('.alphanumeric').autotab('filter', { format: 'alphanumeric', uppercase: true });
```
```html
<div>
<label>Product Key</label>
<input type="text" id="alphanumeric1" class="alphanumeric" maxlength="5" size="4" /> -
<input type="text" id="alphanumeric2" class="alphanumeric" maxlength="5" size="4" /> -
<input type="text" id="alphanumeric3" class="alphanumeric" maxlength="5" size="4" /> -
<input type="text" id="alphanumeric4" class="alphanumeric" maxlength="5" size="4" /> -
<input type="text" id="alphanumeric5" class="alphanumeric" maxlength="5" size="4" />
</div>
```
Manually defines number filtering via `data-autotab-format`. In this example, `$(selector).autotab()` will take the attribute into account.
```html
<div>
<label>Phone Number</label>
<input type="text" id="phone1" maxlength="3" size="3" data-autotab-format="number" /> -
<input type="text" id="phone2" maxlength="3" size="3" data-autotab-format="number" /> -
<input type="text" id="phone3" maxlength="4" size="4" data-autotab-format="number" />
</div>
```
Other random JavaScript examples
```js
$(':input').autotab();
$('#username').autotab({ format: 'alphanumeric', target: '#password' });
$('#password').autotab({ previous: '#username', target: '#confirm' });
$('#product-key').autotab('filter', { format: 'alphanumeric', uppercase: true });
$('#ip-address').autotab('filter', { format: 'custom', pattern: '[^0-9\.]' });
$('#function').autotab('filter', function (text) { alert(text); });
$('#number1, #number2, #number3').autotab('filter', 'number');
$('.ipv6').autotab('filter', 'hexadecimal');
```
### Global Methods
Autotab comes with several global methods, which are probably most useful in edge cases.
<table width="100%">
<tr>
<td width="30%" valign="top">$.autotab()</td>
<td>Initializes Autotab on all elements matching the <code>:input</code> selector.</td>
</tr>
<tr>
<td valign="top">$.autotab(object)</td>
<td><strong>object</strong>: Applies the specified options to all matched elements.
</td>
</tr>
</table>
<table width="100%">
<tr>
<td width="30%" valign="top">$.autotab.next()</td>
<td>
Triggers the `autotab-next` event, which sets the focus on the target element, if it exists.
<br />
<strong>Note</strong>: This method is only useful if an element setup with Autotab has focus.
</td>
</tr>
<tr>
<td valign="top">$.autotab.previous()</td>
<td>
Triggers the `autotab-previous` event, which sets the focus on the previous element, if it exists.
<br />
<strong>Note</strong>: This method is only useful if an element setup with Autotab has focus.
</td>
</tr>
</table>
<table width="100%">
<tr>
<td width="30%" valign="top">$.autotab.remove()</td>
<td>Removes Autotab from all matched elements.</td>
</tr>
<tr>
<td valign="top">$.autotab.remove(string)</td>
<td><strong>string</strong>: A selector identifying the matched element.</td>
</tr>
<tr>
<td valign="top">$.autotab.remove(object)</td>
<td><strong>object</strong>: Applies the removal to all matched elements.</td>
</tr>
</table>
<table width="100%">
<tr>
<td width="30%" valign="top">$.autotab.restore()</td>
<td>Restores Autotab to all matched elements.</td>
</tr>
<tr>
<td valign="top">$.autotab.restore(string)</td>
<td><strong>string</strong>: A selector identifying the matched element.</td>
</tr>
<tr>
<td valign="top">$.autotab.restore(object)</td>
<td><strong>object</strong>: Applies restoration to all matched elements.</td>
</tr>
</table>
## Options
```js
var options = {
format: string|function,
pattern: string,
uppercase: boolean,
lowercase: boolean,
nospace: boolean,
maxlength: integer,
target: string|element,
previous: string|element,
trigger: string|array,
tabOnSelect: boolean
};
```
<table width="100%">
<tr>
<td valign="top">format</td>
<td>
<strong>string</strong>: Speficies which format rule to use on a text box's value.
<br />
<strong>function(value, element)</strong>: If a single regular expression is insufficient, a function can be used for custom formatting. The parameter <code>value</code> is the typed character and <code>element</code> is the focused JavaScript element.
<br />
<strong>Note</strong>: Go to <a href="#filter-formats">Filter Formats</a> to see each available <code>format</code> option.
</td>
</tr>
<tr>
<td>pattern</td>
<td>
<strong>string</strong>: Used only when the <code>custom</code> format is specified, and it must be a string.
</td>
</tr>
<tr>
<td>uppercase</td>
<td>
<strong>boolean</strong>: Forces all <code>alpha</code> characters to uppercase format.
</td>
</tr>
<tr>
<td>lowercase</td>
<td>
<strong>boolean</strong>: Forces all <code>alpha</code> characters to lowercase format.
</td>
</tr>
<tr>
<td valign="top">nospace</td>
<td>
<strong>boolean</strong>: Determines if spaces are allowed or not.
<br />
<strong>Note</strong>: Space and underscore are not alpha characters and are not included in the <code>alpha</code> and <code>alphanumeric</code> format options. Use the <code>custom</code> format to allow these characters.
</td>
</tr>
<tr>
<td valign="top">maxlength</td>
<td>
<strong>integer</strong>: The maximum number of characters allowed in a text box. Maxlength can be specified with the HTML attribute <code>maxlength</code>.
<br />
<strong>Note</strong>: The maxlength attribute value can be overwritten if the maxlength field is passed to <code>autotab()</code>.
</td>
</tr>
<tr>
<td valign="top">target</td>
<td>
When auto tabbing occurs, <code>target</code> is the element that will gain focus.
<br/>
<strong>string</strong>: A selector identifying the next element.
<br/>
<strong>element</strong>: The JavaScript or jQuery element.
</td>
</tr>
<tr>
<td valign="top">previous</td>
<td>
When backspacing or reverse tabbing, <code>previous</code> is the element that will gain focus.
<br/>
<strong>string</strong>: A selector identifying the next element.
<br/>
<strong>element</strong>: The JavaScript or jQuery element.
</td>
</td>
</tr>
<tr>
<td valign="top">trigger</td>
<td>
Triggers <code>autotab-next</code> when the specified characters are pressed.
<br/>
<strong>string</strong>: A string of one or more characters
<br/>
<strong>element</strong>: An array of one or more strings
</td>
</td>
</tr>
<tr>
<td valign="top">tabOnSelect</td>
<td>
<strong>boolean</strong>: Adds auto tabbing to all matched single value select lists.
</td>
</tr>
</table>
## Filter Formats
Autotab has several filter formats available, all passed into the `format` key. If none of the formats meet your needs, Autotab also supports a passing a function or specifying `custom` option where you can pass a regular expression.
<table width="100%">
<tr>
<td width="25%">all</td>
<td>Allows any and all characters.</td>
</tr>
<tr>
<td>text</td>
<td>Allows all characters, including special characters, except numbers.</td>
</tr>
<tr>
<td>alpha</td>
<td>Allows only letters.</td>
</tr>
<tr>
<td>number|numeric</td>
<td valign="top">Allows only numbers.</td>
</tr>
<tr>
<td>alphanumeric</td>
<td>Allows only letters and numbers.</td>
</tr>
<tr>
<td>hex|hexadecimal</td>
<td>Allows only letters A-F, a-f and numbers.</td>
</tr>
<tr>
<td>
custom
</td>
<td>
Allows a developer to provide a custom regular expression: <code>new RegExp(pattern, 'g');</code>
<br />
<strong>Note</strong>: Requires <code>pattern: <em>string</em></code>, ie: <code>pattern: "[^0-9\.]"</code>
</td>
</tr>
<tr>
<td valign="top">function(value, element)</td>
<td>
Allows a developer to provide a their own function in case a regular expression is insufficient.
<br />
<strong>Note</strong>: <code>value</code> is the typed character, <code>element</code> is the focused JavaScript element.
</td>
</tr>
</table>
## Minify
Autotab uses the [Closure Compiler](http://closure-compiler.appspot.com/) (`simple` optimization) to create jquery.autotab.min.js.
## Feedback
Please provide feature requests and bug reports here on [GitHub](../../issues).
You can also reach out to me on twitter: [@mathachew](http://www.twitter.com/mathachew)
## Copyright and license
© 2014 Matthew Miller
Licensed under the MIT licensing: http://www.opensource.org/licenses/mit-license.php
PK @]�#��O �O js/jquery.autotab.jsnu �Iw�� /**
* Autotab - jQuery plugin 1.7.1
* https://github.com/Mathachew/jquery-autotab
*
* Copyright (c) 2008, 2014 Matthew Miller
*
* Licensed under the MIT licensing:
* http://www.opensource.org/licenses/mit-license.php
*/
(function ($) {
var platform = navigator.platform,
settings = {
tabPause: 800,
focusChange: null,
iOS: (platform === 'iPad' || platform === 'iPhone' || platform === 'iPod'),
firefox: (typeof InstallTrigger !== 'undefined')
};
var setSettings = function (e, settings) {
if (settings === null || typeof settings === 'undefined') {
return;
}
for (var key in settings) {
$(e).data('autotab-' + key, settings[key]);
}
};
var getSettings = function (e) {
var settings = {
format: 'all',
loaded: false,
disabled: false,
pattern: null,
uppercase: false,
lowercase: false,
nospace: false,
maxlength: 2147483647,
target: null,
previous: null,
trigger: null,
originalValue: '',
changed: false,
editable: (e.type == 'text' || e.type == 'password' || e.type == 'textarea'),
tabOnSelect: false
};
for (var key in settings) {
if (typeof $(e).data('autotab-' + key) !== 'undefined') {
settings[key] = $(e).data('autotab-' + key);
}
}
// Save settings on first run
if (!settings.loaded) {
if (settings.trigger !== null && typeof settings.trigger === 'string') {
settings.trigger = settings.trigger.toString();
}
setSettings(e, settings);
}
return settings;
};
var queryObject = function (e) {
return (typeof e !== 'undefined' && (typeof e === 'string' || !(e instanceof jQuery)));
};
$.autotab = function (options) {
if (typeof options !== 'object') {
options = {};
}
$(':input').autotab(options);
};
$.autotab.next = function () {
var e = $(document.activeElement);
if (e.length) {
e.trigger('autotab-next');
}
};
$.autotab.previous = function () {
var e = $(document.activeElement);
if (e.length) {
e.trigger('autotab-previous');
}
};
$.autotab.remove = function (e) {
queryObject(e) ? $(e).autotab('remove') : $(':input').autotab('remove');
};
$.autotab.restore = function (e) {
queryObject(e) ? $(e).autotab('restore') : $(':input').autotab('restore');
};
$.fn.autotab = function (method, options) {
if (!this.length) {
return this;
}
// Remove hidden fields since tabbing backwards is supported on different form elements
var filtered = $.grep(this, function (e, i) {
return e.type != 'hidden';
});
// Apply filter options
if (method == 'filter') {
if (typeof options === 'string' || typeof options === 'function') {
options = { format: options };
}
for (var i = 0, length = filtered.length; i < length; i++) {
var defaults = getSettings(filtered[i]),
newOptions = options;
// Retain the established target/previous values as this area is for filtering only
newOptions.target = defaults.target;
newOptions.previous = defaults.previous;
$.extend(defaults, newOptions);
if (!defaults.loaded) {
defaults.disabled = true;
autotabBind(filtered[i], newOptions);
}
else {
setSettings(filtered[i], defaults);
}
}
}
// Disable auto tab and filtering
else if (method == 'remove' || method == 'destroy' || method == 'disable') {
for (var i = 0, length = filtered.length; i < length; i++) {
var defaults = getSettings(filtered[i]);
defaults.disabled = true;
setSettings(filtered[i], defaults);
}
}
// Re-enable auto tab and filtering
else if (method == 'restore' || method == 'enable') {
for (var i = 0, length = filtered.length; i < length; i++) {
var defaults = getSettings(filtered[i]);
defaults.disabled = false;
setSettings(filtered[i], defaults);
}
}
else {
if (method === null || typeof method === 'undefined') {
options = {};
}
else if (typeof method === 'string' || typeof method === 'function') {
options = { format: method };
}
else if (typeof method === 'object') {
options = method;
}
// Bind key events to element(s) passed
if (filtered.length > 1) {
for (var i = 0, length = filtered.length; i < length; i++) {
var n = i + 1,
p = i - 1,
newOptions = options;
if (i > 0 && n < length) {
newOptions.target = filtered[n];
newOptions.previous = filtered[p];
}
else if (i > 0) {
newOptions.target = null;
newOptions.previous = filtered[p];
}
else {
newOptions.target = filtered[n];
newOptions.previous = null;
}
autotabBind(filtered[i], newOptions);
}
}
else {
autotabBind(filtered[0], options);
}
}
return this;
};
var filterValue = function (e, value, defaults) {
if (typeof defaults.format === 'function') {
return defaults.format(value, e);
}
var pattern = null;
switch (defaults.format) {
case 'text':
pattern = new RegExp('[0-9]+', 'g');
break;
case 'alpha':
pattern = new RegExp('[^a-zA-Z]+', 'g');
break;
case 'number':
case 'numeric':
pattern = new RegExp('[^0-9]+', 'g');
break;
case 'alphanumeric':
pattern = new RegExp('[^0-9a-zA-Z]+', 'g');
break;
case 'hex':
case 'hexadecimal':
pattern = new RegExp('[^0-9A-Fa-f]+', 'g');
break;
case 'custom':
pattern = new RegExp(defaults.pattern, 'g');
break;
case 'all':
default:
break;
}
if (pattern !== null) {
value = value.replace(pattern, '');
}
if (defaults.nospace) {
pattern = new RegExp('[ ]+', 'g');
value = value.replace(pattern, '');
}
if (defaults.uppercase) {
value = value.toUpperCase();
}
if (defaults.lowercase) {
value = value.toLowerCase();
}
return value;
};
var autotabBind = function (element, options) {
var defaults = getSettings(element);
if (defaults.disabled) {
defaults.disabled = false;
defaults.target = null;
defaults.previous = null;
}
$.extend(defaults, options);
// Sets targets to element based on the name or ID passed if they are not currently objects
if (queryObject(defaults.target)) {
defaults.target = $(defaults.target);
}
if (queryObject(defaults.previous)) {
defaults.previous = $(defaults.previous);
}
var oldMaxlength = element.maxLength;
if (typeof element.maxLength === 'undefined' && element.type == 'textarea') {
oldMaxlength = element.maxLength = element.getAttribute('maxlength');
}
// defaults.maxlength has not changed and maxlength was specified
if (defaults.maxlength == 2147483647 && oldMaxlength != 2147483647 && oldMaxlength != -1) {
defaults.maxlength = oldMaxlength;
}
// defaults.maxlength overrides maxlength
else if (defaults.maxlength > 0) {
element.maxLength = defaults.maxlength;
}
// defaults.maxlength and maxlength have not been specified
// A target cannot be used since there is no defined maxlength
else {
defaults.target = null;
}
if (!defaults.loaded) {
defaults.loaded = true;
setSettings(element, defaults);
}
else {
setSettings(element, defaults);
return;
}
// Add a change event to select lists only so that we can auto tab when a value is selected
if (element.type == 'select-one') {
$(element).on('change', function (e) {
var defaults = getSettings(this);
if (defaults.tabOnSelect) {
$(this).trigger('autotab-next');
}
});
}
// The 1ms timeouts allow for keypress events to complete in case a
// custom function or exterior method calls for a manual auto tab
$(element).on('autotab-next', function (event, defaults) {
var self = this;
setTimeout(function () {
if (!defaults) {
defaults = getSettings(self);
}
var target = defaults.target;
if (!defaults.disabled && target.length) {
// Using focus on iOS devices is a pain, so use the browser's next/previous buttons to proceed
if (!settings.iOS) {
// Field is disabled, so tab to next element
if (target.prop('disabled')) {
target.trigger('autotab-next');
}
else {
target.focus().select();
}
settings.focusChange = new Date();
}
}
}, 1);
}).on('autotab-previous', function (event, defaults) {
var self = this;
setTimeout(function () {
if (!defaults) {
defaults = getSettings(self);
}
var previous = defaults.previous;
if (!defaults.disabled && previous.length) {
var value = previous.val();
// Field is disabled, so tab to previous element
if (previous.prop('disabled')) {
previous.trigger('autotab-previous');
}
else if (value.length && previous.data('autotab-editable')) {
previous.focus().val(value.substring(0, value.length - 1));
setSettings(previous, { changed: true });
}
else {
previous.focus();
}
settings.focusChange = null;
}
}, 1);
}).on('focus', function () {
setSettings(this, { originalValue: this.value });
}).on('blur', function () {
var defaults = getSettings(this);
if (defaults.changed && this.value != defaults.originalValue) {
setSettings(this, { changed: false });
$(this).change();
}
}).on('keydown', function (e) {
var defaults = getSettings(this);
if (!defaults || defaults.disabled) {
return true;
}
var keyCode = e.which || e.charCode;
// Go to the previous element when backspace
// is pressed in an empty input field
if (keyCode == 8) {
if (!defaults.editable || this.value.length === 0) {
$(this).trigger('autotab-previous', defaults);
// Prevent the browser from of navigating to the previous page
if (!defaults.editable) {
return false;
}
}
else {
setSettings(this, { changed: (this.value != defaults.originalValue) });
}
}
else if (keyCode == 9 && settings.focusChange !== null) {
// Tab backwards
if (e.shiftKey) {
settings.focusChange = null;
return;
}
if ((new Date().getTime() - settings.focusChange.getTime()) < settings.tabPause) {
settings.focusChange = null;
return false;
}
}
}).on('keypress', function (e) {
var defaults = getSettings(this),
keyCode = e.which || e.keyCode;
// e.charCode == 0 indicates a special key has been pressed, which only Firefox triggers
if (!defaults || defaults.disabled || (settings.firefox && e.charCode === 0) || e.ctrlKey || e.altKey || keyCode == 13 || (this.type != 'text' && this.type != 'password' && this.type != 'textarea') || this.disabled) {
return true;
}
var keyChar = String.fromCharCode(keyCode);
// Prevents auto tabbing when defaults.trigger is pressed
if (defaults.trigger !== null && defaults.trigger.indexOf(keyChar) >= 0) {
if (settings.focusChange !== null && (new Date().getTime() - settings.focusChange.getTime()) < settings.tabPause) {
settings.focusChange = null;
}
else {
$(this).trigger('autotab-next', defaults);
}
return false;
}
settings.focusChange = null;
var hasValue = document.selection && document.selection.createRange ? true : (e.charCode > 0);
keyChar = filterValue(this, keyChar, defaults);
if (hasValue && (keyChar === null || keyChar === '')) {
return false;
}
// Many, many thanks to Tim Down for this solution: http://stackoverflow.com/a/3923320/94656
if (hasValue && (this.value.length <= this.maxLength)) {
var start, end,
selectionType = 0;
if (typeof this.selectionStart === 'number' && typeof this.selectionEnd === 'number') {
// Non-IE browsers and IE 9
start = this.selectionStart;
end = this.selectionEnd;
selectionType = 1;
}
else if (document.selection && document.selection.createRange) {
// For IE up to version 8
var selectionRange = document.selection.createRange(),
textInputRange = this.createTextRange(),
precedingRange = this.createTextRange(),
bookmark = selectionRange.getBookmark();
textInputRange.moveToBookmark(bookmark);
precedingRange.setEndPoint("EndToStart", textInputRange);
start = precedingRange.text.length;
end = start + selectionRange.text.length;
selectionType = 2;
}
// Text is fully selected, so it needs to be replaced
if (start === 0 && end == this.value.length) {
this.value = keyChar;
setSettings(this, { changed: (this.value != defaults.originalValue) });
}
else {
if (this.value.length == this.maxLength && start === end) {
$(this).trigger('autotab-next', defaults);
return false;
}
this.value = this.value.slice(0, start) + keyChar + this.value.slice(end);
setSettings(this, { changed: (this.value != defaults.originalValue) });
}
// Prevents the cursor position from being set to the end of the text box
// This is called even if the text is fully selected and replaced due to an unexpected behavior in IE6 and up (#32)
if (this.value.length != defaults.maxlength) {
start++;
if (selectionType == 1) {
this.selectionStart = this.selectionEnd = start;
}
else if (selectionType == 2) {
var range = this.createTextRange();
range.collapse(true);
range.moveEnd('character', start);
range.moveStart('character', start);
range.select();
}
}
}
if (this.value.length == defaults.maxlength) {
$(this).trigger('autotab-next', defaults);
}
return false;
}).on('paste', function (e) {
var defaults = getSettings(this);
if (!defaults) {
return true;
}
this.maxLength = 2147483647;
(function (e, originDefaults) {
setTimeout(function () {
var lastIndex = -1,
hiddenInput = document.createElement('input');
hiddenInput.type = 'hidden';
hiddenInput.value = e.value.toLowerCase();
e.maxLength = originDefaults.maxlength;
e.value = filterValue(e, e.value, originDefaults).substr(0, originDefaults.maxlength);
var handlePaste = function (e, previousValue) {
if (!e) {
return;
}
for (var i = 0, count = previousValue.length; i < count; i++) {
lastIndex = hiddenInput.value.indexOf(previousValue.charAt(i), lastIndex) + 1;
}
var defaults = getSettings(e),
trimmedValue = hiddenInput.value.substr(lastIndex),
filteredValue = filterValue(e, trimmedValue, defaults).substr(0, defaults.maxlength);
if (!filteredValue) {
e.value = '';
return;
}
e.value = filteredValue;
if (filteredValue.length == defaults.maxlength) {
$(e).trigger('autotab-next', defaults);
if (!settings.iOS) {
handlePaste(defaults.target[0], filteredValue);
}
}
};
if (e.value.length == originDefaults.maxlength) {
$(e).trigger('autotab-next', defaults);
if (!settings.iOS) {
handlePaste(originDefaults.target[0], e.value.toLowerCase());
}
}
}, 1);
})(this, defaults);
});
};
// Deprecated, here for backwards compatibility
$.fn.autotab_magic = function (focus) {
return $(this).autotab();
};
$.fn.autotab_filter = function (options) {
var defaults = {};
if (typeof options === 'string' || typeof options === 'function') {
defaults.format = options;
}
else {
$.extend(defaults, options);
}
return $(this).autotab('filter', defaults);
};
})(jQuery);PK @]�}�� � js/jquery.autotab.min.jsnu �Iw�� /**
* Autotab - jQuery plugin 1.7.1
* https://github.com/Mathachew/jquery-autotab
*
* Copyright (c) 2008, 2014 Matthew Miller
*
* Licensed under the MIT licensing:
* http://www.opensource.org/licenses/mit-license.php
*/
(function(e){var q=navigator.platform,k=null,r="iPad"===q||"iPhone"===q||"iPod"===q,v="undefined"!==typeof InstallTrigger,g=function(a,c){if(null!==c&&"undefined"!==typeof c)for(var b in c)e(a).data("autotab-"+b,c[b])},l=function(a){var c={format:"all",loaded:!1,disabled:!1,pattern:null,uppercase:!1,lowercase:!1,nospace:!1,maxlength:2147483647,target:null,previous:null,trigger:null,originalValue:"",changed:!1,editable:"text"==a.type||"password"==a.type||"textarea"==a.type,tabOnSelect:!1},b;for(b in c)"undefined"!==
typeof e(a).data("autotab-"+b)&&(c[b]=e(a).data("autotab-"+b));c.loaded||(null!==c.trigger&&"string"===typeof c.trigger&&(c.trigger=c.trigger.toString()),g(a,c));return c},p=function(a){return"undefined"!==typeof a&&("string"===typeof a||!(a instanceof jQuery))};e.autotab=function(a){"object"!==typeof a&&(a={});e(":input").autotab(a)};e.autotab.next=function(){var a=e(document.activeElement);a.length&&a.trigger("autotab-next")};e.autotab.previous=function(){var a=e(document.activeElement);a.length&&
a.trigger("autotab-previous")};e.autotab.remove=function(a){p(a)?e(a).autotab("remove"):e(":input").autotab("remove")};e.autotab.restore=function(a){p(a)?e(a).autotab("restore"):e(":input").autotab("restore")};e.fn.autotab=function(a,c){if(!this.length)return this;var b=e.grep(this,function(a,b){return"hidden"!=a.type});if("filter"==a){if("string"===typeof c||"function"===typeof c)c={format:c};for(var d=0,n=b.length;d<n;d++){var f=l(b[d]),h=c;h.target=f.target;h.previous=f.previous;e.extend(f,h);
f.loaded?g(b[d],f):(f.disabled=!0,s(b[d],h))}}else if("remove"==a||"destroy"==a||"disable"==a)for(d=0,n=b.length;d<n;d++)f=l(b[d]),f.disabled=!0,g(b[d],f);else if("restore"==a||"enable"==a)for(d=0,n=b.length;d<n;d++)f=l(b[d]),f.disabled=!1,g(b[d],f);else if(null===a||"undefined"===typeof a?c={}:"string"===typeof a||"function"===typeof a?c={format:a}:"object"===typeof a&&(c=a),1<b.length)for(d=0,n=b.length;d<n;d++){var f=d+1,u=d-1,h=c;0<d&&f<n?(h.target=b[f],h.previous=b[u]):0<d?(h.target=null,h.previous=
b[u]):(h.target=b[f],h.previous=null);s(b[d],h)}else s(b[0],c);return this};var t=function(a,c,b){if("function"===typeof b.format)return b.format(c,a);a=null;switch(b.format){case "text":a=RegExp("[0-9]+","g");break;case "alpha":a=RegExp("[^a-zA-Z]+","g");break;case "number":case "numeric":a=RegExp("[^0-9]+","g");break;case "alphanumeric":a=RegExp("[^0-9a-zA-Z]+","g");break;case "hex":case "hexadecimal":a=RegExp("[^0-9A-Fa-f]+","g");break;case "custom":a=new RegExp(b.pattern,"g")}null!==a&&(c=c.replace(a,
""));b.nospace&&(a=RegExp("[ ]+","g"),c=c.replace(a,""));b.uppercase&&(c=c.toUpperCase());b.lowercase&&(c=c.toLowerCase());return c},s=function(a,c){var b=l(a);b.disabled&&(b.disabled=!1,b.target=null,b.previous=null);e.extend(b,c);p(b.target)&&(b.target=e(b.target));p(b.previous)&&(b.previous=e(b.previous));var d=a.maxLength;"undefined"===typeof a.maxLength&&"textarea"==a.type&&(d=a.maxLength=a.getAttribute("maxlength"));2147483647==b.maxlength&&2147483647!=d&&-1!=d?b.maxlength=d:0<b.maxlength?a.maxLength=
b.maxlength:b.target=null;if(b.loaded)g(a,b);else{b.loaded=!0;g(a,b);if("select-one"==a.type)e(a).on("change",function(a){l(this).tabOnSelect&&e(this).trigger("autotab-next")});e(a).on("autotab-next",function(a,b){var h=this;setTimeout(function(){b||(b=l(h));var a=b.target;b.disabled||!a.length||r||(a.prop("disabled")?a.trigger("autotab-next"):a.focus().select(),k=new Date)},1)}).on("autotab-previous",function(a,b){var h=this;setTimeout(function(){b||(b=l(h));var a=b.previous;if(!b.disabled&&a.length){var c=
a.val();a.prop("disabled")?a.trigger("autotab-previous"):c.length&&a.data("autotab-editable")?(a.focus().val(c.substring(0,c.length-1)),g(a,{changed:!0})):a.focus();k=null}},1)}).on("focus",function(){g(this,{originalValue:this.value})}).on("blur",function(){var a=l(this);a.changed&&this.value!=a.originalValue&&(g(this,{changed:!1}),e(this).change())}).on("keydown",function(a){var b=l(this);if(!b||b.disabled)return!0;var c=a.which||a.charCode;if(8==c)if(b.editable&&0!==this.value.length)g(this,{changed:this.value!=
b.originalValue});else{if(e(this).trigger("autotab-previous",b),!b.editable)return!1}else if(9==c&&null!==k)if(a.shiftKey)k=null;else if(800>(new Date).getTime()-k.getTime())return k=null,!1}).on("keypress",function(a){var b=l(this),c=a.which||a.keyCode;if(!b||b.disabled||v&&0===a.charCode||a.ctrlKey||a.altKey||13==c||"text"!=this.type&&"password"!=this.type&&"textarea"!=this.type||this.disabled)return!0;c=String.fromCharCode(c);if(null!==b.trigger&&0<=b.trigger.indexOf(c))return null!==k&&800>(new Date).getTime()-
k.getTime()?k=null:e(this).trigger("autotab-next",b),!1;k=null;a=document.selection&&document.selection.createRange?!0:0<a.charCode;c=t(this,c,b);if(a&&(null===c||""===c))return!1;if(a&&this.value.length<=this.maxLength){var d,m;a=0;if("number"===typeof this.selectionStart&&"number"===typeof this.selectionEnd)d=this.selectionStart,m=this.selectionEnd,a=1;else if(document.selection&&document.selection.createRange){m=document.selection.createRange();d=this.createTextRange();a=this.createTextRange();
var w=m.getBookmark();d.moveToBookmark(w);a.setEndPoint("EndToStart",d);d=a.text.length;m=d+m.text.length;a=2}if(0===d&&m==this.value.length)this.value=c;else{if(this.value.length==this.maxLength&&d===m)return e(this).trigger("autotab-next",b),!1;this.value=this.value.slice(0,d)+c+this.value.slice(m)}g(this,{changed:this.value!=b.originalValue});this.value.length!=b.maxlength&&(d++,1==a?this.selectionStart=this.selectionEnd=d:2==a&&(c=this.createTextRange(),c.collapse(!0),c.moveEnd("character",d),
c.moveStart("character",d),c.select()))}this.value.length==b.maxlength&&e(this).trigger("autotab-next",b);return!1}).on("paste",function(a){var b=l(this);if(!b)return!0;this.maxLength=2147483647;(function(a,c){setTimeout(function(){var d=-1,g=document.createElement("input");g.type="hidden";g.value=a.value.toLowerCase();a.maxLength=c.maxlength;a.value=t(a,a.value,c).substr(0,c.maxlength);var k=function(a,b){if(a){for(var c=0,f=b.length;c<f;c++)d=g.value.indexOf(b.charAt(c),d)+1;c=l(a);f=g.value.substr(d);
(f=t(a,f,c).substr(0,c.maxlength))?(a.value=f,f.length==c.maxlength&&(e(a).trigger("autotab-next",c),r||k(c.target[0],f))):a.value=""}};a.value.length==c.maxlength&&(e(a).trigger("autotab-next",b),r||k(c.target[0],a.value.toLowerCase()))},1)})(this,b)})}};e.fn.autotab_magic=function(a){return e(this).autotab()};e.fn.autotab_filter=function(a){var c={};"string"===typeof a||"function"===typeof a?c.format=a:e.extend(c,a);return e(this).autotab("filter",c)}})(jQuery);
PK @]�m�E E
bower.jsonnu �Iw�� {
"name": "jquery.autotab",
"version": "1.7.1",
"description": "A jQuery plugin that provides auto-tabbing and filtering on text fields in a form.",
"main": [ "./js/jquery.autotab.min.js" ],
"homepage": "https://github.com/Mathachew/jquery-autotab",
"dependencies" : {
"jquery" : ">= 1.7"
},
"keywords": [
"autotab",
"filter"
],
"author" : {
"name" : "Matthew Miller",
"web" : "https://github.com/Mathachew"
},
"license": [
"http://www.opensource.org/licenses/mit-license.php"
]
}PK @]��;��5 �5
index.htmlnu �Iw�� PK @]F���y y �5 autotab.jquery.jsonnu �Iw�� PK @]�\q�D D �9 CHANGELOG.mdnu �Iw�� PK @]�,KA? A? 1N README.mdnu �Iw�� PK @]�#��O �O �� js/jquery.autotab.jsnu �Iw�� PK @]�}�� � �� js/jquery.autotab.min.jsnu �Iw�� PK @]�m�E E
� bower.jsonnu �Iw�� PK ( Z�