Building a autocomplete search input with a combobox - actionscript-3

I'm trying to create a combobox that will fill with posible auto complete results, I firstly have all the words in an array that compares to the user input, its then put into a switch statement that adds the words to the combobox. I however can't get it right to remove the results from the combobox when the input changes.
var dictionary:Vector.<String> = new Vector.<String>();
dictionary.push("University Chapel");
dictionary.push("IT Building");
dictionary.push("Student Centre");
dictionary.push("EMS Building");
dictionary.push("EMB Building");
dictionary.push("Monastry Hall");
dictionary.push("Conference Centre");
dictionary.push("Client Service Centre");
var objects:Vector.<MovieClip> = new Vector.<MovieClip>();
stage.focus = inputBox;
inputBox.addEventListener(Event.CHANGE, onCompletions);
function onCompletions(event:Event):void{
for(var i:int = 0; i < dictionary.length; ++i){
if(dictionary[i].indexOf(inputBox.text) >= 0){
switch(dictionary[i]) {
case 'IT Building':
cbox.addItemAt({label:"IT Building", data:"screenData" + newRow},0);
break;
case 'University Chapel':
cbox.addItemAt({label:"University Chapel", data:"screenData" + newRow},0);
break;
case 'Student Centre':
cbox.addItemAt({label:"Student Centre", data:"screenData" + newRow},0);
break;
case 'EMS Building':
cbox.addItemAt({label:"EMS Building", data:"screenData" + newRow},0);
break;
case 'EMB Building':
cbox.addItemAt({label:"EMB Building", data:"screenData" + newRow},0);
break;
case 'Monastry Hall':
cbox.addItemAt({label:"Monastry Hall", data:"screenData" + newRow},0);
break;
case 'Conference Centre':
cbox.addItemAt({label:"Conference Centre", data:"screenData" + newRow},0);
break;
case 'Client Service Centre':
cbox.addItemAt({label:"Client Service Centre", data:"screenData" + newRow},0);
break;
}
}
else {
//cbox.removeAll(); //Where I attempted to remove all the results
}
}
}
So I'm trying to remove the results from the combobox and have them re evaluated and then inserted again. Just as a side question is there a way to expand comboboxs through actionscript ?
Thanks in advance

If anyone is interested, I got it to work, so this will basically create a autocomplete search input box.
var dictionary:Vector.<String> = new Vector.<String>();
dictionary.push("University Chapel");
dictionary.push("IT Building");
dictionary.push("Student Centre");
dictionary.push("EMS Building");
dictionary.push("EMB Building");
dictionary.push("Monastry Hall");
dictionary.push("Conference Centre");
dictionary.push("Client Service Centre");
stage.focus = inputBox;
inputBox.addEventListener(Event.CHANGE, onCompletions);
cbox.open();
function onCompletions(event:Event):void{
cbox.removeAll();
cbox.close();
for(var i:int = 0; i < dictionary.length; ++i){
if(dictionary[i].indexOf(inputBox.text) >= 0 && inputBox.text != ''){
switch(dictionary[i]) {
case 'IT Building':
cbox.addItemAt({label:"IT Building", data:"screenData"},0);
cbox.open();
break;
case 'University Chapel':
cbox.addItemAt({label:"University Chapel", data:"screenData"},0);
cbox.open();
break;
case 'Student Centre':
cbox.addItemAt({label:"Student Centre", data:"screenData"},0);
cbox.open();
break;
case 'EMS Building':
cbox.addItemAt({label:"EMS Building", data:"screenData"},0);
cbox.open();
break;
case 'EMB Building':
cbox.addItemAt({label:"EMB Building", data:"screenData"},0);
cbox.open();
break;
case 'Monastry Hall':
cbox.addItemAt({label:"Monastry Hall", data:"screenData"},0);
cbox.open();
break;
case 'Conference Centre':
cbox.addItemAt({label:"Conference Centre", data:"screenData"},0);
cbox.open();
break;
case 'Client Service Centre':
cbox.addItemAt({label:"Client Service Centre", data:"screenData"},0);
cbox.open();
break;
}
}
}
}

Related

dynamic view of the syncfusion schedule angular component

In the parameterization of the Schedule to Angular component I would like to know if it is possible to somehow define the start time and end time for a day.
I would like to define for each day what is the start time and the end time.
As this example I realized that the start time and end time is for every day, I would like to set the start time and end time for each day.
const resourceObject = {
text: p.nome, id: p.id,
color: '#848484', workDays: daysNumber,
startHour: '13:00', endHour: '18:00'
};
We have prepared the below sample to have different work hours per day using DataBinding event.
https://stackblitz.com/edit/angular-fxqnrc-njutc8?file=app.component.ts
Please refer below UG.
https://ej2.syncfusion.com/angular/documentation/api/schedule/#setworkhours
if (this.flag) {
if (
this.scheduleObj.currentView !== "Month" &&
this.scheduleObj.currentView !== "Agenda"
) {
var currentViewDates = this.scheduleObj.getCurrentViewDates();
for (var i = 0; i < currentViewDates.length; i++) {
switch ((currentViewDates[i] as any).getDay()) {
case 0:
this.scheduleObj.setWorkHours(
[currentViewDates[i]],
"06:00",
"14:00"
);
break;
case 1:
this.scheduleObj.setWorkHours(
[currentViewDates[i]],
"08:00",
"14:00"
);
break;
case 2:
this.scheduleObj.setWorkHours(
[currentViewDates[i]],
"07:00",
"20:00"
);
break;
case 3:
debugger;
this.scheduleObj.setWorkHours(
[currentViewDates[i]],
"09:00",
"13:00"
);
break;
case 4:
debugger
this.scheduleObj.setWorkHours(
[currentViewDates[i]],
"06:00",
"14:00"
);
break;
case 5:
debugger
this.scheduleObj.setWorkHours(
[currentViewDates[i]],
"08:00",
"15:00"
);
break;
case 6:
this.scheduleObj.setWorkHours(
[currentViewDates[i]],
"07:00",
"19:00"
);
}
}
}
this.flag = false;
}

Line 49, 52,55,58,61,64- 1119:Access of possibly undefined property text through a reference with static type String

Not sure what I am doing wrong, I removed any text from the text box fields so why am I still getting this error ?
Code below :
switch (day) {
case "Sun":
day.text = "Monday";
break;
case "Mom":
day.text = "Tuesday";
break;
case "Tue":
day.text = "Wednesday";
break;
case "Wed":
day.text = "Thursday";
break;
case "Thu":
day.text = "Friday";
break;
case "Fri":
day.text = "Saturday";
break;
case "Sat":
day.text = "Sunday";
break;
}
switch (codeToday) {
case "0":
case "3200":
var weather00:weather00 = new weather00();
_weatherToday.addChild(weather00);
_weatherToday.scaleX = 10.85;
_weatherToday.scaleY = 158.75;
break;
case "1":
case "3200":
var weather01:weather01 = new weather01();
_weatherToday.addChild(weather01);
_weatherToday.scaleX = 10.85;
_weatherToday.scaleY = 158.75;
break;
}
i suppose that 'day' is a String variable and have not a text property - look here -> String
Some components have a text property like: TextField and TextArea

my google apps script doesn't run, no parameters with serverhandler

I try to change a sheets with a script but it doesn't work as expected. I can load the right panel, but nothing happens when I try to record the change. It seems "masterFunctionPS" isn't called.
The function periodSelection post the panel, the listbox and the button. But nothing append, when I clic on the Button. Nothing change in the sheets.
function periodSelection() {
var activeSS = SpreadsheetApp.getActiveSpreadsheet();
var sheetPS = activeSS.getSheetByName("Periods");
var uiPS = UiApp.createApplication().setWidth(300);
var panelPS = uiPS.createVerticalPanel();
var periodPS = uiPS.createListBox();
for (var i = 2; i < 13; i++) {
var range = "A" + i;
periodPS.addItem(sheetPS.getRange(range).getValue());
}
var endDatePS = uiPS.createDatePicker();
var recordPS = uiPS.createButton("Enregistrer");
var masterPS = uiPS.createServerHandler('masterFunctionPS');
masterPS.addCallbackElement(periodPS)
.addCallbackElement(endDatePS)
recordPS.addClickHandler(masterPS);
panelPS.add(periodPS);
panelPS.add(endDatePS);
panelPS.add(recordPS);
uiPS.add(panelPS);
SpreadsheetApp.getUi().showSidebar(uiPS);
return uiPS;
}
function masterFunctionPS(element) {
var parameterPS = element.parameter;
var appE = UiApp.getActiveApplication();
var periodE = parameterPS.periodPS;
var endDateE = parameterPS.endDatePS;
var activeE = parameterPS.activeSS;
var sheetE = parameterPS.sheetPS;
switch (periodE) {
case "P1":
sheetE.getRange("C2").setValue(endDateE);
break;
case "P2":
sheetE.getRange("C3").setValue(endDateE);
break;
case "P3":
sheetE.getRange("C4").setValue(endDateE);
break;
case "P4":
sheetE.getRange("C5").setValue(endDateE);
break;
case "P5":
sheetE.getRange("C6").setValue(endDateE);
break;
case "P6":
sheetE.getRange("C7").setValue(endDateE);
break;
case "P7":
sheetE.getRange("C8").setValue(endDateE);
break;
case "P8":
sheetE.getRange("C9").setValue(endDateE);
break;
case "P9":
sheetE.getRange("C10").setValue(endDateE);
break;
case "10":
sheetE.getRange("C11").setValue(endDateE);
break;
case "P11":
sheetE.getRange("C12").setValue(endDateE);
break;
}
return (appE);
}
There are a few errors in your code...mainly you forgot to give names to your widgets and name is used to retrieve values from the callbackelements
below is a "rectified" version that works but there are still 2 items that won't work because you tried to get properties of the sheet in the Ui and that can't be done like this...
please explain what for you need that and I could suggest a better way to go.
(see comments in code and look at the logger to see the values in event parameters)
function periodSelection() {
var activeSS = SpreadsheetApp.getActiveSpreadsheet();
var sheetPS = activeSS.getActiveSheet();
var uiPS = UiApp.createApplication();
var panelPS = uiPS.createVerticalPanel();
var periodPS = uiPS.createListBox().setName('periodPS');
for (var i = 2; i < 13; i++) {
var range = "A" + i;
periodPS.addItem(sheetPS.getRange(range).getValue());
}
var endDatePS = uiPS.createDatePicker().setName('endDatePS');
var recordPS = uiPS.createButton("Enregistrer");
var masterPS = uiPS.createServerHandler('masterFunctionPS');
masterPS.addCallbackElement(panelPS);
recordPS.addClickHandler(masterPS);
panelPS.add(periodPS);
panelPS.add(endDatePS);
panelPS.add(recordPS);
uiPS.add(panelPS);
SpreadsheetApp.getUi().showSidebar(uiPS);
}
function masterFunctionPS(element) {
var parameterPS = element.parameter;
var appE = UiApp.getActiveApplication();
Logger.log('parameter : '+JSON.stringify(parameterPS));
var periodE = parameterPS.periodPS;
var endDateE = parameterPS.endDatePS;
var activeE = parameterPS.activeSS; // won't work
var sheetE = parameterPS.sheetPS; // won't work
switch (periodE) {
case "P1":
sheetE.getRange("C2").setValue(endDateE);
break;
case "P2":
sheetE.getRange("C3").setValue(endDateE);
break;
case "P3":
sheetE.getRange("C4").setValue(endDateE);
break;
case "P4":
sheetE.getRange("C5").setValue(endDateE);
break;
case "P5":
sheetE.getRange("C6").setValue(endDateE);
break;
case "P6":
sheetE.getRange("C7").setValue(endDateE);
break;
case "P7":
sheetE.getRange("C8").setValue(endDateE);
break;
case "P8":
sheetE.getRange("C9").setValue(endDateE);
break;
case "P9":
sheetE.getRange("C10").setValue(endDateE);
break;
case "10":
sheetE.getRange("C11").setValue(endDateE);
break;
case "P11":
sheetE.getRange("C12").setValue(endDateE);
break;
}
return appE;
}
EDIT :
I think I guess what you are trying to do...
Actually the active SS and sheet are always the same, you can just reuse it the same way ...(personally I would keep the same names all along...) see updated handler function below :
function masterFunctionPS(element) {
var parameterPS = element.parameter;
var appE = UiApp.getActiveApplication();
Logger.log('parameter : '+JSON.stringify(parameterPS));
var periodE = parameterPS.periodPS;
var endDateE = parameterPS.endDatePS;
// var activeE = parameterPS.activeSS; // won't work
// var sheetE = parameterPS.sheetPS; // won't work
var activeE = SpreadsheetApp.getActiveSpreadsheet();
var sheetE = activeE.getActiveSheet();
switch (periodE) {
case "P1":
sheetE.getRange("C2").setValue(endDateE);
break;
case "P2":
sheetE.getRange("C3").setValue(endDateE);
break;
case "P3":
sheetE.getRange("C4").setValue(endDateE);
break;
case "P4":
sheetE.getRange("C5").setValue(endDateE);
break;
case "P5":
sheetE.getRange("C6").setValue(endDateE);
break;
case "P6":
sheetE.getRange("C7").setValue(endDateE);
break;
case "P7":
sheetE.getRange("C8").setValue(endDateE);
break;
case "P8":
sheetE.getRange("C9").setValue(endDateE);
break;
case "P9":
sheetE.getRange("C10").setValue(endDateE);
break;
case "10":
sheetE.getRange("C11").setValue(endDateE);
break;
case "P11":
sheetE.getRange("C12").setValue(endDateE);
break;
}
// the following line is only for test... remove it when it works!!!
sheetE.getRange("A1").setValue('failed to write value '+endDateE);
return appE;
}

why is this switch case not working?

why is this switch case not working... even if i pick the button monday it shows me default message..
switch (finalsave.weekday) {
case finalsave.weekday == 1:
trace ("monday");
break;
case finalsave.weekday== 2:
trace ("tuesday");
break;
case finalsave.weekday == 3:
trace ("wednesday");
break;
case finalsave.weekday == 4:
trace ("thursday");
break;
case finalsave.weekday == 5:
trace ("friday");
break;
default:
trace ("nothingness");
}
switch (finalsave.weekday) {
case 1:
trace ("monday");
break;
case 2:
trace ("tuesday");
break;
case 3:
trace ("wednesday");
break;
... etc.
}
Or if you want to ditch that godawful switch-case altogether:
var weekdays: Array = [
"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"
]
var index : int = finalsave.weekday -1;
trace( weekdays[ index ] );
After case, you should mention the possible value of your variable,
Below is the syntax of switch case for action script, c/c++ , java and javascript:
Switch case using strings.
view sourceprint?
switch("hello world")
{
case "hello":
trace("The man says hello");
break;
case "hello cat":
trace("The man says hello cat");
break;
case "hello world":
trace("The man says hello world");
break;
default:
trace("None of the above were met");
}
In this example the text "The man says hello world" is traced out.
Switch Case using integers, what fun.
switch(1)
{
case 1:
trace("The Number 1");
break;
case 2:
case 3:
trace("The Number 2 or 3");
break;
default:
trace("None of the numbers above");
}
from http://www.how-to-code.com/as3-actionscript3/as3-conditionals/as3-switch-case.html

Adobe AIR 3.2 Glitch

I just finished a successful build of my program last night. Then, I get up this morning, and after an update fro Adobe AIR 3.1 to AIR 3.2, I find THIS bug!
The same build under 3.1 works perfectly. However, as soon as 3.2 is installed, the following code after stopDrag fails silently. Mind you, it only fails in the packed and installed AIR application. It works perfectly when I test it inside of Adobe Flash Professional CS5.5
WHAT is going on? Here's the code I'm dealing with. Again, this works without error for Adobe AIR 3.1, but fails for 3.2. I cannot get to any other MouseEvent.MOUSE_UP events in my program at this point, due to my structure.
I omitted the irrelevant parts of the code. All the same, there is a lot, due to the fact that I don't know where the error occurs exactly. Instead of everything that is supposed to happen happening, stopDrag is the last line of code that fires in this block.
tile5.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler5);
function mouseUpHandler5(evt:MouseEvent):void
{
Mouse.cursor = "paw";
var obj = evt.target;
var target = obj.dropTarget;
obj.stopDrag();
if (target != null && target.parent == hsSlot1)
{
brdgcheck(5, 1);
}
}
function brdgcheck(tile:int, slot:int)
{
var ck_brdg_l:String = "osr.Langue.brdg_l" + String(slot);
var ck_brdg_t:String = "osr.Langue.brdg_t" + String(tile);
var ck_slotfilled:String = "Slot" + String(slot) + "Filled";
var ck_tile:String = "tile" + String(tile);
var ck_slot:String = "hsSlot" + String(slot);
var ck_txtTile:String;
switch(tile)
{
case 1:
ck_brdg_t = osr.Langue.brdg_t1;
ck_txtTile = tile1.txtTile1.text;
break;
case 2:
ck_brdg_t = osr.Langue.brdg_t2;
ck_txtTile = tile2.txtTile2.text;
break;
case 3:
ck_brdg_t = osr.Langue.brdg_t3;
ck_txtTile = tile3.txtTile3.text;
break;
case 4:
ck_brdg_t = osr.Langue.brdg_t4;
ck_txtTile = tile4.txtTile4.text;
break;
case 5:
ck_brdg_t = osr.Langue.brdg_t5;
ck_txtTile = tile5.txtTile5.text;
break;
}
switch(slot)
{
case 1:
ck_brdg_l = osr.Langue.brdg_l1;
break;
case 2:
ck_brdg_l = osr.Langue.brdg_l2;
break;
case 3:
ck_brdg_l = osr.Langue.brdg_l3;
break;
case 4:
ck_brdg_l = osr.Langue.brdg_l4;
break;
case 5:
ck_brdg_l = osr.Langue.brdg_l5;
break;
}
if (ck_brdg_l == ck_brdg_t)
{
osr.Sonus.PlaySound("concretehit");
this[ck_slotfilled].visible = true;
switch(slot)
{
case 1:
Slot1Filled.txtSlot1.text = ck_txtTile;
break;
case 2:
Slot2Filled.txtSlot2.text = ck_txtTile;
break;
case 3:
Slot3Filled.txtSlot3.text = ck_txtTile;
break;
case 4:
Slot4Filled.txtSlot4.text = ck_txtTile;
break;
case 5:
Slot5Filled.txtSlot5.text = ck_txtTile;
break;
}
this[ck_tile].visible = false;
this[ck_slot].visible = false;
if (hsSlot1.visible == false && hsSlot2.visible == false && hsSlot3.visible == false && hsSlot4.visible == false && hsSlot5.visible == false)
{
osr.Gradua.Score(true);
osr.Gradua.Evaluate("brdg");
btnReset.visible = false;
hsChar.visible = false;
if (osr.Gradua.Fetch("brdg", "arr_act_stcnt") < 4)
{
bga.gotoAndPlay("FINKEY");
win_key();
}
else
{
bga.gotoAndPlay("FINNON");
}
}
else
{
osr.Gradua.Score(true);
}
}
else
{
osr.Gradua.Score(false);
osr.Sonus.PlaySound("glassbreak");
switch(tile)
{
case 1:
tile1.x = 92.85;
tile1.y = 65.85;
break;
case 2:
tile2.x = 208.80;
tile2.y = 162.85;
break;
case 3:
tile3.x = 324.80;
tile3.y = 65.85;
break;
case 4:
tile4.x = 437.80;
tile4.y = 162.85;
break;
case 5:
tile5.x = 549.80;
tile5.y = 65.85;
break;
}
}
}
EDIT: I found a good workaround, to use "if (hsSlot1.hitTestPoint(mouseX,mouseY) && hsSlot1.visible == true)"
However, a solution to this problem would still be appreciated!