Skip to main content
Obi-wan Kenobi
Legend
September 4, 2016
Question

… The same code x times!

  • September 4, 2016
  • 2 replies
  • 714 views

Hi all! 

My script works fine! I'm searching better writings to "condense" its code!

The UI:

[I know: it's not really beautiful! … but it works fine [ It's at least a good news!  ]

            var group2 = w.add ('group');

            var mygrp2 = group2.add ('dropdownlist', undefined, styles);

                  mygrp2.minimumSize.width = 200;

                  mygrp2.maximumSize.width = 200;

                  mygrp2.selection = 0;

               

            var group3 = w.add ('group');

            var mygrp3 = group3.add ('dropdownlist', undefined, styles);

                  mygrp3.minimumSize.width = 200;

                  mygrp3.maximumSize.width = 200;

                  mygrp3.selection = 0;

               

            var group4 = w.add ('group');

            var mygrp4 = group4.add ('dropdownlist', undefined, styles);

                  mygrp4.minimumSize.width = 200;

                  mygrp4.maximumSize.width = 200;

                  mygrp4.selection = 0;

               

            var group5 = w.add ('group');

            .........

if (mygrp2.selection == 0)

  exit();

else {

    app.findGrepPreferences = app.changeGrepPreferences = null;

    app.findGrepPreferences.appliedParagraphStyle = mygrp2.selection.text;

    app.changeGrepPreferences.appliedConditions = [myCondition];

    myDoc.changeGrep();

    }

if (mygrp3.selection == 0)

  exit();

else {

    app.findGrepPreferences = app.changeGrepPreferences = null;

    app.findGrepPreferences.appliedParagraphStyle = mygrp3.selection.text;

    app.changeGrepPreferences.appliedConditions = [myCondition];

    myDoc.changeGrep();

    }

if (mygrp4.selection == 0)

  exit();

else {

    app.findGrepPreferences = app.changeGrepPreferences = null;

    app.findGrepPreferences.appliedParagraphStyle = mygrp4.selection.text;

    app.changeGrepPreferences.appliedConditions = [myCondition];

    myDoc.changeGrep();

    }

if (mygrp5.selection == 0)

    ......

I'm thinking about something like this:

… with such a code:

//////////////////////////////////////////////////////////////////////

            var myDropListNumber = 10; 

            var w = new Window ('dialog {alignChildren: "center"}', 'Jump To Next Page! … [Part 1]');

            var group1 = w.add ('group');

                  group1.add ('statictext {text: "Choose All The Targetted Para Styles!"}');

            for( var i = 2 ; i < myDropListNumber ; ++i ) 

                {

                   var group = w.add ('group');

                   group.add ('dropdownlist', undefined, styles, {name: "mygrp"+i});

                }               

                                        

            var buttons = w.add ('group {alignment: "center"}');

                  buttons.add ('button {text: "OK"}');

                  buttons.add ('button {text: "Cancel"}');

            var group11 = w.add ('group');

                  group11.add ('statictext {text: "by Michel Allio, september 2016. At your own risks! (^/)"}');

                 

//////////////////////////////////////////////////////////////////////                 

… At this complexity level, i'm totally off!! 

Thanks in advance!

(^/)

This topic has been closed for replies.

2 replies

Skemicle
Inspiring
September 22, 2016

I know you've been given better solutions but I will go ahead and answer the original question:

/*added*/var ddowns = [];

var myDropListNumber = 10;

/*added*/var styles = ["ONE","TWO","THREE"];

var w = new Window ('dialog {alignChildren: "center"}', 'Jump To Next Page! … [Part 1]');

var group1 = w.add ('group');

group1.add ('statictext {text: "Choose All The Targetted Para Styles!"}');

for( var i = 2 ; i < myDropListNumber ; ++i ){

    var group = w.add ('group');

    /*set variable*/ddowns[i-2] = group.add ('dropdownlist', undefined, styles, {name: "mygrp"+i});

    /*added*/ddowns[i-2].selection = 0;

}var buttons = w.add ('group {alignment: "center"}');

buttons.add ('button {text: "OK"}');

buttons.add ('button {text: "Cancel"}');

var group11 = w.add ('group');

group11.add ('statictext {text: "by Michel Allio, september 2016. At your own risks! (^/)"}');

/*added*/w.show()

/*added*/alert(ddowns[0].selection);

Obi-wan Kenobi
Legend
September 24, 2016

Thanks to all of you! 

Really nice for my learning!

MTFBWY!

(^/)

Peter Kahrel
Community Expert
Community Expert
September 4, 2016

Hi Michel -- If I understand correctly what you're up to, rather than doing multiple dropdowns maybe it's easier to do a multi-select list in which you select all the paragraph styles you want to target. That gives you an array of paragraph style names, which you then process.

Peter

Obi-wan Kenobi
Legend
September 4, 2016

Hi Peter,

It would be obviously better but for me technically more difficult to write! [ I'm still too newbie! ]

(^/)

Loic.Aigon
Legend
September 4, 2016

Hello Michel,

You will soon find it's worth the effort to reconsider your UI conception. Otherwise you may spend a lot of time and efforts to maintain your code. To second Peter's thought, here is an approach.

var main = function() {

  //UI comps

  var u,

  w = new Window('dialog'),

  mainGp = w.add('group'),

  leftPanel = mainGp.add('group'),

  centerPanel = mainGp.add('group'),

  rightPanel = mainGp.add('group'),

  sourceStylesList = leftPanel.add('listbox', u, u, {multiselect:true}),

  destStylesList = rightPanel.add('listbox', u, u, {multiselect:true}),

  addBtn = centerPanel.add('button', u, ">" ),

  remBtn = centerPanel.add('button', u, "<" ),

  btnGp = w.add('group'),

  cancelBtn = btnGp.add('button', u, 'Cancel'),

  okBtn = btnGp.add('button', u, 'Run');

  //Document related variables

  var doc = app.properties.activeDocument,

  pss, stylesProps = {}, ps,

  addedStyles = {};

  //Adjusting comps

  w.alignChildren = btnGp.alignChildren = ["fill","top"];

  centerPanel.orientation = 'column';

  centerPanel.alignChildren = ["fill","middle"];

  sourceStylesList.preferredSize = destStylesList.preferredSize = [200,250];

  centerPanel.preferredSize = [10, 250];

  addBtn.preferredSize = remBtn.preferredSize = [20,20];

  remBtn.enabled = addBtn.enabled = false;

  //Adding event handlers

  w.onShow = function() {

  //Loading styles to combobox component

  pss = doc.allParagraphStyles;

  var ls;

  while ( ps = pss.pop() ){

  ls = sourceStylesList.add('item', ps.name );

  ls.payload = {name:ps.name, style:ps, id:ps.id};

  }

  }

  sourceStylesList.onChange = function() {

  addBtn.enabled = sourceStylesList.selection;

  }

  destStylesList.onChange = function() {

  remBtn.enabled = destStylesList.selection;

  }

  addBtn.onClick = function() {

  var sel = sourceStylesList.selection;

  var i = 0, n = sel.length;

  for ( i = 0; i<n; i++ ) {

  var data = sel.payload;

  if ( !addedStyles[data.id] ) {

  addedStyles[data.id] = data;

  destStylesList.add('item', data.name ).payload = data;

  sourceStylesList.remove( sourceStylesList.items[sel.index] );

  }

  }

  addBtn.enabled = false;

  }

  remBtn.onClick = function() {

  var sel = destStylesList.selection;

  var i = 0, n = sel.length;

  while ( n-- ) {

  var data = sel.payload, found;

  if ( addedStyles[data.id] ) {

  delete addedStyles[data.id];

  found = destStylesList.find(data.name );

  found && destStylesList.remove(found);

  sourceStylesList.add('item', data.name).payload = data;

  }

  }

  remBtn.enabled = false;

  }

  cancelBtn.onClick = function() {

  w.close(0);

  }

  okBtn.onClick = function() {

  if ( !destStylesList.items.length ) {

  alert("You need to add styles or Cancel…");

  return;

  }

  w.close(1);

  }

  //Displaying window

  if ( doc && w.show()==1 ) {

  processDoc( addedStyles );

  }

}

function processDoc ( stylesObject ) {

  var stylesArray = [];

  for ( prop in stylesObject ) {

  stylesArray[stylesArray.length] = stylesObject[prop].name;

  }

  alert("Obviously you want to work with \r\t-"+stylesArray.join("\r\t-") );

}

var u;

app.doScript ( "main();",u,u,UndoModes.ENTIRE_SCRIPT, "Process doc" );