Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
* @title MergeText_ID
* @author Justin Putney
* @info http://putney.ajarproductions.com
* @version 1.2.0
*******************************/
/*******************************************
* begin code from ominoDialogMaker.jsx
* by David Van Brink
* source: http://omino.com/pixelblog/2008/09/21/35/
********************************************/
var D_MARGIN = 6;
var D_CONTROLHEIGHT = 20;
var D_BUTTONWIDTH = 100;
var D_CONTROLLABELWIDTH = 160;
var D_CONTROLWIDTH = 150;
var D_DIALOG_WIDTH = 400;
var S2 = 1.41421356237309504880;
// create a rectangle for a new control, walking downwards.
function _odControlShared(label,name) {
dialog = this;
var y = dialog.curYPos;
var itemHeight = D_CONTROLHEIGHT;
var itemBump = itemHeight + D_MARGIN;
if(label != "")
label += ":";
var labelCtl = dialog.add('statictext',[20,y,20 + D_CONTROLLABELWIDTH,y+item
Height],label);
labelCtl.justify = "right";
var controlBox = new Object();
controlBox.left = 20 + D_CONTROLLABELWIDTH + 10;
controlBox.top = y;
controlBox.right = controlBox.left + D_CONTROLWIDTH;
controlBox.bottom = controlBox.top + itemHeight;
dialog.curYPos = controlBox.bottom + D_MARGIN;
return controlBox;
}
function _odControlSharedFinish(control,name,valueFieldName) {
oD = this;
oD.items[name] = control;
oD.itemValueFieldNames[name] = valueFieldName;
oD.itemNames[oD.itemNames.length] = name;
}
function _odNumber(label,name,value) {
oD = this;
var controlBox = oD._odControlShared(label,name);
var control = oD.add('edittext',controlBox,value);
control.value = value;
control.onChange = function(){this.value = (this.text) * 1.0; this.text
= this.value;}; // make them all .value accessible
oD._odControlSharedFinish(control,name,"text");
return control;
}
function _odText(label,name,value) {
oD = this;
var controlBox = oD._odControlShared(label,name);
var control = oD.add('edittext',controlBox,value);
control.value = value;
control.onChange = function(){this.value = this.text; }; // make them a
ll .value accessible
oD._odControlSharedFinish(control,name,"text");
return control;
}
function _setColorFromButton(victim,button) {
var g = victim.graphics;
var n = button.value;
var myBrush = g.newBrush(g.BrushType.SOLID_COLOR, n);
g.backgroundColor = myBrush;
}
/*
color values are array of three floats, 0.0 .. 1.0.
*/
function _odColor(label,name,color) {
oD = this;
var controlBox = oD._odControlShared(label,name);
var swatchBox = [controlBox.left + 40,controlBox.top,controlBox.right,co
ntrolBox.bottom];
var buttonBox = [controlBox.left,controlBox.top,controlBox.left + 30,con
trolBox.bottom];
var swatch = oD.add('group',swatchBox);
var button = oD.add('button',buttonBox);
button.swatch = swatch;
button.value = color;
button.onClick = function(){
var n = doColorPicker(this.value);
this.value = n;
_setColorFromButton(swatch,this);
};
_setColorFromButton(swatch,button);
oD._odControlSharedFinish(button,name,"value");
return button;
}
/*
Add a button and static text to the dialog;
the button refers to the text "nameCtl",
and has .filePrompt and .fileExtension.
*/
function _odFileCommon(label,name,path,prompt,extension) {
var controlBox = oD._odControlShared(label,name);
var buttonWidth = 80;
var buttonBox = [controlBox.left,controlBox.top,controlBox.left + button
Width,controlBox.bottom];
var nameBox = [controlBox.left + buttonWidth + 10,controlBox.top,D_DIALO
G_WIDTH,controlBox.bottom];
var f = new File(path);
var nameCtl = oD.add('statictext',nameBox);
var button = oD.add('button',buttonBox,'...');
button.nameCtl = nameCtl;
nameCtl.text = f.name;
button.value = f.fsName;
button.file = f;
button.filePrompt = prompt;
button.fileExtension = extension;
oD._odControlSharedFinish(button,name,"value");
return button;
}
function _odOpenFile(label,name,path,prompt,extension) {
oD = this;
var buttonCtl = _odFileCommon(label,name,path,prompt,extension);
buttonCtl.onClick = function(){
var f = this.file.openDlg(this.filePrompt);
if(f) {
this.file = f;
this.value = f.fsName;
this.nameCtl.text = f.name;
}
};
return buttonCtl;
}
function _odSaveFile(label,name,path,prompt,extension) {
oD = this;
var buttonCtl = _odFileCommon(label,name,path,prompt,extension);
buttonCtl.onClick = function(){
var f = this.file.saveDlg(this.filePrompt);
if(f) {
this.file = f;
this.value = f.fsName;
this.nameCtl.text = f.name;
}
};
return buttonCtl;
}
function _odSelectFolder(label,name,path,prompt,extension) {
oD = this;
var buttonCtl = _odFileCommon(label,name,path,prompt,extension);
buttonCtl.folder = new Folder(path); // folder, pls, not file
buttonCtl.nameCtl.text += "/";
buttonCtl.onClick = function(){
var f = this.folder.selectDlg(this.filePrompt);
if(f) {
this.folder = f;
this.value = f.fsName;
this.nameCtl.text = f.name + "/";
}
};
return buttonCtl;
}
function _odCheckbox(label,name,value,checkboxText) {
oD = this;
var controlBox = oD._odControlShared(label,name);
var control = oD.add('checkbox',controlBox,checkboxText);
control.value = value;
//control.onChange = function(){this.value = this.text;};
oD._odControlSharedFinish(control,name,"value");
return control;
}
function _odRadioButtons(label,name,value,radioChoices) {
var oD = this;
controlBox = oD ._odControlShared(label,name);
var itemHeight = controlBox.bottom - controlBox.top;
result = oD.add('edittext',controlBox,value); // hidden text field to co
ntrol it...
result.onChange = function(){
var i;
this.value = this.text;
for(i = 0; i < this.buttons.length; i++) {
var button = this.buttons[i];
button.value = (button.theChoice == this.text);
}
}
result.hide();
result.value = value;
result.buttons = new Array();
var i;
for(i = 0; i < radioChoices.length; i++) {
var choice = radioChoices[i];
if(i > 0) {
var bump = itemHeight + D_MARGIN;
controlBox.top += bump;
controlBox.bottom += bump;
oD.curYPos += bump;
}
// each radiobutton object pokes its choice into the ersatz cont
rol,
// so it looks like a simple value.
// ("Grouping" appears to be by adjacent additions only. Nice!)
var rb = oD .add('radiobutton',controlBox,choice);
rb.value = choice == value;
rb.theChoice = choice;
rb.theGroupErsatzControl = result;
rb.onClick = function(){this.theGroupErsatzControl.value = this.
theChoice;};
result.buttons[result.buttons.length] = rb;
}
oD._odControlSharedFinish(result,name,"text");
return result;
}
function _odMenu(label,name,value,menuChoices) {
var oD = this;
controlBox = oD ._odControlShared(label,name);
var itemHeight = controlBox.bottom - controlBox.top;
var control = oD.add('dropdownlist',controlBox,menuChoices);
// I couldnt discern how to get this from the "items" array, so I stash
menuChoice for later. dvb08.
control.menuChoices = menuChoices;
control.value = value;
// set the initial selection index
var index = 0;
for(var i = 0; i < menuChoices.length; i++) {
if(value == menuChoices[i])
index = i;
}
control.selection = index;
control.onChange = function() {
this.value = this.selection.text;
oD.set = _odSet;
oD.run = _odRun;
oD.get = _odGet;
oD._odControlShared = _odControlShared;
oD._odControlSharedFinish = _odControlSharedFinish;
return oD;
}
function _odGet() {
var values = new Object();
var name;
for(name in this.items) {
var value = this.items[name].value;
values[name] = value;
}
return values;
}
function _odSet(values) {
var oD = this;
if(!values)
return;
for(var p in values) {
var value = values[p];
var item = oD.items[p];
if(!item)
continue;
var itemValueFieldName = oD.itemValueFieldNames[p];
if(!itemValueFieldName)
continue;
item[itemValueFieldName] = value;
item.notify('onChange'); // to get the refresh
}
}
function _odRun() {
var oD = this;
if(!oD.finishingTouches) {
oD.separator(oD);
oD.gap();
appendOKCancel(oD);
oD.gap();
trimDialogBounds(oD);
oD.finishingTouches = true;
}
var resultCode = oD.show();
if(resultCode != 1) // cancel
return null;
var result = oD.get();
return result;
}
/*******************************************
*
end code from ominoDialogMaker.jsx
********************************************/
/*******************************************
*
begin code for Merging Text
********************************************/
var sortProp
= "top";
var doc
= app.activeDocument;
var
var
var
var
var
var
var
).shift());
var
var
var
var
var
var
var
sel
tfs
separator
fitToContent
fitToSelection
minversion
version
= doc.selection;
= new Array();
= false;
= 5; //for dialog to run
= parseInt(app.version.split("."
coordTop
coordBottom
coordRight
coordLeft
applyTo
defaultIgnoreLocked
ignoreLocked
= new Array();
= new Array();
= new Array();
= new Array();
= "selected frames";
= true;
= defaultIgnoreLocked;
= "[><]";
= false;
init();
function init(){
if(version >= minversion) runDialog();
else run();
}
function run(){
if(applyTo == "selected frames") {
tfs = collectFields(sel);
if (tfs.length == 1) {
alert("You must select more than one textframe."
);
return;
} else if (tfs.length < 1) {
alert("No textframes selected.");
return;
} else {
tfs = tfs.sort(sortFields);
assemble(tfs);
}
} else if(applyTo == "current page") {
tfs = collectFields(app.activeWindow.activePage.textFram
es);
if (tfs.length == 1) {
alert("The current page only has one textframe."
);
return;
} else if (tfs.length < 1) {
alert("The current page does not have any textfr
ames.");
return;
} else {
tfs = tfs.sort(sortFields);
assemble(tfs);
}
} else if(applyTo == "all pages") {
var storedPage = app.activeWindow.activePage;
for(var i=0; i < doc.pages.count(); i++){
app.activeWindow.activePage = doc.pages.item(i);
//allows proper fitting on r-hand spread pgs
tfs = collectFields(doc.pages.item(i).textFrames
);
tfs = tfs.sort(sortFields);
assemble(tfs);
}
app.activeWindow.activePage = storedPage;
}
}
function runDialog()
{
var omd = newOminoDialog("Merge Textframes");
omd.menu("Apply to","applyto","selected frames",["selected frames",
"current page", "all pages"]); //need a way to do "selected pages"
omd.separator();
omd.checkbox("Ignore locked layers", "ignorelocked", defaultIgnoreLocked
, "(applies to pages)");
omd.separator();
omd.radioButtons("Sort by","sort","top",["top","left","bottom","right"])
;
omd.separator();
omd.string("Separator","separator","");
omd.boxedText(3,"\\r = hard return, \\n = soft return, \\t = tab \n\nUse
hard return(s) if you want to preserve paragraphs styles");
omd.separator();
omd.checkbox("Fit Frame to", "afit", fitToContent , "merged content");
omd.checkbox("", "sfit", fitToSelection , "selection size");
var result = omd.run();
if(result != null) {
separator = result.separator;
separator = replace(separator, "\\r", "\r");
separator = replace(separator, "\\t", "\t");
separator = replace(separator, "\\n", "\n");
sortProp = result.sort;
fitToContent = result.afit;
fitToSelection = result.sfit;
applyTo = result.applyto;
ignoreLocked = result.ignorelocked;
run();
}
}
function collectFields(selArr) {
var tArr = new Array();
selArr = (ignoreLocked) ? getUnlockedLayerItems(selArr) : selArr;
for(var i=0; i < selArr.length; i++){
var t = selArr[i];
if (t == undefined) continue;
if(t.constructor.name == "TextFrame"){
tArr.push(t);
var bounds = t.geometricBounds;
//store coordinates for content fitting
coordTop.push(bounds[0]);
coordLeft.push(bounds[1]);
coordBottom.push(bounds[2]);
coordRight.push(bounds[3]);
}
}
return tArr;
}
function getUnlockedLayerItems(inArr) {
returnVal = aN - bN;
}
if(tProp == "right" || tProp == "bottom") returnVal *= -1; //reverse
return returnVal;
}
function getCoordinateValue(obj, type) {
var returnVal;
var bounds = obj.geometricBounds;
switch(type){
case "left":
returnVal
break;
case "top":
returnVal
break;
case "right":
returnVal
break;
case "bottom":
returnVal
break;
}
return returnVal;
}
function replace(searchStr, findStr, replaceStr){
var tArr = searchStr.split(findStr);
var returnStr = tArr.join(replaceStr);
return returnStr;
}
/*******************************************
*
end code for Merging Text
********************************************/
//end file
= bounds[1];
= bounds[0];
= bounds[3];
= bounds[2];