Имеется скрипт на VB по обновлению линков в ТВ-программе
Решил перевести его на JS, чтобы был универсальным
и сталкнулся с двумя проблеммами:
1. конструкция типа currentLink.parent.textFrames[0] возвращает ошибку а не фрейм содержащий линк, но эта проблема в представленном коде обойдена.
2. Почему-то в цикле обрабатываются не все линки и скрипт приходится перезапускать НЕСКОЛЬКО РАЗ!!!
В чем может быть проблема?
Скрипт проверялся в InDesign CS3
Код:
Set myInd = CreateObject("InDesign.Application.CS3")
myInd.ScriptPreferences.Version = 5.0
If myInd.ScriptPreferences.EnableRedraw Then
myInd.ScriptPreferences.EnableRedraw = False
End If
myInd.ScriptPreferences.Version = 4.0
If myInd.Documents.Count > 0 Then
Set myDoc = myInd.ActiveDocument
For Each myLink In myDoc.Links
If myLink.Edited Then
If (myLink.Status <> idLinkStatus.idLinkMissing And myLink.Status <> idLinkStatus.idNormal) Or myLink.Status = idLinkStatus.idLinkOutOfDate Then
Set myFrame = myLink.Parent.TextFrames(1)
Select Case myFrame.Label
Case "MV"
myFrame.Label = "MV_New"
Case "DMV"
myFrame.Label = "DMV_New"
Case "21C"
myFrame.Label = "21C_New"
Case "Film"
myFrame.Label = "Film_New"
Case "TVM"
myFrame.Label = "TVM_New"
Case "STVM"
myFrame.Label = "STVM_New"
Case "CTV"
myFrame.Label = "CTV_New"
End Select
If Left(myFrame.Label, 3) = "TV-" Then
myFrame.Label = myFrame.Label & "_New"
End If
myLink.Update
End If
End If
Next
MsgBox "ГОТОВО!", ,"УРА!!!!"
End If
Код:
main()
function main()
{
if (app.documents.length == 0) exit();
for(i = 0; i < app.documents[0].links.length; i++)
{
var currentLink = app.documents[0].links[i];
if(!(currentLink.edited && ((currentLink.status != LinkStatus.linkMissing && currentLink.status != LinkStatus.normal) || currentLink.status == LinkStatus.linkOutOfDate)))
continue;
currentLink.parent.contents = "update\r";
var tempPara = currentLink.parent.paragraphs[0];
tempPara.select(SelectionOptions.replaceWith);
var textFrame = app.selection[0].parentTextFrames[0];
if(textFrame.label.length < 2) continue;
var label = textFrame.label.substr(0,2);
if(label == "MV" || label == "DM" || label == "21" || label == "Fi" || label == "TV" || label == "ST" || label == "CT")
{
textFrame.label += "_New";
currentLink.update();
}
}
alert("ГОТОВО!", "УРА!!!!");
1. конструкция типа currentLink.parent.textFrames[0] возвращает ошибку а не фрейм содержащий линк, но эта проблема в представленном коде обойдена.
2. Почему-то в цикле обрабатываются не все линки и скрипт приходится перезапускать НЕСКОЛЬКО РАЗ!!!
В чем может быть проблема?
Скрипт проверялся в InDesign CS3