Installation von Indesign-Skripten

wpsInstallScripts2InDesignVersions ist ein einfaches Installationsprogramm zum Installieren von InDesign-Skripten in mehreren unterschiedlichen InDesign-Versionen.
Antworten
wernerperplies
Beiträge: 250
Registriert: 6. Aug 2011, 17:48
Wohnort: 18374 Zingst
Kontaktdaten:

Installation von Indesign-Skripten

Beitrag von wernerperplies » 24. Mär 2018, 13:53

Eigentlich ist die Installation eines Indesign-Skriptes eine einfache Sache. Man kopiert oder extrahiert das Skript in das Skript-Bedienfenster der jeweiligen InDesign-Version.

Hier noch einmal eine ausführliche Beschreibung:

Meine Adobe InDesign JavaScript Skripte installieren

Aufwendiger wird die Geschichte, wenn ein Skript gleich in mehreren Indesign-Versionen installiert werden soll, oder wenn das Skript die Installation von zusätzlichen Dateien erfordert oder in unüblichen Zielordnern zu installieren ist.

Für mein Skript WpsInstallScripts erzeugen Sie lediglich eine JSON-Datei mit Konfigurationsdaten, kopieren einmal alle notwendigen Dateien in das Skript-Bedienfenster einer beliebigen InDesign-Version und starten das InstallationsSkript.

Beispiel einer Konfigurationsdatei:

Die Datei muss parameter.json heißen und im Verzeichnis des Installationsskriptes gespeichert seim.

Code: Alles auswählen

{
 "msg": {
  "ready": "Skriptdatei(en) wurden für\n{0}\ninstalliert",
  "missingTypeInPara": "Typ-Angabe für Zielverzeichnis fehlt!",
  "copyFails": "der Kopiervorgang für die Datei\n{0}\nwar nicht erfolgreich!"
 },
 "type": "userStartUpScript",
 "files": [
  {
   "name": "helloWorld.jsx",
   "folder": {
    "pathType": "rel",
    "folderPath": ""
   },
   "delAfterInstall": false
  },
  {
   "name": "wps.dat",
   "folder": {
    "pathType": "abs",
    "folderPath": "[userData]/Werner Perplies, EDV-Anwendungsberatung/[inddFullName]/testData"
   },
   "delAfterInstall": false
  }
 ]
}
Es ist wichtig, dass Sie eine gültige JSON-Datei erzeugen.
Die Namen der Einträge ("name":) dürfen weder verändert noch weggelassen werden.

Die einzelnen Parameter:

msg:
Definiert drei Meldungstexte, die Sie bei Bedarf inhaltlich an Ihre Anforderungen anpassen können.

type:
Definiert das Ziel des Skriptes, es gibt sechs mögliche Einträge:
  • startUpScript -> Skript wird als Startskript der Anwendung behandelt, - diese Einstellung erfordert besondere Schreibrechte beim Anwender.
  • scriptsFolder -> Skript wird in das Skriptverzeichnis der Anwendung kopiert, - diese Einstellung erfordert besondere Schreibrechte beim Anwender.
  • scriptsPanel -> Skript wird in das Skript-Bedienfenster der Anwendung kopiert, - diese Einstellung erfordert besondere Schreibrechte beim Anwender.
  • userStartUpScript -> Skript wird als Startskript des Benutzers behandelt.
  • userScriptsFolder -> Skript wird in das Skriptverzeichnis des Benutzers kopiert.
  • userScriptsPanel -> Skript wird in das Skript-Bedienfenster des Benutzers kopiert.
files:
Die Dateiliste der zu kopierenden Dateien;
je Datei:
name: Name der Datei
folder:
pathType: "rel" -> relativer pfad, abs -> absoluter Pfad
folderPath: "" -> leer, wenn eines der normalen Skriptverzeichnisse als Ziel definiert ist.
delAfterInstall: -> true, wenn die Quelldatei nach dem Kopiervorgang gelöscht werden soll, sonst false

Zusätzlich können Platzhalter verwendet werden, die bei Bedarf durch ermittelte Werte ersetzt werden:
[userData] -> das Benutzerverzeichnis Ihres Systemes
[inddFullName] -> die angezeigte InDesign-Version, z. B: "Adobe InDesign CC 2017"
[version] -> die interne Versionsnummer -> z. B. "13.0"
[locale] -> die eingestelle Sprache, z. B. -> "de_DE"

Die beigefügte Parameterdatei bedeutet:
Kopie des Skriptes helloWorld.jsx als Start-Skript des Benutzers, die Datei wird nicht gelöscht.
Kopie des Datei wps.dat in das Datenverzeichnis des Benutzers mit erzeugten Unterverzeichnissen , die Quelldatei wird gelöscht.
Das Skript:

Beachten Sie bitte:

Das Skript ist sehr modular aufgebaut und erzeugt das Gesamtskript erst bei der Ausführung. Die benötigten Module werden dabei mit dem Befehl #include "filepath" aufgerufen.

Bitte stellen Sie sicher, dass Sie vor Ausführung des Skriptes die Pfade an Ihre Installation angepasst haben.

Sofern Sie alle Module in das gleiche Verzeichnis kopieren, genügt der Dateiname des Moduls.

Code: Alles auswählen

// DESCRIPTION installs one or more Files from currentFolder to all InDesign versions in defined targetfolders
// Dateiname: WpsInstallScripts.jsx
//  © 2018 by Werner Perplies, EDV-Anwendungsberatung, 
// http://www.weepee.de, email: werner.perplies@weepee.de 
// [modified]
// created: Sat Mar 24 2018 06:40:59 GMT+0100
// next line is a placeholder for last version of wpsIncludes (>= version 4)
// [lastFileProps:({time:"1488208806000", size:14240, checkSum:"14d54b02", scriptVersion:"1.48", scriptDate:"201703201000"})]
// [end of header]

// needs a parameter file in Json format with name parameter.json

#include "C:/Users/WernerPerplies/Source/Workspaces/Singles/WpsBridgeTalkDiagnostics.jsx";
// #include "WpsBridgeTalkDiagnostics.jsx";
#include "C:/Users/WernerPerplies/Source/Workspaces/Singles/Json/classJsonParser.jsx";
// #include "classJsonParser.jsx";
#include "C:/Users/WernerPerplies/Source/Workspaces/Singles/InDesigns/FileHandling/wpsGetScriptPath.jsx";
// #include "wpsGetScriptPath.jsx";
#include "C:/Users/WernerPerplies/Source/Workspaces/Singles/Json/wpsWriteJsonObject.jsx";
// #include "wpsWriteJsonObject.jsx";
#include "C:/Users/WernerPerplies/Source/Workspaces/Singles/Json/wpsReadJsonObject.jsx";
// #include "wpsReadJsonObject.jsx";
#include "C:/Users/WernerPerplies/Source/Workspaces/Singles/PrototypesString/wpsPrototypesFormat.jsx";
// #include "wpsPrototypesFormat.jsx";

// needs no parameters
wpsInstallScripts2InDesignVersions();

/*Void*/function wpsInstallScripts2InDesignVersions()
{
    try
    {
        
        var /*Folder*/scriptFolder = null,
            /*File*/parameterFile = null,
            /*File*/sourceFile = null,
            /*Object*//*Object*/diagObj = new WpsBridgeTalkDiagnostics("indesign"),
            /*Folder*/targetFolder = "",
            /*String*/tempTargetFolder = "",
            /*String*/adobeUserFolder = "[userData]/Adobe/InDesign/Version [version]/[locale]"
                .replace("[userData]", Folder.userData.fullName).replace("[locale]", $.locale), // 
            /*String*/adobeVersionUserFolder = "",
            /*Array*/copiedFiles = [];
            /*Object*/para = null;
        
        // gets scriptPath
        // its a little bit tricky, but it seems working in any situation
        // app.activeScript fails in some situations
        try
        {
            // call a none existing function
            x();
        }
        catch (error)
        {
            scriptFolder = Folder(File(error.fileName).path);
        }
        /*File*/parameterFile = new File(scriptFolder.fullName + "/parameter.json");
        
        // check, if parameter file exists
        
        if (!(parameterFile.exists))
            throw Error("Sorry, can't do anything, missing parameter file!");
            
        while (diagObj.targets.length == 0)
            diagObj = new WpsBridgeTalkDiagnostics("indesign");
        
        // read parameters file to object
        // wpsReadJsonObject(/*String|fFle*/fileName, /*String*/encoding)
        para = wpsReadJsonObject(parameterFile);
        // loop over all Indesigns
        for (/*Int*/var i = 0; i < para.files.length; i++)
        {
            for (/*Int*/var ii = 0; ii < diagObj.targets.length; ii++)
            {
                adobeVersionUserFolder = adobeUserFolder.replace("[version]", diagObj.targets[ii].name.split(".")[0].split("-")[1] + ".0");
                if (para.type == "startUpScript")
                    targetFolder = new Folder(new File(diagObj.targets[ii].path).path + "/Scripts/startup scripts");
                else if (para.type == "scriptsFolder")
                    targetFolder = new Folder(new File(diagObj.targets[ii].path).path + "/Scripts");
                else if (para.type == "scriptsPanel")
                    targetFolder = new Folder(new File(diagObj.targets[ii].path).path + "/Scripts/Scripts Panel");
                else if (para.type == "userStartUpScript")
                    targetFolder = new Folder(adobeVersionUserFolder + "/Scripts/startup scripts"); // indesign-12.064
                else if (para.type == "userScriptsFolder")
                    targetFolder = new Folder(adobeVersionUserFolder + "/Scripts");
                else if (para.type == "userScriptsPanel")
                    targetFolder = new Folder(adobeVersionUserFolder + "/Scripts/Scripts Panel");
                else
                    throw Error(para.msg.missingTypeInPara);
                    
                tempTargetFolder = targetFolder;
                if ("folder" in para.files[i])
                {
                    if (para.files[i].folder.pathType == "rel")
                        tempTargetFolder = targetFolder + "/" + para.files[i].folder.folderPath;
                    else if (para.files[i].folder.pathType == "abs")
                        tempTargetFolder = para.files[i].folder.folderPath.replace("[userData]", Folder.userData.fullName).replace("[inddFullName]", diagObj.targets[ii].displayName);
                }
                tempTargetFolder = new Folder(tempTargetFolder);
                
                if (!(tempTargetFolder.exists))
                    tempTargetFolder.create();
                    
                sourceFile = new File(scriptFolder.fullName + "/" + para.files[i].name);
                if (!(sourceFile.copy(tempTargetFolder.fullName + "/" + para.files[i].name)))
                    throw Error(para.msg.copyFails);
                    
                copiedFiles.push(diagObj.targets[ii].displayName);                
            }
            if (para.files[i].delAfterInstall)
                sourceFile.remove();
        }
        alert(para.msg.ready.format(copiedFiles.join("\n")));
        // 
    }
    catch (error)
    {
        alert(error.message + "\ninLine:" + error.number + "\nof File: " + error.fileName);
    }
    return;
}

Verwendete Module:

WpsBridgeTalkDiagnostics.jsx
wpsProperties.jsx
wpsPrototypes2CamelCase.jsx

wpsReadJsonObject.jsx
wpsPrototypesTrim.jsx
classJsonParser.jsx
wpsReadFile2String.jsx
wpsPrototypesFormat.jsx

Zusätzlich im Downloadpaket:
  • Testskript: helloWorld.jsx
  • Parameterdatei: parameter.json
  • Testdatei: wps.dat
  • ausführbares Skript: WpsInstallScripts.jsxbin
Download (erfordert Anmeldung/Registrierung im Forum): WpsInstallScripts.zip (Version 24.03.2018)
einen schönen Tag wünscht

Werner Perplies
https://www.weepee.de

Antworten

Zurück zu „WpsInstallScripts2InDesignVersions“