Hier die finale funktionsfähige Version. Vielleicht hat jemand Verwendung dafür. Vielen Dank an Gregor Fellenz für die Schubser in die richtige Richtung:)
Vielleicht braucht es mal jemand.
Das Script muss in die InDesign StartUp Scripts kopiert werden.
Nach dem Start von Bridge sollte dann im Menü ein neuer Eintrag AlbumPro erscheinen. Darin kann man die Funktion zum automatischen markieren der Bilder in Bridge aktivieren bzw. deaktivieren.
Beim Platzieren eines Bildes wird dieses dann automatisch mit einem Laben und/oder einem Rating versehen.
Beim Löschen wird das Laben und/oder Rating wieder entfernt.
Da der Eventhandler afterPlace gelegentlich nicht erkannt wird, habe ich beim Speichern & Speichern unter eine Art Refresh Funktion eingbaut die alle Bilder mit Labeln/Rating versieht.
Code #targetengine AlbumPro var varXMLBridge_Label = "Auswählen"; var varXMLBridge_Rating = 5; if (varXMLBridge_Label == "") { varBridge_Label = undefined; varBridge_Label_aktiv = false; } else { varBridge_Label = varXMLBridge_Label; varBridge_Label_aktiv = true; } switch (varXMLBridge_Rating) { case "0": varBridge_Rating = 0; varBridge_Rating_aktiv = true; break; case "1": varBridge_Rating = 1; varBridge_Rating_aktiv = true; break; case "2": varBridge_Rating = 2; varBridge_Rating_aktiv = true; break; case "3": varBridge_Rating = 3; varBridge_Rating_aktiv = true; break; case "4": varBridge_Rating = 4; varBridge_Rating_aktiv = true; break; case "5": varBridge_Rating = 5; varBridge_Rating_aktiv = true; break; default: varBridge_Rating = undefined; varBridge_Rating_aktiv = false; break; } //Haupteintrag zur Navigation hinzufügen var myAlbumProMenu = null; try { myAlbumProMenu = app.menus.item("$ID/Main").submenus.add("AlbumPro", LocationOptions.AFTER, app.menus.item("$ID/Main").submenus.item("$ID/kTablePanelTitle")); } catch (myError){ myAlbumProMenu = app.menus.item("$ID/Main").submenus.item("AlbumPro"); } //Je nachdem, ob das aktive Dokument schon für die Bildmarkierung in Bridge aktiviert wurde oder nicht, //wird ein entsprechender Menüeintrag hinzugefügt. varDocumentLabel = "false"; if (app.documents.length > 0 ) { varDocumentLabel = app.documents[0].extractLabel("AlbumProDocument"); if (varDocumentLabel == "") { varDocumentLabel = "false" } } if (varDocumentLabel != "true") { // Submenüeintrag hinzufügen var myAlbumProMenu_entry = app.scriptMenuActions.add("Bildmarkierung in Bridge aktivieren"); myAlbumProMenu_entry.eventListeners.add("onInvoke", tagDocument); myAlbumProMenu.menuItems.add(myAlbumProMenu_entry); } else { // Submenüeintrag hinzufügen var myAlbumProMenu_entry = app.scriptMenuActions.add("Bildmarkierung in Bridge deaktivieren"); myAlbumProMenu_entry.eventListeners.add("onInvoke", untagDocument); myAlbumProMenu.menuItems.add(myAlbumProMenu_entry); } //~ var myAlbumProMenu_entry = app.scriptMenuActions.add("Bilder tauschen"); //~ myAlbumProMenu_entry.eventListeners.add("onInvoke", tagSwapImages); //~ myAlbumProMenu.menuItems.add(myAlbumProMenu_entry); //~ function tagSwapImages (myEvent) { //~ if (app.documents.length > 0 ) { //~ app.doScript(app.scriptPreferences.scriptsFolder+"/AlbumPro/bin/Swap_Images.jsxbin"); //~ } //~ } //tagDocument wird ausgeführt, wenn im Menü die Funktion "Bildmarkierung in Bridge aktivieren" ausgeführt wird. //Änderung des Menüeintrags auf untagDocument function tagDocument (myEvent) { if (app.documents.length > 0 ) { app.documents[0].insertLabel("AlbumProDocument", "true"); for (var i =0; i < app.documents[0].links.length; i++) { app.documents[0].links[i].addEventListener( "beforeDelete", linkEntfernt); } app.documents[0].addEventListener( "afterPlace", neuerLink); app.documents[0].addEventListener( "beforeSave", BilderMarkieren); app.documents[0].addEventListener( "beforeSaveAs", BilderMarkieren); var myAlbumProMenu_entry = app.scriptMenuActions.add("Bildmarkierung in Bridge deaktivieren"); myAlbumProMenu_entry.eventListeners.add("onInvoke", untagDocument); myAlbumProMenu.menuItems.add(myAlbumProMenu_entry); var myAlbumProMenu_entry = app.scriptMenuActions.item("Bildmarkierung in Bridge aktivieren"); myAlbumProMenu_entry.remove(); } } //untagDocument wird ausgeführt, wenn im Menü die Funktion "Bildmarkierung in Bridge deaktivieren" ausgeführt wird. //Änderung des Menüeintrags auf tagDocument function untagDocument (myEvent) { if (app.documents.length > 0 ) { app.documents[0].insertLabel("AlbumProDocument", "false"); for (var i =0; i < app.documents[0].links.length; i++) { app.documents[0].links[i].removeEventListener( "beforeDelete", linkEntfernt); } app.documents[0].removeEventListener( "afterPlace", neuerLink); app.documents[0].removeEventListener( "beforeSave", BilderMarkieren); app.documents[0].removeEventListener( "beforeSaveAs", BilderMarkieren); var myAlbumProMenu_entry = app.scriptMenuActions.add("Bildmarkierung in Bridge aktivieren"); myAlbumProMenu_entry.eventListeners.add("onInvoke", tagDocument); myAlbumProMenu.menuItems.add(myAlbumProMenu_entry); var myAlbumProMenu_entry = app.scriptMenuActions.item("Bildmarkierung in Bridge deaktivieren"); myAlbumProMenu_entry.remove(); } } //Definieren der EventListener Funktionen //Beim öffnen eines Dokuments wird geprüft, ob dieses für die Bildmarkierung in Bridge aktiviert wurde. //Dies ist der Fall, wenn das Dokument im Label AlbumProDocument den Wert true stehen hat. //Wenn das Dokument aktiviert ist, dann wird jedem Bild der EventListener beforeDelete hinzugefügt. //So wird sichergestellt, dass beim Löschen "alter" Bilder das Flag in Bridge entfernt wird. //Für das Dokument wird der EventListener "afterPlace" gesetzt um neue Bilder in Bridge zu markieren. app.addEventListener("afterOpen", checkDokument); function checkDokument (_event) { if (_event.parent.constructor.name == "Document") { var _dok = _event.parent; if (_dok.extractLabel ("AlbumProDocument") == "true") { for (var i =0; i < _dok.links.length; i++) { _dok.links[i].addEventListener( "beforeDelete", linkEntfernt); } _dok.addEventListener( "afterPlace", neuerLink); } } } //Bei dem Löschen eines Bildes aus InDesign wird die Funktion linkEntfernt über den EventHandler beforeDelete ausgeführt. //Diese Funktion entfernt das Label / Rating des Bildes in Bridge über setBridgeLabel. function linkEntfernt(_event) { setBridgeLabel(false, _event.currentTarget); } //Beim Hinzufügen eines neuen Bildes zum InDesign Dokument wird die Funktion neuerLink über den EventHandler afterPlace ausgeführt. //Diese Funktion setzt das Label / Rating des Bildes in Bridge über setBridgeLabel. //Gleichzeitig wird dem neuen Bild der EventHandler beforeDelete hinzugefügt. function neuerLink(_event) { var _link = _event.parent.graphics[0].itemLink; setBridgeLabel(true, _link); _link.addEventListener( "beforeDelete", linkEntfernt); } //Beim Speichern oder Speichern unter eines Dokuments werden alle Label / Ratings der enthaltenen Bilder neu gesetzt. // Es kommt ab und zu vor, dass ein EventHandler nicht ausgelöst wird. Dies wird mit dem pauschalen taggen beim Speichern behoben. function BilderMarkieren(_event) { var _dok = _event.currentTarget; for (var i =0; i < _dok.links.length; i++) { var _link = _dok.links[i]; setBridgeLabel(true, _link); _link.addEventListener( "beforeDelete", linkEntfernt); } } //********************************************************************* //Hier beginnen die SubFunktionen //********************************************************************* //setBridgeLabel wird von den Funktionen der EventHandler afterPlace und beforeDelete ausgeführt //Es wird zuerst der BridgeTalk Befehl über die Funktion setThumbnails zusammengebaut und dann ausgeführt. function setBridgeLabel(_setzeLabel, _link) { var _fileStr = _link.filePath.toString(); var _target = BridgeTalk.getSpecifier ("bridge"); if (!BridgeTalk.isRunning(_target)) BridgeTalk.launch("bridge"); var _bt = new BridgeTalk; _bt.target = _target; // Hier wird die Funktion als String zusammengebaut und danach direkt aufgerufen. var _script = 'var _thumb = new Thumbnail (File("'+_fileStr+'"));' //Dies ist der Fall, dass ein neuer Link hinzugefügt wurde if (_setzeLabel == true) { if (varBridge_Rating_aktiv == true) { _script += '_thumb.rating = '+varBridge_Rating+';' } if (varBridge_Label_aktiv == true) { _script += '_thumb.label = "'+varBridge_Label+'";' } //Dies ist der Fall, dass ein neuer Link gelöscht wurde } else { if (varBridge_Rating_aktiv == true) { _script += '_thumb.rating = 0;' } if (varBridge_Label_aktiv == true) { _script += '_thumb.label = "";' } } // $.writeln (_script); // Im Body kann entweder Code übergeben werden oder eine Funktion doScript aufgerufen werden. _bt.body = _script; _bt.send(); }