Printable Version of Topic

Click here to view this topic in its original format

HTMLHelp Forums _ Markup (HTML, XHTML, XML) _ Can HTML <Select> process a not found in list.

Posted by: bowlesj Mar 31 2018, 07:37 AM

Hi, I an trying to figure out if the HTML <Select> statement has a way to allow entry if the user wants to enter a valid item that is not in the list. I went to https://www.w3schools.com/tags/tag_select.asp to find the attributes for the <select> statement and found nothing that answered the question. I kept looking around and still nothing. So what I am doing to get around this now is have another place where they can enter new data if the item they wan to enter is not in the list. The odds if the item being in the list are about 99.9% but I can't be 100% sure that a new item won't come in.

I wanted to edit the subject line to be "Can HTML <Select> process an item not found in list." but there seems to be no way to do it. Some forums allow it.

Thanks,
John

Posted by: Christian J Mar 31 2018, 10:26 AM

QUOTE(bowlesj @ Mar 31 2018, 02:37 PM) *

Hi, I an trying to figure out if the HTML <Select> statement has a way to allow entry if the user wants to enter a valid item that is not in the list.

Alas that's not possible.

QUOTE
what I am doing to get around this now is have another place where they can enter new data if the item they wan to enter is not in the list.

That sounds like the best solution.

QUOTE
I wanted to edit the subject line to be "Can HTML <Select> process an item not found in list." but there seems to be no way to do it. Some forums allow it.

You should be able to edit up to an hour after posting, see also http://forums.htmlhelp.com/index.php?act=boardrules

Posted by: bowlesj Mar 31 2018, 10:52 AM

Thank you Christian J. I gave my users instructions on how to set the drop down back to "Chose an option" (press home then press tab). John

Posted by: pandy Mar 31 2018, 05:10 PM

I think this is something that has been wished for like forever. Something corresponding to a so called combo box in program interfaces.
https://en.wikipedia.org/wiki/Combo_box

Posted by: Darin McGrew Apr 1 2018, 10:35 AM

QUOTE
So what I am doing to get around this now is have another place where they can enter new data if the item they wan to enter is not in the list.
That's what I've done. I just include an "Other" option in the select list, and next to the select list I include a text field labled "If Other, then specify:" or something like that.

Posted by: bowlesj Apr 1 2018, 11:04 AM

I attached a picture of what I did. I reduce the song names because it took the form size up to over a meg. Attached Image

Posted by: CharlesEF Apr 1 2018, 01:40 PM

While HTML can't do it javascript can. A minimal sample is attached but it could be expanded. The entry is added when you leave the field. If you don't want to add an entry just leave the field blank and exit the field. It will not add duplicate entries. The problem with this method is that the newly added entry is not saved. If you have a database where these values come from then you could use AJAX to add the entry to the database.
Attached File  combobox.html ( 2.48k ) Number of downloads: 415

Posted by: bowlesj Apr 1 2018, 02:38 PM

QUOTE(CharlesEF @ Apr 1 2018, 02:40 PM) *

While HTML can't do it javascript can. A minimal sample is attached but it could be expanded. The entry is added when you leave the field. If you don't want to add an entry just leave the field blank and exit the field. It will not add duplicate entries. The problem with this method is that the newly added entry is not saved. If you have a database where these values come from then you could use AJAX to add the entry to the database.
Attached File  combobox.html ( 2.48k ) Number of downloads: 415



Thank you CharlesEF. That is an interesting idea. I guess the new entry replaces the "Add Manufacturer" entry. I use PHP. it could pick up the info and add it. John

Posted by: CharlesEF Apr 1 2018, 04:12 PM

QUOTE(bowlesj @ Apr 1 2018, 02:38 PM) *
Thank you CharlesEF. That is an interesting idea. I guess the new entry replaces the "Add Manufacturer" entry. I use PHP. it could pick up the info and add it. John
No, the "Add Manufacturer" entry should always be available. The new entry is added to the end of the select options, so you can keep adding manufacturers. Where do the values for the select options come from? Do you fill the select options with the results of a database query?

Posted by: bowlesj Apr 1 2018, 04:38 PM

QUOTE(CharlesEF @ Apr 1 2018, 05:12 PM) *

QUOTE(bowlesj @ Apr 1 2018, 02:38 PM) *
Thank you CharlesEF. That is an interesting idea. I guess the new entry replaces the "Add Manufacturer" entry. I use PHP. it could pick up the info and add it. John
No, the "Add Manufacturer" entry should always be available. The new entry is added to the end of the select options, so you can keep adding manufacturers. Where do the values for the select options come from? Do you fill the select options with the results of a database query?


Okay thanks, that makes sense now that you mention it. To answer your question I am doing something unusual because I have a very small user group (10 to 20). I had a full blown mysql website on a VPS as normal but it failed to become popular enough to make it worth keeping. So I downsized it to my interest "jazz" creating a Jazz Karaoke Jam group. Instead of going through the hassle of putting the data on the server, teaching them to do all the extra work (and risking turning them off) etc I decided to keep the mysql database on my xampp at home and just send up the static html/javascript spages (I right click and save them to my machine then send them up with winSCP.). I only have two php pages and it took me a long time to find out I could run php on my hosting account without having a VPS. Finding this out is why I went ahead and created the revised php pages. One page is to receive the info from the form and format an email to myself which I use to update my database at home. This keeps me in direct contact with my users (my friends now) since I am the one running the jams and playing at them too. It works better for now. So to get back to your question the songs and the fake books are loaded from my xampp based mysql database at home.

I am not very advanced at this stuff. I have programmed for 37 years but only recently did I teach myself enough (html, php, javascript, mysql and a few other languages) to get my two website(s) up. Anything new I have not done before often takes me a day to figure out via google searches. Getting the combo box in a table was one of these. If you care to you can see my recent struggle to put a drop down box in a table at http://forums.devnetwork.net/viewtopic.php?f=1&t=147127. I finally at least 4 hours later figured it out on my own with a certain type of google search that found an example.

Posted by: CharlesEF Apr 1 2018, 05:54 PM

You could use AJAX to send the new select entry to the PHP page that e-mails you the information. Then you can add it to your database.

Posted by: bowlesj Apr 1 2018, 06:06 PM

QUOTE(CharlesEF @ Apr 1 2018, 06:54 PM) *

You could use AJAX to send the new select entry to the PHP page that e-mails you the information. Then you can add it to your database.


Interesting. AJAX was one of the extra languages I didn't learn :-) However you have me thinking. Could I not capture the new data which is not in the select statement and which they put in a popup textbox that unhides itself as done through some javascript then put this value into the table cell by replacing the whole select item with all its options. At the same time I could have 14 hidden table rows (in a column) and dump the new item in there in the same row. So when the form is sent down to my PHP script I would loop this hidden column and include it in the mailing and this way I could know it was new and I could add it manually.

Posted by: CharlesEF Apr 1 2018, 08:10 PM

AJAX is nothing more than javascript. But yes, you could expand on the code to do what you want. The code could also add a table row to place the new entry in.

Posted by: bowlesj Apr 1 2018, 08:17 PM

QUOTE(CharlesEF @ Apr 1 2018, 09:10 PM) *

AJAX is nothing more than javascript. But yes, you could expand on the code to do what you want. The code could also add a table row to place the new entry in.


Okay, thanks CharlesEF. When I getting it working I will post the results and how I did it here :-) Don't expect it tomorrow :-)

Posted by: bowlesj Apr 2 2018, 05:14 AM

Hi CharlesEF, I am not sure if this is the correct place for this question but seeing as you brought up the topic of AJAX I thought I would ask it here. Actually anyone could answer this about any solutions to this issue.

The regular javascript popups which have this wonderful feature of being able to stop the javascript code such that when the user clicks the popup the code continues directly below it have one shortcoming. Specifically we can not customize them and they are very tiny and I personally prefer they come up in the middle of the screen. So I managed to get some jquery assistance and I have some popups that have larger print, a nice heading and they come up in the middle of the screen plus they have a scroll bar-slider on the right. Unfortunately these popups do not stop the code and continue inline which in certain situations causes me to just not bother using them. So does AJAX have a way to get the best of both of these worlds (popups that both stop the code and can be customized with larger fonts, scroll down for large amounts of text, whatever). I am sure this is another problem that many have asked for a fix on. I would probably want to learn a language that can do this. I avoid jquery. I have learned varying amounts of 17 languages over my 37 years and jquery I find to be very confusing while the rest are extremely easy to understand.

Thanks,
John

Posted by: CharlesEF Apr 2 2018, 10:28 AM

AJAX means 'Asynchronous JavaScript and XML' and it has nothing to do with display. It basically lets you send data to the server for processing and then returns the results.

If I understand you correctly you want to make a popup dialog where the user can enter the new select entry. This might mean you have many selects and want only 1 popup to allow new entries in any one of them?

Posted by: bowlesj Apr 2 2018, 01:38 PM

Thanks CharlesEF.

Regarding your question below.

QUOTE
If I understand you correctly you want to make a popup dialog where the user can enter the new select entry. This might mean you have many selects and want only 1 popup to allow new entries in any one of them?

I am assuming you are referring to my big paragraph question in my prior post. If that is correct It sounds like I need to explain it better. Here goes.

In the javascript below I show the Okay/Cancel confirm popup which I am sure everyone knows very well. The code stops and waits such that I can set the txt variable immediately after I initiate the popup (as opposed to the Asynchronous jquery I have been using which requires I create a function somewhere else to process the Okay answer and there is actually no way to process the No answer since the code keeps going after the prompt is presented to the user.". So the popup below works exactly the way it works in Micrsoft Access (the database program which runs Visual Basic For Applications). In that Micrsoft Access tool (which I know very very well) you can design forms, size the buttons, and do a lot of other stuff such as deciding where the popup will appear on the screen. Unfortunately Javascript's prompt below can do none of this. Jquery can do this but Jquery seems to be a very difficult language that requires a lot of time to fully master (more time that I have available to me). I am not sure if there is a way to get Jquery to process the No answer the way Javascript can do (meaning I am not sure if there is a way for Jquery to stop the code and wait for the user response). Hopefully I explained the question properly this time.

CODE

<script>
function myFunction() {
    var txt;
    if (confirm("Press a button!")) {
        txt = "You pressed OK!";
    } else {
        txt = "You pressed Cancel!";
    }
    document.getElementById("demo").innerHTML = txt;
}
</script>

Posted by: CharlesEF Apr 2 2018, 03:26 PM

QUOTE(bowlesj @ Apr 2 2018, 01:38 PM) *

In the javascript below I show the Okay/Cancel confirm popup which I am sure everyone knows very well. The code stops and waits such that I can set the txt variable immediately after I initiate the popup (as opposed to the Asynchronous jquery I have been using which requires I create a function somewhere else to process the Okay answer and there is actually no way to process the No answer since the code keeps going after the prompt is presented to the user.". So the popup below works exactly the way it works in Micrsoft Access (the database program which runs Visual Basic For Applications). In that Micrsoft Access tool (which I know very very well) you can design forms, size the buttons, and do a lot of other stuff such as deciding where the popup will appear on the screen. Unfortunately Javascript's prompt below can do none of this. Jquery can do this but Jquery seems to be a very difficult language that requires a lot of time to fully master (more time that I have available to me). I am not sure if there is a way to get Jquery to process the No answer the way Javascript can do (meaning I am not sure if there is a way for Jquery to stop the code and wait for the user response). Hopefully I explained the question properly this time.

CODE

<script>
function myFunction() {
    var txt;
    if (confirm("Press a button!")) {
        txt = "You pressed OK!";
    } else {
        txt = "You pressed Cancel!";
    }
    document.getElementById("demo").innerHTML = txt;
}
</script>

Javascript itself is asynchronous, not just jQuery. The reason your code stops and waits is because of the 'confirm' command. Javascript itself doesn't wait for anything, unless you put code in to waste time. jQuery is nothing more than a library of Javascript commands put together in a way that provides the users new methods to run code.

I admit I'm a bit confused. You say you can't process the 'Cancel' choice. Your code doesn't show any more commands to execute. So how do you process the 'Ok' answer? I can suggest different things but without understanding your problem I might make it worse. But here goes anyway (air code, not tested):
CODE
<script>
function myFunction() {
    var ans = confirm("Press a button!");
    switch(ans) {
     case 0:
       document.getElementById("demo").innerHTML = "You pressed Cancel!";
       //  code to execute when 'No' is clicked
       break;
     case 1:
       document.getElementById("demo").innerHTML = "You pressed OK!";
       //  code to execute when 'Yes' is clicked
       break;
    }
}
</script>

Posted by: CharlesEF Apr 2 2018, 03:39 PM

Oh, if you want to stick with your approach how about this:

CODE
<script>
function myFunction() {
    var txt, ans;
    if (confirm("Press a button!")) {
        txt = "You pressed OK!";
        ans = true;
    } else {
        txt = "You pressed Cancel!";
        ans = false;
    }
    document.getElementById("demo").innerHTML = txt;
    if(ans)
    {
      \\ code to run when OK clicked
    }
    else
    {
      \\ code to run when Cancel clicked
    }
}
</script>

Posted by: bowlesj Apr 2 2018, 06:20 PM

Thanks for the examples. I understand what you did in all your code examples.

Your not understanding my question is starting make me think that the jquery code I was given may have been written incorrectly relative to what I was looking for (a popup that could continue the code below the initiation of the popup). Maybe you have never seen a jquery popup written like the one I was given. I had asked a simple question (if there were examples of how jquery could put a checkbox on the popup to cause the popup to not come back and repeatedly bother the user) and he just up and wrote it giving me the example. I attached picture of the popup for yes/no that he created and I learned to work with. It looks exactly like what I was looking for (centered in the screen, much larger print, a nice overall look, a checkbox to turn it off, just a really nice design). Except for one problem. You can't write code directly underneath it. So to explain what I mean by that I took your example and I put a comment off to the right (the comment has a bunch of arrows like this <<<<<<). If you want to see his jquery code and how I call it in JavaScript I can send everything including a test call page built in php. It is pretty extensive. All I will say at this point is I had to write what I gather is called a "call back function" to deal with the processing after the user clicked yes or no. Using this technique is not too cumbersome if you have only one of these user prompts alone. It becomes a nightmare if you have 2 or more in a row (inline). The reason it is very cumbersome is you have to put the next user prompt inside the callback function of the previous user prompt (and on and on and on for each new user prompt).

Attached Image


CODE
<script>
function myFunction() {
    var ans = confirm("Press a button!");   //<<<<<<<<<<<<<This is the call to the javascript function that provides the user prompt
    switch(ans) {    //<<<<<<<<<<<<<<<<<<<<<<<<<<<This is the code that runs directly under it when the user enters okay or cancel
     case 0:
       document.getElementById("demo").innerHTML = "You pressed Cancel!";
       //  code to execute when 'No' is clicked
       break;
     case 1:
       document.getElementById("demo").innerHTML = "You pressed OK!";
       //  code to execute when 'Yes' is clicked
       break;
    }
}
</script>

Posted by: CharlesEF Apr 2 2018, 07:09 PM

Hey, I'm old. I started programming RPG on a IBM System 3 mainframe. PC's weren't invented yet. I use modal popups (the popup will never lose focus) in many of my apps also and any code after opening the popup will execute. But, that code has nothing to do with the response from a user who uses that popup. To use the response from the user you would need to call a different function.

Your <<<< comments are correct. The 'confirm' command is what provides the wait. Once the user clicks something the remaining code is run (code that matches user response).

I don't do jQuery either so it wouldn't do any good to send me any.

Posted by: CharlesEF Apr 2 2018, 07:21 PM

Attached is a sample page with a modal popup (that's what I call it). In the zip file is the original combobox.html with a few slight changes. Open 'selects.html' in your browser and add an item to any of the selects.

Does your current web host provide mysql databases? Or maybe you have a different database.
Attached File  temp.zip ( 3.43k ) Number of downloads: 336

Posted by: bowlesj Apr 2 2018, 09:54 PM

QUOTE(CharlesEF @ Apr 2 2018, 08:21 PM) *

Attached is a sample page with a modal popup (that's what I call it). In the zip file is the original combobox.html with a few slight changes. Open 'selects.html' in your browser and add an item to any of the selects.

Does your current web host provide mysql databases? Or maybe you have a different database.
Attached File  temp.zip ( 3.43k ) Number of downloads: 336



Thanks for the "adding to a combo box" example. Another variant on your idea in my table situation (which I never would have thought of without your help) would be to add anther column to the right of the combo box and if they can't find it in the list they could reset the combo box to unselected and tab over to the next column and fill it out. This way I would know it was new when they send the form down to my php code which creates the mailing. The way I am doing it now I would never know it was new.

I suspect my web host company has mysql. As I mentioned I am not bothering to ask to see if I could set it up. They support php so my guess is they do.

I went back to that jquery thing. I suspect it is just creating a http://www.echoecho.com/csslayers.htm which has 2 buttons on it and a checkbox. That is why the javascript code just keeps going (opening a layer won't stop the code). When any of these items in the special protected layer are clicked a function must be called to create an action. So in effect it is a layer that looks like a user prompt but is not a real user prompt. I came up with the idea of putting the exit function immediately after the function that creates the layer as a way to make it easier to understand. It is better than creating a special function in the middle of nowhere.

Posted by: CharlesEF Apr 2 2018, 10:13 PM

If you have the screen area available then adding another column like you say is a good idea. If you trust your user to only fill in the field when a item is not in the drop down. Or, you could hide that extra column and use a variant of my modal example to fill in that column only when a new item is added.

Posted by: bowlesj Apr 2 2018, 11:01 PM

QUOTE(CharlesEF @ Apr 2 2018, 11:13 PM) *

If you have the screen area available then adding another column like you say is a good idea. If you trust your user to only fill in the field when a item is not in the drop down. Or, you could hide that extra column and use a variant of my modal example to fill in that column only when a new item is added.

Yes I think your last idea is the best. I am a bit tight on space. I am assuming I could make it hidden and very narrow but it could still store a large song name.

By the way, I did some RPG programming when I was in school learning Assembler, Cobol and RPG II. They were just phasing it out at the job I landed after school. They were also phasing out Assembler. They stuck with Cobol for many years after that and moved to Microfocus Cobo when they shifted to unix. It was at that time I learned unix shell scripting (loved that set of languages). I picked up MS-Access VBA on my own. 4 years ago I decided to learn web programming and basically learned the little I know through google searches (learned just enough to complete my website with about 200 database driven pages). What some might call "just in time learning".

Posted by: CharlesEF Apr 3 2018, 03:00 AM

QUOTE(bowlesj @ Apr 2 2018, 11:01 PM) *
By the way, I did some RPG programming when I was in school learning Assembler, Cobol and RPG II. They were just phasing it out at the job I landed after school. They were also phasing out Assembler. They stuck with Cobol for many years after that and moved to Microfocus Cobo when they shifted to unix. It was at that time I learned unix shell scripting (loved that set of languages). I picked up MS-Access VBA on my own. 4 years ago I decided to learn web programming and basically learned the little I know through google searches (learned just enough to complete my website with about 200 database driven pages). What some might call "just in time learning".
Yes, I too learned Cobol and RPG II, among many others. While I was working on mainframes the VIC 20 came out. You would be surprised at what you could learn from the VIC 20 and Commodore 64. I too moved to Unix and shell scripting, it was wonderful.

Anyway, attached is a different version of the previous file. Place it in the same directory as 'selects.html'.
Attached File  table.html ( 8.35k ) Number of downloads: 338

Posted by: bowlesj Apr 3 2018, 04:54 AM

Thanks for the new version of the previous file. I just checked it out. I like how you managed to get the column to hide. When I tried it the column's data just went away but the column stayed there. Time to study how you did that :-)

I had a Commodore 64. I wrote a tiny machine language loop on it just to check it out. It was a bit too low for me :-) I knew a guy who wrote games in machine language on a Commodore pet I think it was. I would think that would be very tedious.

Posted by: bowlesj Apr 3 2018, 06:01 AM

I tried the download of your table sample CharlesEF. For some reason reason it says it is downloading but I don't find it in my downloads directory.

Here is the jquery popup as a return gift. I don't understand exactly how the jquery part works but I persisted and managed to get command of creating these nice looking simulated layer popups. Putting the call back function immediately after the initial call that opens up the popup layer helps one get less confused when debugging/revisiting because they are right together (I wish I got that idea when I first started working with it). GlobalDeleteCookieProcedure is a variable that does exactly what it says. You give it a value if you want to include the popup telling the user how to bring the main popup back if they decide to check the box to not see it any more. I don't actually remember what the Mod_DialogPopupHelp php module does even though I put it together (one forgets a lot in 4 years). I included it because it appears to be part of the set.


I created a page for testing all the combinations and deleting the checkbox cookies. I attached the full page as well. It is the one called frmDialogAllButtons.php

CODE

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/themes/smoothness/jquery-ui.css" />
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.1/jquery-ui.min.js"></script>




<!--this HTML code defines the actual text area for the confirm box. It is basically the layer.-->
<div id="dialog-confirm-checkbox">dialog init message</div>

<style>
/* This CSS code is to make your layer hidden when it first goes out */
#dialog-confirm-checkbox {  
    display:none
}
</style>

<script>
var GlobalCookieName = "Whatever"; //Defined so the checkbox function could get the cookie name
var GlobalDeleteCookieProcedure = ""; //You set this as null if you want no message given to the user on how to delete the cookie
var GlobalPopupResponse = "?";


//======================================================================== Function Pair
//START: Function Pair
function funcTestEnter(CookieName,ConfirmMessage) {
   if (checkCookie(CookieName) == "set") {
      funcAfterDialogProcess(CookieName);
      return true;
   }
   GlobalCookieName = CookieName; //Set so the checkbox function could get the name
   funcDialogConfirmCheckbox(CookieName,ConfirmMessage);
}
function funcTestExit() {
   if (GlobalPopupResponse == "Y") {
      //alert("They Entered Y");
      document.getElementById('Editbox_DialogTest').value = "Y";
   }
   if (GlobalPopupResponse == "N") {
      //alert("They Entered N");
      document.getElementById('Editbox_DialogTest').value = "N";
   }
}
//END: Function Pair

//======================================================================== Dialog Box
function funcDialogConfirmCheckbox(CookieName,ConfirmMessage) {
   document.getElementById('dialog-confirm-checkbox').innerHTML = ConfirmMessage; //Set the confirm dialog
    $("#dialog-confirm-checkbox").dialog({
        resizable: false,
        modal: true,
        title: "Please Confirm.",
        height: 250,
        width: 500,
        create: function (e, ui) {
            var pane = $(this).dialog("widget").find(".ui-dialog-buttonpane")
            $("<label class='ConfirmCheckboxClass' ><input id='ConfirmCheckbox' type='checkbox'/> Don't show this confirmation again?</label>").prependTo(pane)
        },
        buttons: {
            "Yes": function () {
               document.getElementById('ConfirmCheckbox').checked = false;
                GlobalPopupResponse = "Y";
               $(this).dialog('close');
               funcTestExit();
            },
            "No": function () {
               document.getElementById('ConfirmCheckbox').checked = false;
                GlobalPopupResponse = "N";
               $(this).dialog('close');
               funcTestExit();
            }
        }
    });
}

//======This function takes care of the checking and unchecking of the checkbox
$(document).on("change", ".ConfirmCheckboxClass input", function () {
   if (this.checked == true) {
      document.cookie = GlobalCookieName + "=" + 'Bypass; expires=Thu, 18 Dec 2099 12:00:00 UTC;'
      if (GlobalDeleteCookieProcedure == "") {
          //No Message to display
      } else {
         alert(GlobalDeleteCookieProcedure);  //This tells the user how to bring the pop-up back again
      }
   } else {
      deleteCookie(GlobalCookieName); //User could change their mind
      //alert("Confirmation is activate again");                
   } //End of the if statement
})

</script>




Attached File(s)
Attached File  Mod_DialogConfirm.php ( 1.13k ) Number of downloads: 139
Attached File  Mod_DialogConfirmCheckbox.php ( 2.62k ) Number of downloads: 139
Attached File  Mod_DialogCookieFunctions.php ( 710bytes ) Number of downloads: 144
Attached File  Mod_DialogPopup.php ( 801bytes ) Number of downloads: 144
Attached File  Mod_DialogPopupCheckbox.php ( 2.34k ) Number of downloads: 131
Attached File  Mod_DialogPopupHelp.php ( 796bytes ) Number of downloads: 134
Attached File  frmDialogAllButtons.php ( 9.37k ) Number of downloads: 138

Posted by: CharlesEF Apr 3 2018, 12:22 PM

I've a full day ahead but I'll look over the files tonight. Let's try the download again. I zipped it up this time.
Attached File  temp1.zip ( 5.66k ) Number of downloads: 337

Posted by: bowlesj Apr 3 2018, 05:22 PM

The zip file came down this time.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)