Skip to content

Commit 82650a4

Browse files
author
Eugene Tupikov
committed
Merge branch 'master' of https://github.com/veksa/yii2-multiple-input into veksa-master
2 parents b25699a + 24e615e commit 82650a4

File tree

6 files changed

+130
-16
lines changed

6 files changed

+130
-16
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
.idea/*
1+
.idea/*
2+
/node_modules

README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,19 @@ jQuery('#multiple-input').on('afterInit', function(){
382382
});
383383
```
384384

385+
## JavaScript operations
386+
Dynamically operations in widget:
387+
- `add`: adding new row, **param** *object*: object with values for inputs, can be filled with <option> tags for dynamically added options for select (for ajax select).
388+
- `remove`: remove row, **param** *integer*: row number for removing, if not specified then removes last row.
389+
- `clear`: remove all rows
390+
391+
Examples:
392+
```js
393+
$('#multiple-input').multipleInput('add', {first: 10, second: '<option value="2" selected="selected">second</option>'});
394+
$('#multiple-input').multipleInput('remove', 2);
395+
$('#multiple-input').multipleInput('clear');
396+
```
397+
385398
##Renderers
386399

387400
> Section is under development

gulpfile.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
var gulp = require('gulp'),
2+
uglify = require('gulp-uglify'),
3+
concat = require('gulp-concat'),
4+
rename = require('gulp-rename');
5+
6+
gulp.task('js', function () {
7+
var path = './src/assets/src/js/';
8+
9+
return gulp.src([
10+
path + 'jquery.multipleInput.js'
11+
])
12+
.pipe(concat('jquery.multipleInput.js'))
13+
.pipe(uglify())
14+
.pipe(rename({suffix: '.min'}))
15+
.pipe(gulp.dest(path));
16+
});
17+
18+
gulp.task('default', ['js']);

package.json

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{
2+
"name": "jquery.multipleInput",
3+
"version": "1.2.12",
4+
"description": "jQuery multipleInput",
5+
"scripts": {
6+
"build": "npm install && (gulp || node node_modules/gulp/bin/gulp.js)"
7+
},
8+
"repository": {
9+
"type": "git",
10+
"url": "https://github.com/unclead/yii2-multiple-input.git"
11+
},
12+
"author": {
13+
"name": "Eugene Tupikov",
14+
"email": "unclead.nsk@gmail.com"
15+
},
16+
"keywords": [
17+
"jquery"
18+
],
19+
"license": "BSD-3-Clause",
20+
"bugs": {
21+
"url": "https://github.com/unclead/yii2-multiple-input/issues"
22+
},
23+
"homepage": "https://github.com/unclead/yii2-multiple-input",
24+
"devDependencies": {
25+
"gulp": "^3.8.8",
26+
"gulp-uglify": "^1.0.1",
27+
"gulp-concat": "^2.4.1",
28+
"gulp-rename": "^1.2.0"
29+
}
30+
}

src/assets/src/js/jquery.multipleInput.js

Lines changed: 66 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@
9090
addInput($(this));
9191
});
9292

93-
var intervalID = setInterval(function(){
93+
var intervalID = setInterval(function () {
9494
if (typeof form.data('yiiActiveForm') === 'object') {
9595
var attribute = form.yiiActiveForm('find', id);
9696
var attributeDefaults = [];
@@ -104,7 +104,7 @@
104104
}
105105

106106
var attributeOptions = $.extend({}, defaultAttributeOptions, settings.attributeOptions);
107-
$.each(attributeOptions, function(key, value) {
107+
$.each(attributeOptions, function (key, value) {
108108
if (typeof attributeDefaults[key] === 'undefined') {
109109
attributeDefaults[key] = value;
110110
}
@@ -122,16 +122,33 @@
122122
$wrapper.trigger(event);
123123
}
124124
}, 100);
125+
},
126+
add: function (values) {
127+
addInput($(this), values);
128+
},
129+
remove: function (index) {
130+
var row = null;
131+
if (index) {
132+
row = $(this).find('.js-input-remove:eq(' + index + ')');
133+
} else {
134+
row = $(this).find('.js-input-remove').last();
135+
}
136+
removeInput(row);
137+
},
138+
clear: function () {
139+
$('.js-input-remove').each(function () {
140+
removeInput($(this));
141+
});
125142
}
126143
};
127144

128-
var addInput = function (btn) {
129-
var $wrapper = $(btn).closest('.multiple-input').first(),
130-
data = $wrapper.data('multipleInput'),
131-
settings = data.settings,
132-
template = settings.template,
133-
inputList = $wrapper.find('.multiple-input-list').first(),
134-
count = $wrapper.find('.multiple-input-list__item').length;
145+
var addInput = function (btn, values) {
146+
var $wrapper = $(btn).closest('.multiple-input').first(),
147+
data = $wrapper.data('multipleInput'),
148+
settings = data.settings,
149+
template = settings.template,
150+
inputList = $wrapper.find('.multiple-input-list').first(),
151+
count = $wrapper.find('.multiple-input-list__item').length;
135152

136153
if (settings.limit != null && count >= settings.limit) {
137154
return;
@@ -141,8 +158,43 @@
141158

142159
$(template).hide().appendTo(inputList).fadeIn(300);
143160

161+
if (values instanceof Object) {
162+
var tmp = [];
163+
for (var key in values) {
164+
if (values.hasOwnProperty(key)) {
165+
tmp.push(values[key]);
166+
}
167+
}
168+
values = tmp;
169+
}
170+
171+
var index = 0;
144172
$(template).find('input, select, textarea').each(function () {
145-
addAttribute($(this));
173+
var that = $(this),
174+
tag = that.get(0).tagName,
175+
id = getInputId(that),
176+
obj = $('#' + id);
177+
178+
if (values) {
179+
var val = values[index];
180+
181+
if (tag == 'INPUT' || tag == 'TEXTAREA') {
182+
obj.val(val);
183+
} else if (tag == 'SELECT') {
184+
if (val && val.indexOf('option')) {
185+
obj.append(val);
186+
} else {
187+
var option = obj.find('option[value="' + val + '"]');
188+
if (option.length) {
189+
obj.val(val);
190+
}
191+
}
192+
}
193+
}
194+
195+
addAttribute(that);
196+
197+
index++;
146198
});
147199

148200
var jsTemplate;
@@ -162,8 +214,8 @@
162214
var $wrapper = $btn.closest('.multiple-input').first(),
163215
$toDelete = $btn.closest('.multiple-input-list__item'),
164216
count = $('.multiple-input-list__item').length,
165-
data = $wrapper.data('multipleInput'),
166-
settings = data.settings;
217+
data = $wrapper.data('multipleInput'),
218+
settings = data.settings;
167219

168220
if (count > settings.min) {
169221
var event = $.Event(events.beforeDeleteRow);
@@ -230,7 +282,7 @@
230282
}
231283
};
232284

233-
var getInputId = function($input) {
285+
var getInputId = function ($input) {
234286
var id = $input.attr('id');
235287

236288
if (typeof id === 'undefined') {
@@ -244,7 +296,7 @@
244296
return id;
245297
};
246298

247-
String.prototype.replaceAll = function(search, replace){
299+
String.prototype.replaceAll = function (search, replace) {
248300
return this.split(search).join(replace);
249301
};
250302
})(window.jQuery);

src/assets/src/js/jquery.multipleInput.min.js

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

0 commit comments

Comments
 (0)