Last active
December 27, 2015 18:49
-
-
Save gavJackson/7372313 to your computer and use it in GitHub Desktop.
A JSFL I wrote 5 years ago to automatically rename movieclips on the timeline (i think) - cant totally remember what it does - if you try it let me know what it does in the comments below
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//loopThroughTimeLine(); | |
function getBoolean(value) | |
{ | |
var bReturn = false; | |
if(value.toUpperCase() == "TRUE") | |
{ | |
bReturn = true; | |
} | |
return bReturn; | |
} | |
function loopThroughTimeLine(mcSuffix, doMovieClips, btnSuffix, doButtons, doCompiled, txtName, doTextFields, doLayers) | |
{ | |
//alert("test"); | |
var MOVIECLIP_SUFFIX = mcSuffix; | |
var BUTTON_SUFFIX = btnSuffix; | |
var TEXTFIELD_NAME = txtName; | |
var DO_MOVIECLIPS = getBoolean(doMovieClips); | |
var DO_BUTTONS = getBoolean(doButtons); | |
var DO_COMPILED_CLIPS = getBoolean(doCompiled); | |
var DO_TEXTFIELDS = getBoolean(doTextFields); | |
var DO_LAYERS = getBoolean(doLayers); | |
var nLabelCounter = 0; | |
var arrNamesAlreadyDone = new Array(); | |
var arrNamesToCheck = new Array(); | |
var arrNames = new Array(); | |
var arrLayerCounter = new Array(); | |
var arrLayers = fl.getDocumentDOM().getTimeline().layers; | |
var strMessage = ""; | |
var nCounter = 0; | |
for(var l=0; l < arrLayers.length; l++) | |
{ | |
//loop through all layers in the timeline | |
var arrFrames = arrLayers[l].frames; | |
var n = arrFrames.length; | |
for (i=0; i < n; i++) | |
{ | |
if (i==arrFrames[i].startFrame) | |
{ | |
//alert("Keyframe at: " + i); | |
var arrElements = arrFrames[i].elements; | |
for (e=0; e < arrElements.length; e++) | |
{ | |
if(arrElements[e].elementType=="instance") | |
{ | |
if(arrElements[e].name == "") | |
{ | |
var strNewName = arrElements[e].libraryItem.name; | |
//remove any folder stuff | |
if(strNewName.indexOf("/") != -1) | |
{ | |
var arrItemName = strNewName.split("/"); | |
strNewName = arrItemName[arrItemName.length-1]; | |
} | |
//alert(strNewName + "=" + arrElements[e].libraryItem.itemType); | |
var bProceed = true; | |
if(arrElements[e].libraryItem.itemType=="movie clip" && DO_MOVIECLIPS==false) | |
{ | |
bProceed = false; | |
} | |
else if(arrElements[e].libraryItem.itemType=="button" && DO_BUTTONS==false) | |
{ | |
bProceed = false; | |
} | |
else if(arrElements[e].libraryItem.itemType=="compiled clip" && DO_COMPILED_CLIPS==false) | |
{ | |
bProceed = false; | |
} | |
if(bProceed==true) | |
{ | |
//alert(strNewName + "=" + arrElements[e].libraryItem.itemType); | |
//make sure first character is lower case | |
strNewName = strNewName.substr(0, 1).toLowerCase() + strNewName.substr(1, strNewName.length); | |
//if there are any spaces, remove them but also capitalise the first letter of each word) | |
if(strNewName.indexOf(" ") != -1) | |
{ | |
var arrName = strNewName.split(" "); | |
var strWord; | |
strNewName = ""; | |
for(var w=0; w < arrName.length; w++) | |
{ | |
strWord = arrName[w]; | |
if(w > 0) | |
{ | |
//capitalise the first letter | |
strWord = strWord.substr(0, 1).toUpperCase() + strWord.substr(1, strWord.length); | |
} | |
strNewName += strWord; | |
} | |
} | |
//remove illegal characters from the name | |
var regExp = new RegExp("\\W\\D", "gi"); | |
strNewName = strNewName.replace(regExp, "_"); | |
//sort out a type suffix | |
var strSuffix = MOVIECLIP_SUFFIX; | |
if(arrElements[e].libraryItem.itemType == "button") | |
{ | |
strSuffix = BUTTON_SUFFIX; | |
} | |
else if(arrElements[e].libraryItem.itemType == "compiled clip") | |
{ | |
strSuffix = "_" + arrElements[e].libraryItem.name.substr(0, 3).toLowerCase(); | |
} | |
//add on _mc only if it's not already there | |
if(strNewName.substr(strNewName.length-(strSuffix.length), strNewName.length) != strSuffix) | |
{ | |
strNewName += strSuffix; | |
} | |
//need to determine if have found any more instances of these items but on different layers - if so suffix with a number | |
strNewName = checkName(arrNames, l, strNewName, arrElements[e], arrLayerCounter, arrNamesToCheck, arrNamesAlreadyDone, strSuffix); | |
strMessage += "\n " + (nCounter + 1) + " " + strNewName + " (instance of '" + arrElements[e].libraryItem.name + "' on layer " + l + " @ frame " + i + ")"; | |
//addToNamesArray(l, strNewName, arrNames, nCounter); | |
arrNames[nCounter] = {layer: l, name: strNewName}; | |
arrElements[e].name = strNewName; | |
if(DO_LAYERS == true) | |
{ | |
arrLayers[l].name = strNewName; | |
} | |
nCounter++; | |
} | |
} | |
else | |
{ | |
strMessage += "\n ignored instance with name: " + arrElements[e].name; | |
arrNames.push({layer: l, name: arrElements[e].name}); | |
if(DO_LAYERS == true) | |
{ | |
arrLayers[l].name = arrElements[e].name; | |
} | |
} | |
} | |
else | |
{ | |
if(arrElements[e].toString() == "[object Text]" && DO_TEXTFIELDS == true) | |
{ | |
if(arrElements[e].name == "") | |
{ | |
var fieldLabel = TEXTFIELD_NAME.replace("{n}", nLabelCounter); | |
arrElements[e].name = fieldLabel; | |
nLabelCounter++; | |
strMessage += "\n found a text field and named it to: " + arrElements[e].name; | |
} | |
if(DO_LAYERS == true) | |
{ | |
arrLayers[l].name = arrElements[e].name; | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
if(strMessage != "") | |
{ | |
strMessage = "Found and renamed " + arrNames.length + " instances:" + strMessage; | |
//alert(strMessage); | |
} | |
for(var i=0; i < arrNamesToCheck.length; i++) | |
{ | |
var suffix = arrNamesToCheck[i].substr(arrNamesToCheck[i].length - MOVIECLIP_SUFFIX.length, arrNamesToCheck[i].length); | |
if(suffix != MOVIECLIP_SUFFIX) | |
{ | |
suffix = arrNamesToCheck[i].substr(arrNamesToCheck[i].length - BUTTON_SUFFIX.length, arrNamesToCheck[i].length); | |
if(suffix != BUTTON_SUFFIX) | |
{ | |
suffix = arrNamesToCheck[i].substr(arrNamesToCheck[i].length- COMPILED_CLIP_SUFFIX.length, arrNamesToCheck[i].length); | |
if(suffix != COMPILED_CLIP_SUFFIX) | |
{ | |
suffix = MOVIECLIP_SUFFIX; | |
} | |
} | |
} | |
strMessage += findAndRenameMovieClips(arrNamesToCheck[i], arrNamesToCheck[i].split(suffix).join("0" + suffix)); | |
} | |
//alert(strMessage); | |
return strMessage; | |
} | |
function addToNamesArray(nLayer, strName, arrNames, nIndex) | |
{ | |
var bFound = false; | |
for(var i=0; i < arrNames.length; i++) | |
{ | |
if(arrNames[i] != null) | |
{ | |
if(arrNames[i].layer == nLayer && arrNames[i].name == strName) | |
{ | |
bFound = true; | |
break; | |
} | |
} | |
} | |
if(bFound == false) | |
{ | |
//alert("adding @ " + nIndex + " " + strName); | |
arrNames[nIndex] = {layer: nLayer, name: strName}; | |
} | |
} | |
var nLastLayer; | |
function checkName(arrNames, nLayer, strNameToCheck, objElement, arrLayerCounter, arrNamesToCheck, arrNamesAlreadyDone, strSuffix) | |
{ | |
var strLibraryItemName = objElement.libraryItem.name; | |
var bProceed = true; | |
var strReturnName = strNameToCheck; | |
if(arrNames != null) | |
{ | |
for(var i=0; i< arrNames.length; i++) | |
{ | |
//make sure not already done this name - prevents ..._1_2_mc | |
for(var j=0; j < arrNamesAlreadyDone.length; j++) | |
{ | |
if(arrNamesAlreadyDone[j] == strReturnName) | |
{ | |
bProceed = false; | |
} | |
} | |
if(bProceed==true) | |
{ | |
if(arrNames[i].name == strNameToCheck && arrNames[i].layer != nLayer) | |
{ | |
//alert("Found another instance with the name " + strNameToCheck + " on layer " + nLayer); | |
if(arrLayerCounter[strLibraryItemName] == null) | |
{ | |
arrLayerCounter[strLibraryItemName] = 1; | |
} | |
else | |
{ | |
if(nLastLayer != nLayer) | |
{ | |
arrLayerCounter[strLibraryItemName]++; | |
} | |
} | |
var strOriginalName = strReturnName; | |
strReturnName = strReturnName.split(strSuffix).join(arrLayerCounter[strLibraryItemName] + strSuffix); | |
arrNamesToCheck.push(strNameToCheck); | |
arrNamesAlreadyDone.push(strReturnName); | |
//alert("Renaming " + strOriginalName + " to " + strReturnName + " arrLayerCounter[" + strLibraryItemName + "]=" + arrLayerCounter[strLibraryItemName]); | |
} | |
} | |
} | |
nLastLayer = nLayer; | |
} | |
//alert("checkName(arrNames, " + nLayer + ", " + strNameToCheck + ", " + objElement.name + ", arrLayerCounter, arrNamesToCheck):" + strReturnName); | |
return strReturnName; | |
} | |
//If named multiple instances of a clip across different layers, find the first instance and rename to ...0_mc | |
function findAndRenameMovieClips(strSearchForName, strRename) | |
{ | |
var arrLayers = fl.getDocumentDOM().getTimeline().layers; | |
var strMessage = ""; | |
for(var l=0; l < arrLayers.length; l++) | |
{ | |
//loop through all layers in the timeline | |
var arrFrames = arrLayers[l].frames; | |
var n = arrFrames.length; | |
for (i=0; i < n; i++) | |
{ | |
if (i==arrFrames[i].startFrame) | |
{ | |
//alert("Keyframe at: " + i); | |
var arrElements = arrFrames[i].elements; | |
for (e=0; e < arrElements.length; e++) | |
{ | |
if(arrElements[e].elementType=="instance" && arrElements[e].name == strSearchForName) | |
{ | |
strMessage += "\n " + strRename + " was called " + arrElements[e].name+ " (on layer " + l + " @ frame " + i + ")"; | |
arrElements[e].name = strRename; | |
arrLayers[l].name = strRename; | |
} | |
} | |
} | |
} | |
} | |
if(strMessage != "") | |
{ | |
strMessage = "\nAlso re-indexed..." + strMessage; | |
//alert(strMessage); | |
} | |
return strMessage; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment