Instantly share code, notes, and snippets.
-
Save amolok/c86207be32f86b1a8f13 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#target Illustrator | |
/* | |
Working with the tags associated to selected art items | |
list, add, edit and remove objects tags | |
*/ | |
main(); | |
function main(){ | |
if (app.documents.length > 0){ | |
var t = new Date(); | |
// $.writeln('================================================================= tags '+t.toLocaleTimeString()); | |
d = app.activeDocument; | |
s = d.selection; | |
if (s.length > 0) { | |
for ( j = 0; j < s.length; j++ ) { | |
se = s[j]; | |
if(!se)break; | |
var win = new Window("dialog", "Tags editor: "+(j+1)+" / "+s.length); | |
win.alignChildren = "fill"; | |
if (se.tags.length >0) { | |
var tmpTags = new Array; | |
var tagList = new Array; | |
for ( i = 0; i < se.tags.length; i++ ) { | |
tagList[se.tags[i].name] = se.tags[i].value; | |
tmpTags[se.tags[i].name] = se.tags[i].value; | |
} | |
var rows = 7; | |
var tl = win.add("panel {orientation: 'row', alignChildren: 'fill', text: '"+se.layer.name+'/'+se.name+"'}"); | |
var col1 = tl.add ("group {orientation: 'column', margins: 3}"); | |
var col2 = tl.add ("group {orientation: 'column', alignChildren: 'fill', preferredSize: [150, undefined]}"); | |
var col3 = tl.add ("group {orientation: 'column', margins: 1, preferredSize: [5, undefined]}"); | |
var sbar = tl.add ("scrollbar {preferredSize: [20, undefined], maxvalue: " + String (se.tags.length-rows) + "}"); | |
var fields = {}; | |
redraw(0,rows,true); | |
redraw(0,rows,true); | |
sbar.onChanging = function() | |
{ | |
var start = Math.round (this.value); | |
var stop = start+rows; | |
redraw(start,stop,false); | |
} | |
function redraw(start,stop,full) | |
{ | |
tl.text = se.layer.name+" / "+se.name+": "+se.tags.length; | |
if(full) | |
{ | |
for ( i = 0; i < se.tags.length; i++ ) { | |
tagList[se.tags[i].name] = se.tags[i].value; | |
} | |
if(col1.children.length){ | |
for(var i=col1.children.length-1;i>-1;i--){ | |
col1.remove(i); | |
col2.remove(i); | |
col3.remove(i); | |
}} | |
fields=[]; | |
start=0; | |
stop=rows; | |
var n = -1; | |
for (var i in tagList) | |
{ | |
++n; | |
if (n >= start && n < stop){ | |
fields[n]={}; | |
fields[n][0] = col1.add ('statictext', [0, 0, 120, 24], i); | |
fields[n][1] = col2.add ('edittext', [0,0,120,24], tagList[i]); | |
fields[n][2] = col3.add ('button',[0,0,30,24],"X"); | |
fields[n][1].label = i; | |
fields[n][2].label = i; | |
fields[n][1].onChange = function () { | |
// $.writeln('tag: '+this.label+' = '+this.text); | |
tagList[this.label] = this.text; | |
se.tags[this.label].value = this.text; | |
} | |
fields[n][2].onClick = function() { | |
// $.writeln('del: '+this.label); | |
delete(tagList[this.label]); | |
se.tags[this.label].remove(); | |
redraw(0,rows,true); | |
// $.writeln('/del'); | |
} | |
} | |
} | |
sbar.maxvalue = se.tags.length-rows; | |
sbar.value = 0; | |
win.layout.layout(true); | |
win.enabled = true; | |
} else { | |
var n = 0; | |
var r = -1; | |
for (var i in tagList) | |
{ | |
n++; | |
if (n > start && n <= stop) | |
{ | |
++r; | |
fields[r][0].text = i; | |
fields[r][1].text = tagList[i]; | |
fields[r][1].label = i; | |
fields[r][2].label = i; | |
} | |
} | |
} | |
win.update(); | |
} | |
win.btnGroup = win.add("group", undefined ); | |
win.btnGroup.alignment = "center"; | |
win.btnGroup.okBtn = win.btnGroup.add("button", undefined, "OK"); | |
win.btnGroup.addBtn = win.btnGroup.add("button", undefined, "Add"); | |
win.btnGroup.okBtn.onClick = function(){ | |
processPreview( false ); | |
win.close(); | |
} | |
win.btnGroup.addBtn.onClick = function(){ | |
// this template is developed for ALASKA Project, you can change behaviour for your own tags template | |
var template = ['pole','pole_gray','pole_over','series_on','series_on_grey','yellow_mark','green_mark']; | |
var s = (se.tags.length+1) % template.length; | |
var c = Math.floor((se.tags.length+1) / template.length); | |
var tagName = (c ? c+'_' : '')+template[s]; | |
$.writeln(se.tags.length+' + '+c+'_'+template[s]+'['+s+']'); | |
var w = new Window("dialog"); | |
w.orientation = "row"; | |
w.add('statictext',undefined,'New tag:'); | |
var t = w.add('edittext',undefined, tagName); | |
t.characters = 20; | |
t.active = true; | |
var v = w.add('edittext',undefined,'none'); | |
v.characters = 20; | |
v.active = false; | |
w.add('button',undefined,'OK'); | |
w.add('button',undefined,'Cancel'); | |
t.onChange = function(){ | |
v.active = (!t.text) ? true : false; | |
} | |
if(w.show()==1){ | |
var tag = se.tags.add(); | |
tag.name = t.text; | |
tag.value = v.text; | |
redraw(0,rows,true); | |
// if((tag.name=='')||(tag.value=='')) tag.remove(); | |
} | |
} | |
win.layout.layout(true); | |
if(win.show()==1){ | |
$.sleep(100); | |
}else{ | |
$.writeln('restoring: '+tmpTags.length); | |
for ( i = se.tags.length-1; i >= 0 ; i-- ) | |
se.tags[i].remove(); | |
for ( i in tmpTags) { | |
var tag = se.tags.add(); | |
tag.name = i; | |
tag.value = tmpTags[i]; | |
} | |
} | |
}/*else{ | |
alert('No tags for\n'+s[j].layer.name+": "+s[j].name,'Selection: '+(j+1)+'/'+s.length); | |
}*/ | |
} | |
}else alert('No selection!'); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment