|
1 | 1 | /** |
2 | 2 | * jQuery.ddMM.mm_ddMultipleFields |
3 | | - * @version 2.5 (2020-05-25) |
| 3 | + * @version 2.5.5 (2020-05-25) |
4 | 4 | * |
5 | 5 | * @uses jQuery 1.9.1 |
6 | 6 | * @uses jQuery.ddTools 1.8.1 |
@@ -189,7 +189,7 @@ $.ddMM.mm_ddMultipleFields = { |
189 | 189 |
|
190 | 190 | /** |
191 | 191 | * @method init |
192 | | - * @version 4.3.1 (2020-05-25) |
| 192 | + * @version 4.3.3 (2020-05-25) |
193 | 193 | * |
194 | 194 | * @desc Инициализация. |
195 | 195 | * |
@@ -217,8 +217,6 @@ $.ddMM.mm_ddMultipleFields = { |
217 | 217 | init: function(instance){ |
218 | 218 | var |
219 | 219 | _this = this, |
220 | | - //Объект значения поля |
221 | | - fieldValueObject = {}, |
222 | 220 | //Шапка таблицы |
223 | 221 | tableHeaderHtml = '', |
224 | 222 | //По умолчанию без шапки |
@@ -268,56 +266,18 @@ $.ddMM.mm_ddMultipleFields = { |
268 | 266 | } |
269 | 267 | ); |
270 | 268 |
|
271 | | - //If value is JSON object |
272 | | - if ( |
273 | | - $.trim(instance.value).substr( |
274 | | - 0, |
275 | | - 1 |
276 | | - ) == |
277 | | - '{' |
278 | | - ){ |
279 | | - fieldValueObject = $.parseJSON(instance.value); |
280 | | - //Bacward compatibility |
281 | | - }else{ |
282 | | - $.each( |
283 | | - //Разбиваем значение по строкам |
284 | | - instance |
285 | | - .value |
286 | | - .split(instance.rowDelimiter) |
287 | | - , |
288 | | - function(){ |
289 | | - var |
290 | | - //Split by column |
291 | | - columnValuesArray = this.split(instance.colDelimiter), |
292 | | - //Generate row ID |
293 | | - rowId = (new Date).getTime() |
294 | | - ; |
295 | | - |
296 | | - //If deprecated ID column exists |
297 | | - if (columnIdIndex != -1){ |
298 | | - rowId = columnValuesArray[columnIdIndex]; |
299 | | - } |
300 | | - |
301 | | - //Init row |
302 | | - fieldValueObject[rowId] = {}; |
303 | | - |
304 | | - $.each( |
305 | | - columnValuesArray, |
306 | | - function( |
307 | | - colKey, |
308 | | - colValue |
309 | | - ){ |
310 | | - //If it is deprecated ID column |
311 | | - if (colKey == columnIdIndex){ |
312 | | - |
313 | | - } |
314 | | - //Save column value |
315 | | - fieldValueObject[rowId][colKey] = colValue; |
316 | | - } |
317 | | - ) |
318 | | - } |
319 | | - ); |
320 | | - } |
| 269 | + var |
| 270 | + //Объект значения поля |
| 271 | + fieldValueObject = _this.init_prepareFieldValueObject({ |
| 272 | + value: instance.value, |
| 273 | + minRowsNumber: instance.minRowsNumber, |
| 274 | + maxRowsNumber: instance.maxRowsNumber, |
| 275 | + |
| 276 | + columnIdIndex: columnIdIndex, |
| 277 | + rowDelimiter: instance.rowDelimiter, |
| 278 | + colDelimiter: instance.colDelimiter |
| 279 | + }) |
| 280 | + ; |
321 | 281 |
|
322 | 282 | //Это поле нужно было только для инициализации |
323 | 283 | delete instance.value; |
@@ -348,45 +308,6 @@ $.ddMM.mm_ddMultipleFields = { |
348 | 308 | ; |
349 | 309 | } |
350 | 310 |
|
351 | | - //Проверяем на максимальное и минимальное количество строк |
352 | | - if ( |
353 | | - instance.maxRowsNumber && |
354 | | - Object.keys(fieldValueObject).length > instance.maxRowsNumber |
355 | | - ){ |
356 | | - var fieldValueObjectLength = Object.keys(fieldValueObject).length; |
357 | | - |
358 | | - $.each( |
359 | | - fieldValueObject, |
360 | | - function( |
361 | | - rowKey, |
362 | | - rowValue |
363 | | - ){ |
364 | | - if ( |
365 | | - fieldValueObjectLength > |
366 | | - instance.maxRowsNumber |
367 | | - ){ |
368 | | - delete fieldValueObject[rowKey]; |
369 | | - }else{ |
370 | | - return false; |
371 | | - } |
372 | | - |
373 | | - fieldValueObjectLength--; |
374 | | - } |
375 | | - ); |
376 | | - }else if ( |
377 | | - instance.minRowsNumber && |
378 | | - Object.keys(fieldValueObject).length < instance.minRowsNumber |
379 | | - ){ |
380 | | - for ( |
381 | | - var rowIndex = Object.keys(fieldValueObject).length; |
382 | | - rowIndex < instance.minRowsNumber; |
383 | | - rowIndex++ |
384 | | - ){ |
385 | | - //Init empty row |
386 | | - fieldValueObject[rowIndex] = {}; |
387 | | - } |
388 | | - } |
389 | | - |
390 | 311 | $.each( |
391 | 312 | fieldValueObject, |
392 | 313 | function( |
@@ -429,32 +350,179 @@ $.ddMM.mm_ddMultipleFields = { |
429 | 350 | }); |
430 | 351 | }, |
431 | 352 |
|
| 353 | + /** |
| 354 | + * @method init_prepareFieldValueObject |
| 355 | + * @version 1.0.2 (2020-05-25) |
| 356 | + * |
| 357 | + * @desc Инициализация → Подготовка объекта значений поля. |
| 358 | + * |
| 359 | + * @param params {objectPlain} — The parameters. |
| 360 | + * @param params.value {string} — TV value. |
| 361 | + * @param params.minRowsNumber {integer} — Минимальное количество строк. |
| 362 | + * @param params.maxRowsNumber {integer} — Максимальное количество строк. |
| 363 | + * @param params.columnIdIndex {integer} — Index of deprecated ID column (`-1` if not exist). |
| 364 | + * |
| 365 | + * Deprecated: |
| 366 | + * @param params.rowDelimiter {string} — Разделитель строк. |
| 367 | + * @param params.colDelimiter {string} — Разделитель колонок. |
| 368 | + * |
| 369 | + * @returns {objectPlain} |
| 370 | + */ |
| 371 | + init_prepareFieldValueObject: function(params){ |
| 372 | + var |
| 373 | + _this = this, |
| 374 | + //Объект значения поля |
| 375 | + fieldValueObject = {} |
| 376 | + ; |
| 377 | + |
| 378 | + //If value is JSON object |
| 379 | + if ( |
| 380 | + $.trim(params.value).substr( |
| 381 | + 0, |
| 382 | + 1 |
| 383 | + ) == |
| 384 | + '{' |
| 385 | + ){ |
| 386 | + fieldValueObject = $.parseJSON(params.value); |
| 387 | + //Bacward compatibility |
| 388 | + }else{ |
| 389 | + var |
| 390 | + //Разбиваем значение по строкам |
| 391 | + rowValuesArray = |
| 392 | + params |
| 393 | + .value |
| 394 | + .split(params.rowDelimiter) |
| 395 | + ; |
| 396 | + |
| 397 | + $.each( |
| 398 | + rowValuesArray, |
| 399 | + function(){ |
| 400 | + var |
| 401 | + //Split by column |
| 402 | + columnValuesArray = this.split(params.colDelimiter), |
| 403 | + //Generate row ID |
| 404 | + rowId = _this.generateRowId() |
| 405 | + ; |
| 406 | + |
| 407 | + //If deprecated ID column exists |
| 408 | + if (params.columnIdIndex != -1){ |
| 409 | + rowId = columnValuesArray[params.columnIdIndex]; |
| 410 | + } |
| 411 | + |
| 412 | + //Init row |
| 413 | + fieldValueObject[rowId] = {}; |
| 414 | + |
| 415 | + $.each( |
| 416 | + columnValuesArray, |
| 417 | + function( |
| 418 | + colKey, |
| 419 | + colValue |
| 420 | + ){ |
| 421 | + //If it is deprecated ID column |
| 422 | + if (colKey != params.columnIdIndex){ |
| 423 | + //Save column value |
| 424 | + fieldValueObject[rowId][colKey] = colValue; |
| 425 | + } |
| 426 | + } |
| 427 | + ) |
| 428 | + } |
| 429 | + ); |
| 430 | + } |
| 431 | + |
| 432 | + var fieldValueObjectLength = Object.keys(fieldValueObject).length; |
| 433 | + |
| 434 | + //Проверяем на максимальное и минимальное количество строк |
| 435 | + if ( |
| 436 | + params.maxRowsNumber && |
| 437 | + fieldValueObjectLength > params.maxRowsNumber |
| 438 | + ){ |
| 439 | + $.each( |
| 440 | + fieldValueObject, |
| 441 | + function( |
| 442 | + rowKey, |
| 443 | + rowValue |
| 444 | + ){ |
| 445 | + if ( |
| 446 | + fieldValueObjectLength > |
| 447 | + params.maxRowsNumber |
| 448 | + ){ |
| 449 | + delete fieldValueObject[rowKey]; |
| 450 | + }else{ |
| 451 | + return false; |
| 452 | + } |
| 453 | + |
| 454 | + fieldValueObjectLength--; |
| 455 | + } |
| 456 | + ); |
| 457 | + }else if ( |
| 458 | + params.minRowsNumber && |
| 459 | + fieldValueObjectLength < params.minRowsNumber |
| 460 | + ){ |
| 461 | + for ( |
| 462 | + var rowIndex = fieldValueObjectLength; |
| 463 | + rowIndex < params.minRowsNumber; |
| 464 | + rowIndex++ |
| 465 | + ){ |
| 466 | + //Init empty row |
| 467 | + fieldValueObject[rowIndex] = {}; |
| 468 | + } |
| 469 | + } |
| 470 | + |
| 471 | + return fieldValueObject; |
| 472 | + }, |
| 473 | + |
| 474 | + /** |
| 475 | + * @method generateRowId |
| 476 | + * @version 1.1 (2020-05-25) |
| 477 | + * |
| 478 | + * @desc Generates an uniquie ID for table row. |
| 479 | + * |
| 480 | + * @returns {integer} |
| 481 | + */ |
| 482 | + generateRowId: function(){ |
| 483 | + return ( |
| 484 | + Date.now() + |
| 485 | + '' + |
| 486 | + //Get random number from 100 to 999 |
| 487 | + Math.round( |
| 488 | + ( |
| 489 | + Math.random() * |
| 490 | + ( |
| 491 | + 999 - 100 |
| 492 | + ) |
| 493 | + ) + |
| 494 | + 100 |
| 495 | + ) |
| 496 | + ); |
| 497 | + }, |
| 498 | + |
432 | 499 | /** |
433 | 500 | * @method createRow |
434 | | - * @version 6.0 (2020-05-25) |
| 501 | + * @version 6.0.1 (2020-05-25) |
435 | 502 | * |
436 | 503 | * @desc Функция создания строки. |
437 | 504 | * |
438 | 505 | * @param params {objectPlain} — The parameters. |
439 | 506 | * @param params.instanceId {string} — TV id. |
440 | | - * @param [params.rowId=(new Date).getTime()] {integer} — Row ID. |
| 507 | + * @param [params.rowId=this.generateRowId()] {integer} — Row ID. |
441 | 508 | * @param [params.rowValue={}] {objectPlain} — Row value. |
442 | 509 | * @param [params.$insertAfter=''] {string} — Row value. |
443 | 510 | * |
444 | 511 | * @returns {jQuery} |
445 | 512 | */ |
446 | 513 | createRow: function(params){ |
| 514 | + var _this = this; |
| 515 | + |
447 | 516 | //Defaults |
448 | 517 | params = $.extend( |
449 | 518 | { |
450 | | - rowId: (new Date).getTime(), |
| 519 | + rowId: _this.generateRowId(), |
451 | 520 | rowValue: {} |
452 | 521 | }, |
453 | 522 | params |
454 | 523 | ); |
455 | 524 |
|
456 | 525 | var |
457 | | - _this = this, |
458 | 526 | //Общее количество строк на данный момент |
459 | 527 | fieldRowsTotal = |
460 | 528 | _this |
|
0 commit comments