[GastForen Programme Print/Bildbearbeitung Adobe InDesign Skriptwerkstatt Tag Cloud in Indesign erstellen - JavaScript

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Print/Bildbearbeitung - Photos, Layout, Design
Themen
Beiträge
Moderatoren
Letzter Beitrag

Tag Cloud in Indesign erstellen - JavaScript

freddeh
Beiträge gesamt:

25. Mär 2009, 22:47
Beitrag # 1 von 9
Bewertung:
(10090 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo,

Folgendes Problem: Ich habe eine Exceltabelle mit jeweils 4 Spalten Text, der eingefügt werden soll. (Format in jeder der Spalten: hund - katze - maus - elefant - tiger). Diese sind in Spalten aufgeteilt, weil sie in Indesign unterschiedlich formatiert werden sollen. Nun möchte ich aber, wenn ich diese per Datenzusammenführung importiert habe, dass sie anschließend, nach ihrer Formatierung, wieder durcheinandergewirbelt werden, sodass nachher es nachher nicht so aussieht:
<<InhaltSpalte1>><<InhaltSpalte2>><<InhaltSpalte3> ><<InhaltSpalte4>>,
sondern z.B. so:

hund - maus - katze - elefant - tiger - affe - ratte

Soweit hab ich das nun, dass ich ein funktionstüchtiges Javascript erstellt habe, das die Begriffe neu ordnet, nur leider ohne die Formatierung mit zu verschieben. Jemand eine Idee wie ich die mitverschiebe, sodass sie nicht am selben "Fleck" bleibt?

Code
function arrayShuffle(){ 
var tmp, rand;
for(var i =0; i < this.length; i++){
rand = Math.floor(Math.random() * this.length);
tmp = this[i];
this[i] = this[rand];
this[rand] =tmp;
}
return this.join(" - ")
}
Array.prototype.shuffle = arrayShuffle;

randomize();
function randomize() {

if (app.documents.length == 0 || app.selection.length == 0) {
alert("Please select an object"); return false;
}
else if(app.selection[0].constructor.name == "TextFrame"){
var words = new Array;

words = app.selection[0].contents;

words = words.split(" - ");
words = words.shuffle();
app.selection[0].contents = words;
}
else {
alert("Please select an textframe"); return false;
}
}


(Dieser Beitrag wurde von Martin Fischer am 25. Mär 2009, 23:03 geändert)
X

Tag Cloud in Indesign erstellen - JavaScript

Gerald Singelmann
  
Beiträge gesamt: 6269

25. Mär 2009, 22:58
Beitrag # 2 von 9
Beitrag ID: #390842
Bewertung:
(10081 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo freddeh und herzlich willkommen.

Mögen Sie das Script noch einmal posten, diesmal aber mit n als Laufvariable?
EckigeKlammer i EckigeKlammerZu ist nämlich das Kürzel hier, um den folgenden Text auf kursiv zu stellen.
Das ist recht unangenehm bei allen JavaScripten mit i als Laufvariable...

Danke


als Antwort auf: [#390840]

Tag Cloud in Indesign erstellen - JavaScript

Martin Fischer
  
Beiträge gesamt: 12783

25. Mär 2009, 23:11
Beitrag # 3 von 9
Beitrag ID: #390847
Bewertung:
(10078 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Gerald und Freddeh,

> EckigeKlammer i EckigeKlammerZu ist nämlich das Kürzel hier, um den folgenden Text auf kursiv zu stellen.


Kann mit einem Punkt vor dem i umgangen werden: [.i] -> [i]

Mich stört das auch schon längere Zeit.
Denn diese Laufvariable i ist beim Programmieren/Skripten einfach Standard und hier im Forum wird sie wg. der Kursiv-Formatierung versaut. Skripte von neuen Usern werden so oft unlesbar und müssen nachbehandelt werden.

Dabei kann ich mich nicht erinnern, bei HDS jemals einen Beitrag gelesen zu haben, in dem jemand von der Kursiv-Auszeichnung [i] Gebrauch gemacht hätte. Fett und Farben reichen m.E. aus.
Meine entsprechenden Anregungen beim Chef sind bislang unerhört geblieben.
Was spricht gegen einen Ersatz von [i] durch [italic]?

Ich hab's oben korrigiert.


als Antwort auf: [#390842]
(Dieser Beitrag wurde von Martin Fischer am 25. Mär 2009, 23:18 geändert)

Tag Cloud in Indesign erstellen - JavaScript

Martin Fischer
  
Beiträge gesamt: 12783

25. Mär 2009, 23:14
Beitrag # 4 von 9
Beitrag ID: #390848
Bewertung:
(10077 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Hallo Freddeh,

nettes Skript.

> Jemand eine Idee wie ich die mitverschiebe, sodass sie nicht am selben "Fleck" bleibt?

Du musst die formatierten Wörter mit der move()-Methode verschieben.
Dann bleibt die Formatierung dran kleben.


als Antwort auf: [#390840]

Tag Cloud in Indesign erstellen - JavaScript

freddeh
Beiträge gesamt:

26. Mär 2009, 12:45
Beitrag # 5 von 9
Beitrag ID: #390927
Bewertung:
(9988 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Ja, diese Methode habe ich auch schon in den Sample Javascripts gefunden, aber leider nicht so recht realisiert bekommen. Haben Sie vielleicht einen Ansatz für mich?

Besonders behindern tuen mich die von mir im Text vorgegebenen " - " zwischen den Begriffen, die ich ja auch nicht einfach löschen kann um sie dann später wieder hinzuzufügen, da dabei die Formatierung ebenfalls verloren geht..

Ich könnte, falls es irgendetwas erleichtert auch einfach die " - " aus dem Excel VB entfernen und dann erst am Ende des JavaScripts ergänzen lassen, wenn das das Script in Indesign vereinfacht..

Aber irgendwie finde ich nicht die richtigen Befehle um einzelne Worte aus dem Text mit move zu bewegen, words.item().move() macht irgendwie nicht, dass was es soll.

Wenn jemand eine Idee hat, bitte ich sie mir mitzuteilen..

Danke,
freddeh


als Antwort auf: [#390848]

Tag Cloud in Indesign erstellen - JavaScript

freddeh
Beiträge gesamt:

26. Mär 2009, 18:24
Beitrag # 6 von 9
Beitrag ID: #390987
Bewertung:
(9955 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Irgendwie verschiebt er ja bei words.move() bei allen LocationOptions immer so, dass die Leerzeichen dazwischen nicht beachtet werden und Wörter dann zusammenhängen, gibt es ne Möglichkeit das zu umgehen?

mit itemByRange(Wort," ") hab ichs auch nicht hingekriegt..


als Antwort auf: [#390927]

Tag Cloud in Indesign erstellen - JavaScript

Martin Fischer
  
Beiträge gesamt: 12783

27. Mär 2009, 07:45
Beitrag # 7 von 9
Beitrag ID: #391016
Bewertung:
(9916 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
> Irgendwie verschiebt er ja bei words.move() bei allen LocationOptions immer so,
> dass die Leerzeichen dazwischen nicht beachtet werden und Wörter dann zusammenhängen,
> gibt es ne Möglichkeit das zu umgehen?

Die Leerzeichen gehören ja auch nicht zum Wort, das ist schon richtig so.
Du mußt Dir dazu im Skript die Umgebung des Worts anschauen, bzw. was danach kommt und das zu verschiebende Objekt ggf. entsprechend erweitern.

Erweitere das Word-Objekt über die Indexe seiner Begrenzung (characters.firstItem() und characters.lastItem()) zum Text-Objekt:

Code
var myZusatz = 1 // Erweiterung auf x Zeichen hinter dem Wort 
var myText = myWord.parentStory.characters.itemByRange(myWord.characters.firstItem().index, myWord.characters.lastItem().index + myZusatz);

(Keine Gewähr auf die Richtigkeit des Codes; nicht getestet, aber im Prinzip sollte es so gehen)


als Antwort auf: [#390987]
(Dieser Beitrag wurde von Martin Fischer am 27. Mär 2009, 08:33 geändert)

Tag Cloud in Indesign erstellen - JavaScript

freddeh
Beiträge gesamt:

27. Mär 2009, 12:06
Beitrag # 8 von 9
Beitrag ID: #391071
Bewertung:
(9879 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Danke für den Tipp..

Habe es jetzt so gelöst, ist vielleicht nicht grade JavaScript-Gourmet-Code, aber dafür dass ich eigentlich keine Ahnung von der Materie habe.. Hauptsache es funktioniert! ;)

Code
function arrayShuffle(){  
var tmp, rand;
for(var k =0; k < this.length; k++){
rand = Math.floor(Math.random() * this.length);
tmp = this[k];
this[k] = this[rand];
this[rand] =tmp;
}
return this
}
Array.prototype.shuffle = arrayShuffle;

function GetRandom( min, max ) {
if( min > max ) { return( -1 ); }
if( min == max ) {
return( min );
}
return( min + parseInt( Math.random() * ( max-min+1 ) ) );
}

function randomize() {
if (app.documents.length == 0 || app.selection.length == 0) {
alert("Please select an object"); return false;
}
if (app.selection[0].constructor.name == "TextFrame") {

var myWords = new Array;
var i,j, z,ref;

myText = app.selection[0];
myWords = myText.contents;
myWords = myWords.split(" ");
myWords2 = myWords;
myWords2 = myWords2.shuffle();

for(var j = 0;j < 3;j++) {
for(var i = 0; i < myWords.length-1;i++) {
z = LocationOptions.before;
y = GetRandom(0,myWords.length-1);
ref = myText.texts[0].words.item(y);
var moveIt = myText.parentStory.characters.itemByRange(myText.parentStory.words.item(i).characters.firstItem().index,myText.parentStory.words.item(i).characters.lastItem().index +1);
while((i == y) || (i == y-1)) { var y = GetRandom(0,myWords.length-1); var ref = myText.texts[0].words.item(y); }
moveIt.move(z,ref);
}
}
}
else {
alert("Please select an textframe"); return false;
}
}

randomize();



als Antwort auf: [#391016]

Tag Cloud in Indesign erstellen - JavaScript

freddeh
Beiträge gesamt:

29. Mai 2009, 18:31
Beitrag # 9 von 9
Beitrag ID: #397870
Bewertung:
(9596 mal gelesen)
URL zum Beitrag
Beitrag als Lesezeichen
Mhh habe nun ein neues Problem. Diesmal habe ich eine Quelle mit mehreren Begriffen die so angeordnet sind:

Zitat ich bin eine kuh, ich bin ein elefant, du bist schön, cool, oink


Also mal einzelne, mal mehrere Begriffe, alle getrennt durch ein Komma.

Die möchte ich nun ebenfalls, so wie sie sind, wie in dem Script oben, mit sammt der Formatierung, die bereits besteht, zufällig anordnen, aber so, dass die einzelnen Aussagen bestehen bleiben, sich nur ihre Reihenfolge ändert. Jemand eine Idee?

Danke für die Hilfe..


als Antwort auf: [#391071]
X