Skip to content

Instantly share code, notes, and snippets.

@amolok
Created December 16, 2014 12:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amolok/c86207be32f86b1a8f13 to your computer and use it in GitHub Desktop.
Save amolok/c86207be32f86b1a8f13 to your computer and use it in GitHub Desktop.
#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