mirror of
https://github.com/YunoHost-Apps/hubzilla_ynh.git
synced 2024-09-03 19:26:21 +02:00
576 lines
22 KiB
HTML
576 lines
22 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>Demo: Are You Sure? - a dirty forms jQuery Plugin</title>
|
|
|
|
<!--
|
|
|
|
We'll use an old version of jQuery to show we're backwards compatible. In
|
|
production we recommend using a later version. e.g.
|
|
|
|
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
|
|
<script src="http://code.jquery.com/jquery-2.1.1.min.js"></script>
|
|
|
|
-->
|
|
|
|
<script src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
|
|
<script src="../jquery.are-you-sure.js"></script>
|
|
<script src="../ays-beforeunload-shim.js"></script>
|
|
<script>
|
|
|
|
$(function() {
|
|
|
|
// Example 1 - ... in one line of code
|
|
$('#example-1-form').areYouSure();
|
|
|
|
|
|
// Example 2 - ignore a dynamic field
|
|
$('#example-2-form').areYouSure();
|
|
|
|
var defaultPickup15min = new Date((new Date()).getTime() + 15 * 60000);
|
|
$('#pickup').val(defaultPickup15min.getHours()
|
|
+ ':' + defaultPickup15min.getMinutes());
|
|
|
|
|
|
// Example 3 - custom message and hooking the dirty change events
|
|
$('#example-3-form').areYouSure(
|
|
{
|
|
message: "Did you forget to save your standard coffee order?"
|
|
}
|
|
);
|
|
// Enable save button only if the form is dirty - using events.
|
|
$('#example-3-form').bind('dirty.areYouSure', function() {
|
|
$(this).find('input[type="submit"]').removeAttr('disabled');
|
|
});
|
|
$('#example-3-form').bind('clean.areYouSure', function() {
|
|
$(this).find('input[type="submit"]').attr('disabled', 'disabled');
|
|
});
|
|
|
|
|
|
// Example 4 - dynamically change and add form fields.
|
|
$('#example-4-form').areYouSure(
|
|
{
|
|
message: "Did you forget to submit your coffee order?"
|
|
}
|
|
);
|
|
|
|
$('#example-4-lastorder').click(function() {
|
|
// ... set our saved coffee type.
|
|
$('#example-4-coffee').val('espresso');
|
|
// Because we've made a change from our own JavaScript, we need to fire
|
|
// off manual 'form check'.
|
|
$('#example-4-form').trigger('checkform.areYouSure');
|
|
});
|
|
|
|
// If it's warm enough, offer an iced coffee special.
|
|
$.getJSON("http://api.openweathermap.org/data/2.5/weather?q=Melbourne,AU&mode=json&units=metric&callback=?",
|
|
function(data) {
|
|
var temp = data.main.temp;
|
|
if (temp > 5) {
|
|
$('#example-4-special').append('<p>It\'s currently '
|
|
+ temp + 'C in Melbourne. Ice it up!</p>');
|
|
$('#example-4-special').append('<input type="checkbox" name="make-it-iced" value="true" />'
|
|
+ ' Make it an iced coffee<br />');
|
|
|
|
// Trigger rescan event on the form so we start tracking the new field.
|
|
$('#example-4-form').trigger('rescan.areYouSure');
|
|
}
|
|
}
|
|
);
|
|
|
|
|
|
/*
|
|
* Example 5
|
|
* - extra shots button to enable/disable shots options
|
|
* - like/unlike button (changing hidden form field value)
|
|
* - hook dirty change event to enable/disable submit (using method),
|
|
* to more easily demonstrate when the form is dirty
|
|
*/
|
|
$('#example-5-extra-shots').click(function() {
|
|
// we trigger a change event on the fields so that the AreYouSure event handler is called
|
|
$('#example-5-form input[name=shots]').removeAttr('disabled').change();
|
|
$('#example-5-extra-shots').hide();
|
|
$('#example-5-shots-options').show();
|
|
return false;
|
|
});
|
|
$('#example-5-like-button').click(function() {
|
|
var currentLike = $('#example-5-like').val() == 'true';
|
|
var newLike = !currentLike;
|
|
// we trigger a change event on the fields so that the areYouSure event handler is called
|
|
$('#example-5-like').val(newLike).change();
|
|
$('#example-5-like-button').text(newLike ? 'Unlike' : 'Like');
|
|
return false;
|
|
});
|
|
$('#example-5-form').areYouSure({
|
|
change: function() {
|
|
// Enable save button only if the form is dirty.
|
|
if ($(this).hasClass('dirty')) {
|
|
$(this).find('input[type="submit"]').removeAttr('disabled');
|
|
} else {
|
|
$(this).find('input[type="submit"]').attr('disabled', 'disabled');
|
|
}
|
|
}
|
|
});
|
|
|
|
// Example 6 - HTML5 input types
|
|
$('#example-6-form').areYouSure();
|
|
|
|
// Example 7 - ... in one line of code for the form and some more optional to toggle disabled state of the save button
|
|
$('#example-7-form').areYouSure();
|
|
$('#example-7-save-button').click(function () {
|
|
$('#example-7-form').trigger('reinitialize.areYouSure');
|
|
});
|
|
// code below is optional to handle disabled state of the save button
|
|
$('#example-7-form').bind('dirty.areYouSure', function () {
|
|
// Enable save button only as the form is dirty.
|
|
$('#example-7-save-button').attr({ 'disabled': false });
|
|
});
|
|
$('#example-7-form').bind('clean.areYouSure', function () {
|
|
// Form is clean so nothing to save - disable the save button.
|
|
$('#example-7-save-button').attr({ 'disabled': true });
|
|
});
|
|
});
|
|
|
|
</script>
|
|
|
|
<style type="text/css">
|
|
body {
|
|
font-family: myriad-pro-1, myriad-pro-2, 'Lucida Grande', 'Arial', sans-serif;
|
|
margin: 25px;
|
|
}
|
|
|
|
form {
|
|
width: 350px;
|
|
border: 1px solid #AA5303;
|
|
padding: 10px 20px;
|
|
background-image: -webkit-linear-gradient(top, rgba(170,83,3, 0.1), rgba(170,83,3, 0.5));
|
|
background-image: -moz-linear-gradient(top, rgba(170,83,3, 0.1), rgba(170,83,3, 0.5));
|
|
background-image: -ms-linear-gradient(top, rgba(170,83,3, 0.1), rgba(170,83,3, 0.5));
|
|
background-image: -o-linear-gradient(top, rgba(170,83,3, 0.1), rgba(170,83,3, 0.5));
|
|
background-image: linear-gradient(top, rgba(170,83,3, 0.1), rgba(170,83,3, 0.5));
|
|
border-radius: 5px;
|
|
}
|
|
|
|
/* A bit of custom styling on example 3 */
|
|
#example-3-form.dirty, #example-4-form.dirty {
|
|
box-shadow: 0 0 8px rgba(255, 0, 0, 1);
|
|
-webkit-box-shadow: 0 0 8px rgba(255, 0, 0, 1);
|
|
-moz-box-shadow: 0 0 8px rgba(255, 0, 0, 1);
|
|
border:1px solid rgba(255,0,0, 0.8);
|
|
}
|
|
|
|
form h2 {
|
|
font-size: 22px;
|
|
}
|
|
|
|
form > div {
|
|
padding: 8px;
|
|
font-size: 12px;
|
|
}
|
|
form > div input[type="text"],
|
|
form > div input[type="color"],
|
|
form > div input[type="date"],
|
|
form > div input[type="datetime"],
|
|
form > div input[type="datetime-local"],
|
|
form > div input[type="email"],
|
|
form > div input[type="month"],
|
|
form > div input[type="number"],
|
|
form > div input[type="range"],
|
|
form > div input[type="search"],
|
|
form > div input[type="tel"],
|
|
form > div input[type="time"],
|
|
form > div input[type="url"],
|
|
form > div input[type="week"],
|
|
form > div input:not([type]),
|
|
form > div textarea,
|
|
form > div select,
|
|
form > div button {
|
|
float: right;
|
|
width: 200px;
|
|
}
|
|
|
|
form > div input[type="radio"],
|
|
form > div input[type="checkbox"] {
|
|
display: inline-block;
|
|
margin-left: 130px;
|
|
}
|
|
|
|
form > div input[type="submit"] {
|
|
float: right;
|
|
}
|
|
form > div.buttons {
|
|
clear: both;
|
|
padding-bottom: 20px;
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
<h1>jQuery Plugin Demo: Are You Sure?</h1>
|
|
<p>
|
|
This page hosts a demo of the <a href="https://github.com/codedance/jquery.AreYouSure">jQuery Are-You-Sure</a> plugin (<code>jquery.are-you-sure.js</code>).
|
|
</p>
|
|
<p>
|
|
<i>Are-you-sure</i> is simple light-weight "dirty forms" JQuery Plugin for modern browsers. It helps prevent users from loosing unsaved form changes.
|
|
</p>
|
|
<p>
|
|
<strong>Features:</strong>
|
|
<ul>
|
|
<li>Light weight - only the features you need!</li>
|
|
<li>Dependency free.</li>
|
|
<li>Correct state management - if a user edits then restores a value, the form is not considered dirty.</li>
|
|
<li>Easy to understand - less than a "terminal screen" of code!</li>
|
|
<li>... and <a href="https://github.com/codedance/jquery.AreYouSure">more</a>.</li>
|
|
</ul>
|
|
</p>
|
|
|
|
<h2>Example 1: It's simple!</h2>
|
|
<p>
|
|
This example shows how easy it is to add a dirty check to your form(s) with one line
|
|
of code. (View the page's source)
|
|
</p>
|
|
|
|
<form id="example-1-form" name="coffeeOrder1" method="post">
|
|
<h2>Enter Your Coffee Order</h2>
|
|
<div>
|
|
<label for="example-1-coffee">Coffee</label>
|
|
<select name="coffee" id="example-1-coffee">
|
|
<option value="espresso">Espresso</option>
|
|
<option value="dbl-espresso">Caffe Doppio</option>
|
|
<option value="latte">Caffe Latte</option>
|
|
<option value="macciato">Machhiato</option>
|
|
<option value="cappuccino">Cappuccino</option>
|
|
</select>
|
|
</div>
|
|
<div>
|
|
<label>Shots</label><br />
|
|
<input type="radio" name="shots" value="1" checked /> 1 Shot - Standard<br />
|
|
<input type="radio" name="shots" value="2" /> 2 Shots - Morning wakeup!<br />
|
|
<input type="radio" name="shots" value="3" /> 3 Shots - Overdrive!<br />
|
|
</div>
|
|
<div>
|
|
<label for="example-1-sugar">Sugar</label> <input type="text" name="sugar" value="0" id="example-1-sugar" />
|
|
</div>
|
|
<div>
|
|
<label for="example-1-instructions">Special Instructions</label>
|
|
<textarea name="instructions" rows="5" id="example-1-instructions"></textarea>
|
|
</div>
|
|
|
|
<div class="buttons">
|
|
<input type="checkbox" name="remember" value="true" /> Remember my order<br />
|
|
<input type="submit" value="Submit">
|
|
<input type="reset" value="Reset">
|
|
</div>
|
|
<div>
|
|
<p>... or visit <a href="http://www.google.com/">Google</a> or close the window without saving!</p>
|
|
</div>
|
|
</form>
|
|
|
|
<h2>Example 2: Ignore the unimportant!</h2>
|
|
<p>
|
|
This example highlights how to disregard a field from the dirty check. In this form
|
|
the first field is dynamically populated and hence a change on this field should <em>not</em>
|
|
mark the form as dirty.
|
|
</p>
|
|
<form id="example-2-form" name="coffeeOrder2" method="post">
|
|
<h2>Enter Your Coffee Order</h2>
|
|
<div>
|
|
<!-- The ays-ignore class means a change on this field is not considered "dirty" -->
|
|
<label for="pickup">Pickup Time</label>
|
|
<input class="ays-ignore" type="text" name="pickup" id="pickup" />
|
|
<!-- or you can use a data attribute like this:
|
|
<label for="pickup">Pickup Time</label> <input data-ays-ignore="true" type="text" name="pickup" id="pickup" />
|
|
-->
|
|
</div>
|
|
<div>
|
|
<label for="example-2-coffee">Coffee</label>
|
|
<select name="coffee" id="example-2-coffee">
|
|
<option value="espresso">Espresso</option>
|
|
<option value="dbl-espresso">Caffe Doppio</option>
|
|
<option value="latte">Caffe Latte</option>
|
|
<option value="macciato">Machhiato</option>
|
|
<option value="cappuccino">Cappuccino</option>
|
|
</select>
|
|
</div>
|
|
<div>
|
|
<label>Shots</label><br />
|
|
<input type="radio" name="shots" value="1" checked /> 1 Shot - Standard<br />
|
|
<input type="radio" name="shots" value="2" /> 2 Shots - Morning wakeup!<br />
|
|
<input type="radio" name="shots" value="3" /> 3 Shots - Overdrive!<br />
|
|
</div>
|
|
<div>
|
|
<label for="example-2-sugar">Sugar</label> <input type="text" name="sugar" value="0" id="example-2-sugar" />
|
|
</div>
|
|
<div>
|
|
<label for="example-2-instructions">Special Instructions</label>
|
|
<textarea name="instructions" rows="5" id="example-2-instructions"></textarea>
|
|
</div>
|
|
|
|
<div class="buttons">
|
|
<input type="checkbox" name="remember" value="true" /> Remember my order<br />
|
|
<input type="submit" value="Submit">
|
|
</div>
|
|
<div>
|
|
<p>... or visit <a href="http://www.google.com/">Google</a> or close the window without saving!</p>
|
|
</div>
|
|
</form>
|
|
|
|
|
|
<h2>Example 3: Lets be intelligent!</h2>
|
|
<p>
|
|
This is a more advanced example. The <code>dirty</code> and <code>clean</code> change events are
|
|
intercepted so the save button is only enabled if the form is dirty (i.e. something to save).
|
|
It also demonstrates how to customize the warning message and change the style of a dirty
|
|
form (CSS styling using the <code>.dirty</code> class).
|
|
</p>
|
|
<form id="example-3-form" name="coffeeOrder3" method="post">
|
|
<h2>Update My Standard Order</h2>
|
|
<div>
|
|
<label for="example-3-coffee">Coffee</label>
|
|
<select name="coffee" id="example-3-coffee">
|
|
<option value=""></option>
|
|
<option value="cappuccino">Cappuccino</option>
|
|
<option value="espresso">Espresso</option>
|
|
<option value="dbl-espresso">Caffe Doppio</option>
|
|
<option value="latte">Caffe Latte</option>
|
|
<option value="macciato">Machhiato</option>
|
|
</select>
|
|
</div>
|
|
<div>
|
|
<label>Shots</label><br />
|
|
<input type="radio" name="shots" value="1" /> 1 Shot - Standard<br />
|
|
<input type="radio" name="shots" value="2" checked /> 2 Shots - Morning wakeup!<br />
|
|
<input type="radio" name="shots" value="3" /> 3 Shots - Overdrive!<br />
|
|
</div>
|
|
<div>
|
|
<label for="example-3-sugar">Sugar</label>
|
|
<input type="text" name="sugar" value="1" id="example-3-sugar" />
|
|
</div>
|
|
<div>
|
|
<label for="example-3-instructions">Special Instructions</label>
|
|
<textarea name="instructions" rows="5" id="example-3-instructions">No chocolate please</textarea>
|
|
</div>
|
|
|
|
<div class="buttons">
|
|
<input type="submit" value="Save" disabled="disabled">
|
|
</div>
|
|
<div>
|
|
<p>... or visit <a href="http://www.google.com/">Google</a> or close the window without saving!</p>
|
|
</div>
|
|
</form>
|
|
|
|
<h2>Example 4: Lets be dynamic!</h2>
|
|
<p>
|
|
In this example we'll dymaically add a field and fire off the <code>rescan</code> event. After
|
|
the rescan, Are-You-Sure will start looking for changes on the new fields as well.
|
|
</p>
|
|
<form id="example-4-form" name="coffeeOrder4" method="post">
|
|
<h2>Order Coffee For Pickup Now</h2>
|
|
<div>
|
|
<a id="example-4-lastorder" href="javascript:void(0);">Set my preferences from my last order</a><br />
|
|
</div>
|
|
<div>
|
|
<label for="example-4-coffee">Coffee</label>
|
|
<select name="coffee" id="example-4-coffee">
|
|
<option value="cappuccino">Cappuccino</option>
|
|
<option value="espresso">Espresso</option>
|
|
<option value="dbl-espresso">Caffe Doppio</option>
|
|
<option value="latte">Caffe Latte</option>
|
|
</select>
|
|
</div>
|
|
<div id="example-4-special"></div>
|
|
<div class="buttons">
|
|
<input type="submit" value="Place Order">
|
|
</div>
|
|
<div>
|
|
<p>... or visit <a href="http://www.google.com/">Google</a> or close the window without saving!</p>
|
|
</div>
|
|
</form>
|
|
|
|
<h2>Example 5: Edge cases</h2>
|
|
<p>
|
|
This example demonstrates tracking of hidden and disabled form elements that are changed by non-input elements.
|
|
E.g.:
|
|
</p>
|
|
<ul>
|
|
<li>clicking a link or non-input button that changes the value of a hidden form field, or</li>
|
|
<li>
|
|
clicking a link or non-input button that enables or disables some form fields (which has an effect on whether
|
|
or not those fields will be submitted with the form, despite the values not changing).
|
|
</li>
|
|
</ul>
|
|
<form id="example-5-form" name="coffeeOrder5" method="post">
|
|
<h2>Update My Standard Order</h2>
|
|
<div>
|
|
<label for="example-5-coffee">Coffee</label>
|
|
<select name="coffee" id="example-3-coffee">
|
|
<option value="cappuccino">Cappuccino</option>
|
|
<option value="espresso">Espresso</option>
|
|
<option value="dbl-espresso">Caffe Doppio</option>
|
|
<option value="latte">Caffe Latte</option>
|
|
<option value="macciato">Machhiato</option>
|
|
</select>
|
|
</div>
|
|
<div>
|
|
<label>Shots</label>
|
|
<!--
|
|
The visually hidden "shots" radio buttons are disabled and would not normally be submitted with the form.
|
|
Clicking the following button will visually show and enable these buttons, resulting in a form state change
|
|
(and hence the form is considered dirty) without the values having changed.
|
|
-->
|
|
<button id="example-5-extra-shots">I want extra shots</button>
|
|
<div id="example-5-shots-options" style="display: none;">
|
|
<input type="radio" name="shots" value="1" disabled /> 1 Shot - Standard<br />
|
|
<input type="radio" name="shots" value="2" disabled /> 2 Shots - Morning wakeup!<br />
|
|
<input type="radio" name="shots" value="3" disabled /> 3 Shots - Overdrive!<br />
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<label>Do you like us?</label>
|
|
<input type="hidden" name="like" value="false" id="example-5-like" />
|
|
<button id="example-5-like-button">Like</button>
|
|
</div>
|
|
<div class="buttons">
|
|
<input type="submit" value="Save" disabled="disabled">
|
|
</div>
|
|
<div>
|
|
<p>... or visit <a href="http://www.google.com/">Google</a> or close the window without saving!</p>
|
|
</div>
|
|
</form>
|
|
|
|
<h2>Example 6: HTML5 inputs!</h2>
|
|
<p>
|
|
This example shows support for HTML5 input types. It's not a coffee order form,
|
|
but you need coffee if you're working with HTML5 :-)
|
|
</p>
|
|
|
|
<form id="example-6-form" name="coffeeOrder6" method="post">
|
|
<h2>Doing HTML5? You'll need coffee!</h2>
|
|
<div>
|
|
<label for="example-6-color">color</label>
|
|
<input type="color" name="example-6-color" />
|
|
</div>
|
|
<div>
|
|
<label for="example-6-date">date</label>
|
|
<input type="date" name="example-6-date" />
|
|
</div>
|
|
<div>
|
|
<label for="example-6-datetime">datetime</label>
|
|
<input type="datetime" name="example-6-datetime" />
|
|
</div>
|
|
<div>
|
|
<label for="example-6-datetime-local">datetime-local</label>
|
|
<input type="datetime-local" name="example-6-datetime-local" />
|
|
</div>
|
|
<div>
|
|
<label for="example-6-email">email</label>
|
|
<input type="email" name="example-6-email" />
|
|
</div>
|
|
<div>
|
|
<label for="example-6-month">month</label>
|
|
<input type="month" name="example-6-month" />
|
|
</div>
|
|
<div>
|
|
<label for="example-6-number">number</label>
|
|
<input type="number" name="example-6-number" />
|
|
</div>
|
|
<div>
|
|
<label for="example-6-range">range</label>
|
|
<input type="range" name="example-6-range" />
|
|
</div>
|
|
<div>
|
|
<label for="example-6-search">search</label>
|
|
<input type="search" name="example-6-search" />
|
|
</div>
|
|
<div>
|
|
<label for="example-6-tel">tel</label>
|
|
<input type="tel" name="example-6-tel" />
|
|
</div>
|
|
<div>
|
|
<label for="example-6-time">time</label>
|
|
<input type="time" name="example-6-time" />
|
|
</div>
|
|
<div>
|
|
<label for="example-6-url">url</label>
|
|
<input type="url" name="example-6-url" />
|
|
</div>
|
|
<div>
|
|
<label for="example-6-week">week</label>
|
|
<input type="week" name="example-6-week" />
|
|
</div>
|
|
<div>
|
|
<label for="example-6-select">select/optgroup</label>
|
|
<select>
|
|
<optgroup label="Beans">
|
|
<option value="india">India</option>
|
|
<option value="indonesia" selected="selected">Indonesia</option>
|
|
<option value="brazil">Brazil</option>
|
|
</optgroup>
|
|
<optgroup label="Roast">
|
|
<option value="l">Light</option>
|
|
<option value="m">Medium</option>
|
|
<option value="h">Heavy</option>
|
|
</optgroup>
|
|
</select>
|
|
</div>
|
|
<div>
|
|
<label for="example-6-mselect">multi select</label>
|
|
<select multiple>
|
|
<option value="arabica">Arabica</option>
|
|
<option value="arabica">Peaberry</option>
|
|
<option value="malabar " selected="selected">Malabar</option>
|
|
<option value="robusta ">Robusta</option>
|
|
</select>
|
|
</div>
|
|
<div style="clear:both;"></div>
|
|
<div>
|
|
<label for="example-6-plain">plain old field</label>
|
|
<input name="example-6-plain" />
|
|
</div>
|
|
|
|
<div class="buttons">
|
|
<input type="submit" value="Submit">
|
|
<input type="reset" value="Reset">
|
|
</div>
|
|
<div>
|
|
<p>... or visit <a href="http://www.google.com/">Google</a> or close the window without saving!</p>
|
|
</div>
|
|
</form>
|
|
<h2>Example 7: Mark current state as not dirty!</h2>
|
|
<p>
|
|
This example shows how you can mark the current state as not dirty. Handy for AJAX forms
|
|
we're you're managing your own submits.
|
|
</p>
|
|
|
|
<form id="example-7-form" name="coffeeOrder7" method="post">
|
|
<h2>Tell us your default coffee</h2>
|
|
<div>
|
|
<label for="example-7-coffee">Default coffee</label>
|
|
<select name="coffee" id="example-7-coffee">
|
|
<option value="espresso">Espresso</option>
|
|
<option value="dbl-espresso">Caffe Doppio</option>
|
|
<option value="latte">Caffe Latte</option>
|
|
<option value="macciato">Machhiato</option>
|
|
<option value="cappuccino">Cappuccino</option>
|
|
</select>
|
|
</div>
|
|
<div>
|
|
<button id="example-7-save-button" disabled="disabled">Save without submit</button>
|
|
</div>
|
|
<div class="buttons">
|
|
<input type="submit" value="Submit">
|
|
</div>
|
|
<div>
|
|
<p>... or visit <a href="http://www.google.com/">Google</a> or close the window without saving!</p>
|
|
</div>
|
|
</form>
|
|
|
|
<p>
|
|
This jQuery plugin is developed by <a href="https://github.com/codedance">Chris Dance</a>
|
|
at <a href="http://www.papercut.com/">PaperCut Software</a> - Are-You-Sure is used in
|
|
PaperCut's printing management software and it has been open sourced with help of
|
|
Tom, Jack and Matt from PaperCut's dev team.
|
|
</p>
|
|
|
|
</body>
|
|
</html>
|