Quantcast
Channel: Adobe InDesign Skriptwerkstatt - HilfDirSelbst.ch
Viewing all 8700 articles
Browse latest View live

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Das habe ich bereits an allen möglichen Stellen gemacht.
Ansprechen kann man die anderen (oberen) Ebenen immer und alle möglichen Informationen abrufen/ausgeben.
Nur bei .CurrentVisibility geht es schief.

...
... Adobe InDesign Skriptwerkstatt 8. Dez 2017, 09:53 (Wortsalat)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Hallo zusammen,
mit InDesign-Scripting habe ich mich schon lange nicht mehr beschäftigt. Und die VBS-Syntax beherrsche ich auch nicht.

Wenn ich allerdings von der Javascript-Syntax in Illustrator ausgehe, dann sollte doch eine Vorgehensweise in der folgenden Art zielführend sein:

stelle eine definierte Ausgangslage her
Prüfe ob Layer DE existiert
schalte Layer DE sichtbar
Prüfe ob Layer EN existiert
schalte Layer EN sichtbar

wähle den Layer der sichtbar bleiben soll
schalte den Layer (nochmals) sichtbar
schalte den anderen Layer unsichtbar

Der nachfolgende [JS] Code ist zwar für Illustrator aber vielleicht könnt ihr den selbst portieren.
Code
var aDoc = app.activeDocument; 
// prüfe ob Layer mit Namen DE existiert
try {
var layDE = aDoc.layers["DE"];
layDE.visible = true;
//active
}
catch (e) {
var layDE = aDoc.layers.add();
layDE.name = "DE";
}
// prüfe ob Layer mit Namen EN existiert
try {
var layEN = aDoc.layers["EN"];
layEN.visible = true;
//active
}
catch (e) {
var layEN = aDoc.layers.add();
layEN.name = "EN";
}

var x = prompt ("Ebene sichtbar schalten: (DE/EN)", "DE", "Ebenentoggle");

if (x && x == "DE") {
// set visibility Deutsch
layDE.visible = true;
layEN.visible = !layDE.visible;
} else {
if (x && x == "EN") {
// oder set visibility Englisch
layEN.visible = true;
layDE.visible = !layEN.visible;
} else {
alert ("kein gültiger Ebenenname");
}
}


Das ist nur ein sehr allgemein gehaltener Code. Er sollte aber zeigen, wie es auf jeden Fall funktionieren muss – unabhängig von der Scriptsprache oder Programm. Das man Teile des Codes weglassen, praktischer programmieren oder auch verfeinern kann ist selbstredend.

viele Grüße
pixxxelschubser




Was wir wissen, ist ein Tropfen; was wir nicht wissen, ein Ozean.

Isaac Newton


... Adobe InDesign Skriptwerkstatt 8. Dez 2017, 10:52 (pixxxelschubser)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Hallo!

Auch nur JS, aber man sollte das adaptieren können. Das Problem ist, dass ein Objekt, dass in einer Variable liegt, nach dem Ändern einer Ebene nicht mehr vorhanden ist:

Code
var curDoc = app.activeDocument; 
var allLinks = curDoc.links;
var layernames = ["DE", "EN"];

for (var i = allLinks.length-1; i >= 0; i--) {
var curItem = allLinks[i].parent;
if (curItem.constructor.name == "ImportedPage") {
for (var k = 0; k < layernames.length; k++) {
var curLayer = curItem.graphicLayerOptions.graphicLayers.item(layernames[k]);
if (curLayer.isValid) {
curLayer.currentVisibility = !curLayer.currentVisibility;
}
}
}
}


Wenn ich beim zweiten Durchlauf "curItem" prüfe, gibt es das nicht mehr. Frage ich das Objekt jedes Mal erneut ab, geht es:

Code
var curDoc = app.activeDocument; 
var allLinks = curDoc.links;
var layernames = ["DE", "EN"];

for (var i = allLinks.length-1; i >= 0; i--) {
if (allLinks[i].parent.constructor.name == "ImportedPage") {
for (var k = 0; k < layernames.length; k++) {
var curLayer = allLinks[i].parent.graphicLayerOptions.graphicLayers.item(layernames[k]);
if (curLayer.isValid) {
curLayer.currentVisibility = !curLayer.currentVisibility;
}
}
}
}


Gruß Kai Rübsamen
_______________________
... Adobe InDesign Skriptwerkstatt 8. Dez 2017, 12:14 (Kai Rübsamen)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Antwort auf: … Das Problem ist, dass ein Objekt, dass in einer Variable liegt, nach dem Ändern einer Ebene nicht mehr vorhanden ist…

Ah, das macht Sinn ;-)
…grrr, wer soll denn auf sowas kommen???

@Marcel, probier dann mal sowas
Code
		'------------- Toggle Ebenen DE und EN ---------------------   
if (Ebene_DE = true) AND (Ebene_EN = true) then
ebenen.Item("DE").CurrentVisibility = Not(ebenen.Item("DE").CurrentVisibility)
Set Ebenen = Datei.graphicLayerOptions.graphicLayers
ebenen.Item("EN").CurrentVisibility = Not(ebenen.Item("EN").CurrentVisibility)
end if

Also vor dem zweiten "Toggeln" (nur) das "Ebenen"-Objekt neu zuweisen.
... Adobe InDesign Skriptwerkstatt 8. Dez 2017, 13:20 (Henry)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Ich habe jetzt das Problem gefunden.
Ein Eintrag in einem anderen Forum hat mich auf die Spur gebracht.

Bei Indesign ist es so, das sich die ID einer eingebundenen Datei nach dem Ein-/Ausblenden einer Ebene ändert.
Die Datei ist danach zwar noch vorhanden, wegen der neuen ID aber plötzlich unbekannt.

Wie ich sehe, hat Kai das Problem auch schon erkannt.
... Adobe InDesign Skriptwerkstatt 8. Dez 2017, 13:23 (Wortsalat)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Hallo Wortsalat,

wir hatten das Problem mit der sich ändernden ID auch schon hier diskutiert.
Allerdings im Hinblick auf platzierte AI-Dateien, die nach dem Platzieren geändert und dann upgedatet wurden. Ist ein paar Jahre her, denke ich…
*****
Mit herzlichem Gruß,
Uwe Laubender ... Adobe InDesign Skriptwerkstatt 8. Dez 2017, 14:15 (Uwe Laubender)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Hallo Uwe,

auf eine sich ändernde ID soll man auch mal kommen.
Da rechnet man ja eigentlich nicht mit. Wobei InDesign ja immer wieder für Überraschungen und Eigenheiten gut ist.

@Kai Rübsamen
Dein Script läuft so wie ich es mir gedacht habe. Danke
Ich sollte mich mehr mit JavaScript befassen. VB ist offensichtlich nicht so weit verbreitet und vielleicht auch veraltet". Scheinbar bietet JS auch mehr Möglichkeiten.

@Alle
Danke für die vielen Rückmeldungen.

Grüße
Marcel
... Adobe InDesign Skriptwerkstatt 8. Dez 2017, 14:23 (Wortsalat)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Hallo Uwe,

sich ändernde IDs sind das eine, eine veränderte Reihenfolge von Elementen in einer Collection sind ein weiteres Problem.

Deshalb macht es Sinn, bei identischer ID immer über die ID, bei eindeutigem Namen über den Namen zuzugreifen.

Für dieses Beispiel vielleicht so:

Code
main(); 

/*void*/function main()
{
try
{
/*Document*/var doc = app.activeDocument, /*Pages*/pages = doc.pages.everyItem().getElements(),
/*Graphics*/graphics = null,
/*Int*/l = pages.length, /*Int*/li = -1;
for (var i = 0; i < l; i++)
{
graphics = pages[i].allGraphics;
ll = graphics.length;
for (var ii = 0; ii < ll; ii++)
{
if ((app.activeDocument.layers.itemByName("DE").isValid) || (app.activeDocument.layers.itemByName("EN").isValid))
{
app.activeDocument.layers.itemByName("DE").visible = !(app.activeDocument.layers.itemByName("DE").visible);
app.activeDocument.layers.itemByName("EN").visible = !(app.activeDocument.layers.itemByName("EN").visible);
}
}
}
}
catch (error)
{
alert("Fehlermeldung: " + error.message + "\nin Datei: " + error.fileName + "\nin Zeile: " + error.line );
}
}


Wobei natürlich noch einige mögliche Fehlerbedingungen herauszuprüfen sind.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler jetzt mit Vollwaschgang
Aktuelles
XING ... Adobe InDesign Skriptwerkstatt 8. Dez 2017, 14:41 (WernerPerplies)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Zitat … VB ist offensichtlich nicht so weit verbreitet und vielleicht auch veraltet". Scheinbar bietet JS auch mehr Möglichkeiten …


Nein. VBS ist nicht veraltet. Genausowenig wie Applescript. Und diese beiden plattformspezifischen Sprachen bieten genaugenommen sogar mehr Möglichkeiten als Javascript (genauer: Adobe Extendscript).

Der große Vorteil von Javascript ist einfach der: Diese Sprache ist plattformübergreifend und funktioniert im Großen und Ganzen (mit klitzekleinen Ausnahmen) sowohl unter Windows und MacOS

viele Grüße
pixxxelschubser




Was wir wissen, ist ein Tropfen; was wir nicht wissen, ein Ozean.

Isaac Newton


... Adobe InDesign Skriptwerkstatt 8. Dez 2017, 14:51 (pixxxelschubser)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Zitat Der große Vorteil von Javascript ist einfach der: Diese Sprache ist plattformübergreifend und funktioniert im Großen und Ganzen (mit klitzekleinen Ausnahmen) sowohl unter Windows und MacOS

Und nicht zu vergessen, für praktisch jedes Anwendungsproblem gibt es irgendwo eine Library.
Deshalb entwickle ich ich heute fast ausschließlich mit JavaScript.
Und es ist zusatzlich auch noch die Skriptsprache für Browseranwendungen. -> Nodes, Electron u. ä.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler jetzt mit Vollwaschgang
Aktuelles
XING ... Adobe InDesign Skriptwerkstatt 8. Dez 2017, 15:12 (WernerPerplies)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
:-)
Ok, offensichtlich fand niemand meinen Code interessant genug um ihn auszuprobieren, denn die Umschaltung funktioniert natürlich nur für das Dokument.

Wortsalat möchte hingegen die Ebenen im Dokument ausdrücklich nicht umschalten, denn die englische Ebene ist in seinem Beispieldokument leer.

Ich habe deshalb diesen Teil, im jetzt hoffentlich richtig funktionierenden Skript, auskommentiert.

Es ist übrigens nicht so, dass sich die ID der importierten Seite ändert, sondern es wird beim Umschalten der Sichtbarkeit ein komplett neues Objekt "ImportedPage" erzeugt.

Damit kann man das Objekt nicht über den Namen oder ein eingefügtes Label wiederfinden.

Der Container (Parent), im Beispiel ein Rectangle, bleibt hingegen erhalten und wird im folgenden Skript benutzt.

Code
/*Any*/ Array.prototype.parentsOfImportedPages=function() 
{
/*Int*/l = this.length, /*Array*/parents = new Array(this.length), /*Int*/c = -1;
for (var i = 0; i < l; i++)
{
if (!("parent" in this[i]))
continue;
if (("importedPages" in this[i].parent) && (this[i].parent.importedPages.length > 0))
parents[++c] = this[i].parent;
}
parents.length= ++c;
return parents;
}


main();

/*void*/function main()
{
try
{
/*Document*/var doc = app.activeDocument, /*Graphics*/parentsOfImportedPages = doc.allGraphics.parentsOfImportedPages(), /*Int*/l = parentsOfImportedPages.length,
/*Graphic*/parentsOfImportedPage = null, /*ImportedPage*/ importedPage = null, /*Int*/ll = -1;
/*
if ((doc.layers.itemByName("DE").isValid) || (doc.layers.itemByName("EN").isValid))
{
doc.layers.itemByName("DE").visible = !(doc.layers.itemByName("DE").visible);
doc.layers.itemByName("EN").visible = !(doc.layers.itemByName("EN").visible);
}
*/
for (var i = 0; i < l; i++)
{
parentsOfImportedPage = parentsOfImportedPages[i];
ll = parentsOfImportedPage.importedPages.length;
for (var ii = 0; ii < ll; ii++)
{
importedPage = parentsOfImportedPage.importedPages[ii];
if (("graphicLayerOptions" in importedPage) && ("graphicLayers" in importedPage.graphicLayerOptions))
{
if ((importedPage.graphicLayerOptions.graphicLayers.itemByName("DE").isValid) || (importedPage.graphicLayerOptions.graphicLayers.itemByName("EN").isValid))
{
importedPage.graphicLayerOptions.graphicLayers.itemByName("DE").currentVisibility = !(importedPage.graphicLayerOptions.graphicLayers.itemByName("DE").currentVisibility);
importedPage = parentsOfImportedPage.importedPages[ii];
importedPage.graphicLayerOptions.graphicLayers.itemByName("EN").currentVisibility = !(importedPage.graphicLayerOptions.graphicLayers.itemByName("EN").currentVisibility);
}
}
}
}
}
catch (error)
{
alert("Fehlermeldung: " + error.message + "\nin Datei: " + error.fileName + "\nin Zeile: " + error.line );
}
}


Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler jetzt mit Vollwaschgang
Aktuelles
XING ... Adobe InDesign Skriptwerkstatt 9. Dez 2017, 08:41 (WernerPerplies)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Hallo Werner,
ich möchte noch vor einer "bösen Falle" warnen:

Ein bestimmter Name einer Ebene mag in InDesign nur ein einziges mal vergebbar sein, in beispielsweise PhotoShop oder Illustrator ist das nicht der Fall. Da können beliebige Ebenen den gleichen Namen tragen.
*****
Mit herzlichem Gruß,
Uwe Laubender ... Adobe InDesign Skriptwerkstatt 10. Dez 2017, 18:33 (Uwe Laubender)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Moin Uwe,

Zitat Ein bestimmter Name einer Ebene mag in InDesign nur ein einziges mal vergebbar sein, in beispielsweise PhotoShop oder Illustrator ist das nicht der Fall. Da können beliebige Ebenen den gleichen Namen tragen.


Und ich halte InDesigns Design dieses Features für einen Fehler.

Aber richtig schlimm es natürlich, dass sich das Design innerhalb einer Produktfamilie unterscheidet.

Natürlich möchte ich mehrere Ebenen gleich benennen können, das zeigt gerade die Verwendung von Länderkennzeichen. Es könnte durchaus gewünscht sein, dass man mehrere Ebenen für ein Land verwenden möchte.

Deshalb wäre es vermutlich sinnvoller, das Skript so zu ändern, dass abgefragt würde, ob ein LKZ enthalten ist.

Generell würde ich allerdings in einem professionellen Skript die Ebenen als Parameter in zwei Arrays ([visible],[invisible]) übergeben und keinesfalls irgendwelche Abfragen hart codieren.

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler jetzt mit Vollwaschgang
Aktuelles
XING ... Adobe InDesign Skriptwerkstatt 11. Dez 2017, 07:52 (WernerPerplies)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Moin zusammen,

@Herr Perplies
Antwort auf: ...
Ok, offensichtlich fand niemand meinen Code interessant genug um ihn auszuprobieren, denn die Umschaltung funktioniert natürlich nur für das Dokument.


Ich habe es getestet und es ist mir auch aufgefallen ;-)

@Kai Rübsamen
Ich habe versucht, das Script in VBS zu schreiben.
Komme aber mit "parent" nicht klar. Dafür programmiere ich dann doch zu selten.

Dafür habe ich jetzt noch eine andere Variante in VBS geschrieben. Vielleicht etwas umständlich aber es funktioniert.
In diesem Script lese ich die IDs der eingebundenen InDesign Dateien in ein Array ein (separate Funktion).
Das Ansprechen der Dateien erfolgt über die IDs.
Nach jedem Umschalten einer Ebene wird das Array mit den IDs aktualisiert.


Code
'*********************************************************** 
'11.12.2017
'Ebenen bei eingebundenen InDesign-Dateien umschalten (Toggeln)
'HINWEIS: Beim Umschalten einer Ebene ändert sich die ID!
'***********************************************************

Set myInDesign = CreateObject("InDesign.Application.cs6")
Set myDocument = myInDesign.ActiveDocument
LinksID = F_Array_DateiID

For x = 1 to UBOUND(LinksID)

LinksID = F_Array_DateiID
Set Datei = MyDocument.allGraphics.ItemById(LinksID(x))
Set Ebenen = Datei.graphicLayerOptions.graphicLayers
Ebenen.item("DE").CurrentVisibility = Not(Ebenen.item("DE").CurrentVisibility)

LinksID = F_Array_DateiID
Set Datei = myDocument.allGraphics.ItemById(LinksID(x))
Set Ebenen = Datei.graphicLayerOptions.graphicLayers
Ebenen.item("EN").CurrentVisibility = Not(Ebenen.item("EN").CurrentVisibility)

Next


'******************************************************************
'ID der eingebundenen Dateien (Typ: InDesign) in ein Array schreiben
'Aufruf: F_Array_DateiID()
'==================================================================

Public Function F_Array_DateiID()

Set myInDesign = CreateObject("InDesign.Application.CS6")
Set myDocument = myInDesign.ActiveDocument
REDIM e(1

For n = 1 to myDocument.allGraphics.count
Set Datei = myDocument.allGraphics.Item(n)
If Datei.ImageTypeName = "InDesign" then
e(UBOUND(e)) = Datei.ID
REDIM PRESERVE e(UBOUND(e)+1)
End if
Next

REDIM PRESERVE e(UBOUND(e)-1)
F_Array_DateiID = e

End Function

... Adobe InDesign Skriptwerkstatt 11. Dez 2017, 11:25 (Wortsalat)

Zustand der Sichtbarkeit bei Ebenen hin und her toggeln

$
0
0
Mein letztes Script führt zu einem Fehler, wenn in einer eingebundenen Datei die Ebene "DE" oder "EN" nicht vorhanden ist.
Hier noch eine Erweiterung, in der geprüft wird, ob die Ebenen vorhanden sind.



Code
'****************************************************************************************** 
'11.12.2017
'Ebenen bei eingebundenen InDesign-Dateien umschalten (Toggeln)
'HINWEIS: Beim Umschalten einer Ebene ändert sich die ID!
'******************************************************************************************

Set myInDesign = CreateObject("InDesign.Application.cs6")
Set myDocument = myInDesign.ActiveDocument
LinksID = F_Array_DateiID

For x = 1 to UBOUND(LinksID)

LinksID = F_Array_DateiID
Set Datei = myDocument.allGraphics.ItemById(LinksID(x))
Set Ebenen = Datei.graphicLayerOptions.graphicLayers
If F_EbeneExist(LinksID(x), "DE") = True then
Ebenen.item("DE").CurrentVisibility = Not(Ebenen.item("DE").CurrentVisibility)
end if

LinksID = F_Array_DateiID
Set Datei = myDocument.allGraphics.ItemById(LinksID(x))
Set Ebenen = Datei.graphicLayerOptions.graphicLayers
If F_EbeneExist(LinksID(x), "EN") = True then
Ebenen.item("EN").CurrentVisibility = Not(Ebenen.item("EN").CurrentVisibility)
End if
Next



'******************************************************************************************
'ID der eingebundenen Dateien (Typ InDesign) in ein Array schreiben
'Aufruf: F_Array_DateiID()
'==========================================================================================

Public Function F_Array_DateiID()

Set myInDesign = CreateObject("InDesign.Application.CS6")
Set myDocument = myInDesign.ActiveDocument
REDIM e(1)

For n = 1 to myDocument.allGraphics.count 'Alle Grafiken durchlaufen
Set Datei = myDocument.allGraphics.Item(n)
If Datei.ImageTypeName = "InDesign" then 'Prüfen, ob Typ InDesign
e(UBOUND(e)) = Datei.ID 'ID in Array schreiben
REDIM PRESERVE e(UBOUND(e)+1)
End if
Next

REDIM PRESERVE e(UBOUND(e)-1) 'Array, letzte Stelle löschen
F_Array_DateiID = e

End Function



'******************************************************************************************
'Prüfen, ob eine Ebene existiert
'Aufruf: F_EbeneExist(LinkID, Ebene)
'Parameter: LinkID = ID der eingebundenen Datei, Ebene = Name der gesuchten Ebene
'==========================================================================================

Public Function F_EbeneExist(LinkID, Ebene)

F_EbeneExist = False

Set myInDesign = CreateObject("InDesign.Application.CS6")
Set myDocument = myInDesign.ActiveDocument
Set Datei = myDocument.allGraphics.ItemById(LinkID)

For x1 = 1 to Datei.graphicLayerOptions.graphicLayers.count
If Datei.graphicLayerOptions.graphicLayers.Item(x1).Name = Ebene then
F_EbeneExist = True
End if
Next
End Function

... Adobe InDesign Skriptwerkstatt 12. Dez 2017, 14:01 (Wortsalat)

Objekt-Literal

$
0
0
Hallo zusammen,
ich „spiele“ gerade ein bisschen mit einem „aus der hohlen Hand“ erzeugtem Objekt-Literal herum.

Beispielcode:
Code
var obj = { 
name1 : "value1",
name2 : "value2",
name3 : "value3"
}

Es ist problemlos möglich, die einzelnen values über ihre keys anzusprechen und auch zu ändern.

Egal ob:
obj['name2'] = "valueNeu";
oder
obj['name'+2] = "valueNeu";
oder
obj.name2 = "valueNeu";

… es gibt genügend Varianten für Aufruf und Neuzuweisung.


Allerdings kann ich keinen einfachen Weg finden, die einzelne keys/namen aufzurufen und zu ändern.

Kann mir hier jemand „unter die Arme greifen“ und mir erklären, wie ich z.B.
obj['name2'] = "value2";
obj['name3'] = "value3";
in
obj['key2'] = "value2";
obj['andererName3'] = "value3";
ändere?

Also im Objekt nur die keys ändere und die Werte beibehalte?

Den einzigen Weg der mir bis jetzt eingefallen ist, empfinde ich eher als einen kruden Workaround --> ein neues Objekt mit neuen keys erstellen und die passenden Werte einfach wieder zuordnen.

Geht das nicht doch direkter?
Vielen Dank im Voraus.

viele Grüße
pixxxelschubser




Was wir wissen, ist ein Tropfen; was wir nicht wissen, ein Ozean.

Isaac Newton


... Adobe InDesign Skriptwerkstatt 13. Dez 2017, 00:02 (pixxxelschubser)

Objekt-Literal

$
0
0
Hallo Hans-Jürgen,

versuch's mal so:

Code
var obj = { 
"name1" : "value1",
"name2" : "value2",
"name3" : "value3"
}

obj['key2'] = obj['name2'];
delete obj['name2'];


Viele Grüße
Martin ... Adobe InDesign Skriptwerkstatt 13. Dez 2017, 06:58 (Martin Fischer)

Objekt-Literal

$
0
0
Eine Alternative unter Einbeziehung der Befehle stringify() und parse() aus der json2.js-library und replace():

Code
#include "JSON-js/json2.js" 

var obj = {
"name1" : "value1",
"name2" : "value2",
"name3" : "value3"
}

obj = JSON.parse(JSON.stringify(obj).replace('"name2":', '"key2":'));


oder auch mit split():

Code
obj = JSON.parse(JSON.stringify(obj).split('"name2":').join('"key2":')); 




Ohne die json2.js-Bibliothek (vereinfacht skizziert):

Code
var str = obj.toSource(); 
str = str.replace("name2:", "key2:");
obj = eval (str);


bzw.

Code
var str = obj.toSource(); 
str = str.split("name2:").join("key2:");
obj = eval (str);


Viele Grüße
Martin ... Adobe InDesign Skriptwerkstatt 13. Dez 2017, 07:15 (Martin Fischer)

Objekt-Literal

$
0
0
Hallo pixxxelschubser,

Auf die Schnelle fällt mir nur dies ein (dürfte ziemlich langsam sein):
Code
// DESCRIPTION rename object properity 
// Dateiname: wpsObjectPropertyRename.jsx
// © 2017 by Werner Perplies, EDV-Anwendungsberatung,
// http://www.weepee.de, email: werner.perplies@weepee.de
// [modified]
// created: Wed Dec 13 2017 08:01:30 GMT+0100
// [lastFileProps:({time:"1487325362000", size:3813, checkSum:"262c6114"})]
// [end of header]
// #include "C:/Workspaces/wpsObjectPropertyRename.jsx
Object.prototype.propertyRename = function(oldName,newName)
{
var /*Any*/value = this[oldName];

delete this[oldName];
this[newName] = value;
}

// start only for testing
main();

/*Void*/function main()
{
var /*Void*/o = {name1: "name1", name2:"name2"};

o.propertyRename("name1", "name3");

alert(o.name3);
}
// end only for testing


Ach ja, wofür braucht man so etwas?

Einen schönen Tag wünscht

Werner Perplies
Auftragsprogrammierung und Skripte für Adobe InDesign
neu: WpsProjectHandler jetzt mit Vollwaschgang
Aktuelles
XING ... Adobe InDesign Skriptwerkstatt 13. Dez 2017, 08:09 (WernerPerplies)

Objekt-Literal

$
0
0
Hallo Martin und Werner,
ich danke euch sehr für eure Antworten. Das ist schon viel mehr als ich überhaupt erwartet hatte. Ich werde eure vorgeschlagenen Lösungen garantiert in den nächsten Tagen durchtesten und euch dann noch einmal ein Feedback geben.

Auf den ersten Blick sehen sowohl Martins Vorschlag für die „einfache“ Umbenennung als als Werners prototype-Funktion sehr vielversprechend aus.


Antwort auf: … Ach ja, wofür braucht man so etwas?

Bisher habe ich das nicht gebraucht. Doch irgendwann ist immer das erste Mal. Bin in ein Thema reingerutscht und die (einfachste) Lösung für das dortige Problem (ohne den Code komplett umzuschreiben) schien mir die Änderung der keys in dem bereits vorhandenen Objekt zu sein. Hat dann auch funktioniert. Wie gesagt mit dem etwas kruden Workaround über ein zweites neu anzulegendes Objekt. Bei Interesse findet ihr das Thema hier:
https://forums.adobe.com/thread/2422300

Danke nochmals und bis demnächst

viele Grüße
pixxxelschubser




Was wir wissen, ist ein Tropfen; was wir nicht wissen, ein Ozean.

Isaac Newton


... Adobe InDesign Skriptwerkstatt 13. Dez 2017, 22:39 (pixxxelschubser)
Viewing all 8700 articles
Browse latest View live