mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-22 18:50:08 +03:00
Feature #4614: Add advanced search to almost all tables
This commit is contained in:
parent
651bf6686c
commit
8433a1f727
@ -180,6 +180,7 @@ tabs:
|
||||
- 4 # Name
|
||||
- 5 # Registration time
|
||||
#- 6 # Labels
|
||||
#- 7 # Search data
|
||||
actions:
|
||||
Template.refresh: true
|
||||
Template.create_dialog: true
|
||||
@ -219,6 +220,7 @@ tabs:
|
||||
- 3 # Group
|
||||
- 4 # Name
|
||||
#- 5 # Labels
|
||||
#- 6 # Search data
|
||||
actions:
|
||||
ServiceTemplate.refresh: true
|
||||
ServiceTemplate.create_dialog: true
|
||||
@ -244,6 +246,7 @@ tabs:
|
||||
- 4 # Name
|
||||
- 5 # Registration time
|
||||
#- 6 # Labels
|
||||
#- 7 # Search data
|
||||
actions:
|
||||
VirtualRouterTemplate.refresh: true
|
||||
VirtualRouterTemplate.create_dialog: true
|
||||
@ -299,6 +302,7 @@ tabs:
|
||||
- 11 # VNC
|
||||
#- 12 # Hidden Template
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
VM.refresh: true
|
||||
VM.create_dialog: true
|
||||
@ -386,6 +390,7 @@ tabs:
|
||||
- 4 # Name
|
||||
- 5 # State
|
||||
#- 6 # Labels
|
||||
#- 7 # Search data
|
||||
actions:
|
||||
Service.refresh: true
|
||||
Service.chown: true
|
||||
@ -408,6 +413,7 @@ tabs:
|
||||
- 3 # Group
|
||||
- 4 # Name
|
||||
#- 5 # Labels
|
||||
#- 6 # Search data
|
||||
actions:
|
||||
VirtualRouter.refresh: true
|
||||
VirtualRouter.create_dialog: true
|
||||
@ -469,6 +475,7 @@ tabs:
|
||||
#- 11 # VM MAD
|
||||
#- 12 # Last monitored on
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
Host.refresh: true
|
||||
Host.create_dialog: true
|
||||
@ -518,6 +525,7 @@ tabs:
|
||||
- 10 # Type
|
||||
- 11 # Status
|
||||
#- 12 # Labels
|
||||
#- 13 # Search data
|
||||
actions:
|
||||
Datastore.refresh: true
|
||||
Datastore.create_dialog: true
|
||||
@ -552,6 +560,7 @@ tabs:
|
||||
- 11 # #VMs
|
||||
#- 12 # Target
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
Image.refresh: true
|
||||
Image.create_dialog: true
|
||||
@ -590,6 +599,7 @@ tabs:
|
||||
#- 11 # #VMs
|
||||
#- 12 # Target
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
File.refresh: true
|
||||
File.create_dialog: true
|
||||
@ -617,6 +627,7 @@ tabs:
|
||||
- 7 # Driver
|
||||
- 8 # Zone
|
||||
#- 9 # Labels
|
||||
#- 10 # Search data
|
||||
actions:
|
||||
MarketPlace.refresh: true
|
||||
MarketPlace.create_dialog: true
|
||||
@ -646,6 +657,7 @@ tabs:
|
||||
- 10 # Marketplace
|
||||
- 11 # Zone
|
||||
#- 12 # Labels
|
||||
#- 13 # Search data
|
||||
actions:
|
||||
MarketPlaceApp.refresh: true
|
||||
MarketPlaceApp.create_dialog: true
|
||||
@ -683,6 +695,7 @@ tabs:
|
||||
- 8 # Leases
|
||||
#- 9 # VLAN ID
|
||||
#- 10 # Labels
|
||||
#- 11 # Search data
|
||||
actions:
|
||||
Network.refresh: true
|
||||
Network.create_dialog: true
|
||||
@ -720,6 +733,7 @@ tabs:
|
||||
- 3 # Group
|
||||
- 4 # Name
|
||||
#- 5 # Labels
|
||||
#- 6 # Search data
|
||||
actions:
|
||||
SecurityGroup.refresh: true
|
||||
SecurityGroup.create_dialog: true
|
||||
|
@ -116,6 +116,7 @@ tabs:
|
||||
- 5 # Memory
|
||||
- 6 # CPU
|
||||
#- 7 # Labels
|
||||
#- 8 # Search data
|
||||
actions:
|
||||
Group.refresh: true
|
||||
Group.create_dialog: true
|
||||
@ -140,6 +141,7 @@ tabs:
|
||||
- 6 # VNets
|
||||
- 7 # Datastores
|
||||
#- 8 # Labels
|
||||
#- 9 # Search data
|
||||
actions:
|
||||
Vdc.refresh: true
|
||||
Vdc.create_dialog: true
|
||||
@ -178,6 +180,7 @@ tabs:
|
||||
- 4 # Name
|
||||
- 5 # Registration time
|
||||
#- 6 # Labels
|
||||
#- 7 # Search data
|
||||
actions:
|
||||
Template.refresh: true
|
||||
Template.create_dialog: true
|
||||
@ -217,6 +220,7 @@ tabs:
|
||||
- 3 # Group
|
||||
- 4 # Name
|
||||
#- 5 # Labels
|
||||
#- 6 # Search data
|
||||
actions:
|
||||
ServiceTemplate.refresh: true
|
||||
ServiceTemplate.create_dialog: true
|
||||
@ -242,6 +246,7 @@ tabs:
|
||||
- 4 # Name
|
||||
- 5 # Registration time
|
||||
#- 6 # Labels
|
||||
#- 7 # Search data
|
||||
actions:
|
||||
VirtualRouterTemplate.refresh: true
|
||||
VirtualRouterTemplate.create_dialog: true
|
||||
@ -297,6 +302,7 @@ tabs:
|
||||
- 11 # VNC
|
||||
#- 12 # Hidden Template
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
VM.refresh: true
|
||||
VM.create_dialog: true
|
||||
@ -384,6 +390,7 @@ tabs:
|
||||
- 4 # Name
|
||||
- 5 # State
|
||||
#- 6 # Labels
|
||||
#- 7 # Search data
|
||||
actions:
|
||||
Service.refresh: true
|
||||
Service.chown: true
|
||||
@ -444,6 +451,7 @@ tabs:
|
||||
#- 11 # VM MAD
|
||||
#- 12 # Last monitored on
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
Host.refresh: true
|
||||
Host.create_dialog: true
|
||||
@ -493,6 +501,7 @@ tabs:
|
||||
- 10 # Type
|
||||
- 11 # Status
|
||||
#- 12 # Labels
|
||||
#- 13 # Search data
|
||||
actions:
|
||||
Datastore.refresh: true
|
||||
Datastore.create_dialog: true
|
||||
@ -527,6 +536,7 @@ tabs:
|
||||
- 11 # #VMs
|
||||
#- 12 # Target
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
Image.refresh: true
|
||||
Image.create_dialog: true
|
||||
@ -565,6 +575,7 @@ tabs:
|
||||
#- 11 # #VMs
|
||||
#- 12 # Target
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
File.refresh: true
|
||||
File.create_dialog: true
|
||||
@ -592,6 +603,7 @@ tabs:
|
||||
- 7 # Driver
|
||||
- 8 # Zone
|
||||
#- 9 # Labels
|
||||
#- 10 # Search data
|
||||
actions:
|
||||
MarketPlace.refresh: true
|
||||
MarketPlace.create_dialog: true
|
||||
@ -621,6 +633,7 @@ tabs:
|
||||
- 10 # Marketplace
|
||||
- 11 # Zone
|
||||
#- 12 # Labels
|
||||
#- 13 # Search data
|
||||
actions:
|
||||
MarketPlaceApp.refresh: true
|
||||
MarketPlaceApp.create_dialog: true
|
||||
@ -658,6 +671,7 @@ tabs:
|
||||
- 8 # Leases
|
||||
#- 9 # VLAN ID
|
||||
#- 10 # Labels
|
||||
#- 11 # Search data
|
||||
actions:
|
||||
Network.refresh: true
|
||||
Network.create_dialog: true
|
||||
@ -688,6 +702,7 @@ tabs:
|
||||
- 3 # Group
|
||||
- 4 # Name
|
||||
#- 5 # Labels
|
||||
#- 6 # Search data
|
||||
actions:
|
||||
VirtualRouter.refresh: true
|
||||
VirtualRouter.create_dialog: true
|
||||
@ -718,6 +733,7 @@ tabs:
|
||||
- 3 # Group
|
||||
- 4 # Name
|
||||
#- 5 # Labels
|
||||
#- 6 # Search data
|
||||
actions:
|
||||
SecurityGroup.refresh: true
|
||||
SecurityGroup.create_dialog: true
|
||||
|
@ -116,6 +116,7 @@ tabs:
|
||||
- 5 # Memory
|
||||
- 6 # CPU
|
||||
#- 7 # Labels
|
||||
#- 6 # Search data
|
||||
actions:
|
||||
Group.refresh: true
|
||||
Group.create_dialog: false
|
||||
@ -140,6 +141,7 @@ tabs:
|
||||
- 6 # VNets
|
||||
- 7 # Datastores
|
||||
#- 8 # Labels
|
||||
#- 9 # Search data
|
||||
actions:
|
||||
Vdc.refresh: true
|
||||
Vdc.create_dialog: true
|
||||
@ -178,6 +180,7 @@ tabs:
|
||||
- 4 # Name
|
||||
- 5 # Registration time
|
||||
#- 6 # Labels
|
||||
#- 7 # Search data
|
||||
actions:
|
||||
Template.refresh: true
|
||||
Template.create_dialog: false
|
||||
@ -217,6 +220,7 @@ tabs:
|
||||
- 3 # Group
|
||||
- 4 # Name
|
||||
#- 5 # Labels
|
||||
#- 6 # Search data
|
||||
actions:
|
||||
ServiceTemplate.refresh: true
|
||||
ServiceTemplate.create_dialog: false
|
||||
@ -242,6 +246,7 @@ tabs:
|
||||
- 4 # Name
|
||||
- 5 # Registration time
|
||||
#- 6 # Labels
|
||||
#- 7 # Search data
|
||||
actions:
|
||||
VirtualRouterTemplate.refresh: true
|
||||
VirtualRouterTemplate.create_dialog: false
|
||||
@ -297,6 +302,7 @@ tabs:
|
||||
- 11 # VNC
|
||||
#- 12 # Hidden Template
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
VM.refresh: true
|
||||
VM.create_dialog: true
|
||||
@ -384,6 +390,7 @@ tabs:
|
||||
- 4 # Name
|
||||
- 5 # State
|
||||
#- 6 # Labels
|
||||
#- 7 # Search data
|
||||
actions:
|
||||
Service.refresh: true
|
||||
Service.chown: true
|
||||
@ -444,6 +451,7 @@ tabs:
|
||||
#- 11 # VM MAD
|
||||
#- 12 # Last monitored on
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
Host.refresh: true
|
||||
Host.create_dialog: true
|
||||
@ -493,6 +501,7 @@ tabs:
|
||||
- 10 # Type
|
||||
- 11 # Status
|
||||
#- 12 # Labels
|
||||
#- 13 # Search data
|
||||
actions:
|
||||
Datastore.refresh: true
|
||||
Datastore.create_dialog: true
|
||||
@ -527,6 +536,7 @@ tabs:
|
||||
- 11 # #VMs
|
||||
#- 12 # Target
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
Image.refresh: true
|
||||
Image.create_dialog: true
|
||||
@ -565,6 +575,7 @@ tabs:
|
||||
#- 11 # #VMs
|
||||
#- 12 # Target
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
File.refresh: true
|
||||
File.create_dialog: true
|
||||
@ -592,6 +603,7 @@ tabs:
|
||||
- 7 # Driver
|
||||
- 8 # Zone
|
||||
#- 9 # Labels
|
||||
#- 10 # Search data
|
||||
actions:
|
||||
MarketPlace.refresh: true
|
||||
MarketPlace.create_dialog: true
|
||||
@ -621,6 +633,7 @@ tabs:
|
||||
- 10 # Marketplace
|
||||
- 11 # Zone
|
||||
#- 12 # Labels
|
||||
#- 13 # Search data
|
||||
actions:
|
||||
MarketPlaceApp.refresh: true
|
||||
MarketPlaceApp.create_dialog: true
|
||||
@ -658,6 +671,7 @@ tabs:
|
||||
#- 8 # Leases
|
||||
#- 9 # VLAN ID
|
||||
#- 10 # Labels
|
||||
#- 11 # Search data
|
||||
actions:
|
||||
Network.refresh: true
|
||||
Network.create_dialog: false
|
||||
@ -688,6 +702,7 @@ tabs:
|
||||
#- 3 # Group
|
||||
- 4 # Name
|
||||
#- 5 # Labels
|
||||
#- 6 # Search data
|
||||
actions:
|
||||
VirtualRouter.refresh: true
|
||||
VirtualRouter.create_dialog: true
|
||||
@ -718,6 +733,7 @@ tabs:
|
||||
#- 3 # Group
|
||||
- 4 # Name
|
||||
#- 5 # Labels
|
||||
#- 6 # Search data
|
||||
actions:
|
||||
SecurityGroup.refresh: true
|
||||
SecurityGroup.create_dialog: false
|
||||
|
@ -118,6 +118,7 @@ tabs:
|
||||
- 5 # Memory
|
||||
- 6 # CPU
|
||||
#- 7 # Labels
|
||||
#- 8 # Search data
|
||||
actions:
|
||||
Group.refresh: true
|
||||
Group.create_dialog: false
|
||||
@ -142,6 +143,7 @@ tabs:
|
||||
- 6 # VNets
|
||||
- 7 # Datastores
|
||||
#- 8 # Labels
|
||||
#- 9 # Search data
|
||||
actions:
|
||||
Vdc.refresh: true
|
||||
Vdc.create_dialog: true
|
||||
@ -180,6 +182,7 @@ tabs:
|
||||
- 4 # Name
|
||||
- 5 # Registration time
|
||||
#- 6 # Labels
|
||||
#- 7 # Search data
|
||||
actions:
|
||||
Template.refresh: true
|
||||
Template.create_dialog: false
|
||||
@ -219,6 +222,7 @@ tabs:
|
||||
- 3 # Group
|
||||
- 4 # Name
|
||||
#- 5 # Labels
|
||||
#- 6 # Search data
|
||||
actions:
|
||||
ServiceTemplate.refresh: true
|
||||
ServiceTemplate.create_dialog: false
|
||||
@ -244,6 +248,7 @@ tabs:
|
||||
- 4 # Name
|
||||
- 5 # Registration time
|
||||
#- 6 # Labels
|
||||
#- 7 # Search data
|
||||
actions:
|
||||
VirtualRouterTemplate.refresh: true
|
||||
VirtualRouterTemplate.create_dialog: false
|
||||
@ -299,6 +304,7 @@ tabs:
|
||||
- 11 # VNC
|
||||
#- 12 # Hidden Template
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
VM.refresh: true
|
||||
VM.create_dialog: true
|
||||
@ -386,6 +392,7 @@ tabs:
|
||||
- 4 # Name
|
||||
- 5 # State
|
||||
#- 6 # Labels
|
||||
#- 7 # Search data
|
||||
actions:
|
||||
Service.refresh: true
|
||||
Service.chown: true
|
||||
@ -446,6 +453,7 @@ tabs:
|
||||
#- 11 # VM MAD
|
||||
#- 12 # Last monitored on
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
Host.refresh: true
|
||||
Host.create_dialog: true
|
||||
@ -495,6 +503,7 @@ tabs:
|
||||
- 10 # Type
|
||||
- 11 # Status
|
||||
#- 12 # Labels
|
||||
#- 13 # Search data
|
||||
actions:
|
||||
Datastore.refresh: true
|
||||
Datastore.create_dialog: true
|
||||
@ -528,6 +537,7 @@ tabs:
|
||||
- 11 # #VMs
|
||||
#- 12 # Target
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
Image.refresh: true
|
||||
Image.create_dialog: true
|
||||
@ -566,6 +576,7 @@ tabs:
|
||||
#- 11 # #VMs
|
||||
#- 12 # Target
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
File.refresh: true
|
||||
File.create_dialog: true
|
||||
@ -593,6 +604,7 @@ tabs:
|
||||
- 7 # Driver
|
||||
- 8 # Zone
|
||||
#- 9 # Labels
|
||||
#- 10 # Search data
|
||||
actions:
|
||||
MarketPlace.refresh: true
|
||||
MarketPlace.create_dialog: true
|
||||
@ -622,6 +634,7 @@ tabs:
|
||||
- 10 # Marketplace
|
||||
- 11 # Zone
|
||||
#- 12 # Labels
|
||||
#- 13 # Search data
|
||||
actions:
|
||||
MarketPlaceApp.refresh: true
|
||||
MarketPlaceApp.create_dialog: true
|
||||
@ -659,6 +672,7 @@ tabs:
|
||||
#- 8 # Leases
|
||||
#- 9 # VLAN ID
|
||||
#- 10 # Labels
|
||||
#- 11 # Search data
|
||||
actions:
|
||||
Network.refresh: true
|
||||
Network.create_dialog: false
|
||||
@ -689,6 +703,7 @@ tabs:
|
||||
#- 3 # Group
|
||||
- 4 # Name
|
||||
#- 5 # Labels
|
||||
#- 6 # Search data
|
||||
actions:
|
||||
VirtualRouter.refresh: true
|
||||
VirtualRouter.create_dialog: true
|
||||
@ -719,6 +734,7 @@ tabs:
|
||||
#- 3 # Group
|
||||
- 4 # Name
|
||||
#- 5 # Labels
|
||||
#- 6 # Search data
|
||||
actions:
|
||||
SecurityGroup.refresh: true
|
||||
SecurityGroup.create_dialog: false
|
||||
|
@ -117,6 +117,7 @@ tabs:
|
||||
- 5 # Memory
|
||||
- 6 # CPU
|
||||
#- 7 # Labels
|
||||
#- 8 # Search data
|
||||
actions:
|
||||
Group.refresh: true
|
||||
Group.create_dialog: true
|
||||
@ -141,6 +142,7 @@ tabs:
|
||||
- 6 # VNets
|
||||
- 7 # Datastores
|
||||
#- 8 # Labels
|
||||
#- 9 # Search data
|
||||
actions:
|
||||
Vdc.refresh: true
|
||||
Vdc.create_dialog: true
|
||||
@ -179,6 +181,7 @@ tabs:
|
||||
- 4 # Name
|
||||
- 5 # Registration time
|
||||
#- 6 # Labels
|
||||
#- 7 # Search data
|
||||
actions:
|
||||
Template.refresh: true
|
||||
Template.create_dialog: true
|
||||
@ -218,6 +221,7 @@ tabs:
|
||||
- 3 # Group
|
||||
- 4 # Name
|
||||
#- 5 # Labels
|
||||
#- 6 # Search data
|
||||
actions:
|
||||
ServiceTemplate.refresh: true
|
||||
ServiceTemplate.create_dialog: true
|
||||
@ -243,6 +247,7 @@ tabs:
|
||||
- 4 # Name
|
||||
- 5 # Registration time
|
||||
#- 6 # Labels
|
||||
#- 7 # Search data
|
||||
actions:
|
||||
VirtualRouterTemplate.refresh: true
|
||||
VirtualRouterTemplate.create_dialog: true
|
||||
@ -298,6 +303,7 @@ tabs:
|
||||
- 11 # VNC
|
||||
#- 12 # Hidden Template
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
VM.refresh: true
|
||||
VM.create_dialog: true
|
||||
@ -385,6 +391,7 @@ tabs:
|
||||
- 4 # Name
|
||||
- 5 # State
|
||||
#- 6 # Labels
|
||||
#- 7 # Search data
|
||||
actions:
|
||||
Service.refresh: true
|
||||
Service.chown: false
|
||||
@ -445,6 +452,7 @@ tabs:
|
||||
#- 11 # VM MAD
|
||||
#- 12 # Last monitored on
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
Host.refresh: true
|
||||
Host.create_dialog: true
|
||||
@ -494,6 +502,7 @@ tabs:
|
||||
#- 10 # Type
|
||||
#- 11 # Status
|
||||
#- 12 # Labels
|
||||
#- 13 # Search data
|
||||
actions:
|
||||
Datastore.refresh: true
|
||||
Datastore.create_dialog: false
|
||||
@ -528,6 +537,7 @@ tabs:
|
||||
- 11 # #VMs
|
||||
#- 12 # Target
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
Image.refresh: true
|
||||
Image.create_dialog: true
|
||||
@ -566,6 +576,7 @@ tabs:
|
||||
#- 11 # #VMs
|
||||
#- 12 # Target
|
||||
#- 13 # Labels
|
||||
#- 14 # Search data
|
||||
actions:
|
||||
File.refresh: true
|
||||
File.create_dialog: true
|
||||
@ -593,6 +604,7 @@ tabs:
|
||||
- 7 # Driver
|
||||
- 8 # Zone
|
||||
#- 9 # Labels
|
||||
#- 10 # Search data
|
||||
actions:
|
||||
MarketPlace.refresh: true
|
||||
MarketPlace.create_dialog: true
|
||||
@ -622,6 +634,7 @@ tabs:
|
||||
- 10 # Marketplace
|
||||
- 11 # Zone
|
||||
#- 12 # Labels
|
||||
#- 13 # Search data
|
||||
actions:
|
||||
MarketPlaceApp.refresh: true
|
||||
MarketPlaceApp.create_dialog: true
|
||||
@ -659,6 +672,7 @@ tabs:
|
||||
- 8 # Leases
|
||||
#- 9 # VLAN ID
|
||||
#- 10 # Labels
|
||||
#- 11 # Search data
|
||||
actions:
|
||||
Network.refresh: true
|
||||
Network.create_dialog: false
|
||||
@ -689,6 +703,7 @@ tabs:
|
||||
- 3 # Group
|
||||
- 4 # Name
|
||||
#- 5 # Labels
|
||||
#- 6 # Search data
|
||||
actions:
|
||||
VirtualRouter.refresh: true
|
||||
VirtualRouter.create_dialog: true
|
||||
@ -719,6 +734,7 @@ tabs:
|
||||
- 3 # Group
|
||||
- 4 # Name
|
||||
#- 5 # Labels
|
||||
#- 6 # Search data
|
||||
actions:
|
||||
SecurityGroup.refresh: true
|
||||
SecurityGroup.create_dialog: true
|
||||
|
@ -20,6 +20,8 @@ define(function(require) {
|
||||
OpenNebulaError = require('./error');
|
||||
Locale = require('utils/locale');
|
||||
|
||||
var OpenNebulaCluster = require('./cluster');
|
||||
|
||||
var RESOURCE = "VM";
|
||||
|
||||
var STATES_STR = [
|
||||
@ -575,6 +577,18 @@ define(function(require) {
|
||||
|
||||
return hostname;
|
||||
},
|
||||
"clusterStr": function(element) {
|
||||
var state = element.STATE;
|
||||
var cluster = "--";
|
||||
if (state == STATES.ACTIVE || state == STATES.SUSPENDED || state == STATES.POWEROFF) {
|
||||
var history = retrieveLastHistoryRecord(element)
|
||||
if (history) {
|
||||
cluster = history.CID;
|
||||
};
|
||||
};
|
||||
|
||||
return OpenNebulaCluster.getName(cluster);
|
||||
},
|
||||
"migrateActionStr": function(stateId) {
|
||||
return MIGRATE_ACTION_STR[stateId];
|
||||
},
|
||||
|
@ -25,6 +25,7 @@ define(function(require) {
|
||||
var OpenNebulaDatastore = require('opennebula/datastore');
|
||||
var DatastoreCapacityBar = require('./utils/datastore-capacity-bar');
|
||||
var LabelsUtils = require('utils/labels/utils');
|
||||
var SearchDropdown = require('hbs!./datatable/search');
|
||||
|
||||
/*
|
||||
CONSTANTS
|
||||
@ -34,6 +35,7 @@ define(function(require) {
|
||||
var XML_ROOT = "DATASTORE";
|
||||
var TAB_NAME = require('./tabId');
|
||||
var LABELS_COLUMN = 12;
|
||||
var SEARCH_COLUMN = 13;
|
||||
var TEMPLATE_ATTR = 'TEMPLATE';
|
||||
|
||||
/*
|
||||
@ -87,7 +89,8 @@ define(function(require) {
|
||||
Locale.tr("DS MAD"),
|
||||
Locale.tr("Type"),
|
||||
Locale.tr("Status"),
|
||||
Locale.tr("Labels")
|
||||
Locale.tr("Labels"),
|
||||
"search_data"
|
||||
]
|
||||
|
||||
this.selectOptions = {
|
||||
@ -100,6 +103,9 @@ define(function(require) {
|
||||
"you_selected_multiple": Locale.tr("You selected the following datastores:")
|
||||
}
|
||||
|
||||
this.conf.searchDropdownHTML = SearchDropdown({tableId: this.dataTableId});
|
||||
this.searchColumn = SEARCH_COLUMN;
|
||||
|
||||
TabDataTable.call(this);
|
||||
};
|
||||
|
||||
@ -121,6 +127,17 @@ define(function(require) {
|
||||
clusters = $.isArray(element.CLUSTERS.ID) ? element.CLUSTERS.ID.join(",") : element.CLUSTERS.ID;
|
||||
}
|
||||
|
||||
var state = OpenNebulaDatastore.stateStr(element.STATE);
|
||||
|
||||
var search = {
|
||||
NAME: element.NAME,
|
||||
UNAME: element.UNAME,
|
||||
GNAME: element.GNAME,
|
||||
STATE: state,
|
||||
TM_MAD: element.TM_MAD,
|
||||
DS_MAD: element.DS_MAD
|
||||
}
|
||||
|
||||
return [
|
||||
'<input class="check_item" type="checkbox" id="'+RESOURCE.toLowerCase()+'_' +
|
||||
element.ID + '" name="selected_items" value="' +
|
||||
@ -135,8 +152,9 @@ define(function(require) {
|
||||
element.TM_MAD,
|
||||
element.DS_MAD,
|
||||
OpenNebulaDatastore.typeStr(element.TYPE),
|
||||
OpenNebulaDatastore.stateStr(element.STATE),
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||'')
|
||||
state,
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||''),
|
||||
btoa(JSON.stringify(search))
|
||||
];
|
||||
}
|
||||
});
|
||||
|
@ -0,0 +1,46 @@
|
||||
<div class="row">
|
||||
<div class="small-12 columns">
|
||||
<label>
|
||||
{{tr "Name"}}
|
||||
<input search-field="NAME" type="text" list="{{tableId}}-searchListNAME"/>
|
||||
<datalist search-datalist="NAME" id="{{tableId}}-searchListNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Owner"}}
|
||||
<input search-field="UNAME" type="text" list="{{tableId}}-searchListUNAME"/>
|
||||
<datalist search-datalist="UNAME" id="{{tableId}}-searchListUNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Group"}}
|
||||
<input search-field="GNAME" type="text" list="{{tableId}}-searchListGNAME"/>
|
||||
<datalist search-datalist="GNAME" id="{{tableId}}-searchListGNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Status"}}
|
||||
<input search-field="STATE" type="text" list="{{tableId}}-searchListSTATE"/>
|
||||
<datalist search-datalist="STATE" id="{{tableId}}-searchListSTATE">
|
||||
</datalist>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="medium-6 columns">
|
||||
<label>
|
||||
{{tr "TM MAD"}}
|
||||
<input search-field="TM_MAD" type="text" list="{{tableId}}-searchListTM_MAD"/>
|
||||
<datalist search-datalist="TM_MAD" id="{{tableId}}-searchListTM_MAD">
|
||||
</datalist>
|
||||
</label>
|
||||
</div>
|
||||
<div class="medium-6 columns">
|
||||
<label>
|
||||
{{tr "DS MAD"}}
|
||||
<input search-field="DS_MAD" type="text" list="{{tableId}}-searchListDS_MAD"/>
|
||||
<datalist search-datalist="DS_MAD" id="{{tableId}}-searchListDS_MAD">
|
||||
</datalist>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
@ -27,6 +27,7 @@ define(function(require) {
|
||||
var MemoryBars = require('./utils/memory-bars');
|
||||
var OpenNebulaHost = require('opennebula/host');
|
||||
var LabelsUtils = require('utils/labels/utils');
|
||||
var SearchDropdown = require('hbs!./datatable/search');
|
||||
|
||||
|
||||
/*
|
||||
@ -37,6 +38,7 @@ define(function(require) {
|
||||
var XML_ROOT = "HOST";
|
||||
var TAB_NAME = require('./tabId');
|
||||
var LABELS_COLUMN = 13;
|
||||
var SEARCH_COLUMN = 14;
|
||||
var TEMPLATE_ATTR = 'TEMPLATE';
|
||||
|
||||
/*
|
||||
@ -76,7 +78,8 @@ define(function(require) {
|
||||
Locale.tr("IM MAD"),
|
||||
Locale.tr("VM MAD"),
|
||||
Locale.tr("Last monitored on"),
|
||||
Locale.tr("Labels")
|
||||
Locale.tr("Labels"),
|
||||
"search_data"
|
||||
];
|
||||
|
||||
this.selectOptions = {
|
||||
@ -99,6 +102,9 @@ define(function(require) {
|
||||
this.allocatedMemory = 0;
|
||||
this.realMemory = 0;
|
||||
|
||||
this.conf.searchDropdownHTML = SearchDropdown({tableId: this.dataTableId});
|
||||
this.searchColumn = SEARCH_COLUMN;
|
||||
|
||||
TabDataTable.call(this);
|
||||
};
|
||||
|
||||
@ -148,6 +154,16 @@ define(function(require) {
|
||||
this.allocatedMemory += parseInt(element.HOST_SHARE.MEM_USAGE);
|
||||
this.realMemory += parseInt(element.HOST_SHARE.USED_MEM);
|
||||
|
||||
var state = OpenNebulaHost.simpleStateStr(element.STATE);
|
||||
|
||||
var search = {
|
||||
NAME: element.NAME,
|
||||
CLUSTER: element.CLUSTER,
|
||||
STATE: state,
|
||||
IM_MAD: element.IM_MAD,
|
||||
VM_MAD: element.VM_MAD
|
||||
}
|
||||
|
||||
return [
|
||||
'<input class="check_item" type="checkbox" id="' + RESOURCE.toLowerCase() + '_' +
|
||||
element.ID + '" name="selected_items" value="' +
|
||||
@ -160,11 +176,12 @@ define(function(require) {
|
||||
cpuBars.allocated,
|
||||
memoryBars.real,
|
||||
memoryBars.allocated,
|
||||
OpenNebulaHost.simpleStateStr(element.STATE),
|
||||
state,
|
||||
element.IM_MAD,
|
||||
element.VM_MAD,
|
||||
Humanize.prettyTime(element.LAST_MON_TIME),
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||'')
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||''),
|
||||
btoa(JSON.stringify(search))
|
||||
];
|
||||
}
|
||||
|
||||
|
34
src/sunstone/public/app/tabs/hosts-tab/datatable/search.hbs
Normal file
34
src/sunstone/public/app/tabs/hosts-tab/datatable/search.hbs
Normal file
@ -0,0 +1,34 @@
|
||||
<div class="row">
|
||||
<div class="small-12 columns">
|
||||
<label>
|
||||
{{tr "Name"}}
|
||||
<input search-field="NAME" type="text" list="{{tableId}}-searchListNAME"/>
|
||||
<datalist search-datalist="NAME" id="{{tableId}}-searchListNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Cluster"}}
|
||||
<input search-field="CLUSTER" type="text" list="{{tableId}}-searchListCLUSTER"/>
|
||||
<datalist search-datalist="CLUSTER" id="{{tableId}}-searchListCLUSTER">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Status"}}
|
||||
<input search-field="STATE" type="text" list="{{tableId}}-searchListSTATE"/>
|
||||
<datalist search-datalist="STATE" id="{{tableId}}-searchListSTATE">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "IM MAD"}}
|
||||
<input search-field="IM_MAD" type="text" list="{{tableId}}-searchListIM_MAD"/>
|
||||
<datalist search-datalist="IM_MAD" id="{{tableId}}-searchListIM_MAD">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "VM MAD"}}
|
||||
<input search-field="VM_MAD" type="text" list="{{tableId}}-VM_MAD"/>
|
||||
<datalist search-datalist="VM_MAD" id="{{tableId}}-VM_MAD">
|
||||
</datalist>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
@ -25,6 +25,7 @@ define(function(require) {
|
||||
var Humanize = require('utils/humanize');
|
||||
var OpenNebulaImage = require('opennebula/image');
|
||||
var LabelsUtils = require('utils/labels/utils');
|
||||
var SearchDropdown = require('hbs!./datatable/search');
|
||||
|
||||
/*
|
||||
CONSTANTS
|
||||
@ -32,6 +33,7 @@ define(function(require) {
|
||||
|
||||
var XML_ROOT = "IMAGE"
|
||||
var LABELS_COLUMN = 13;
|
||||
var SEARCH_COLUMN = 14;
|
||||
var TEMPLATE_ATTR = 'TEMPLATE';
|
||||
|
||||
/*
|
||||
@ -72,9 +74,13 @@ define(function(require) {
|
||||
Locale.tr("Status"),
|
||||
Locale.tr("#VMS"),
|
||||
Locale.tr("Target"),
|
||||
Locale.tr("Labels")
|
||||
Locale.tr("Labels"),
|
||||
"search_data"
|
||||
]
|
||||
|
||||
this.conf.searchDropdownHTML = SearchDropdown({tableId: this.dataTableId});
|
||||
this.searchColumn = SEARCH_COLUMN;
|
||||
|
||||
TabDataTable.call(this);
|
||||
};
|
||||
|
||||
@ -91,6 +97,20 @@ define(function(require) {
|
||||
function _elementArray(element_json) {
|
||||
var element = element_json.IMAGE;
|
||||
|
||||
var type = OpenNebulaImage.typeStr(element.TYPE);
|
||||
var state = OpenNebulaImage.stateStr(element.STATE);
|
||||
|
||||
var search = {
|
||||
NAME: element.NAME,
|
||||
UNAME: element.UNAME,
|
||||
GNAME: element.GNAME,
|
||||
DATASTORE: element.DATASTORE,
|
||||
TYPE: type,
|
||||
STATE: state,
|
||||
REGTIME_AFTER: element.REGTIME,
|
||||
REGTIME_BEFORE: element.REGTIME
|
||||
}
|
||||
|
||||
return [
|
||||
'<input class="check_item" type="checkbox" id="'+this.resource.toLowerCase()+'_' +
|
||||
element.ID + '" name="selected_items" value="' +
|
||||
@ -101,13 +121,14 @@ define(function(require) {
|
||||
element.NAME,
|
||||
element.DATASTORE,
|
||||
Humanize.sizeFromMB(element.SIZE),
|
||||
OpenNebulaImage.typeStr(element.TYPE),
|
||||
type,
|
||||
Humanize.prettyTime(element.REGTIME),
|
||||
parseInt(element.PERSISTENT) ? "yes" : "no",
|
||||
OpenNebulaImage.stateStr(element.STATE),
|
||||
state,
|
||||
element.RUNNING_VMS,
|
||||
element.TEMPLATE.TARGET ? element.TEMPLATE.TARGET : '--',
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||'')
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||''),
|
||||
btoa(JSON.stringify(search))
|
||||
];
|
||||
}
|
||||
});
|
||||
|
54
src/sunstone/public/app/tabs/images-tab/datatable/search.hbs
Normal file
54
src/sunstone/public/app/tabs/images-tab/datatable/search.hbs
Normal file
@ -0,0 +1,54 @@
|
||||
<div class="row">
|
||||
<div class="small-12 columns">
|
||||
<label>
|
||||
{{tr "Name"}}
|
||||
<input search-field="NAME" type="text" list="{{tableId}}-searchListNAME"/>
|
||||
<datalist search-datalist="NAME" id="{{tableId}}-searchListNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Owner"}}
|
||||
<input search-field="UNAME" type="text" list="{{tableId}}-searchListUNAME"/>
|
||||
<datalist search-datalist="UNAME" id="{{tableId}}-searchListUNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Group"}}
|
||||
<input search-field="GNAME" type="text" list="{{tableId}}-searchListGNAME"/>
|
||||
<datalist search-datalist="GNAME" id="{{tableId}}-searchListGNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Datastore"}}
|
||||
<input search-field="DATASTORE" type="text" list="{{tableId}}-searchListDATASTORE"/>
|
||||
<datalist search-datalist="DATASTORE" id="{{tableId}}-searchListDATASTORE">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Type"}}
|
||||
<input search-field="TYPE" type="text" list="{{tableId}}-searchListTYPE"/>
|
||||
<datalist search-datalist="TYPE" id="{{tableId}}-searchListTYPE">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Status"}}
|
||||
<input search-field="STATE" type="text" list="{{tableId}}-searchListSTATE"/>
|
||||
<datalist search-datalist="STATE" id="{{tableId}}-searchListSTATE">
|
||||
</datalist>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="medium-6 columns">
|
||||
<label>
|
||||
{{tr "Created after"}}
|
||||
<input search-field="REGTIME_AFTER" search-operation=">=" type="date"/>
|
||||
</label>
|
||||
</div>
|
||||
<div class="medium-6 columns">
|
||||
<label>
|
||||
{{tr "Created before"}}
|
||||
<input search-field="REGTIME_BEFORE" search-operation="<=" type="date"/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
@ -27,6 +27,7 @@ define(function(require) {
|
||||
var OpenNebulaZone = require('opennebula/zone');
|
||||
var LabelsUtils = require('utils/labels/utils');
|
||||
var Humanize = require('utils/humanize');
|
||||
var SearchDropdown = require('hbs!./datatable/search');
|
||||
|
||||
/*
|
||||
CONSTANTS
|
||||
@ -36,6 +37,7 @@ define(function(require) {
|
||||
var XML_ROOT = "MARKETPLACEAPP";
|
||||
var TAB_NAME = require('./tabId');
|
||||
var LABELS_COLUMN = 12;
|
||||
var SEARCH_COLUMN = 13;
|
||||
var TEMPLATE_ATTR = 'TEMPLATE';
|
||||
|
||||
/*
|
||||
@ -89,7 +91,8 @@ define(function(require) {
|
||||
Locale.tr("Registration Time"),
|
||||
Locale.tr("Marketplace"),
|
||||
Locale.tr("Zone"),
|
||||
Locale.tr("Labels")
|
||||
Locale.tr("Labels"),
|
||||
"search_data"
|
||||
]
|
||||
|
||||
this.selectOptions = {
|
||||
@ -102,6 +105,9 @@ define(function(require) {
|
||||
"you_selected_multiple": Locale.tr("You selected the following appliances:")
|
||||
}
|
||||
|
||||
this.conf.searchDropdownHTML = SearchDropdown({tableId: this.dataTableId});
|
||||
this.searchColumn = SEARCH_COLUMN;
|
||||
|
||||
TabDataTable.call(this);
|
||||
};
|
||||
|
||||
@ -118,6 +124,20 @@ define(function(require) {
|
||||
function _elementArray(element_json) {
|
||||
var element = element_json[XML_ROOT];
|
||||
|
||||
var state = OpenNebulaMarketPlaceApp.stateStr(element.STATE);
|
||||
var zone = OpenNebulaZone.getName(element.ZONE_ID);
|
||||
|
||||
var search = {
|
||||
NAME: element.NAME,
|
||||
UNAME: element.UNAME,
|
||||
GNAME: element.GNAME,
|
||||
STATE: state,
|
||||
MARKETPLACE: element.MARKETPLACE,
|
||||
ZONE: zone,
|
||||
REGTIME_AFTER: element.REGTIME,
|
||||
REGTIME_BEFORE: element.REGTIME
|
||||
}
|
||||
|
||||
return [
|
||||
'<input class="check_item" type="checkbox" id="'+RESOURCE.toLowerCase()+'_' +
|
||||
element.ID + '" name="selected_items" value="' +
|
||||
@ -128,12 +148,13 @@ define(function(require) {
|
||||
element.NAME,
|
||||
element.VERSION,
|
||||
Humanize.sizeFromMB(element.SIZE),
|
||||
OpenNebulaMarketPlaceApp.stateStr(element.STATE),
|
||||
state,
|
||||
OpenNebulaMarketPlaceApp.typeStr(element.TYPE),
|
||||
Humanize.prettyTime(element.REGTIME),
|
||||
element.MARKETPLACE,
|
||||
OpenNebulaZone.getName(element.ZONE_ID),
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||'')
|
||||
zone,
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||''),
|
||||
btoa(JSON.stringify(search))
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,54 @@
|
||||
<div class="row">
|
||||
<div class="small-12 columns">
|
||||
<label>
|
||||
{{tr "Name"}}
|
||||
<input search-field="NAME" type="text" list="{{tableId}}-searchListNAME"/>
|
||||
<datalist search-datalist="NAME" id="{{tableId}}-searchListNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Owner"}}
|
||||
<input search-field="UNAME" type="text" list="{{tableId}}-searchListUNAME"/>
|
||||
<datalist search-datalist="UNAME" id="{{tableId}}-searchListUNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Group"}}
|
||||
<input search-field="GNAME" type="text" list="{{tableId}}-searchListGNAME"/>
|
||||
<datalist search-datalist="GNAME" id="{{tableId}}-searchListGNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "State"}}
|
||||
<input search-field="STATE" type="text" list="{{tableId}}-searchListSTATE"/>
|
||||
<datalist search-datalist="STATE" id="{{tableId}}-searchListSTATE">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Marketplace"}}
|
||||
<input search-field="MARKETPLACE" type="text" list="{{tableId}}-searchListMARKETPLACE"/>
|
||||
<datalist search-datalist="MARKETPLACE" id="{{tableId}}-searchListMARKETPLACE">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Zone"}}
|
||||
<input search-field="ZONE" type="text" list="{{tableId}}-searchListZONE"/>
|
||||
<datalist search-datalist="ZONE" id="{{tableId}}-searchListZONE">
|
||||
</datalist>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="medium-6 columns">
|
||||
<label>
|
||||
{{tr "Created after"}}
|
||||
<input search-field="REGTIME_AFTER" search-operation=">=" type="date"/>
|
||||
</label>
|
||||
</div>
|
||||
<div class="medium-6 columns">
|
||||
<label>
|
||||
{{tr "Created before"}}
|
||||
<input search-field="REGTIME_BEFORE" search-operation="<=" type="date"/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
@ -26,6 +26,7 @@ define(function(require) {
|
||||
var OpenNebulaZone = require('opennebula/zone');
|
||||
var DatastoreCapacityBar = require('../datastores-tab/utils/datastore-capacity-bar');
|
||||
var LabelsUtils = require('utils/labels/utils');
|
||||
var SearchDropdown = require('hbs!./datatable/search');
|
||||
|
||||
/*
|
||||
CONSTANTS
|
||||
@ -35,6 +36,7 @@ define(function(require) {
|
||||
var XML_ROOT = "MARKETPLACE";
|
||||
var TAB_NAME = require('./tabId');
|
||||
var LABELS_COLUMN = 9;
|
||||
var SEARCH_COLUMN = 10;
|
||||
var TEMPLATE_ATTR = 'TEMPLATE';
|
||||
|
||||
/*
|
||||
@ -85,7 +87,8 @@ define(function(require) {
|
||||
Locale.tr("Apps"),
|
||||
Locale.tr("Driver"),
|
||||
Locale.tr("Zone"),
|
||||
Locale.tr("Labels")
|
||||
Locale.tr("Labels"),
|
||||
"search_data"
|
||||
]
|
||||
|
||||
this.selectOptions = {
|
||||
@ -98,6 +101,9 @@ define(function(require) {
|
||||
"you_selected_multiple": Locale.tr("You selected the following marketplaces:")
|
||||
}
|
||||
|
||||
this.conf.searchDropdownHTML = SearchDropdown({tableId: this.dataTableId});
|
||||
this.searchColumn = SEARCH_COLUMN;
|
||||
|
||||
TabDataTable.call(this);
|
||||
};
|
||||
|
||||
@ -114,6 +120,16 @@ define(function(require) {
|
||||
function _elementArray(element_json) {
|
||||
var element = element_json[XML_ROOT];
|
||||
|
||||
var zone = OpenNebulaZone.getName(element.ZONE_ID);
|
||||
|
||||
var search = {
|
||||
NAME: element.NAME,
|
||||
UNAME: element.UNAME,
|
||||
GNAME: element.GNAME,
|
||||
MARKET_MAD: element.MARKET_MAD,
|
||||
ZONE: zone
|
||||
}
|
||||
|
||||
return [
|
||||
'<input class="check_item" type="checkbox" id="'+RESOURCE.toLowerCase()+'_' +
|
||||
element.ID + '" name="selected_items" value="' +
|
||||
@ -125,8 +141,9 @@ define(function(require) {
|
||||
DatastoreCapacityBar.html(element),
|
||||
_lengthOf(element.MARKETPLACEAPPS.ID),
|
||||
element.MARKET_MAD,
|
||||
OpenNebulaZone.getName(element.ZONE_ID),
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||'')
|
||||
zone,
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||''),
|
||||
btoa(JSON.stringify(search))
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,34 @@
|
||||
<div class="row">
|
||||
<div class="small-12 columns">
|
||||
<label>
|
||||
{{tr "Name"}}
|
||||
<input search-field="NAME" type="text" list="{{tableId}}-searchListNAME"/>
|
||||
<datalist search-datalist="NAME" id="{{tableId}}-searchListNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Owner"}}
|
||||
<input search-field="UNAME" type="text" list="{{tableId}}-searchListUNAME"/>
|
||||
<datalist search-datalist="UNAME" id="{{tableId}}-searchListUNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Group"}}
|
||||
<input search-field="GNAME" type="text" list="{{tableId}}-searchListGNAME"/>
|
||||
<datalist search-datalist="GNAME" id="{{tableId}}-searchListGNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Driver"}}
|
||||
<input search-field="MARKET_MAD" type="text" list="{{tableId}}-searchListMARKET_MAD"/>
|
||||
<datalist search-datalist="MARKET_MAD" id="{{tableId}}-searchListMARKET_MAD">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Zone"}}
|
||||
<input search-field="ZONE" type="text" list="{{tableId}}-searchListZONE"/>
|
||||
<datalist search-datalist="ZONE" id="{{tableId}}-searchListZONE">
|
||||
</datalist>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
@ -24,6 +24,7 @@ define(function(require) {
|
||||
var Locale = require('utils/locale');
|
||||
var OpenNebulaService = require('opennebula/service');
|
||||
var LabelsUtils = require('utils/labels/utils');
|
||||
var SearchDropdown = require('hbs!./datatable/search');
|
||||
|
||||
/*
|
||||
CONSTANTS
|
||||
@ -33,6 +34,7 @@ define(function(require) {
|
||||
var XML_ROOT = "DOCUMENT";
|
||||
var TAB_NAME = require('./tabId');
|
||||
var LABELS_COLUMN = 6;
|
||||
var SEARCH_COLUMN = 7;
|
||||
var TEMPLATE_ATTR = 'TEMPLATE';
|
||||
|
||||
/*
|
||||
@ -65,7 +67,8 @@ define(function(require) {
|
||||
Locale.tr("Group"),
|
||||
Locale.tr("Name"),
|
||||
Locale.tr("State"),
|
||||
Locale.tr("Labels")
|
||||
Locale.tr("Labels"),
|
||||
"search_data"
|
||||
];
|
||||
|
||||
this.selectOptions = {
|
||||
@ -77,6 +80,9 @@ define(function(require) {
|
||||
"you_selected_multiple": Locale.tr("You selected the following Services:")
|
||||
};
|
||||
|
||||
this.conf.searchDropdownHTML = SearchDropdown({tableId: this.dataTableId});
|
||||
this.searchColumn = SEARCH_COLUMN;
|
||||
|
||||
TabDataTable.call(this);
|
||||
}
|
||||
|
||||
@ -93,6 +99,15 @@ define(function(require) {
|
||||
function _elementArray(element_json) {
|
||||
var element = element_json[XML_ROOT];
|
||||
|
||||
var state = OpenNebulaService.stateStr(element.TEMPLATE.BODY.state);
|
||||
|
||||
var search = {
|
||||
NAME: element.NAME,
|
||||
UNAME: element.UNAME,
|
||||
GNAME: element.GNAME,
|
||||
STATE: state
|
||||
}
|
||||
|
||||
return [
|
||||
'<input class="check_item" type="checkbox" id="' + RESOURCE.toLowerCase() + '_' +
|
||||
element.ID + '" name="selected_items" value="' +
|
||||
@ -101,8 +116,9 @@ define(function(require) {
|
||||
element.UNAME,
|
||||
element.GNAME,
|
||||
element.NAME,
|
||||
OpenNebulaService.stateStr(element.TEMPLATE.BODY.state),
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||'')
|
||||
state,
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||''),
|
||||
btoa(JSON.stringify(search))
|
||||
];
|
||||
}
|
||||
});
|
||||
|
@ -0,0 +1,28 @@
|
||||
<div class="row">
|
||||
<div class="small-12 columns">
|
||||
<label>
|
||||
{{tr "Name"}}
|
||||
<input search-field="NAME" type="text" list="{{tableId}}-searchListNAME"/>
|
||||
<datalist search-datalist="NAME" id="{{tableId}}-searchListNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Owner"}}
|
||||
<input search-field="UNAME" type="text" list="{{tableId}}-searchListUNAME"/>
|
||||
<datalist search-datalist="UNAME" id="{{tableId}}-searchListUNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Group"}}
|
||||
<input search-field="GNAME" type="text" list="{{tableId}}-searchListGNAME"/>
|
||||
<datalist search-datalist="GNAME" id="{{tableId}}-searchListGNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "State"}}
|
||||
<input search-field="STATE" type="text" list="{{tableId}}-searchListSTATE"/>
|
||||
<datalist search-datalist="STATE" id="{{tableId}}-searchListSTATE">
|
||||
</datalist>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
@ -23,6 +23,7 @@ define(function(require) {
|
||||
var SunstoneConfig = require('sunstone-config');
|
||||
var Locale = require('utils/locale');
|
||||
var LabelsUtils = require('utils/labels/utils');
|
||||
var SearchDropdown = require('hbs!./datatable/search');
|
||||
|
||||
/*
|
||||
CONSTANTS
|
||||
@ -32,6 +33,7 @@ define(function(require) {
|
||||
var XML_ROOT = "DOCUMENT";
|
||||
var TAB_NAME = require('./tabId');
|
||||
var LABELS_COLUMN = 5;
|
||||
var SEARCH_COLUMN = 6;
|
||||
var TEMPLATE_ATTR = 'TEMPLATE';
|
||||
|
||||
/*
|
||||
@ -63,7 +65,8 @@ define(function(require) {
|
||||
Locale.tr("Owner") ,
|
||||
Locale.tr("Group"),
|
||||
Locale.tr("Name"),
|
||||
Locale.tr("Labels")
|
||||
Locale.tr("Labels"),
|
||||
"search_data"
|
||||
];
|
||||
|
||||
this.selectOptions = {
|
||||
@ -75,6 +78,9 @@ define(function(require) {
|
||||
"you_selected_multiple": Locale.tr("You selected the following Templates:")
|
||||
};
|
||||
|
||||
this.conf.searchDropdownHTML = SearchDropdown({tableId: this.dataTableId});
|
||||
this.searchColumn = SEARCH_COLUMN;
|
||||
|
||||
TabDataTable.call(this);
|
||||
}
|
||||
|
||||
@ -91,6 +97,12 @@ define(function(require) {
|
||||
function _elementArray(element_json) {
|
||||
var element = element_json[XML_ROOT];
|
||||
|
||||
var search = {
|
||||
NAME: element.NAME,
|
||||
UNAME: element.UNAME,
|
||||
GNAME: element.GNAME
|
||||
}
|
||||
|
||||
return [
|
||||
'<input class="check_item" type="checkbox" id="' + RESOURCE.toLowerCase() + '_' +
|
||||
element.ID + '" name="selected_items" value="' +
|
||||
@ -99,7 +111,8 @@ define(function(require) {
|
||||
element.UNAME,
|
||||
element.GNAME,
|
||||
element.NAME,
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||'')
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||''),
|
||||
btoa(JSON.stringify(search))
|
||||
];
|
||||
}
|
||||
});
|
||||
|
@ -0,0 +1,22 @@
|
||||
<div class="row">
|
||||
<div class="small-12 columns">
|
||||
<label>
|
||||
{{tr "Name"}}
|
||||
<input search-field="NAME" type="text" list="{{tableId}}-searchListNAME"/>
|
||||
<datalist search-datalist="NAME" id="{{tableId}}-searchListNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Owner"}}
|
||||
<input search-field="UNAME" type="text" list="{{tableId}}-searchListUNAME"/>
|
||||
<datalist search-datalist="UNAME" id="{{tableId}}-searchListUNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Group"}}
|
||||
<input search-field="GNAME" type="text" list="{{tableId}}-searchListGNAME"/>
|
||||
<datalist search-datalist="GNAME" id="{{tableId}}-searchListGNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
@ -23,6 +23,7 @@ define(function(require) {
|
||||
var SunstoneConfig = require('sunstone-config');
|
||||
var Locale = require('utils/locale');
|
||||
var LabelsUtils = require('utils/labels/utils');
|
||||
var SearchDropdown = require('hbs!./datatable/search');
|
||||
|
||||
/*
|
||||
CONSTANTS
|
||||
@ -32,6 +33,7 @@ define(function(require) {
|
||||
var XML_ROOT = "SECURITY_GROUP";
|
||||
var TAB_NAME = require('./tabId');
|
||||
var LABELS_COLUMN = 5;
|
||||
var SEARCH_COLUMN = 6;
|
||||
var TEMPLATE_ATTR = 'TEMPLATE';
|
||||
|
||||
/*
|
||||
@ -63,7 +65,8 @@ define(function(require) {
|
||||
Locale.tr("Owner"),
|
||||
Locale.tr("Group"),
|
||||
Locale.tr("Name"),
|
||||
Locale.tr("Labels")
|
||||
Locale.tr("Labels"),
|
||||
"search_data"
|
||||
];
|
||||
|
||||
this.selectOptions = {
|
||||
@ -75,6 +78,9 @@ define(function(require) {
|
||||
"you_selected_multiple": Locale.tr("You selected the following security groups:")
|
||||
};
|
||||
|
||||
this.conf.searchDropdownHTML = SearchDropdown({tableId: this.dataTableId});
|
||||
this.searchColumn = SEARCH_COLUMN;
|
||||
|
||||
TabDataTable.call(this);
|
||||
}
|
||||
|
||||
@ -91,6 +97,12 @@ define(function(require) {
|
||||
function _elementArray(element_json) {
|
||||
var element = element_json[XML_ROOT];
|
||||
|
||||
var search = {
|
||||
NAME: element.NAME,
|
||||
UNAME: element.UNAME,
|
||||
GNAME: element.GNAME
|
||||
}
|
||||
|
||||
return [
|
||||
'<input class="check_item" type="checkbox" id="'+RESOURCE.toLowerCase()+'_' +
|
||||
element.ID + '" name="selected_items" value="' +
|
||||
@ -99,7 +111,8 @@ define(function(require) {
|
||||
element.UNAME,
|
||||
element.GNAME,
|
||||
element.NAME,
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||'')
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||''),
|
||||
btoa(JSON.stringify(search))
|
||||
];
|
||||
}
|
||||
});
|
||||
|
@ -0,0 +1,22 @@
|
||||
<div class="row">
|
||||
<div class="small-12 columns">
|
||||
<label>
|
||||
{{tr "Name"}}
|
||||
<input search-field="NAME" type="text" list="{{tableId}}-searchListNAME"/>
|
||||
<datalist search-datalist="NAME" id="{{tableId}}-searchListNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Owner"}}
|
||||
<input search-field="UNAME" type="text" list="{{tableId}}-searchListUNAME"/>
|
||||
<datalist search-datalist="UNAME" id="{{tableId}}-searchListUNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Group"}}
|
||||
<input search-field="GNAME" type="text" list="{{tableId}}-searchListGNAME"/>
|
||||
<datalist search-datalist="GNAME" id="{{tableId}}-searchListGNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
@ -27,6 +27,7 @@ define(function(require) {
|
||||
var Humanize = require('utils/humanize');
|
||||
var Notifier = require('utils/notifier');
|
||||
var LabelsUtils = require('utils/labels/utils');
|
||||
var SearchDropdown = require('hbs!./datatable/search');
|
||||
|
||||
/*
|
||||
CONSTANTS
|
||||
@ -34,6 +35,7 @@ define(function(require) {
|
||||
|
||||
var XML_ROOT = "VMTEMPLATE";
|
||||
var LABELS_COLUMN = 6;
|
||||
var SEARCH_COLUMN = 7;
|
||||
var TEMPLATE_ATTR = 'TEMPLATE';
|
||||
|
||||
/*
|
||||
@ -66,7 +68,8 @@ define(function(require) {
|
||||
Locale.tr("Group"),
|
||||
Locale.tr("Name"),
|
||||
Locale.tr("Registration time"),
|
||||
Locale.tr("Labels")
|
||||
Locale.tr("Labels"),
|
||||
"search_data"
|
||||
];
|
||||
|
||||
this.selectOptions = {
|
||||
@ -78,7 +81,8 @@ define(function(require) {
|
||||
"you_selected_multiple": Locale.tr("You selected the following Templates:"),
|
||||
};
|
||||
|
||||
this.labels = [];
|
||||
this.conf.searchDropdownHTML = SearchDropdown({tableId: this.dataTableId});
|
||||
this.searchColumn = SEARCH_COLUMN;
|
||||
|
||||
TabDataTable.call(this);
|
||||
};
|
||||
@ -98,6 +102,14 @@ define(function(require) {
|
||||
function _elementArray(element_json) {
|
||||
var element = element_json[XML_ROOT];
|
||||
|
||||
var search = {
|
||||
NAME: element.NAME,
|
||||
UNAME: element.UNAME,
|
||||
GNAME: element.GNAME,
|
||||
REGTIME_AFTER: element.REGTIME,
|
||||
REGTIME_BEFORE: element.REGTIME
|
||||
}
|
||||
|
||||
return [
|
||||
'<input class="check_item" type="checkbox" id="' + this.resource.toLowerCase() + '_' +
|
||||
element.ID + '" name="selected_items" value="' +
|
||||
@ -107,7 +119,8 @@ define(function(require) {
|
||||
element.GNAME,
|
||||
element.NAME,
|
||||
Humanize.prettyTime(element.REGTIME),
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||'')
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||''),
|
||||
btoa(JSON.stringify(search))
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,36 @@
|
||||
<div class="row">
|
||||
<div class="small-12 columns">
|
||||
<label>
|
||||
{{tr "Name"}}
|
||||
<input search-field="NAME" type="text" list="{{tableId}}-searchListNAME"/>
|
||||
<datalist search-datalist="NAME" id="{{tableId}}-searchListNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Owner"}}
|
||||
<input search-field="UNAME" type="text" list="{{tableId}}-searchListUNAME"/>
|
||||
<datalist search-datalist="UNAME" id="{{tableId}}-searchListUNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Group"}}
|
||||
<input search-field="GNAME" type="text" list="{{tableId}}-searchListGNAME"/>
|
||||
<datalist search-datalist="GNAME" id="{{tableId}}-searchListGNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="medium-6 columns">
|
||||
<label>
|
||||
{{tr "Created after"}}
|
||||
<input search-field="REGTIME_AFTER" search-operation=">=" type="date"/>
|
||||
</label>
|
||||
</div>
|
||||
<div class="medium-6 columns">
|
||||
<label>
|
||||
{{tr "Created before"}}
|
||||
<input search-field="REGTIME_BEFORE" search-operation="<=" type="date"/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
@ -89,10 +89,8 @@ define(function(require) {
|
||||
|
||||
this.totalUsers = 0;
|
||||
|
||||
this.conf.searchDropdownHTML = SearchDropdown();
|
||||
|
||||
this.searchFields = ["NAME", "GNAME", "PASSWORD", "AUTH_DRIVER"];
|
||||
this.searchVals = {"NAME": "", "GNAME": "", "PASSWORD": "", "AUTH_DRIVER": ""};
|
||||
this.conf.searchDropdownHTML = SearchDropdown({tableId: this.dataTableId});
|
||||
this.searchColumn = SEARCH_COLUMN;
|
||||
|
||||
TabDataTable.call(this);
|
||||
}
|
||||
@ -102,7 +100,6 @@ define(function(require) {
|
||||
Table.prototype.elementArray = _elementArray;
|
||||
Table.prototype.preUpdateView = _preUpdateView;
|
||||
Table.prototype.postUpdateView = _postUpdateView;
|
||||
Table.prototype.setupSearch = _setupSearch;
|
||||
|
||||
return Table;
|
||||
|
||||
@ -110,66 +107,7 @@ define(function(require) {
|
||||
FUNCTION DEFINITIONS
|
||||
*/
|
||||
|
||||
function _setupSearch(context) {
|
||||
var that = this;
|
||||
|
||||
$("[search-field]", context).on('input change', function(){
|
||||
that.searchVals[$(this).attr("search-field")] = $(this).val();
|
||||
});
|
||||
|
||||
this.dataTable.on('search.dt', function() {
|
||||
var empty = true;
|
||||
|
||||
for(var i=0; i < that.searchFields.length; i++){
|
||||
var name = that.searchFields[i];
|
||||
empty = $("[search-field="+name+"]", context).val() == "";
|
||||
|
||||
if(!empty){
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(empty){
|
||||
$("button.search-dropdown", context).addClass("hollow");
|
||||
} else {
|
||||
$("button.search-dropdown", context).removeClass("hollow");
|
||||
}
|
||||
});
|
||||
|
||||
$.fn.dataTable.ext.search.push(
|
||||
function( settings, data, dataIndex ) {
|
||||
// This is a global search function, we need to apply it only if the
|
||||
// search is triggered for the current table
|
||||
if(that.dataTableId != settings.nTable.id){
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
var data = JSON.parse(atob(data[SEARCH_COLUMN]));
|
||||
|
||||
var match = true;
|
||||
|
||||
for(var i=0; i < that.searchFields.length; i++){
|
||||
var name = that.searchFields[i];
|
||||
|
||||
match = (data[name].match( that.searchVals[name] ) != null);
|
||||
|
||||
if (!match){
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return match;
|
||||
} catch (err) {}
|
||||
|
||||
return true;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function _elementArray(element_json) {
|
||||
var that = this;
|
||||
|
||||
this.totalUsers++;
|
||||
|
||||
var element = element_json[XML_ROOT];
|
||||
@ -209,12 +147,6 @@ define(function(require) {
|
||||
AUTH_DRIVER: element.AUTH_DRIVER
|
||||
}
|
||||
|
||||
try{
|
||||
that.searchFields.forEach(function(name){
|
||||
that.searchSets[name].add(search[name]);
|
||||
});
|
||||
}catch(e){}
|
||||
|
||||
return [
|
||||
'<input class="check_item" type="checkbox" id="'+RESOURCE.toLowerCase()+'_' +
|
||||
element.ID + '" name="selected_items" ' +
|
||||
@ -234,34 +166,10 @@ define(function(require) {
|
||||
}
|
||||
|
||||
function _preUpdateView() {
|
||||
var that = this;
|
||||
|
||||
this.totalUsers = 0;
|
||||
|
||||
this.searchSets = {};
|
||||
|
||||
try {
|
||||
that.searchFields.forEach(function(name){
|
||||
that.searchSets[name] = new Set();
|
||||
});
|
||||
} catch(e){}
|
||||
}
|
||||
|
||||
function _postUpdateView() {
|
||||
var that = this;
|
||||
|
||||
$(".total_users").text(this.totalUsers);
|
||||
|
||||
try {
|
||||
that.searchFields.forEach(function(name){
|
||||
var st = "";
|
||||
|
||||
that.searchSets[name].forEach(function(val){
|
||||
st += '<option value="' + val + '">';
|
||||
});
|
||||
|
||||
$("datalist[search-datalist="+name+"]", $("#"+TAB_NAME)).html(st);
|
||||
});
|
||||
} catch(e){}
|
||||
}
|
||||
});
|
||||
|
@ -2,26 +2,26 @@
|
||||
<div class="small-12 columns">
|
||||
<label>
|
||||
{{tr "Name"}}
|
||||
<input search-field="NAME" type="text" list="userSearchListNAME"/>
|
||||
<datalist search-datalist="NAME" id="userSearchListNAME">
|
||||
<input search-field="NAME" type="text" list="{{tableId}}-searchListNAME"/>
|
||||
<datalist search-datalist="NAME" id="{{tableId}}-searchListNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Group"}}
|
||||
<input search-field="GNAME" type="text" list="userSearchListGNAME"/>
|
||||
<datalist search-datalist="GNAME" id="userSearchListGNAME">
|
||||
<input search-field="GNAME" type="text" list="{{tableId}}-searchListGNAME"/>
|
||||
<datalist search-datalist="GNAME" id="{{tableId}}-searchListGNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Password"}}
|
||||
<input search-field="PASSWORD" type="text" list="userSearchListPASSWORD"/>
|
||||
<datalist search-datalist="PASSWORD" id="userSearchListPASSWORD">
|
||||
<input search-field="PASSWORD" type="text" list="{{tableId}}-searchListPASSWORD"/>
|
||||
<datalist search-datalist="PASSWORD" id="{{tableId}}-searchListPASSWORD">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Auth driver"}}
|
||||
<input search-field="AUTH_DRIVER" type="text" list="userSearchListAUTH_DRIVER"/>
|
||||
<datalist search-datalist="AUTH_DRIVER" id="userSearchListAUTH_DRIVER">
|
||||
<input search-field="AUTH_DRIVER" type="text" list="{{tableId}}-searchListAUTH_DRIVER"/>
|
||||
<datalist search-datalist="AUTH_DRIVER" id="{{tableId}}-searchListAUTH_DRIVER">
|
||||
</datalist>
|
||||
</label>
|
||||
</div>
|
||||
|
@ -29,6 +29,7 @@ define(function(require) {
|
||||
var Vnc = require('utils/vnc');
|
||||
var Spice = require('utils/spice');
|
||||
var Notifier = require('utils/notifier');
|
||||
var SearchDropdown = require('hbs!./datatable/search');
|
||||
|
||||
/*
|
||||
CONSTANTS
|
||||
@ -38,6 +39,7 @@ define(function(require) {
|
||||
var XML_ROOT = "VM";
|
||||
var TAB_NAME = require('./tabId');
|
||||
var LABELS_COLUMN = 13;
|
||||
var SEARCH_COLUMN = 14;
|
||||
|
||||
|
||||
/*
|
||||
@ -81,6 +83,9 @@ define(function(require) {
|
||||
this.failedVms = 0;
|
||||
this.offVms = 0;
|
||||
|
||||
this.conf.searchDropdownHTML = SearchDropdown({tableId: this.dataTableId});
|
||||
this.searchColumn = SEARCH_COLUMN;
|
||||
|
||||
TabDataTable.call(this);
|
||||
};
|
||||
|
||||
|
58
src/sunstone/public/app/tabs/vms-tab/datatable/search.hbs
Normal file
58
src/sunstone/public/app/tabs/vms-tab/datatable/search.hbs
Normal file
@ -0,0 +1,58 @@
|
||||
<div class="row">
|
||||
<div class="small-12 columns">
|
||||
<label>
|
||||
{{tr "Name"}}
|
||||
<input search-field="NAME" type="text" list="{{tableId}}-searchListNAME"/>
|
||||
<datalist search-datalist="NAME" id="{{tableId}}-searchListNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Owner"}}
|
||||
<input search-field="UNAME" type="text" list="{{tableId}}-searchListUNAME"/>
|
||||
<datalist search-datalist="UNAME" id="{{tableId}}-searchListUNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Group"}}
|
||||
<input search-field="GNAME" type="text" list="{{tableId}}-searchListGNAME"/>
|
||||
<datalist search-datalist="GNAME" id="{{tableId}}-searchListGNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Status"}}
|
||||
<input search-field="STATUS" type="text" list="{{tableId}}-searchListSTATUS"/>
|
||||
<datalist search-datalist="STATUS" id="{{tableId}}-searchListSTATUS">
|
||||
</datalist>
|
||||
</label>
|
||||
</div>
|
||||
<div class="medium-6 columns">
|
||||
<label>
|
||||
{{tr "Host"}}
|
||||
<input search-field="HOST" type="text" list="{{tableId}}-searchListHOST"/>
|
||||
<datalist search-datalist="HOST" id="{{tableId}}-searchListHOST">
|
||||
</datalist>
|
||||
</label>
|
||||
</div>
|
||||
<div class="medium-6 columns">
|
||||
<label>
|
||||
{{tr "Cluster"}}
|
||||
<input search-field="CLUSTER" type="text" list="{{tableId}}-searchListCLUSTER"/>
|
||||
<datalist search-datalist="CLUSTER" id="{{tableId}}-searchListCLUSTER">
|
||||
</datalist>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="medium-6 columns">
|
||||
<label>
|
||||
{{tr "Created after"}}
|
||||
<input search-field="STIME_AFTER" search-operation=">=" type="date"/>
|
||||
</label>
|
||||
</div>
|
||||
<div class="medium-6 columns">
|
||||
<label>
|
||||
{{tr "Created before"}}
|
||||
<input search-field="STIME_BEFORE" search-operation="<=" type="date"/>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
@ -39,7 +39,8 @@ define(function(require) {
|
||||
Locale.tr("Start Time"),
|
||||
"",
|
||||
Locale.tr("Hidden Template"),
|
||||
Locale.tr("Labels")
|
||||
Locale.tr("Labels"),
|
||||
"search_data"
|
||||
];
|
||||
|
||||
return {
|
||||
@ -80,7 +81,20 @@ define(function(require) {
|
||||
memoryMonitoring = element.MONITORING.MEMORY
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var hostname = OpenNebulaVM.hostnameStr(element);
|
||||
|
||||
var search = {
|
||||
NAME: element.NAME,
|
||||
UNAME: element.UNAME,
|
||||
GNAME: element.GNAME,
|
||||
STATUS: state,
|
||||
HOST: hostname,
|
||||
CLUSTER: OpenNebulaVM.clusterStr(element),
|
||||
STIME_AFTER: element.STIME,
|
||||
STIME_BEFORE: element.STIME
|
||||
}
|
||||
|
||||
return [
|
||||
'<input class="check_item" '+
|
||||
'type="checkbox" '+
|
||||
@ -95,12 +109,13 @@ define(function(require) {
|
||||
state,
|
||||
cpuMonitoring,
|
||||
Humanize.size(memoryMonitoring),
|
||||
OpenNebulaVM.hostnameStr(element),
|
||||
hostname,
|
||||
OpenNebulaVM.ipsStr(element),
|
||||
Humanize.prettyTime(element.STIME),
|
||||
vncIcon,
|
||||
TemplateUtils.templateToString(element),
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||'')
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||''),
|
||||
btoa(JSON.stringify(search))
|
||||
];
|
||||
}
|
||||
|
||||
|
@ -25,6 +25,8 @@ define(function(require) {
|
||||
var ProgressBar = require('utils/progress-bar');
|
||||
var Utils = require('./utils/common');
|
||||
var LabelsUtils = require('utils/labels/utils');
|
||||
var SearchDropdown = require('hbs!./datatable/search');
|
||||
var OpenNebulaNetwork = require('opennebula/network');
|
||||
|
||||
/*
|
||||
CONSTANTS
|
||||
@ -34,6 +36,7 @@ define(function(require) {
|
||||
var XML_ROOT = "VNET";
|
||||
var TAB_NAME = require('./tabId');
|
||||
var LABELS_COLUMN = 10;
|
||||
var SEARCH_COLUMN = 11;
|
||||
var TEMPLATE_ATTR = 'TEMPLATE';
|
||||
|
||||
/*
|
||||
@ -70,7 +73,8 @@ define(function(require) {
|
||||
Locale.tr("Bridge"),
|
||||
Locale.tr("Leases"),
|
||||
Locale.tr("VLAN ID"),
|
||||
Locale.tr("Labels")
|
||||
Locale.tr("Labels"),
|
||||
"search_data"
|
||||
];
|
||||
|
||||
this.selectOptions = {
|
||||
@ -86,6 +90,9 @@ define(function(require) {
|
||||
this.usedLeases = 0;
|
||||
this.totalVNets = 0;
|
||||
|
||||
this.conf.searchDropdownHTML = SearchDropdown({tableId: this.dataTableId});
|
||||
this.searchColumn = SEARCH_COLUMN;
|
||||
|
||||
TabDataTable.call(this);
|
||||
};
|
||||
|
||||
@ -120,6 +127,20 @@ define(function(require) {
|
||||
clusters = $.isArray(element.CLUSTERS.ID) ? element.CLUSTERS.ID.join(",") : element.CLUSTERS.ID;
|
||||
}
|
||||
|
||||
var parent_net = "";
|
||||
|
||||
if(element.PARENT_NETWORK_ID.length > 0){
|
||||
parent_net = OpenNebulaNetwork.getName(element.PARENT_NETWORK_ID);
|
||||
}
|
||||
|
||||
var search = {
|
||||
NAME: element.NAME,
|
||||
UNAME: element.UNAME,
|
||||
GNAME: element.GNAME,
|
||||
VLAN_ID: (element.VLAN_ID.length ? element.VLAN_ID : ""),
|
||||
PARENT_NETWORK: parent_net
|
||||
}
|
||||
|
||||
return [
|
||||
'<input class="check_item" type="checkbox" id="' + RESOURCE.toLowerCase() + '_' +
|
||||
element.ID + '" name="selected_items" value="' +
|
||||
@ -133,7 +154,8 @@ define(function(require) {
|
||||
element.BRIDGE,
|
||||
ProgressBar.html(element.USED_LEASES, total_size),
|
||||
element.VLAN_ID.length ? element.VLAN_ID : "-",
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||'')
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||''),
|
||||
btoa(JSON.stringify(search))
|
||||
];
|
||||
}
|
||||
|
||||
|
34
src/sunstone/public/app/tabs/vnets-tab/datatable/search.hbs
Normal file
34
src/sunstone/public/app/tabs/vnets-tab/datatable/search.hbs
Normal file
@ -0,0 +1,34 @@
|
||||
<div class="row">
|
||||
<div class="small-12 columns">
|
||||
<label>
|
||||
{{tr "Name"}}
|
||||
<input search-field="NAME" type="text" list="{{tableId}}-searchListNAME"/>
|
||||
<datalist search-datalist="NAME" id="{{tableId}}-searchListNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Owner"}}
|
||||
<input search-field="UNAME" type="text" list="{{tableId}}-searchListUNAME"/>
|
||||
<datalist search-datalist="UNAME" id="{{tableId}}-searchListUNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Group"}}
|
||||
<input search-field="GNAME" type="text" list="{{tableId}}-searchListGNAME"/>
|
||||
<datalist search-datalist="GNAME" id="{{tableId}}-searchListGNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "VLAN ID"}}
|
||||
<input search-field="VLAN_ID" search-operation="==" type="text" list="{{tableId}}-searchListVLAN_ID"/>
|
||||
<datalist search-datalist="VLAN_ID" id="{{tableId}}-searchListVLAN_ID">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Reservation parent"}}
|
||||
<input search-field="PARENT_NETWORK" type="text" list="{{tableId}}-searchListPARENT_NETWORK"/>
|
||||
<datalist search-datalist="PARENT_NETWORK" id="{{tableId}}-searchListPARENT_NETWORK">
|
||||
</datalist>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
@ -23,6 +23,7 @@ define(function(require) {
|
||||
var SunstoneConfig = require('sunstone-config');
|
||||
var Locale = require('utils/locale');
|
||||
var LabelsUtils = require('utils/labels/utils');
|
||||
var SearchDropdown = require('hbs!./datatable/search');
|
||||
|
||||
/*
|
||||
CONSTANTS
|
||||
@ -32,6 +33,7 @@ define(function(require) {
|
||||
var XML_ROOT = "VROUTER";
|
||||
var TAB_NAME = require('./tabId');
|
||||
var LABELS_COLUMN = 5;
|
||||
var SEARCH_COLUMN = 6;
|
||||
var TEMPLATE_ATTR = 'TEMPLATE';
|
||||
|
||||
/*
|
||||
@ -63,7 +65,8 @@ define(function(require) {
|
||||
Locale.tr("Owner"),
|
||||
Locale.tr("Group"),
|
||||
Locale.tr("Name"),
|
||||
Locale.tr("Labels")
|
||||
Locale.tr("Labels"),
|
||||
"search_data"
|
||||
];
|
||||
|
||||
this.selectOptions = {
|
||||
@ -75,7 +78,8 @@ define(function(require) {
|
||||
"you_selected_multiple": Locale.tr("You selected the following virtual routers:")
|
||||
};
|
||||
|
||||
this.labels = [];
|
||||
this.conf.searchDropdownHTML = SearchDropdown({tableId: this.dataTableId});
|
||||
this.searchColumn = SEARCH_COLUMN;
|
||||
|
||||
TabDataTable.call(this);
|
||||
}
|
||||
@ -93,6 +97,12 @@ define(function(require) {
|
||||
function _elementArray(element_json) {
|
||||
var element = element_json[XML_ROOT];
|
||||
|
||||
var search = {
|
||||
NAME: element.NAME,
|
||||
UNAME: element.UNAME,
|
||||
GNAME: element.GNAME
|
||||
}
|
||||
|
||||
return [
|
||||
'<input class="check_item" type="checkbox" id="'+RESOURCE.toLowerCase()+'_' +
|
||||
element.ID + '" name="selected_items" value="' +
|
||||
@ -101,7 +111,8 @@ define(function(require) {
|
||||
element.UNAME,
|
||||
element.GNAME,
|
||||
element.NAME,
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||'')
|
||||
(LabelsUtils.labelsStr(element[TEMPLATE_ATTR])||''),
|
||||
btoa(JSON.stringify(search))
|
||||
];
|
||||
}
|
||||
});
|
||||
|
@ -0,0 +1,22 @@
|
||||
<div class="row">
|
||||
<div class="small-12 columns">
|
||||
<label>
|
||||
{{tr "Name"}}
|
||||
<input search-field="NAME" type="text" list="{{tableId}}-searchListNAME"/>
|
||||
<datalist search-datalist="NAME" id="{{tableId}}-searchListNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Owner"}}
|
||||
<input search-field="UNAME" type="text" list="{{tableId}}-searchListUNAME"/>
|
||||
<datalist search-datalist="UNAME" id="{{tableId}}-searchListUNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
<label>
|
||||
{{tr "Group"}}
|
||||
<input search-field="GNAME" type="text" list="{{tableId}}-searchListGNAME"/>
|
||||
<datalist search-datalist="GNAME" id="{{tableId}}-searchListGNAME">
|
||||
</datalist>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
@ -219,10 +219,14 @@ define(function(require) {
|
||||
|
||||
if(that.conf.searchDropdownHTML != undefined){
|
||||
var context = $('#' + this.dataTableId + 'Search-wrapper');
|
||||
that.setupSearch(context);
|
||||
if (that.setupSearch != undefined){
|
||||
that.setupSearch(context);
|
||||
} else {
|
||||
_setupSearch(that, context);
|
||||
}
|
||||
|
||||
$("a.advanced-search-clear", context).on('click', function(){
|
||||
$("input", context).val("").trigger("change");
|
||||
$("input", context).val("").trigger("input");
|
||||
|
||||
$("button.advanced-search", context).click();
|
||||
});
|
||||
@ -277,6 +281,121 @@ define(function(require) {
|
||||
Foundation.reflow($('#' + this.dataTableId + 'Search-dropdown'), 'dropdown');
|
||||
}
|
||||
|
||||
|
||||
function _setupSearch(that, context) {
|
||||
that.searchFields = [];
|
||||
|
||||
$("[search-field]", context).each(function(){
|
||||
that.searchFields.push( $(this).attr("search-field") );
|
||||
});
|
||||
|
||||
that.searchVals = {};
|
||||
that.searchFields.forEach(function(name){
|
||||
that.searchVals[name] = "";
|
||||
});
|
||||
|
||||
that.searchOps = {};
|
||||
that.searchFields.forEach(function(name){
|
||||
var op = $("[search-field="+name+"]", context).attr("search-operation");
|
||||
|
||||
if (op == undefined){
|
||||
op = "match";
|
||||
}
|
||||
|
||||
that.searchOps[name] = op;
|
||||
});
|
||||
|
||||
$("[search-field]", context).on('input change', function(){
|
||||
var name = $(this).attr("search-field");
|
||||
|
||||
if($(this).attr("type") == "date"){
|
||||
var val = $(this).val();
|
||||
|
||||
if(val == ""){
|
||||
that.searchVals[name] = "";
|
||||
} else {
|
||||
that.searchVals[name] = parseInt( new Date(val).getTime() ) / 1000;
|
||||
}
|
||||
}else{
|
||||
that.searchVals[name] = $(this).val();
|
||||
}
|
||||
});
|
||||
|
||||
that.dataTable.on('search.dt', function() {
|
||||
var empty = true;
|
||||
|
||||
for(var i=0; i < that.searchFields.length; i++){
|
||||
var name = that.searchFields[i];
|
||||
empty = $("[search-field="+name+"]", context).val() == "";
|
||||
|
||||
if(!empty){
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(empty){
|
||||
$("button.search-dropdown", context).addClass("hollow");
|
||||
} else {
|
||||
$("button.search-dropdown", context).removeClass("hollow");
|
||||
}
|
||||
});
|
||||
|
||||
$.fn.dataTable.ext.search.push(
|
||||
function( settings, data, dataIndex ) {
|
||||
// This is a global search function, we need to apply it only if the
|
||||
// search is triggered for the current table
|
||||
if(that.dataTableId != settings.nTable.id){
|
||||
return true;
|
||||
}
|
||||
|
||||
try {
|
||||
var values = JSON.parse(atob(data[that.searchColumn]));
|
||||
|
||||
var match = true;
|
||||
|
||||
for(var i=0; i < that.searchFields.length; i++){
|
||||
var name = that.searchFields[i];
|
||||
|
||||
switch(that.searchOps[name]){
|
||||
case "match":
|
||||
match = (values[name].match( that.searchVals[name] ) != null);
|
||||
break;
|
||||
case "<=":
|
||||
match = (that.searchVals[name] == "") ||
|
||||
(values[name] <= that.searchVals[name]);
|
||||
break;
|
||||
case ">=":
|
||||
match = (that.searchVals[name] == "") ||
|
||||
(values[name] >= that.searchVals[name]);
|
||||
break;
|
||||
case ">":
|
||||
match = (that.searchVals[name] == "") ||
|
||||
(values[name] > that.searchVals[name]);
|
||||
break;
|
||||
case "<":
|
||||
match = (that.searchVals[name] == "") ||
|
||||
(values[name] < that.searchVals[name]);
|
||||
break;
|
||||
case "==":
|
||||
match = (that.searchVals[name] == "") ||
|
||||
(values[name] == that.searchVals[name]);
|
||||
break;
|
||||
}
|
||||
|
||||
if (!match){
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return match;
|
||||
} catch (err) {}
|
||||
|
||||
return true;
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
function _defaultTrListener(tableObj, tr) {
|
||||
var aData = tableObj.dataTable.fnGetData(tr);
|
||||
if (!aData) return true;
|
||||
@ -436,6 +555,15 @@ define(function(require) {
|
||||
that.preUpdateView();
|
||||
}
|
||||
|
||||
if(that.conf.searchDropdownHTML != undefined){
|
||||
that.searchSets = {};
|
||||
try {
|
||||
that.searchFields.forEach(function(name){
|
||||
that.searchSets[name] = new Set();
|
||||
});
|
||||
} catch(e){}
|
||||
}
|
||||
|
||||
that.dataTable.DataTable().page.len(parseInt(config['user_config']['page_length']));
|
||||
|
||||
var row_id_index = this.dataTable.attr("row_id");
|
||||
@ -479,6 +607,16 @@ define(function(require) {
|
||||
var item = that.elementArray(this);
|
||||
if (item){
|
||||
item_list.push(item);
|
||||
|
||||
if(that.searchColumn != undefined){
|
||||
try{
|
||||
var values = JSON.parse(atob(item[that.searchColumn]));
|
||||
|
||||
that.searchFields.forEach(function(name){
|
||||
that.searchSets[name].add(values[name]);
|
||||
});
|
||||
}catch(e){}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@ -543,6 +681,24 @@ define(function(require) {
|
||||
if (that.postUpdateView) {
|
||||
that.postUpdateView();
|
||||
}
|
||||
|
||||
if(that.conf.searchDropdownHTML != undefined){
|
||||
try {
|
||||
that.searchFields.forEach(function(name){
|
||||
var st = "";
|
||||
|
||||
var dlist = $("datalist[search-datalist="+name+"]", $("#"+that.tabId));
|
||||
|
||||
if(dlist.length > 0){
|
||||
that.searchSets[name].forEach(function(val){
|
||||
st += '<option value="' + val + '">';
|
||||
});
|
||||
|
||||
dlist.html(st);
|
||||
}
|
||||
});
|
||||
} catch(e){}
|
||||
}
|
||||
}
|
||||
|
||||
//replaces an element with id 'tag' in a dataTable with a new one
|
||||
|
@ -22,7 +22,7 @@
|
||||
<i class="fa fa-fw fa-caret-down"/>
|
||||
</button>
|
||||
</div>
|
||||
<div class="dropdown-pane left" id="{{dataTableSearchId}}-dropdown" data-dropdown data-auto-focus="true" style="width:500px">
|
||||
<div class="dropdown-pane left large" id="{{dataTableSearchId}}-dropdown" data-dropdown data-auto-focus="true">
|
||||
{{{searchDropdownHTML}}}
|
||||
<div class="row">
|
||||
<div class="small-12 columns">
|
||||
|
Loading…
x
Reference in New Issue
Block a user