Skip to content

Commit 51b3fbf

Browse files
committed
Version 4.8.1
2 parents 930c41c + d86bcd3 commit 51b3fbf

File tree

5 files changed

+178
-100
lines changed

5 files changed

+178
-100
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
# (MODX)EvolutionCMS.plugins.ManagerManager.mm_ddMultipleFields changelog
22

33

4+
## Version 4.8.1 (2020-05-25)
5+
* \* Improved uniqueness row ID while it is used for backward compatibility.
6+
* \* `jQuery.ddMM.mm_ddMultipleFields.init`: Fixed deprecated ID column using.
7+
8+
49
## Version 4.8 (2020-05-25)
510
* \* Richtext column: `<`, `>` and `&` are not replaced to HTML entities (`&lt;`, `&gt;` and `&amp;` respectively).
611
* \* TV value stores as a JSON object, no more separated strings (with backward compatibility).

CHANGELOG_ru.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
# (MODX)EvolutionCMS.plugins.ManagerManager.mm_ddMultipleFields changelog
22

33

4+
## Версия 4.8.1 (2020-05-25)
5+
* \* Улучшена уникальность идентификатора строки, когда он используется для обратной совместимости.
6+
* \* `jQuery.ddMM.mm_ddMultipleFields.init`: Исправлено использование устаревшей колонки `id`.
7+
8+
49
## Версия 4.8 (2020-05-25)
510
* \* Колонка `richtext`: Символы `<`, `>` и `&` больше не заменяются на HTML сущности (`&lt;`, `&gt;` и `&amp;` соответственно).
611
* \* Значение в TV хранится в виде объекта JSON, никаких больше строк через разделители (с обратной совместимостью).

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "dd/evolutioncms-plugins-managermanager-mm_ddmultiplefields",
3-
"version": "4.8",
3+
"version": "4.8.1",
44
"description": "Widget for plugin ManagerManager that allows you to add any number of fields values (TV) in one document (values are written in field as a JSON object). For example: a few images.",
55
"keywords": [
66
"modx",

ddmultiplefields/ddmultiplefields.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?php
22
/**
33
* mm_ddMultipleFields
4-
* @version 4.8 (2020-05-25)
4+
* @version 4.8.1 (2020-05-25)
55
*
66
* @link https://code.divandesign.biz/modx/mm_ddmultiplefields
77
*
@@ -103,7 +103,7 @@ function mm_ddMultipleFields($params){
103103
),
104104
'html',
105105
'jQuery.ddMM.mm_ddMultipleFields',
106-
'2.5'
106+
'2.5.5'
107107
);
108108

109109
$e->output($output);

ddmultiplefields/jQuery.ddMM.mm_ddMultipleFields.js

Lines changed: 165 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/**
22
* jQuery.ddMM.mm_ddMultipleFields
3-
* @version 2.5 (2020-05-25)
3+
* @version 2.5.5 (2020-05-25)
44
*
55
* @uses jQuery 1.9.1
66
* @uses jQuery.ddTools 1.8.1
@@ -189,7 +189,7 @@ $.ddMM.mm_ddMultipleFields = {
189189

190190
/**
191191
* @method init
192-
* @version 4.3.1 (2020-05-25)
192+
* @version 4.3.3 (2020-05-25)
193193
*
194194
* @desc Инициализация.
195195
*
@@ -217,8 +217,6 @@ $.ddMM.mm_ddMultipleFields = {
217217
init: function(instance){
218218
var
219219
_this = this,
220-
//Объект значения поля
221-
fieldValueObject = {},
222220
//Шапка таблицы
223221
tableHeaderHtml = '',
224222
//По умолчанию без шапки
@@ -268,56 +266,18 @@ $.ddMM.mm_ddMultipleFields = {
268266
}
269267
);
270268

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+
;
321281

322282
//Это поле нужно было только для инициализации
323283
delete instance.value;
@@ -348,45 +308,6 @@ $.ddMM.mm_ddMultipleFields = {
348308
;
349309
}
350310

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-
390311
$.each(
391312
fieldValueObject,
392313
function(
@@ -429,32 +350,179 @@ $.ddMM.mm_ddMultipleFields = {
429350
});
430351
},
431352

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+
432499
/**
433500
* @method createRow
434-
* @version 6.0 (2020-05-25)
501+
* @version 6.0.1 (2020-05-25)
435502
*
436503
* @desc Функция создания строки.
437504
*
438505
* @param params {objectPlain} — The parameters.
439506
* @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.
441508
* @param [params.rowValue={}] {objectPlain} — Row value.
442509
* @param [params.$insertAfter=''] {string} — Row value.
443510
*
444511
* @returns {jQuery}
445512
*/
446513
createRow: function(params){
514+
var _this = this;
515+
447516
//Defaults
448517
params = $.extend(
449518
{
450-
rowId: (new Date).getTime(),
519+
rowId: _this.generateRowId(),
451520
rowValue: {}
452521
},
453522
params
454523
);
455524

456525
var
457-
_this = this,
458526
//Общее количество строк на данный момент
459527
fieldRowsTotal =
460528
_this

0 commit comments

Comments
 (0)