|
@@ -156,25 +156,28 @@ Menu.setApplicationMenu = function (menu) {
|
|
|
|
|
|
Menu.buildFromTemplate = function (template) {
|
|
|
if (!Array.isArray(template)) {
|
|
|
- throw new TypeError('Invalid template for Menu')
|
|
|
+ throw new TypeError('Invalid template for Menu: Menu template must be an array')
|
|
|
}
|
|
|
-
|
|
|
const menu = new Menu()
|
|
|
+ if (!areValidTemplateItems(template)) {
|
|
|
+ throw new TypeError('Invalid template for MenuItem: must have at least one of label, role or type')
|
|
|
+ }
|
|
|
const filtered = removeExtraSeparators(template)
|
|
|
const sorted = sortTemplate(filtered)
|
|
|
|
|
|
- sorted.forEach((item) => {
|
|
|
- if (typeof item !== 'object') {
|
|
|
- throw new TypeError('Invalid template for MenuItem')
|
|
|
- }
|
|
|
- menu.append(new MenuItem(item))
|
|
|
- })
|
|
|
+ sorted.forEach((item) => menu.append(new MenuItem(item)))
|
|
|
|
|
|
return menu
|
|
|
}
|
|
|
|
|
|
/* Helper Functions */
|
|
|
|
|
|
+// validate the template against having the wrong attribute
|
|
|
+function areValidTemplateItems (template) {
|
|
|
+ return template.every(item =>
|
|
|
+ item != null && typeof item === 'object' && (item.hasOwnProperty('label') || item.hasOwnProperty('role') || item.type === 'separator'))
|
|
|
+}
|
|
|
+
|
|
|
function sortTemplate (template) {
|
|
|
const sorted = sortMenuItems(template)
|
|
|
for (let id in sorted) {
|