Untitled

mail@pastecode.io avatar
unknown
javascript
7 months ago
2.6 kB
1
Indexable
Never
/*
Скрипт для Битрикс24
В списке пользовательских полей CRM в таблице добавляется дополнительная колонка справа.
В этой колонке записывается id поля, который берется из ссылки в названии поля.
*/
function waitForElm(selector) {
    return new Promise(resolve => {
        if (document.querySelector(selector)) {
            return resolve(document.querySelector(selector));
        }

        const observer = new MutationObserver(mutations => {
            if (document.querySelector(selector)) {
                resolve(document.querySelector(selector));
                observer.disconnect();
            }
        });

        observer.observe(document.body, {
            childList: true,
            subtree: true
        });
    });
}

async function start() {
	await waitForElm('#fields_list')
	
	var fieldList = document.getElementById('fields_list');
	
	var rowCellCount, newCell, currentRow;
	var children, fieldId;
	
	// перебираем таблицу построчно
	var i, j;
	for (i = 0; i < fieldList.rows.length; i++) {
	   currentRow = fieldList.rows[i];
	   rowCellCount = currentRow.cells.length;
	   
	   // ищем среди ячеек строки ту, где есть ссылка
	   for (j = 0; j < rowCellCount; j++) {
	      
	      children = currentRow.cells[j].children;
	      
	      // проверяем что в ячейке есть ссылка, не кнопка "Действия"
	      if(children.length > 0 && children[0].tagName == 'A' && children[0].title != 'Действия') {
	         fieldId = children[0].href.split('/')[8]; // берем id поля из ссылки
	      }
	      
	   }
	   
	   newCell = currentRow.insertCell(rowCellCount); // добавляем новую ячейку
	   
	   if(currentRow.classList.contains('bx-grid-gutter')) { // игнорируем первую не отображаемую строку
	      
	   } else if(currentRow.classList.contains('bx-grid-head')) { // добавляем текст в строку заголовка
	      newCell.innerText = 'ID поля';
	   } else if(currentRow.classList.contains('bx-grid-footer')) { // игнорируем футер
	      
	   } else {
	      newCell.innerText = fieldId; // во все прочие строки таблицы добавляем найденный id
	   }
    }
}


start()