[GastForen

  • Suche
  • Hilfe
  • Lesezeichen
  • Benutzerliste
Forenindex -- Lesezeichen

15 Lesezeichen für javascript

|| 2 Scripte automatisch hintereinander ausführen ?
scriptdir = app.scriptPreferences.scriptsFolder;

app.doScript (File (scriptdir + "/FindChangeByList.jsx"));
app.doScript (File (scriptdir + "/Mehrfachfarbfelder löschen.jsx"));

fr. gr.

Peter
...
Peter Kahrel
17. Okt 2009, 12:09
Datumsfunktion in Indesign
Hallo Helmut,

ich habe hier ein Script von Martin.
Da ich nicht mehr weiß, unter welchem Link es steht,
setze ich es hier rein.

Code
// Das folgende Script ersetzt den Inhalt des Textes,  
// der mit dem Zeichenformat "z_Datum" ausgezeichnet ist,
// durch das aktuelle Datum.
// So kann man das Datum immer wieder im gesamten Dokument aktualisieren:

// refresh_date-xl.js
//
myStyle = app.documents[0].characterStyles.item("z_Datum");
var d= new Date();
var myMonth = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
var myDate = d.getDate() + ". " + myMonth[d.getMonth()] + " " + (d.getYear()*1 +1900); app.findPreferences = null;
app.changePreferences = null;
app.documents[0].search("",false,false,myDate, {appliedCharacterStyle:myStyle});


Gruß
Quarz
...
Quarz
18. Jul 2007, 22:44
|| Dropdown Dialog mit den UI-Farben
The first thing that comes to mind in these lines:

var doc = app.documents[0];
var dialogNames = ["Türkis", "Orange", "Rot"];
var colorValues = [UIColors.TEAL, UIColors.ORANGE, UIColors.RED];

is that doc, dialogNames, and coloValues are not variables, but constants. So it would seem better to decalre as such:

const doc = app.documents[0];
const dialogNames = ["Türkis", "Orange", "Rot"];
const colorValues = [UIColors.TEAL, UIColors.ORANGE, UIColors.RED];

The advantage of using const is that constants cannot be redefined, protecting the contents of the defined constants.

As to the readability of variable names, if you want to distinguish them from InDesign's properties and methods, then why use the same naming convention of space-less title case with initial lower case (as in dialogNames)? I would make sure that my variables are easily recognisable as my own. For example, for variable and function names I've been using dialog_names: underscores for spaces, no capitals. No confusion.

Regards,

Peter
...
Peter Kahrel
16. Okt 2009, 14:04
Indesign CS4 - Tabellen
Hallo,

Antwort auf: - Außerdem möchte ich der Tabelle einen Tabellenstil zuweisen und alle Abweichungen vom Stil in den Zellenformaten löschen.


Schau mal in Allen Tabellen ein Zellenformat zuweisen – per Script?

Antwort auf: - Jetzt möchte ich dem Absatz, an dem die Tabelle im Text verankert ist, ein bestimmtes Absatzformat zuweisen.


Auch das ließe sich per Skript erledigen.
Etwa so:
Code
var myParaStyle = 'Tabellen'; // Name des Absatzformats für die Absätze in welchen Tabellen enthalten sind 

if (app.activeDocument.paragraphStyles.itemByName(myParaStyle).isValid)
{
var myTables = app.activeDocument.stories.everyItem().tables.everyItem().getElements();
for ( var i = 0; i < myTables.length; i++ )
myTables[i].storyOffset.appliedParagraphStyle = myParaStyle;
}
else
alert('Absatzformat \"' + myParaStyle + '\" nicht vorhanden!');


In der Zeile var myParaStyle = 'Tabellen'; gibst Du den Namen des Absatzformats für die Absätze mit Tabellen an.
...
Martin Fischer
16. Okt 2009, 16:52
AutoFormat in InDesingn CS3
> Mit app.documents[0] läuft das eventScript mit dem event 'afterOpen'.

Aber Achtung:
Ist bereits ein Dokument geöffnet, dann wird mit app.documents[0] das zuletzt aktive (also das, welches vor dem Öffnen des neuen Dokuments aktiv war) adressiert.

Das gerade geöffnete Dokument kann sicherer mit app.documents[-1] adressiert werden. Nur wenige Sekunden später, wenn es angezeigt wird, stimmt diese Behauptung nicht mehr. ;-)
...
Martin Fischer
8. Jul 2008, 17:33
[Javascript] Einstellungen eines Skripts speichern
Hi,

ah, habe gar nicht bemerkt, dass es da eine Einstellung gibt. Ich habe das jetzt aber so gelöst, dass die Einstellungen eine Hierarchiestufe höher gespeichert werden:

Code
// Voreinstellungen laden und speichern  
// 2007-10-05 Wolfgang Reszel
//
// - Am Anfang eines Skripts muss initPreferences() aufgerufen werden
// - Danach können mit Preferences.xxx = yyy, Preferences.yyy = zzz ...
// die Standardeinstellungen festgelegt werden
// - Es folgt readPreferences(), welches die Einstellungsdatei ausliest
// und das Object Preferences entsprechend ändert
// - Es können nun Preferences-Objekte verändert und auch neue angelegt werden
// - Mit writePreferences() wir das komplette Preferences-Objekt in die
// Einstellungsdatei geschrieben
//
// Die Einstellungsdatei befindet sich eine Hierarchiestufe höher als das
// Skript und dort im Preferences-Ordner. Hier ein Beispiel:
// Skript: ~/Library/Preferences/Adobe InDesign/Version 5.0/Scripts/Scripts Panel/Skript.jsx
// Einstellungsdatei: ~/Library/Preferences/Adobe InDesign/Version 5.0/Scripts/Preferences/Skript.preferences

function initPreferences() {
scriptFile = File($.fileName);
scriptName = scriptFile.name.match(/^.*\./g).toString();
preferencesFile = File(scriptFile.parent.path.toString() + "/Preferences/" + scriptName + "preferences");
preferencesFile.encoding = "UTF-8";
Preferences = new Object();
}

function readPreferences() {
if (preferencesFile.open("r")) {
try {
var evaluated = eval(preferencesFile.read());
if (evaluated) Preferences = evaluated;
} catch (e) {}
}
preferencesFile.close();
}

function writePreferences( ) {
if (!preferencesFile.parent.exists) {preferencesFile.parent.create();}
if (preferencesFile.open("w")) {
preferencesFile.writeln(Preferences.toSource());
}
preferencesFile.close();
}

...
Wolfgang Reszel
5. Okt 2007, 17:28
Tabellenbreite proportional skalieren
Hallo Gerald,

aus aktuellem Anlaß (weil ich's grad selbst so brauche), habe ich in Deinem Skript eine kleine Modifikation gemacht:

Wenn die Tabelle in einem Textrahmen platziert ist, wird im Dialogfeld die Breite des Textrahmens als Ziel für die Gesamtbreite der Tabelle vorgeschlagen.

Andernfalls (z.B. wenn die Tabelle in einer Tabellenzelle platziert ist) wird weiterhin, wie in Deinem Skript, die aktuelle Tabellenbreite eingeblendet.

Code
bGoOn = true; 
aTable = app.selection[0];
if (aTable.constructor.name != "Table") {
aTable = aTable.parent;
if (aTable.constructor.name != "Table") {
aTable = aTable.parent;
if (aTable.constructor.name != "Table") {
alert("Es muss ein Text in einer Zelle markiert sein");
bGoOn = false;
}
}
}
if (bGoOn) {
nc = aTable.columns.length;
tWidth = 0.0;
for (n=0; n < nc; n++) {
tWidth += aTable.columns[n].width;
}
// die Tabelle befindet sich in einem Textrahmen
if (aTable.parent.constructor.name == "TextFrame") {
tfBounds = aTable.parent.geometricBounds;
// vorgeschlagener Wert für die Gesamtbreite der Tabelle = Breite des Textrahmens
myValue = tfBounds[3] - tfBounds[1];
}
else {
// vorgeschlagener Wert für die Gesamtbreite der Tabelle = aktuelle Tabellenbreite
myValue = tWidth;
}
var myDialog = app.dialogs.add({name:"Tabellenbreite"});
with(myDialog.dialogColumns.add()){
var nuWidthField = measurementEditboxes.add({editValue:(2.83465 * myValue), editUnits:MeasurementUnits.millimeters, smallNudge:0.5});
}

var myResult = myDialog.show();
if(myResult == true){
var nuWidth = nuWidthField.editValue * 0.35278;
myDialog.destroy();
scaleClm = nuWidth / tWidth;
for (n=0; n < nc; n++) {
aTable.columns[n].width = scaleClm * aTable.columns[n].width;
}
}
else{
myDialog.destroy();
}
}

...
Martin Fischer
17. Sep 2007, 09:25
frage an die scriptgelehrten
> Deutschsprachige Literatur zu diesem Thema ist m.W. derzeit noch nicht verfügbar.

Nun liegt die deutsche Übersetzung von Peter Kahrels "Scripting InDesign with JavaScript" als TecFeed bei O’Reilly zum Download (als PDF-Datei) vor:

InDesign mit JavaScript automatisieren
...
Martin Fischer
15. Aug 2007, 10:21
Neuer Lieblings-Shortcut
Ich habe ein neues Lieblings-Skript auf F2 liegen:

Code
if (app.layoutWindows[0].transformReferencePoint == AnchorPoint.CENTER_ANCHOR) { 
app.layoutWindows[0].transformReferencePoint = AnchorPoint.TOP_LEFT_ANCHOR;
} else {
app.layoutWindows[0].transformReferencePoint = AnchorPoint.CENTER_ANCHOR;
}


Wenn der Bezugspunkt nicht in der Mitte liegt, wird er in die Mitte gesetzt. Wenn er doch in der Mitte liegt, wird er auf links oben gesetzt.
Es schaltet also letztlich zwischen oben links und zentriert hin und her.

Nur getestet gegen CS3.

Share and Enjoy ;)
...
Gerald Singelmann
2. Aug 2007, 14:17
Datumsfunktion in Indesign
Hier noch ein kleines Skript, welches das aktuelle Datum just an der Einfügestelle einfügt.

Code
// insertDate.jsx 

if (app.selection.length == 0 || app.selection[0].constructor.name != "InsertionPoint")
exit();

app.selection[0].contents = catchDate();

function catchDate()
{
var d = new Date();
var myMonth = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
return d.getDate() + ". " + myMonth[d.getMonth()] + " " + (d.getYear()*1 +1900);
}


Das Skript fügt das aktuelle Datum dann ein, wenn der Cursor im Text blinkt, ohne daß etwas markiert ist.
...
Martin Fischer
19. Jul 2007, 08:23
Datumsfunktion in Indesign
Hallo,

Hier noch ein Skript von Dave Saunders aus dem Adobe-Forum. Aber ich glaube da gibt es noch ein anderes welches mir aber jetzt nicht mehr einfällt. Beim diesem Skript hier wird ein Zeichenformat namens »CurrentDate« vorausgesetzt. Beim Ausführen des Skripts wird bei allen Instanzen, die mit diesem ZF formatiert sind, das aktuelle Datum eingefügt. (Siehe erste Zeilen Auskommentierung im Skript)

Code
//DESCRIPTION: Update Date in Active Document  

/*
Updates all instances of current date in a document to reflect the
actual date when the script is run. Depends on character style named
"CurrentDate" -- does nothing if document lacks said style.
*/

if (app.documents.length == 0) { exit() }
myDoc = app.activeDocument; //Global
var myStyle = myDoc.characterStyles.item("CurrentDate");
if (myStyle == null) { exit () }

// If we get here, we have work to do
var myDate = getDateString();

// Use Find/Change across document to update date:
app.findPreferences = app.changePreferences = null;
myDoc.search("", false, false, myDate, {appliedCharacterStyle:myStyle});

function getDateString() {
var today = new Date();
var myDateString = today.toLocaleDateString();
myParts = myDateString.split(" 0");
if (myParts.length != 1) {
myDateString = myParts[0] + " " + myParts[1];
}
return myDateString.slice(0,-5) + "," + myDateString.slice(-5);
}


Hier noch ein weiterer Link dazu:
http://jsid.blogspot.com/...ork-interfering.html

InDesign Guru Branislav Milic hat im InDesign-Secrets-Blog folgende interessante Idee:

Zitat To insert the date you can also do this:
1. Create a Word file and choose Insert > Date & Time > choose a style and then check the Update automatically box.
2. Save the Word file
3. Import the Word file in InDesign but keep the link with the external Word file alive (in ID’s Preferences)
4. If you want to update the date, just open the Word file and save it, the automatic date is updated.
5. ID will react “Modified Link”. Just update it.
6. The same Word file can be then used in many other ID files as THE external link which provides a date updated (almost) live.


Und hier gibt es die Datum-Skripts von Dave Saunders:
http://pdsassoc.com/...oads/DateScripts.zip
http://www.pdsassoc.com/...=downloads/index.php

Gruß,
Sacha
...
Sacha Heck
18. Jul 2007, 23:58
TextCleanup.jsx, einfaches suchen und ersetzen
Hallo liebe Foren Mitglieder,

ich versuche gerade unseren Workflow etwas zu vereinfachen (Mehrere Such- und Ersetzenanfragen wie Doppelte Leerzeichen, Leerzeichen vor Komma u.ä.). Bin dabei auf das Script TextCleanup.js gestoßen. Habe jetzt aus dem Forum erfahren, dass es ein erweitertes Script TextCleanup.jsx gibt, dass mit Adobe Indesign CS2 ausgeliefert wird.

Ich habe CS1... was kann ich jetzt hier verwenden

Für das Script TextCleanup.js brauche ich eine Konfig-Datei. Wie kann ich den Suchen/Ersetzen Dialog exportieren und in die Konfig-Datei kopieren? Gibt es dazu ein Tool
Habe dazu leider im Forum nichts gefunden. Gibt es dazu Beispiele?

Gruß
MM
...
meistroM
18. Jul 2007, 11:39
GREP lernen
Vielen Dank, das war ein weiterer guter Tip.

Der Autor des Skriptes weiß um seinen Bug, und will ihn demnächst beheben.

Er gibt aber einen Workaround an, der meiner Meinung nach funktioniert. Er sagt, dass man die Preferences auf "Nothing" stellen kann, aber nicht die Options. Wenn man die entsprechenden Zeilen auskommentiert funktioniert das Suchen & Tauschen nach dem Skript richtig. Wenn man das Skript als Binärdatei exportiert stimmen auch die Umlaute in den Dialogen.

Der von mir daraufhin geänderte Skriptteil sieht folgendermaßen aus:
Code
function myFindText(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions){ 
//Reset the find/change preferences before each search.
app.changeTextPreferences = NothingEnum.nothing;
app.findTextPreferences = NothingEnum.nothing;
// app.findChangeTextOptions = NothingEnum.nothing;
var myString = "app.findTextPreferences.properties = "+ myFindPreferences + ";";
myString += "app.changeTextPreferences.properties = " + myChangePreferences + ";";
// myString += "app.findChangeTextOptions.properties = " + myFindChangeOptions + ";";
app.doScript(myString, ScriptLanguage.javascript);
myFoundItems = myObject.changeText();
//Reset the find/change preferences after each search.
app.changeTextPreferences = NothingEnum.nothing;
app.findTextPreferences = NothingEnum.nothing;
// app.findChangeTextOptions = NothingEnum.nothing;
}
function myFindGrep(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions){
//Reset the find/change grep preferences before each search.
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences = NothingEnum.nothing;
// app.findChangeGrepOptions = NothingEnum.nothing;
var myString = "app.findGrepPreferences.properties = "+ myFindPreferences + ";";
myString += "app.changeGrepPreferences.properties = " + myChangePreferences + ";";
// myString += "app.findChangeGrepOptions.properties = " + myFindChangeOptions + ";";
app.doScript(myString, ScriptLanguage.javascript);
var myFoundItems = myObject.changeGrep();
//Reset the find/change grep preferences after each search.
app.changeGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences = NothingEnum.nothing;
// app.findChangeGrepOptions = NothingEnum.nothing;
}
function myFindGlyph(myObject, myFindPreferences, myChangePreferences, myFindChangeOptions){
//Reset the find/change glyph preferences before each search.
app.changeGlyphPreferences = NothingEnum.nothing;
app.findGlyphPreferences = NothingEnum.nothing;
// app.findChangeGlyphOptions = NothingEnum.nothing;
var myString = "app.findGlyphPreferences.properties = "+ myFindPreferences + ";";
myString += "app.changeGlyphPreferences.properties = " + myChangePreferences + ";";
// myString += "app.findChangeGlyphOptions.properties = " + myFindChangeOptions + ";";
app.doScript(myString, ScriptLanguage.javascript);
var myFoundItems = myObject.changeGlyph();
//Reset the find/change glyph preferences after each search.
app.changeGlyphPreferences = NothingEnum.nothing;
app.findGlyphPreferences = NothingEnum.nothing;
// app.findChangeGlyphOptions = NothingEnum.nothing;
}


Ob damit aber alles funktioniert kann ich mit meinen Skriptkenntnissen nicht beurteilen.
...
dschmutzi
17. Jul 2007, 12:37
Zeichenzähler mit Rücktaste
Hi,

eigentlich brauchst du das was du hast nur ergänzen mit dem weiteren Event, das wars:

Code
<textarea rows="3" name="Titel" cols="103"   
style="font-family: Times New Roman; font-size: 12pt; font-weight: bold" onkeyup="ZeichenZaehlen(200,'Titel','Zeichen1')" onkeydown="ZeichenZaehlen(200,'Titel','Zeichen1')">


Gruß Sven
...
Intermedia
16. Apr 2007, 20:53
Kompassnadel mit javascript?
hier ist noch schnell ein Beispiel für Variante 1.

http://vsrv.de/...pass/kompassmap.html


Grüße Oesi
Ich weiß, dass ich nichts weiß... (Sokrates)...
oesi50
19. Mär 2005, 16:49