﻿#target indesign

//
// PageNamesToStory_Notes.jsx
// Version 1.3
//
// created by: maqui  |  10:18 28.02.2013
// modified by: maqui |  16:59 28.02.2013 (Löschen der Bedingungstexte ohne Einblenden --> Formatierung bleibt 1:1 erhalten)
// modified by: maqui |  16:40 16.06.2014 Alle Textabschnitte erhalten die Seitenzahl-Infos
// modified by: maqui |  11:00 21.05.2015 Debug (bedingten Text "PageStart" und "PageEnd" löschen, auch wenn er sichtbar ist)
// modified by: gimsieke |  2015-06-07 Add 'CellPage_XY' to table cells
// modified by: aschmalfuss | 2018-02-26 replace conditional text with notes
//
// Trägt in jedem Textrahmen (bei jedem Seitenwechsel) den Seitenbeginn bzw. das Seitenende als Notiz mit der jeweiligen Seitenzahl ein.
//
//

var myPageStartTag = "PageStart";
var myPageEndTag = "PageEnd";

//var myStartSwatchName = "PageStart";
//var myEndSwatchName = "PageEnd";

main(); // ==>

function main(){
	if(app.documents.length != 0){
		var myDoc = app.activeDocument;
		var myPage;

		var myStartCounter = 0;
		var myEndCounter = 0;
		for (var i = 0; i < myDoc.stories.length; i++) {
			var myStory = myDoc.stories[i];
            myStory.notes.everyItem().remove();
			var myMasterSpreadFlag = true;
			for (var j = 0; j < myStory.textContainers.length; j++) {
				var myTestFrame = myStory.textContainers[j];
				// Wenn ein Textrahmen nicht auf der Montagefläche ...
				if(myTestFrame.hasOwnProperty("parentPage") && myTestFrame.parentPage != null) {
					// ... überprüfen, ob auf Musterseite
					if(myTestFrame.parentPage.parent.constructor.name != "MasterSpread" && myStory.textContainers.length > 0) {
						myMasterSpreadFlag = false;
						break;
					}
				}
			}
			// Wenn Textabschnitt sich nicht auf einer Musterseite befindet, ...
			if(!myMasterSpreadFlag && myStory.textContainers.length > 0) {
				// Alle Textrahmen vom Textabschnitt durchlaufen ...
				var myFrame = myStory.textContainers[myStory.textContainers.length - 1];
				var myOldPage = false; // wenn nicht als "false" definiert, ist myOldPage letzter "Page"-Wert???????????????????????
				var myOldFirstIP = false;
				while (myFrame != null) {
					var myPage = myFrame.parentPage;
					// Wenn Textabschnitt sich nicht auf Montagefläche ...
					if(myPage != null && (myFrame.constructor.name == "TextFrame" 
                                                     || myFrame.constructor.name == "EndnoteTextFrame") && myFrame.insertionPoints.length > 0) {
						// PageEnd
						// Ist Rahmen auf anderer Seite? ... Wenn ja, dann PageEnd-Tag setzen
						if(myPage != myOldPage) {
							var myLastContent = myPageEndTag + "_" + myPage.name;
							if(myOldFirstIP) {
								//var myLastIP = myOldFirstIP.parentStory.insertionPoints.previousItem(myOldFirstIP);
								var myLastIP = myOldFirstIP.parentStory.insertionPoints[myOldID - 1];
								//var myLastID = myLastIP.parentStory.insertionPoints.itemByRange(0, myLastIP.index).insertionPoints.length;
								//alert(myOldID + "\n" + myLastID);
							}
							else {
								var myLastIP = myFrame.insertionPoints.lastItem();
//myFrame.select();
//app.activeWindow.zoomPercentage = app.activeWindow.zoomPercentage;
//alert(myLastContent + " :: " + myOldPage.constructor.name);
							}
							//myLastIP.fillColor = myEndSwatch;
							var note = myLastIP.notes.add();
                                note.label=myPageEndTag;
                               note.texts[0].contents=myLastContent;
							myEndCounter++;
						}
						// PageStart
						// Ist vorheriger Rahmen auf anderer Seite? ... Wenn ja, dann PageStart-Tag setzen
						if (checkPrevFrame(myFrame, myPage) && myFrame.contents != "") {
							var myFirstContent = myPageStartTag + "_" + myPage.name;
							var myFirstIP = myFrame.insertionPoints.firstItem();
							var myOldFirstIP = myFirstIP; // IP merken, da er sich bei evtl. Umbruchveränderungen verschiebt
							var myOldID = myOldFirstIP.parentStory.insertionPoints.itemByRange(0, myOldFirstIP.index).insertionPoints.length;
							var note = myFirstIP.notes.add();
                                note.label=myPageStartTag;
                               note.texts[0].contents=myFirstContent;
							myStartCounter++;
						}
						myOldPage = myPage;
					}
					var myFrame = myFrame.previousTextFrame;
				}
			}

      // Process all table cells in the story since they won't be included in the frame iteration:
      if(!myMasterSpreadFlag && myStory.tables.length > 0) {
        for (var t = 0; t < myStory.tables.length; t++) {
		 myStory.tables[t].notes.everyItem().remove();
          for (var c = 0; c < myStory.tables[t].cells.length; c++) {
            var myCell = myStory.tables[t].cells[c];
            var firstCellChar = myCell.characters[0];
            if (firstCellChar != null) {
              var myFrame = firstCellChar.parentTextFrames[0];
              if (myFrame != null) {
     					  var myPage = myFrame.parentPage;
					      var myIP = myCell.insertionPoints.firstItem();
					      //myIP.fillColor = myStartSwatch;
					     var note = myIP.notes.add();
                            note.label="PageName";
                            note.texts[0].contents="CellPage_" + myPage.name;
              }
            }
          }
        }
			}
		}
		myDoc.select(NothingEnum.NOTHING);
		//alert("FERTIG! ;-) \r\rVergebene Startseiten-Label: " + myStartCounter + "\rVergebene Endseiten-Label:   " + myEndCounter);
	}
	else{
		alert("FEHLER! \r\rEs ist kein Dokument geöffnet.");
	}
}

function checkPrevFrame(thisFrame, thisPage) {
	if(thisFrame.previousTextFrame != null) {
		var thisPrevFrame = thisFrame.previousTextFrame;
		// Wenn Rahmen auf Montagefläche, vorherigen überprüfen, u.s.w.
		while (thisPrevFrame.parentPage == null) {
/* thisPrevFrame.select();
app.activeWindow.zoomPercentage = app.activeWindow.zoomPercentage;
alert("Rahmen auf Montagefläche!"); */
			if(thisPrevFrame.previousTextFrame != null) {
				var thisPrevFrame = thisPrevFrame.previousTextFrame;
			}
			else return true;
		}
		if (thisPrevFrame.parentPage != thisPage) return true;
		else return false;
	}
	else return true;
}

