[ID CS4-CS6] возвращаясь к пройденному, или myObject.hasOwnProperty("parentTextFrames")

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
когда-то открывал тему как найти на какой странице лежит картинка, вставленная в текстовый бокс.
от уважаемого _MBK_ получил работающий код:
Код:
if (myObject.hasOwnProperty("parentTextFrames"))
 myObject = myObject.parentTextFrames[0];
else
 myObject = myObject.parent;

и долго время всё было хорошо... но сегодня прислали вёрстку, в которой скрипт падает на строчке myObject.parentTextFrames[0];
путём долгих поисков я выяснил, что если картинка вставлена в текстовый бокс, но находится в "переполнении" этого бокса — то у myObject получается, что и myObject.hasOwnProperty("parentTextFrames") = true, и myObject.parentTextFrames.length = 0, и присваивать, соответственно, нечего.
можно как-то выяснить, что картинка, вставленная в текстовый бокс, находится в зоне переполнения?
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213
можно как-то выяснить, что картинка, вставленная в текстовый бокс, находится в зоне переполнения?
Ну так все исходные же есть:
Код:
if (myObject.hasOwnProperty("parentTextFrames") && myObject.parentTextFrames.length != 0) {}
 
  • Спасибо
Реакции: catpaw

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
Ну так все исходные же есть:
Код:
if (myObject.hasOwnProperty("parentTextFrames") && myObject.parentTextFrames.length != 0) {}
это понятно. но мне всё ещё нужно получить текстовый бокс, в который вставлена картинка, чтобы узнать на какой странице это таки происходит. и тут метод тотального игнорирования не катит :)
нужно определить, что картинка, вставлена вот в этот бокс, который лежит на этой странице.
 
Последнее редактирование:
  • Спасибо
Реакции: catpaw

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213
это понятно. но мне всё ещё нужно получить текстовый бокс, в который вставлена картинка
Если картинка находится в переполнении, то ни в какой текстовый блок она не вставлена.
 
  • Спасибо
Реакции: catpaw

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
Если картинка находится в переполнении, то ни в какой текстовый блок она не вставлена.
ну да. можно перефразировать задачу — нужно определить последний текстовый бокс, в котором есть тот текст (ну и картинка среди текста), который сейчас находится в переполнении. то есть определить бокс, на котором сейчас висит значок переполнения.
где-то так.
можно было бы в принципе определить, все текстовые боксы с переполнениями, но с нашими клиентами тогда проще написать "переполнение везде" без всяких проверок.
 
  • Спасибо
Реакции: catpaw

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 228
Реакции
10 851
Ответ содержится в названии топика. Запоминайте предыдущее значение myObject ;)
 

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213
нужно определить последний текстовый бокс, в котором есть тот текст (ну и картинка среди текста), который сейчас находится в переполнении
Пройтись по цепочке parentStory.textContainers
Код:
var story = app.selection[0].parentStory;
for (var i = 0; i < story.textContainers.length; i++) {
    if (story.textContainers[i].overflows) {
        story.textContainers[i].select();
    }
}
 
  • Спасибо
Реакции: catpaw и bossrus

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
Ответ содержится в названии топика. Запоминайте предыдущее значение myObject ;)
начнём сначала :)
есть цепочка от собственно картинки и по восходящей по объектному древу:
[object Image] —> [object Rectangle] —> [object Character] —> ОШИБКА (ну то есть тут должен быть [object TextFrame], но картинка в переполнении)
как узнать на какой странице расположен бокс [object TextFrame] со значком "переполнение", в переполнении которого находится это самое "предыдущее значение" [object Character]?
 
  • Спасибо
Реакции: catpaw

Oleg Butrin

20 лет на форуме
Сообщения
1 990
Реакции
1 213
есть цепочка от собственно картинки и по восходящей по объектному древу:
Это не восходящая цепочка. Текстовый фрейм -- это ответвление, причем фактически виртуальное.
 
  • Спасибо
Реакции: catpaw

bossrus

шибка умный, аднака
Топикстартер
12 лет на форуме
Сообщения
447
Реакции
74
спасибо всем!
финальный код определения на какой странице находится картинка (даже если она в текстовом боксе, и даже если с переполнением):
Код:
function getMyPage(newObj)
    {
    while (newObj.constructor.name!="Page"  && newObj.constructor.name!="Spread" && newObj.constructor.name!="Application")
        {
        if (newObj.hasOwnProperty("parentTextFrames"))
            {
            if (newObj.parentTextFrames.length==0)
                {
                var story = newObj.parentStory;
                newObj = story.textContainers[story.textContainers.length-1];
                } else
                    newObj = newObj.parentTextFrames[0];
            }
            else
             newObj = newObj.parent;
        }
    return newObj;
    }
 
  • Спасибо
Реакции: catpaw