Skip to content

Commit dd87b21

Browse files
committed
Refactored source code.
1 parent 93ce40e commit dd87b21

File tree

5 files changed

+142
-86
lines changed

5 files changed

+142
-86
lines changed

example.html

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<!doctype html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport"
6+
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
7+
<meta http-equiv="X-UA-Compatible" content="ie=edge">
8+
<title>jQuery simple clone plugin</title>
9+
</head>
10+
<body>
11+
<form action="#" method="post">
12+
<div>
13+
<div class="simpleClone-clnElem">
14+
<input type="text" name="sample[]" value="">
15+
</div>
16+
</div>
17+
<div class="simpleClone-btnWrap">
18+
<button type="button" class="addBtn">
19+
+ Add
20+
</button>
21+
</div>
22+
</form>
23+
24+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
25+
<script src="./jquery.simpleClone.min.js"></script>
26+
<script>
27+
(function ($) {
28+
'use strict';
29+
30+
$('.addBtn').simpleClone({
31+
copyValue: false,
32+
cloneLimit: 5
33+
});
34+
})(jQuery);
35+
</script>
36+
</body>
37+
</html>

jquery.simpleClone.js

Lines changed: 84 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -5,92 +5,12 @@
55
* @author KUCKLU
66
* @license Licensed under MIT (http://www.opensource.org/licenses/mit-license.php)
77
* @copyright (c) 2022 KUCKLU
8-
* @version 1.1.2
8+
* @version 1.2.0
99
*/
1010
(function ($) {
1111
'use strict';
1212

13-
$.fn.simpleClone = function (options) {
14-
const opts = $.extend({}, $.fn.simpleClone.defaults, options);
15-
const elems = this;
16-
17-
return elems.each(function () {
18-
$(this).on('click', function (e) {
19-
e.preventDefault();
20-
21-
const $self = $(this);
22-
const $wrap = $self.closest('.' + opts.addButtonWrapClass);
23-
const $targetWrap = $wrap.prev();
24-
const $targets = $targetWrap.find('.' + opts.targetClass);
25-
const $target = $targets.first();
26-
const count = $target.parent().children('.' + opts.targetClass).length + 1;
27-
28-
if (opts.cloneLimit === false || (typeof opts.cloneLimit === 'number' && count <= opts.cloneLimit)) {
29-
let $clone = $target.clone(true);
30-
const rmvButton = document.createElement('button');
31-
rmvButton.type = 'button';
32-
rmvButton.className = opts.removeButtonClass === null ? $.fn.simpleClone.defaults.removeButtonClass : $.fn.simpleClone.defaults.removeButtonClass + ' ' + opts.removeButtonClass;
33-
rmvButton.innerText = opts.removeButtonText;
34-
35-
$clone.append(rmvButton);
36-
37-
$clone.find('select').each(function(index, item) {
38-
$(item).val($target.find('select').eq(index).val());
39-
});
40-
41-
if (opts.copyValue === false) {
42-
$clone.find('input:not("input[type=radio], input[type=button], input[type=submit]"), textarea, select').each(function(index, item) {
43-
$(item).val('');
44-
});
45-
}
46-
47-
if ($.isFunction(opts.filterCloneElement)) {
48-
$clone = opts.filterCloneElement.call(elems, $clone, opts);
49-
}
50-
51-
if ($.isFunction(opts.onClone)) {
52-
opts.onClone.call(elems, $clone, opts);
53-
}
54-
55-
$target.parent().append($clone);
56-
57-
if ($.isFunction(opts.onComplete)) {
58-
opts.onComplete.call(elems, $clone, opts);
59-
}
60-
} else {
61-
const message = document.createElement('span');
62-
message.className = opts.limitMessageClass;
63-
message.innerText = opts.limitMessageText;
64-
65-
if ($self.next('.' + opts.limitMessageClass).length === 0) {
66-
$self.after(message);
67-
68-
setTimeout(function () {
69-
$self.next('.' + opts.limitMessageClass).fadeOut().remove();
70-
}, 4000);
71-
}
72-
}
73-
});
74-
75-
$(document).on('click', '.' + $.fn.simpleClone.defaults.removeButtonClass, function (e) {
76-
e.preventDefault();
77-
78-
const $self = $(this);
79-
80-
if ($.isFunction(opts.onRemove)) {
81-
opts.onRemove.call(elems, opts);
82-
}
83-
84-
$self.parent().remove();
85-
86-
if ($.isFunction(opts.onCompleteRemove)) {
87-
opts.onCompleteRemove.call(elems, opts);
88-
}
89-
});
90-
});
91-
};
92-
93-
$.fn.simpleClone.defaults = {
13+
const defaults = {
9414
copyValue : true,
9515
cloneLimit : false,
9616
limitMessageClass : 'simpleClone-clnLmt',
@@ -105,4 +25,85 @@
10525
onRemove : null,
10626
onCompleteRemove : null
10727
};
108-
})(jQuery);
28+
29+
$.fn.simpleClone = function (options) {
30+
const opts = $.extend({}, defaults, options);
31+
32+
$(document).on('click', '.' + opts.removeButtonClass, function (e) {
33+
e.preventDefault();
34+
35+
const $self = $(this);
36+
const $parent = $self.parent();
37+
38+
if ($.isFunction(opts.onRemove)) {
39+
opts.onRemove.call(this, opts);
40+
}
41+
42+
$parent.remove();
43+
44+
if ($.isFunction(opts.onCompleteRemove)) {
45+
opts.onCompleteRemove.call(this, opts);
46+
}
47+
});
48+
49+
this.on('click', function (e) {
50+
e.preventDefault();
51+
52+
const $self = $(this);
53+
const $wrap = $self.closest('.' + opts.addButtonWrapClass);
54+
const $targetWrap = $wrap.prev();
55+
const $targets = $targetWrap.find('.' + opts.targetClass);
56+
const $target = $targets.first();
57+
const count = $target.parent().children('.' + opts.targetClass).length + 1;
58+
59+
if (opts.cloneLimit === false || (typeof opts.cloneLimit === 'number' && count <= opts.cloneLimit)) {
60+
let $clone = $target.clone(true);
61+
62+
const rmvButton = $('<button>')
63+
.attr('type', 'button')
64+
.addClass(opts.removeButtonClass === null ? defaults.removeButtonClass : defaults.removeButtonClass + ' ' + opts.removeButtonClass)
65+
.text(opts.removeButtonText);
66+
67+
$clone.append(rmvButton);
68+
69+
if ($.isFunction(opts.filterCloneElement)) {
70+
$clone = opts.filterCloneElement.call(this, $clone, opts);
71+
}
72+
73+
$clone.find('select').each(function (index, item) {
74+
$(item).val($target.find('select').eq(index).val());
75+
});
76+
77+
if (opts.copyValue === false) {
78+
$clone.find('input:not("input[type=radio], input[type=button], input[type=submit]"), textarea, select').each(function (index, item) {
79+
$(item).val('');
80+
});
81+
}
82+
83+
if ($.isFunction(opts.onClone)) {
84+
opts.onClone.call(this, $clone, opts);
85+
}
86+
87+
$target.parent().append($clone);
88+
89+
if ($.isFunction(opts.onComplete)) {
90+
opts.onComplete.call(this, $clone, opts);
91+
}
92+
} else {
93+
const message = $('<span>')
94+
.addClass(opts.limitMessageClass)
95+
.text(opts.limitMessageText);
96+
97+
if ($self.next('.' + opts.limitMessageClass).length === 0) {
98+
$self.after(message);
99+
100+
setTimeout(function () {
101+
$self.next('.' + opts.limitMessageClass).fadeOut().remove();
102+
}, 4000);
103+
}
104+
}
105+
});
106+
107+
return this;
108+
};
109+
})(jQuery);

jquery.simpleClone.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

jquery.simpleClone.min.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

prepros.config

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@
214214
"allowWildcardImports": false,
215215
"indentWidth": 2,
216216
"linefeed": "lf",
217+
"removeCharset": false,
217218
"sourceMap": false
218219
},
219220
"haml": {
@@ -351,6 +352,7 @@
351352
"outputStyle": "expanded",
352353
"precision": 10,
353354
"sourceMap": false,
355+
"removeCharset": false,
354356
"sourceComments": false
355357
},
356358
"png": {
@@ -415,6 +417,18 @@
415417
"sortAttrs": true,
416418
"removeDimensions": true
417419
},
420+
"tailwindcss": {
421+
"rootDir": "",
422+
"content": [
423+
"**/*.html",
424+
"**/*.php",
425+
"**/*.js",
426+
"!wp-admin",
427+
"!wp-includes",
428+
"!node_modules",
429+
"!Prepros Export"
430+
]
431+
},
418432
"turf": {
419433
"rootDir": ""
420434
},
@@ -577,6 +591,10 @@
577591
"task": "copy",
578592
"enable": true
579593
},
594+
{
595+
"task": "tailwindcss",
596+
"enable": false
597+
},
580598
{
581599
"task": "postcss-import",
582600
"enable": false

0 commit comments

Comments
 (0)