This commit is contained in:
2025-12-26 22:35:18 +08:00
commit 9cf62f793b
4263 changed files with 728989 additions and 0 deletions

View File

@@ -0,0 +1,19 @@
<div class="complex-repeater">
<div>
<div>
<button data-repeater-create>create</button>
</div>
<div>
<div data-repeater-list="complex-repeater">
<div data-repeater-item>
<div>
<input type="text" name="text-input" value="A"/>
</div>
<div>
<button data-repeater-delete></button>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,78 @@
module.exports = function (grunt) {
var bannerTemplate = '' +
'// <%= pkg.name %> version <%= pkg.version %>\n' +
'// <%= pkg.repository.url %>\n' +
'// (<%= pkg.license %>) <%= grunt.template.today("dd-mm-yyyy") %>\n' +
'// <%= pkg.author %>\n';
grunt.initConfig({
pkg: grunt.file.readJSON('package.json'),
preprocess : {
options: {
context : {
DEBUG: true
}
},
test : {
src : 'test/index.pre.html',
dest : 'test/index.html'
},
index: {
src: 'index.pre.html',
dest: 'index.html'
}
},
concat: {
options: {
separator: '\n',
banner: bannerTemplate
},
dist: {
src: [
'src/intro.js',
'src/lib.js',
'src/jquery.input.js',
'src/repeater.js',
'src/outro.js'
],
dest: '<%= pkg.name %>.js'
}
},
uglify: {
options: { banner: bannerTemplate },
dist: {
files: { '<%= pkg.name %>.min.js': ['<%= concat.dist.dest %>'] }
}
},
qunit: {
// http://stackoverflow.com/questions/22409002/qunitphantomjs-ajax-success-handler-not-called-in-grunt-using-qunit-with-phant
options : {
'--web-security': false,
'--local-to-remote-url-access': true
},
all: ['test/index.html']
},
watch: {
scripts: {
files: ['**/*'],
tasks: ['preprocess', 'concat', 'uglify', 'qunit'],
options: { spawn: true }
}
}
});
grunt.loadNpmTasks('grunt-preprocess');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-qunit');
grunt.registerTask('default', ['preprocess', 'concat', 'uglify', 'qunit']);
grunt.registerTask('test', ['preprocess', 'concat', 'uglify', 'qunit']);
};

View File

@@ -0,0 +1,151 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Repeater</title>
<title>jquery.repeater</title>
<style>
html, body {
font-family: Helvetica, Arial, sans-serif;
color: rgb(80, 80, 80);
}
</style>
</head>
<body>
<h2>Repeater</h2>
<form action="echo.php" class="repeater" enctype="multipart/form-data">
<div data-repeater-list="group-a">
<div data-repeater-item>
<input name="untyped-input" value="A"/>
<input type="text" name="text-input" value="A"/>
<input type="date" name="date-input"/>
<textarea name="textarea-input">A</textarea>
<input type="radio" name="radio-input" value="A" checked/>
<input type="radio" name="radio-input" value="B"/>
<input type="checkbox" name="checkbox-input" value="A" checked/>
<input type="checkbox" name="checkbox-input" value="B"/>
<select name="select-input">
<option value="A" selected>A</option>
<option value="B">B</option>
</select>
<select name="multiple-select-input" multiple>
<option value="A" selected>A</option>
<option value="B" selected>B</option>
</select>
<input data-repeater-delete type="button" value="Delete"/>
</div>
<div data-repeater-item>
<input name="untyped-input" value="A"/>
<input type="text" name="text-input" value="B"/>
<input type="date" name="date-input"/>
<textarea name="textarea-input">B</textarea>
<input type="radio" name="radio-input" value="A" />
<input type="radio" name="radio-input" value="B" checked/>
<input type="checkbox" name="checkbox-input" value="A"/>
<input type="checkbox" name="checkbox-input" value="B" checked/>
<select name="select-input">
<option value="A">A</option>
<option value="B" selected>B</option>
</select>
<select name="multiple-select-input" multiple>
<option value="A" selected>A</option>
<option value="B" selected>B</option>
</select>
<input data-repeater-delete type="button" value="Delete"/>
</div>
</div>
<input data-repeater-create type="button" value="Add"/>
</form>
<h2>Nested</h2>
<form action="echo.php" class="outer-repeater">
<div data-repeater-list="outer-group" class="outer">
<div data-repeater-item class="outer">
<input type="text" name="text-input" value="A" class="outer"/>
<input data-repeater-delete type="button" value="Delete" class="outer"/>
<div class="inner-repeater">
<div data-repeater-list="inner-group" class="inner">
<div data-repeater-item class="inner">
<input type="text" name="inner-text-input" value="B" class="inner"/>
<input data-repeater-delete type="button" value="Delete" class="inner"/>
</div>
</div>
<input data-repeater-create type="button" value="Add" class="inner"/>
</div>
</div>
</div>
<input data-repeater-create type="button" value="Add" class="outer"/>
</form>
<script src="jquery-1.11.1.js"></script>
<script src="jquery.repeater.js"></script>
<script>
$(document).ready(function () {
'use strict';
$('.repeater').repeater({
defaultValues: {
'textarea-input': 'foo',
'text-input': 'bar',
'select-input': 'B',
'checkbox-input': ['A', 'B'],
'radio-input': 'B'
},
show: function () {
$(this).slideDown();
},
hide: function (deleteElement) {
if(confirm('Are you sure you want to delete this element?')) {
$(this).slideUp(deleteElement);
}
},
ready: function (setIndexes) {
}
});
window.outerRepeater = $('.outer-repeater').repeater({
isFirstItemUndeletable: true,
defaultValues: { 'text-input': 'outer-default' },
show: function () {
console.log('outer show');
$(this).slideDown();
},
hide: function (deleteElement) {
console.log('outer delete');
$(this).slideUp(deleteElement);
},
repeaters: [{
isFirstItemUndeletable: true,
selector: '.inner-repeater',
defaultValues: { 'inner-text-input': 'inner-default' },
show: function () {
console.log('inner show');
$(this).slideDown();
},
hide: function (deleteElement) {
console.log('inner delete');
$(this).slideUp(deleteElement);
}
}]
});
});
</script>
</body>
</html>

View File

@@ -0,0 +1,74 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Repeater</title>
<title>jquery.repeater</title>
<style>
html, body {
font-family: Helvetica, Arial, sans-serif;
color: rgb(80, 80, 80);
}
</style>
</head>
<body>
<h2>Repeater</h2>
<!-- @include repeater.html -->
<h2>Nested</h2>
<!-- @include nested-repeater.html -->
<script src="jquery-1.11.1.js"></script>
<script src="jquery.repeater.js"></script>
<script>
$(document).ready(function () {
'use strict';
$('.repeater').repeater({
defaultValues: {
'textarea-input': 'foo',
'text-input': 'bar',
'select-input': 'B',
'checkbox-input': ['A', 'B'],
'radio-input': 'B'
},
show: function () {
$(this).slideDown();
},
hide: function (deleteElement) {
if(confirm('Are you sure you want to delete this element?')) {
$(this).slideUp(deleteElement);
}
},
ready: function (setIndexes) {
}
});
window.outerRepeater = $('.outer-repeater').repeater({
isFirstItemUndeletable: true,
defaultValues: { 'text-input': 'outer-default' },
show: function () {
console.log('outer show');
$(this).slideDown();
},
hide: function (deleteElement) {
console.log('outer delete');
$(this).slideUp(deleteElement);
},
repeaters: [{
isFirstItemUndeletable: true,
selector: '.inner-repeater',
defaultValues: { 'inner-text-input': 'inner-default' },
show: function () {
console.log('inner show');
$(this).slideDown();
},
hide: function (deleteElement) {
console.log('inner delete');
$(this).slideUp(deleteElement);
}
}]
});
});
</script>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,18 @@
<form action="echo.php" class="outer-repeater">
<div data-repeater-list="outer-group" class="outer">
<div data-repeater-item class="outer">
<input type="text" name="text-input" value="A" class="outer"/>
<input data-repeater-delete type="button" value="Delete" class="outer"/>
<div class="inner-repeater">
<div data-repeater-list="inner-group" class="inner">
<div data-repeater-item class="inner">
<input type="text" name="inner-text-input" value="B" class="inner"/>
<input data-repeater-delete type="button" value="Delete" class="inner"/>
</div>
</div>
<input data-repeater-create type="button" value="Add" class="inner"/>
</div>
</div>
</div>
<input data-repeater-create type="button" value="Add" class="outer"/>
</form>

View File

@@ -0,0 +1,59 @@
<form action="echo.php" class="repeater" enctype="multipart/form-data">
<div data-repeater-list="group-a">
<div data-repeater-item>
<input name="untyped-input" value="A"/>
<input type="text" name="text-input" value="A"/>
<input type="date" name="date-input"/>
<textarea name="textarea-input">A</textarea>
<input type="radio" name="radio-input" value="A" checked/>
<input type="radio" name="radio-input" value="B"/>
<input type="checkbox" name="checkbox-input" value="A" checked/>
<input type="checkbox" name="checkbox-input" value="B"/>
<select name="select-input">
<option value="A" selected>A</option>
<option value="B">B</option>
</select>
<select name="multiple-select-input" multiple>
<option value="A" selected>A</option>
<option value="B" selected>B</option>
</select>
<input data-repeater-delete type="button" value="Delete"/>
</div>
<div data-repeater-item>
<input name="untyped-input" value="A"/>
<input type="text" name="text-input" value="B"/>
<input type="date" name="date-input"/>
<textarea name="textarea-input">B</textarea>
<input type="radio" name="radio-input" value="A" />
<input type="radio" name="radio-input" value="B" checked/>
<input type="checkbox" name="checkbox-input" value="A"/>
<input type="checkbox" name="checkbox-input" value="B" checked/>
<select name="select-input">
<option value="A">A</option>
<option value="B" selected>B</option>
</select>
<select name="multiple-select-input" multiple>
<option value="A" selected>A</option>
<option value="B" selected>B</option>
</select>
<input data-repeater-delete type="button" value="Delete"/>
</div>
</div>
<input data-repeater-create type="button" value="Add"/>
</form>

View File

@@ -0,0 +1,30 @@
{
"name": "repeater",
"version": "1.2.1",
"title": "Repeater",
"author": {
"name": "Brian Detering",
"url": "http://briandetering.net/",
"email": "BDeterin@gmail.com"
},
"licenses": [
{
"type": "MIT",
"url": "http://opensource.org/licenses/MIT"
}
],
"description": "An interface to add and remove a repeatable group of input elements.",
"keywords": [
"input",
"repeat",
"multiple",
"form",
"jquery-plugin"
],
"docs": "https://github.com/DubFriend/jquery.repeater/blob/master/README.md",
"demo": "http://briandetering.net/repeater",
"homepage": "https://github.com/DubFriend/jquery.repeater",
"dependencies": {
"jquery": ">=1.11"
}
}

View File

@@ -0,0 +1,17 @@
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<pre>
<?= json_encode($_POST, JSON_PRETTY_PRINT); ?>
</pre>
<form method="POST">
<input type="text" name="group[1][foo]" value="A"/>
<input type="text" name="group[2][foo]" value="B"/>
<input type="submit" value="Submit"/>
</form>
</body>
</html>