Dijit Selects, Items in the Combobox disabled = true doesn't works - javascript
This is my code and it doesn't works. It belong to a combobox. Some items should be disabled in it.
var data = [];
for (i = 0; i < items.length; i++) {
data.push({id: items[i].id, label: "foobaa"});
data.getOptions(items[i].id).disabled = true;
}
var memory = new Memory({
idProperty: "id",
data: data
});
this._widget.set("store", memory);
I found a code snipe at fiddle.net and this works but im not able to converte it to my problem.
http://jsfiddle.net/g00glen00b/akcZy/
Also the otherwise super documentation of dojo doesn't helps me :-(
http://dojotoolkit.org/documentation/tutorials/1.10/selects_using_stores/
I have made some changes try this and let me know is this your need? Use the code below to disable all the select items.
var data = [];
for (i = 0; i < myData.length; i++) {
data.push('{id: myData[i].id, label: "foobaa"}');
registry.byId("mySelect").getOptions(myData[i].id).disabled = true;
}
http://jsfiddle.net/f3snxrrd/
http://jsfiddle.net/5pgkkf0z/
items: {
mutators: {
value: [],
type: verify.ARRAY
},
widget: {
updateI18n: true,
mapping: function (widget, items) {
if (this._widget) {
var i;
var data = [];
for (i = 0; i < items.length; i++) {
data.push({id: items[i].id, label: i18n.resolveSequence(items[i].label)});
//register.byId(data).getOptions((items[i].value).disabled = true);
}
var memory = new Memory({
idProperty: "id",
data: data
});
this._widget.set("store", memory);
this._widget.closeDropDown(true);
this._widget.reset();
if (items.length === 0) {
this._enabledItems = false;
}
else if (items.length === 1) {
this.set("selectedId", items[0].id);
this._enabledItems = (this.get("selectedId") !== items[0].id);
}
else {
this._enabledItems = true;
}
this._widget.set("disabled", !(this._enabledState && this._enabledItems ));
}
}
}
},
_createWidget: function () {
var ret;
ret = new Select({id: this.uniqueId, disabled: true, labelAttr: "label", labelType: "Text", required: false, store: new Memory({data: []})});
var that = this;
ret.own(on(ret, "change", function (value) {that._onChange(value); }));
return ret;
},
This is the items array:
The code from jsfiddle.net
http://jsfiddle.net/8m52n81u/11/
I can't change the items array :-/
items = [{
id: "0",
label: key[{0: "foo", 1: "baa"}]
}, {
id: "1",
label: key[{0: "foo", 1: "baa"}]
}];
require([
"dojo/ready",
"dijit/registry",
"dijit/form/Select",
"dojo/store/Memory",
"dojo/parser"
], function(ready, registry) {
ready(function() {
var data = [];
for (i = 0; i < items.length; i++) {
data.push('{id: items[i].id, label: items[i].label}');
registry.byId("uniqueId").getOptions(items[i].id).disabled = true;
}
});
});
Related
Group key value objects
I have an array of objects (pre_finalTab_new below) like this: My goal is to group them by "schema", and then by "tip" and insert into new array, something like this: var celotnaTabela = {}; for (var nov in pre_finalTab_new) { var shema = pre_finalTab_new[nov].schema.trim(); var objekt_tip = pre_finalTab_new[nov].type.trim(); var objekt_name = pre_finalTab_new[nov].name.trim(); var tip = pre_finalTab_new[nov].tip.trim(); if (celotnaTabela[shema] === undefined) { celotnaTabela[shema] = []; if (celotnaTabela[shema][tip] === undefined) { celotnaTabela[shema][tip] = []; if (celotnaTabela[shema][tip][objekt_tip] === undefined) { celotnaTabela[shema][tip][objekt_tip] = []; celotnaTabela[shema][tip][objekt_tip] = [objekt_name]; } else celotnaTabela[shema][tip][objekt_tip].push(objekt_name); } } else { if (celotnaTabela[shema][tip] === undefined) { celotnaTabela[shema][tip] = []; } if (celotnaTabela[shema][tip][objekt_tip] === undefined) { celotnaTabela[shema][tip][objekt_tip] = []; celotnaTabela[shema][tip][objekt_tip] = [objekt_name]; } else { if (!celotnaTabela[shema][tip][objekt_tip].includes(objekt_name)) celotnaTabela[shema][tip][objekt_tip].push(objekt_name); } } } Then if i output celotnaTabela, i got this: Expanded: Even more: But the problem is, when i try to use JSON.stringify(celotnaTabela), i got this: {"HR":[],"ZOKI":[]} But i need it to be in a right format, so i can pass this object into AJAX call.. Can anyone help me with this, what am i doing wrong?
i hope i understood everything right you asked for. Next time provide the testdata and the wished result in textform pls. var obj = [ { schema: "HR", type: " PACKAGE", name: "PAKET1", tip: "new_objects" }, { schema: "HR", type: " PACKAGE", name: "PAKET2", tip: "new_objects" }, { schema: "HR", type: " PROCEDURE", name: "ADD_JOB_HISTORY", tip: "new_objects" }, { schema: "ZOKI", type: " TABLE", name: "TABELA2", tip: "new_objects" }, { schema: "ZOKI", type: " TABLE", name: "TABELA3", tip: "new_objects" }, ]; var out = {}; for (var i = 0, v; v = obj[i]; i++) { var a = v.schema.trim(); var b = v.type.trim(); var c = v.tip.trim(); var d = v.name.trim(); if (!out.hasOwnProperty(a)) { out[a] = {}; } if (!out[a].hasOwnProperty(b)) { out[a][b] = {}; } if (!out[a][b].hasOwnProperty(c)) { out[a][b][c] = [] } out[a][b][c].push(d); } console.log(JSON.stringify(out, null, 2));
How to add background on ag grid pinnedBottomRowData using rowClass in aggrid angular
How to add background in pinnedBottomRowData the entire bottom Row here's the code list.component.ts columnDefs = new Array(); rowData = new Array(); pinnedBottomRowData: any; ngOnInit() { this.columnDefs = [ { 'headerName': 'Style/Machine', 'field': 'total', } ]; for (let i = 1; i < 30; i++) { this.rowData.push( { 'total': 'Machine ' + i } ); } this.pinnedBottomRowData = this.createData(1); } createData(count: number) { const result = []; for (let i = 0; i < count; i++) { result.push({ total: 'Total Machine' }, { total: 'Total', }); } return result; } here's the output
You can use getRowStyle and check if the row is pinned and at the bottom. Please refer the below example. this.getRowStyle = function(params) { if (params.node.rowPinned === 'bottom') { return { "background-color": "blue" }; } }; this.pinnedBottomRowData = createData(1, "Bottom"); Plunker Reference link
Get all possible options for a matrix in javascript
I have an 'item' object in JavaScript, and the item can have settings like color, size, etc. I need to get all possible combinations in an array. So lets say we have an item that looks like this: var newItem = { name: 'new item', Settings: [ {name: 'color', values: ['green', 'blue', 'red']}, {name: 'size', values: ['15', '18', '22']}, {name: 'gender',values: ['male', 'female']} ] }; I need to somehow get this: [ [{SettingName:'color',value:'green'},{SettingName:'size',value:'15'},{SettingName:'gender',value:'male'}], [{SettingName:'color',value:'blue'},{SettingName:'size',value:'15'},{SettingName:'gender',value:'male'}], [{SettingName:'color',value:'red'},{SettingName:'size',value:'15'},{SettingName:'gender',value:'male'}], [{SettingName:'color',value:'green'},{SettingName:'size',value:'18'},{SettingName:'gender',value:'male'}], [{SettingName:'color',value:'blue'},{SettingName:'size',value:'18'},{SettingName:'gender',value:'male'}], [{SettingName:'color',value:'red'},{SettingName:'size',value:'18'},{SettingName:'gender',value:'male'}], [{SettingName:'color',value:'green'},{SettingName:'size',value:'22'},{SettingName:'gender',value:'male'}], [{SettingName:'color',value:'blue'},{SettingName:'size',value:'22'},{SettingName:'gender',value:'male'}], [{SettingName:'color',value:'red'},{SettingName:'size',value:'22'},{SettingName:'gender',value:'male'}], [{SettingName:'color',value:'green'},{SettingName:'size',value:'15'},{SettingName:'gender',value:'female'}], [{SettingName:'color',value:'blue'},{SettingName:'size',value:'15'},{SettingName:'gender',value:'female'}], [{SettingName:'color',value:'red'},{SettingName:'size',value:'15'},{SettingName:'gender',value:'female'}], [{SettingName:'color',value:'green'},{SettingName:'size',value:'18'},{SettingName:'gender',value:'female'}], [{SettingName:'color',value:'blue'},{SettingName:'size',value:'18'},{SettingName:'gender',value:'female'}], [{SettingName:'color',value:'red'},{SettingName:'size',value:'18'},{SettingName:'gender',value:'female'}], [{SettingName:'color',value:'green'},{SettingName:'size',value:'22'},{SettingName:'gender',value:'female'}], [{SettingName:'color',value:'blue'},{SettingName:'size',value:'22'},{SettingName:'gender',value:'female'}], [{SettingName:'color',value:'red'},{SettingName:'size',value:'22'},{SettingName:'gender',value:'female'}] ]
This can be a good interview question. See JS Bin for running example. getAllPermutations(newItem); function getAllPermutations(item) { var permutations = []; getAllPermutations0(item, permutations, []); console.log(permutations); } function getAllPermutations0(item, permutations, array) { if (array && array.length === item.Settings.length) { permutations.push(array.slice()); // The slice clone the array return; } var index = array.length; var setting = item.Settings[index]; for (var i = 0; i < setting.values.length; i++) { if (index === 0) array = []; var currValue = setting.values[i]; array.push({ SettingName: setting.name, value: currValue }); getAllPermutations0(item, permutations, array); array.pop(); // pop the old one first } }
Here is a none recursive solution. It takes an empty or existing settings "matrix" and a values array, and return a new matrix as a combination of existing matrix content cloned for each new value, appended with pairs of new value setting items. [A] -> [1,2] gives [A][1][A][2] [A][1][A][2] -> [X,Y] gives [A][1][X][A][2][Y][A][2][X][A][1][Y] and so on function processSettings(settings, name, values) { if (settings.length == 0) { values.forEach(function(value) { settings.push( [{ SettingName: name, value: value }] ) }) } else { var oldSettings = JSON.parse(JSON.stringify(settings)), settings = [], temp, i = 0 for (i; i<values.length; i++) { temp = JSON.parse(JSON.stringify(oldSettings)) temp.forEach(function(setting) { setting.push( { SettingName: name, value: values[i] } ) settings.push(setting) }) } } return settings } You can now create the desired settings literal this way : var settings = [] for (var i=0; i<newItem.Settings.length; i++) { var item = newItem.Settings[i] settings = processSettings(settings, item.name, item.values) } demo -> http://jsfiddle.net/b4ck98mf/ The above produces this : [ [{"SettingName":"color","value":"green"},{"SettingName":"size","value":"15"},{"SettingName":"gender","value":"male"}], [{"SettingName":"color","value":"blue"},{"SettingName":"size","value":"15"},{"SettingName":"gender","value":"male"}], [{"SettingName":"color","value":"red"},{"SettingName":"size","value":"15"},{"SettingName":"gender","value":"male"}], [{"SettingName":"color","value":"green"},{"SettingName":"size","value":"18"},{"SettingName":"gender","value":"male"}], [{"SettingName":"color","value":"blue"},{"SettingName":"size","value":"18"},{"SettingName":"gender","value":"male"}], [{"SettingName":"color","value":"red"},{"SettingName":"size","value":"18"},{"SettingName":"gender","value":"male"}], [{"SettingName":"color","value":"green"},{"SettingName":"size","value":"22"},{"SettingName":"gender","value":"male"}], [{"SettingName":"color","value":"blue"},{"SettingName":"size","value":"22"},{"SettingName":"gender","value":"male"}], [{"SettingName":"color","value":"red"},{"SettingName":"size","value":"22"},{"SettingName":"gender","value":"male"}], [{"SettingName":"color","value":"green"},{"SettingName":"size","value":"15"},{"SettingName":"gender","value":"female"}], [{"SettingName":"color","value":"blue"},{"SettingName":"size","value":"15"},{"SettingName":"gender","value":"female"}], [{"SettingName":"color","value":"red"},{"SettingName":"size","value":"15"},{"SettingName":"gender","value":"female"}], [{"SettingName":"color","value":"green"},{"SettingName":"size","value":"18"},{"SettingName":"gender","value":"female"}], [{"SettingName":"color","value":"blue"},{"SettingName":"size","value":"18"},{"SettingName":"gender","value":"female"}], [{"SettingName":"color","value":"red"},{"SettingName":"size","value":"18"},{"SettingName":"gender","value":"female"}], [{"SettingName":"color","value":"green"},{"SettingName":"size","value":"22"},{"SettingName":"gender","value":"female"}], [{"SettingName":"color","value":"blue"},{"SettingName":"size","value":"22"},{"SettingName":"gender","value":"female"}], [{"SettingName":"color","value":"red"},{"SettingName":"size","value":"22"},{"SettingName":"gender","value":"female"}] ]
You can use Array.prototype.map(), for loop, while loop, Array.prototype.concat(). Iterate gender values; select each of color, size value in succession beginning at index 0 of either; iterating the furthest adjacent array from current gender, increment the index of the closest adjacent array; merge the resulting two gender arrays to form a single array containing all combinations of gender, color, size var colors = newItem.Settings[0].values; var sizes = newItem.Settings[1].values; var gen = newItem.Settings[2].values; var i = sizes.length; var res = [].concat.apply([], gen.map(function(value, key) { var next = -1; var arr = []; for (var curr = 0; curr < i; curr++) { while (next < i - 1) { arr.push([{ SettingName: "gender", value: value }, { SettingName: "size", value: sizes[curr] }, { SettingName: "color", value: colors[++next] }]) } next = -1; } return arr })) var newItem = { "name": "new item", "Settings": [{ "name": "color", "values": [ "green", "blue", "red" ] }, { "name": "size", "values": [ "15", "18", "22" ] }, { "name": "gender", "values": [ "male", "female" ] }] } var colors = newItem.Settings[0].values; var sizes = newItem.Settings[1].values; var gen = newItem.Settings[2].values; var i = sizes.length; var res = [].concat.apply([], gen.map(function(value, key) { var next = -1; var arr = []; for (var curr = 0; curr < i; curr++) { while (next < i - 1) { arr.push([{ SettingName: "gender", value: value }, { SettingName: "size", value: sizes[curr] }, { SettingName: "color", value: colors[++next] }]) } next = -1; } return arr })) document.querySelector("pre").textContent = JSON.stringify(res, null, 2) <pre></pre> plnkr http://plnkr.co/edit/C2fOJpfwOrlBwHLQ2izh?p=preview
An approach using Array.prototype.reduce(), Array.prototype.sort(), Object.keys(), for loop, while loop var newItem = { name: 'new item', Settings: [ { name: 'color', values: ['green', 'blue', 'red'] }, { name: 'size', values: ['15', '18', '22'] }, { name: 'gender', values: ['male', 'female'] } ] }; var props = ["SettingName", "value"]; var settings = newItem.Settings; function p(settings, props) { var data = settings.reduce(function(res, setting, index) { var name = setting.name; var obj = {}; obj[name] = setting.values; res.push(obj); return res.length < index ? res : res.sort(function(a, b) { return a[Object.keys(a)[0]].length - b[Object.keys(b)[0]].length }) }, []); var key = data.splice(0, 1)[0]; return [].concat.apply([], key[Object.keys(key)].map(function(value, index) { return data.reduce(function(v, k) { var keys = [v, k].map(function(obj) { return Object.keys(obj)[0] }); var i = Math.max.apply(Math, [v[keys[0]].length, k[keys[1]].length]); var next = -1; var arr = []; for (var curr = 0; curr < i; curr++) { while (next < i - 1) { var a = {}; a[props[0]] = keys[0]; a[props[1]] = v[keys[0]][++next]; var b = {}; b[props[0]] = keys[1]; b[props[1]] = k[keys[1]][next]; var c = {}; c[props[0]] = Object.keys(key)[0]; c[props[1]] = value; arr.push([a, b, c]); }; next = -1; } return arr }); })); } document.querySelector("pre").textContent = JSON.stringify( p(settings, props), null, 2 ); <pre></pre>
how to dynamically generate model names in a service
I have a service that i am using to apply a unique number to a model name. the result i am getting is this "sectionInputs": [ { "model": "price_min1" }, { "model": "price_max2" }, { "model": "units_occ3" }, { "model": "inv_mod4" }, { "model": "inv_fin5" }, { "model": "inv_vdl6" }, { "model": "inv_uc7" }, { "model": "inv_fut8" }, { "model": "inv_con9" }, { "model": "units_total10" } ] i need this to each have '1'. and then in the next object array i need them to have '2', etc... as of now every object array looks like this. i have a plunker with everything setup. plunker function sectionInputSvc(sectionInputs) { var vm = this; vm.sectionInputsArry = sectionInputs; vm.sectionInputs = function () { var arry = []; var counter = 0; for (var i = 0; i < vm.sectionInputsArry.length; i++) { counter++ var obj = { model: vm.sectionInputsArry[i].model + counter }; arry.push(obj); }; return arry; }; };
[EDIT 2] in app.js... sections[i].sectionInputs = sectionInputSvc.sectionInputs(sections[i],i); and in section.service.js... function sectionInputSvc(sectionInputs) { var vm = this; vm.sectionInputsArry = sectionInputs; var obj2={}; vm.sectionInputs = function (obj2,num) { var arry = []; var counter = 0; for (var i = 0; i < vm.sectionInputsArry.length; i++) { counter++ var obj = { model: vm.sectionInputsArry[i].model + num }; arry.push(obj); }; return arry; }; };
Using linq.js, and assuming the suffixes do not already exist on the names: vm.sectionInputs = function () { return Enumerable.From(vm.sectionInputsArry).Zip(Enumerable.ToInfinity(1), "{ model: $.model+$$ }" ).ToArray(); };
How can I resize Jira gadgets' data?
I am implementing a Jira gadget. I have an problem about retrieve data. I am retrieving data from DB to gadget. There are lots of columns so the gadget cannot show all columns. I guess I have to resize data. There is one more thing; how can I stop the retrieving data to go end of pages? Here is my gadget.xml #requireResource("com.atlassian.gadgets.publisher:ajs-gadgets") #requireResource("sqlGadget:Web-resources") #requireResource("com.atlassian.jira.gadgets:common") #requireResource("com.atlassian.jira.gadgets:autocomplete") #includeResources() <script type="text/javascript"> (function () { var gadget = AJS.Gadget({ baseUrl: "__ATLASSIAN_BASE_URL__", useOauth: "/rest/gadget/1.0/currentUser", config: { descriptor: function(args) { var gadget = this; gadgets.window.setTitle("SQL Gadget Config"); var projectPicker = AJS.gadget.fields.projectPicker(gadget, "projectId", args.projectOptions); return { fields: [ projectPicker, { id: "configNumber-id", userpref: "configNumber", label: "Config number", description: "", type: "select", selected: gadget.getPref("configNumber"), options: [ { label:"1", value:"1" }, { label:"2", value:"2" }, { label:"3", value:"3" } ] }, AJS.gadget.fields.nowConfigured() ] }; }, args: function() { return [ { key: "projectOptions", ajaxOptions: "/rest/gadget/1.0/filtersAndProjects?showFilters=false" } ]; }() }, view: { /* HTML PART*/ onResizeAdjustHeight: true, enableReload: true, template: function (args) { var gadget = this; var response = args.projects.value; AJS.$.each(AJS.$.parseJSON(response), function(idx, obj) { console.log(obj); }); var myList=AJS.$.parseJSON(response); var test="<body onLoad=buildHtmlTable()><table id=excelDataTable border=1> </table></body>"; document.getElementById("myDiv").innerHTML = test; var columns = addAllColumnHeaders(myList); for (var i = 0 ; i < myList.length ; i++) { var row$ = AJS.$('<tr/>'); for (var colIndex = 0 ; colIndex < columns.length ; colIndex++) { var cellValue = myList[i][columns[colIndex]]; if (cellValue == null) { cellValue = ""; } row$.append(AJS.$('<td/>').html(cellValue)); } AJS.$("#excelDataTable").append(row$); } function addAllColumnHeaders(myList) { var columnSet = []; var headerTr$ = AJS.$('<tr/>'); for (var i = 0 ; i < myList.length ; i++) { var rowHash = myList[i]; for (var key in rowHash) { if (AJS.$.inArray(key, columnSet) == -1){ columnSet.push(key); headerTr$.append(AJS.$('<th/>').html(key)); } } } AJS.$("#excelDataTable").append(headerTr$); return columnSet; } }, args: [ { key: "projects", ajaxOptions: function () { var projectName; var confOrder; var projectField = document.getElementById("projectId"); var confNumbElement = document.getElementById("configNumber-id"); if(projectField != null){ projectName = projectField.options[projectField.selectedIndex].text; console.log(projectName); } if(confNumbElement != null){ confOrder = confNumbElement.options[confNumbElement.selectedIndex].text; console.log(confOrder); this.configNumber = confOrder; } return { url: "/rest/sqlrestsource/latest/execute", data: { projectId : gadgets.util.unescapeString(this.getPref("projectId")), configNumber : gadgets.util.unescapeString(this.getPref("configNumber")), } }; } } ] } }); })();