/*
  The script renames the layers using the content of the TextFrame or its custom name
  Discussion: https://community.adobe.com/t5/illustrator-discussions/script-to-rename-layer-from-text-in-the-layer/td-p/13865554
  Author: Sergey Osokin, email: hi@sergosokin.ru
  Check my other scripts: https://github.com/creold
  
  Donate (optional):
  If you find this script helpful, you can buy me a coffee
  - via Buymeacoffee: https://www.buymeacoffee.com/aiscripts
  - via Donatty https://donatty.com/sergosokin
  - via DonatePay https://new.donatepay.ru/en/@osokin
  - via YooMoney https://yoomoney.ru/to/410011149615582
*/

//@target illustrator
app.preferences.setBooleanPreference('ShowExternalJSXWarning', false);// Fix drag and drop a .jsx file

function main() {
  if (!/illustrator/i.test(app.name)) return;
  if (!documents.length) return;

  // UI
  var win = new Window('dialog', 'Rename layer as text');
      win.alignChildren = ['fill', 'center'];

  var opts = win.add('group');
      opts.alignChildren = ['fill', 'center'];
  var isFirstRb = opts.add('radiobutton', undefined, 'Use first text');
      isFirstRb.value = true;
  var isLastRb = opts.add('radiobutton', undefined, 'Last text');

  var btns = win.add('group');
  var currBtn = btns.add('button', undefined, 'Active Layer', { name: 'ok' });
  var allBtn = btns.add('button', undefined, 'All');

  allBtn.onClick = function () {
    var _layers = app.activeDocument.layers;
    for (var i = 0, len = _layers.length; i < len; i++) {
      renameLayer(_layers[i], isFirstRb.value);
    }
    win.close();
  }

  currBtn.onClick = function () {
    renameLayer(app.activeDocument.activeLayer, isFirstRb.value);
    win.close();
  }

  win.center();
  win.show();
}

function renameLayer(lay, isFirst) {
  var tfs = getTextFrames(lay.pageItems);
  if (!tfs.length) return;
  var tf = isFirst? tfs[0] : tfs[tfs.length - 1];
  if (tf.name != '') lay.name = tf.name;
  else lay.name = tf.contents.slice(0, 100);
}

function getTextFrames(coll) {
  var tfs = [];
  for (var i = 0, len = coll.length; i < len; i++) {
    if (/text/i.test(coll[i].typename)) {
      tfs.push(coll[i]);
    } else if (/group/i.test(coll[i].typename)) {
      tfs = tfs.concat( getTextFrames(coll[i].pageItems) );
    }
  }
  return tfs;
}

// Run script
try {
  main();
} catch (err) {}