[PATCH V2 0/7] Issue #342: load i18n.html of the plugin
by shaohef@linux.vnet.ibm.com
From: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
V1 -> V2:
The improvement concept here is to directly generate JSON on the server
and assign it to the i18n variable, rather than inserting nodes into the DOM.
Plugins would use a plugin1.i18n= structure to keep plugin strings from
colliding with each other, or with the kimchi variables.
ShaoHe Feng (5):
Update root.py to make Cheetah render the JSON template.
Update the i18n tmpl to produce JSON
Add JS API for fetching i18n JSON
add an optional to toggle the sample plugin
generate the translation files for plugins/sample
Zhou Zheng Sheng (2):
Add Minimal UI Page for the Sample Plugin
Issue #342: load i18n.html of the plugin
configure.ac | 11 +++
plugins/sample/Makefile.am | 25 ++++-
plugins/sample/__init__.py | 3 +-
plugins/sample/config.status | 1 +
plugins/sample/po/LINGUAS | 1 +
plugins/sample/po/Makefile.in.in | 1 +
plugins/sample/po/Makevars | 1 +
plugins/sample/po/POTFILES.in | 2 +
plugins/sample/po/en_US.po | 21 ++++
plugins/sample/po/gen-pot | 1 +
plugins/sample/po/pt_BR.po | 24 +++++
plugins/sample/po/zh_CN.po | 24 +++++
plugins/sample/sample.conf | 7 --
plugins/sample/sample.conf.in | 12 +++
plugins/sample/ui/config/tab-ext.xml | 9 +-
plugins/sample/ui/pages/i18n.json.tmpl | 9 ++
plugins/sample/ui/pages/tab.html.tmpl | 6 ++
src/kimchi/root.py | 5 +
src/kimchi/template.py | 34 ++++---
ui/js/src/kimchi.api.js | 18 +++-
ui/js/src/kimchi.main.js | 24 ++++-
ui/pages/i18n.html.tmpl | 176 ---------------------------------
ui/pages/i18n.json.tmpl | 163 ++++++++++++++++++++++++++++++
23 files changed, 368 insertions(+), 210 deletions(-)
create mode 120000 plugins/sample/config.status
create mode 120000 plugins/sample/po/LINGUAS
create mode 120000 plugins/sample/po/Makefile.in.in
create mode 120000 plugins/sample/po/Makevars
create mode 100644 plugins/sample/po/POTFILES.in
create mode 100644 plugins/sample/po/en_US.po
create mode 120000 plugins/sample/po/gen-pot
create mode 100644 plugins/sample/po/pt_BR.po
create mode 100644 plugins/sample/po/zh_CN.po
delete mode 100644 plugins/sample/sample.conf
create mode 100644 plugins/sample/sample.conf.in
create mode 100644 plugins/sample/ui/pages/i18n.json.tmpl
create mode 100644 plugins/sample/ui/pages/tab.html.tmpl
delete mode 100644 ui/pages/i18n.html.tmpl
create mode 100644 ui/pages/i18n.json.tmpl
--
1.9.0
10 years, 7 months
[PATCH 0/6] Debug Report Rename Feature
by Hongliang Wang
Enable debug report rename feature in this patch set.
Hongliang Wang (6):
Debug Report Rename: Update API.json
Debug Report Rename: Update API.md
Debug Report Rename: Implement Back-end
Debug Report Rename UI: Add API in kimchi.api.js
Debug Report Rename UI: Add Rename Page
Debug Report Rename UI: Enable Rename in Host Tab
docs/API.md | 3 ++
src/kimchi/API.json | 11 +++++++
src/kimchi/control/debugreports.py | 4 ++-
src/kimchi/model/debugreports.py | 13 +++++++++
ui/css/theme-default/report-rename.css | 22 ++++++++++++++
ui/js/src/kimchi.api.js | 12 ++++++++
ui/js/src/kimchi.host.js | 12 ++++++++
ui/js/src/kimchi.report_rename_main.js | 39 +++++++++++++++++++++++++
ui/pages/report-rename.html.tmpl | 53 ++++++++++++++++++++++++++++++++++
9 files changed, 168 insertions(+), 1 deletion(-)
create mode 100644 ui/css/theme-default/report-rename.css
create mode 100644 ui/js/src/kimchi.report_rename_main.js
create mode 100644 ui/pages/report-rename.html.tmpl
--
1.8.1.4
10 years, 7 months
[PATCH v2 0/3] PCI passthrough: Summary
by Zhou Zheng Sheng
Hi,
This patch series is to enable Kimchi to assign hos devices directly to
a VM, thus greately improve VM performance. Currently we support assigning
PCI device, USB device and SCSI LUN. For example, we can assign an NIC
to VM to improve guest network throughput, or passthrough a USB camera
to enable the guest OS to record video.
Host devices form a tree. We can assign most of the devices in the tree
to VM. By assigning a device, all the devices in its sub-tree are also
assigned. It might not make sense to assign a USB controller, because
the host may be using one of the devices connected to the controller.
Instead, Kimchi just presents the "leaf" devices to assign to guest.
In recent Linux kernel and KVM, it is able to recognize the IOMMU group
of a PCI device. The "leaf" PCI devices in the same IOMMU group should
be assigned and dismissed together. The IOMMU group is the actual
smallest isolation granularity of the PCI devices.
The first patch is to list all host devices information. It's useful on
its own to show host devices information.
The second patch is to list all eligible host devices to assign, as well
as the "affected" devices in the same IOMMU group.
The third patch creates a sub-collection "hostdevs" to the VM resource,
and deals with assigning and dismissing devices.
I'll update API and unit test once everyone is happy with the interface
and logic.
Zhou Zheng Sheng (3):
PCI passthrough: list all types of host devices
PCI passthrough: list eligible device to passthrough
PCI passthrough: Directly assign and dissmis host device from VM
docs/API.md | 11 +-
src/kimchi/control/host.py | 9 ++
src/kimchi/control/vm/hostdevs.py | 44 ++++++
src/kimchi/featuretests.py | 10 +-
src/kimchi/hostdev.py | 266 +++++++++++++++++++++++++++++++++
src/kimchi/i18n.py | 7 +
src/kimchi/mockmodel.py | 7 +-
src/kimchi/model/config.py | 2 +
src/kimchi/model/host.py | 32 ++--
src/kimchi/model/libvirtstoragepool.py | 18 +--
src/kimchi/model/vmhostdevs.py | 259 ++++++++++++++++++++++++++++++++
src/kimchi/rollbackcontext.py | 3 +
src/kimchi/xmlutils.py | 26 +++-
tests/test_rest.py | 6 +-
tests/test_storagepool.py | 7 +-
15 files changed, 668 insertions(+), 39 deletions(-)
create mode 100644 src/kimchi/control/vm/hostdevs.py
create mode 100644 src/kimchi/hostdev.py
create mode 100644 src/kimchi/model/vmhostdevs.py
--
1.9.0
10 years, 7 months
kimchi can not start for libvirt Connection error
by Sheldon
$ sudo PYTHONPATH=src ./src/kimchid
*** Running feature tests ***
[21/May/2014:19:41:48] ENGINE Error in 'start' listener <bound method
CapabilitiesModel._set_capabilities of
<kimchi.model.config.CapabilitiesModel object at 0x314ac10>>
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/cherrypy/process/wspbus.py",
line 197, in publish
output.append(listener(*args, **kwargs))
File "/home/shhfeng/work/workdir/kimchi/src/kimchi/model/config.py",
line 69, in _set_capabilities
self.metadata_support = FeatureTests.has_metadata_support()
File "/home/shhfeng/work/workdir/kimchi/src/kimchi/featuretests.py",
line 197, in has_metadata_support
conn = libvirt.open('qemu:///system')
File "/usr/lib64/python2.7/site-packages/libvirt.py", line 247, in open
if ret is None:raise libvirtError('virConnectOpen() failed')
libvirtError: Failed to connect socket to
'/var/run/libvirt/libvirt-sock': Connection refused
[21/May/2014:19:41:48] ENGINE Shutting down due to error in start listener:
[21/May/2014:19:41:48] ENGINE Bus STOPPING
[21/May/2014:19:41:48] ENGINE HTTP Server
cherrypy._cpwsgi_server.CPWSGIServer(('127.0.0.1', 8010)) shut down
[21/May/2014:19:41:48] ENGINE Stopped thread '_TimeoutMonitor'.
[21/May/2014:19:41:48] ENGINE Stopped thread 'Autoreloader'.
[21/May/2014:19:41:48] ENGINE Bus STOPPED
[21/May/2014:19:41:48] ENGINE Bus EXITING
[21/May/2014:19:41:48] ENGINE Bus EXITED
I do not find the root reason. but
after I use LibvirtConnection to open a libvirt connection, kimchi can
start.
+from kimchi.model.libvirtconnection import LibvirtConnection
@@ -104,7 +105,7 @@ def libvirt_supports_iso_stream(protocol):
- conn = libvirt.open('qemu:///system')
+ conn = LibvirtConnection('qemu:///system').get()
--
Thanks and best regards!
Sheldon Feng(???)<shaohef(a)linux.vnet.ibm.com>
IBM Linux Technology Center
10 years, 7 months
[PATCHv2] Exception: fix exception details when not specified
by lvroyce@linux.vnet.ibm.com
From: Royce Lv <lvroyce(a)linux.vnet.ibm.com>
v1>v2, Add a new type of error to cover general schema validation error.
(per Sheldon's comments)
Not every validation error needs to translate for user,
we define user interested errors,
other developer interested error should report directly by schema validator,
and handled by developer directly.
fix exception handling for this situation.
Signed-off-by: Royce Lv <lvroyce(a)linux.vnet.ibm.com>
Signed-off-by: Zheng Sheng Zhou <zhshzhou(a)linux.vnet.ibm.com>
---
src/kimchi/control/utils.py | 6 ++++--
src/kimchi/exception.py | 2 +-
src/kimchi/i18n.py | 1 +
3 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/src/kimchi/control/utils.py b/src/kimchi/control/utils.py
index 5e63816..611b1c0 100644
--- a/src/kimchi/control/utils.py
+++ b/src/kimchi/control/utils.py
@@ -98,8 +98,10 @@ def validate_params(params, instance, action):
try:
validator.validate(request)
except ValidationError, e:
- raise InvalidParameter(e.schema['error'], {'value': str(e.instance)})
-
+ if e.schema.get('error'):
+ raise InvalidParameter(e.schema['error'], {'value': str(e.instance)})
+ else:
+ raise InvalidParameter("KCHAPI0008E", {"err": e.message})
class UrlSubNode(object):
diff --git a/src/kimchi/exception.py b/src/kimchi/exception.py
index fcf60cc..5a292e0 100644
--- a/src/kimchi/exception.py
+++ b/src/kimchi/exception.py
@@ -62,7 +62,7 @@ class KimchiException(Exception):
# itself to a unicode string.
args[key] = unicode(value)
- return unicode(translation.gettext(text), 'utf-8') % args
+ return translation.gettext(text).encode('utf-8') % args
class NotFoundError(KimchiException):
diff --git a/src/kimchi/i18n.py b/src/kimchi/i18n.py
index 25b703f..4ed13fe 100644
--- a/src/kimchi/i18n.py
+++ b/src/kimchi/i18n.py
@@ -30,6 +30,7 @@ messages = {
"KCHAPI0005E": _("Create is not allowed for %(resource)s"),
"KCHAPI0006E": _("Unable to parse JSON request"),
"KCHAPI0007E": _("This API only supports JSON"),
+ "KCHAPI0008E": _("Parameters does not match requirement in schema: %(err)s"),
"KCHASYNC0001E": _("Datastore is not initiated in the model object."),
"KCHASYNC0002E": _("Unable to start task due error: %(err)s"),
--
1.8.3.2
10 years, 7 months
#296 improvement of ui when generating debug reports
by wenwang
According to #296, Dialogue window blocked ui when generating debug
report. I have one proposal that added a process bar showing that it's
working without blocking ui:
I have two thoughts:
1. Dynamic dots during generating process indicate it's working.
2. Dynamic background(with the blue stripe moving forward) indicating
it's working.
Your comments on this design are highly valued and very important to me.
Best regards
Wang Wen
10 years, 7 months
[PATCH] Issue#361:Bugfix as disable the action button content when creating network
by Wen Wang
Bugfix that disabled the content display of the action button for an exsiting
network when creating a new network.
---
ui/js/src/kimchi.network.js | 3 +++
1 file changed, 3 insertions(+)
diff --git a/ui/js/src/kimchi.network.js b/ui/js/src/kimchi.network.js
index ca6d29b..7ff39ae 100644
--- a/ui/js/src/kimchi.network.js
+++ b/ui/js/src/kimchi.network.js
@@ -172,6 +172,9 @@ kimchi.addNetworkActions = function(network) {
$(".menu-container", "#" + network.name).mouseleave(function() {
$(".menu-container", "#" + network.name).toggle(false);
});
+ $("#networkAdd").on("click", function() {
+ $(".menu-container", "#" + network.name).toggle(false);
+ });
};
kimchi.initNetworkCreation = function() {
--
1.9.1
10 years, 7 months
Re: [Kimchi-devel] [PATCH 3/3] Use action verb as the main button's label
by Hongliang Wang
On 05/16/2014 01:37 AM, Crístian Viana wrote:
> On 15-05-2014 00:30, Hongliang Wang wrote:
>> It's an interesting topic here.
> I agree :-) I wish we had more discussions like this here.
>> Take edit template for example. The flow is:
>> List templates =>
>> Select a template to edit by clicking the "*Edit*" Button =>
>> Edit template window is open, and user changes some fields. =>
>> Click the "*Save*" (Or "Submit") Button to save (or submit) changes.
>>
>> Notice that "Edit" means the user is about to edit the template, so
>> "Edit'" Button should trigger a pop-up window to allow user to change
>> some fields.
>> And "Save" Button is for saving user's changes to server. So I think
>> it's reasonable to use these 2 labels for these 2 different purposes.
> You're right, that's another way of labeling the buttons. But this is
> also not used in throughout Kimchi and that's what concerns me. Some
> windows have the "Save" button, some windows have the same label as
> the button which triggered it; we need a consistency. Whichever way is
> fine for me, as long as it looks consistent. I don't like the idea of
> having each dialog of the same application designed differently, even
> if subtly, which is how I feel it is now.
> I also thought about always using "Save" as the buttons' labels, as
> you said, and that sounds totally fine for me. If we think this
> approach is better, I'll use this approach on the next version of this
> patchset.
Go ahead! Either "Save" or "Submit" is fine for me.
>> Let me explain the naming rule of #guest-edit-button-save. It follows
>> name space style like Java package mechanism.
>> guest-: It's within the scope of guest page
>> edit-: It's within the scope of guest edit window
>> button-: It's a button within the scope of guest edit window
>> save: It's a button named save
>>
>> So please remain the original ID string of the button. If we will
>> introduce another button in the future, we can simply name it
>> "#guest-edit-button-newid".
> Thanks for the explanation, it makes total sense. I just blindly
> removed the "save" string from the variable name, I should have left
> "edit" instead, which is the new label I'm using.
> But, again, this variable naming rule is also not consistent
> throughout thel Kimchi code. For example, the submit button of the
> dialog "Create Storage Pool" has an id="pool-doAdd". According to this
> naming rule, it should be something like "storage-add-button-create".
> In this patch, I was just trying to remove the reference to "save",
> which was the label I removed. I agree I should have left the new
> label on the ID, "edit". But I think this is a different discussion,
> regarding coding consistency, which [definitely] needs to be addressed
> in future patches. I'll use "guest-edit-button-edit" in the next
> version of this patch to keep the style you mentioned.
Agree. The naming rules is totally not consistent because we didn't
propose one unified. I also think we need have a unified naming rule (as
well as same user experience through out Kimchi, including windows,
dialog s, buttons, operation behaviors, etc.). Maybe we need propose a
coding/designing guideline documentation for future code. If we are
planning to, I'm glad to be involved in.
10 years, 7 months
[V3] Issue#305: Redesign bridged network UI section
by Wen Wang
Finished align vlan fields. Redesigned the pattern of the label positions
V2 -> V3:
Address to Hongliang Wang: Have the additional margin place removed.
v1 -> v2:
Address to Hongliang Wang: Have the unrelated lines removed & Have the display format changed from table to div.
Address to Yuxin Huo: Have the unused IDs removed.
Signed-off-by: Wen Wang <wenwang(a)linux.vnet.ibm.com>
---
ui/css/theme-default/network.css | 21 ++++++++++++++++-----
ui/js/src/kimchi.network.js | 8 ++++----
ui/pages/tabs/network.html.tmpl | 26 +++++++++++++++++---------
3 files changed, 37 insertions(+), 18 deletions(-)
diff --git a/ui/css/theme-default/network.css b/ui/css/theme-default/network.css
index 67f2aa2..176b277 100644
--- a/ui/css/theme-default/network.css
+++ b/ui/css/theme-default/network.css
@@ -209,19 +209,30 @@
vertical-align: top;
}
-.network-config .destination {
- margin-left: 28px;
+.bridge-option-column {
+ display: inline-block;
+ margin-left: 56px;
+ vertical-align: middle;
+}
+
+.bridge-option-column > div {
+ height: 25px;
+ line-height: 25px;
}
-.network-config .VLAN {
- margin-left: 28px;
+.bridge-option-column select {
+ height: 26px;
}
-.network-config .VLAN input[type="text"] {
+.bridge-option-column input[type="text"] {
height: 25px;
width: 60px;
}
+#labelNetworkVlanID {
+ margin-left: 26px;
+}
+
.network-config .input-hint-icon {
margin: -1px 1px 0 0;
display: inline-block;
diff --git a/ui/js/src/kimchi.network.js b/ui/js/src/kimchi.network.js
index 7a331be..ca6d29b 100644
--- a/ui/js/src/kimchi.network.js
+++ b/ui/js/src/kimchi.network.js
@@ -275,13 +275,14 @@ kimchi.enableBridgeOptions = function(enable) {
$("#networkVlanID").prop("disabled", true);
$("#networkVlanID").val("");
$("#networkInterface").val("");
- $("#bridge-options").slideUp(100);
+ $("#bridgeOptions").slideUp(100);
} else if (!$("#networkInterface").val()){
$("#networkInterface").prop("selectedIndex", 0);
- $("#bridge-options").slideDown(100);
+ $("#bridgeOptions").slideDown(100);
}
};
+
kimchi.setDefaultNetworkType = function(isInterfaceAvail) {
$("#networkTypeBri").prop("checked", isInterfaceAvail);
$("#networkTypeBri").prop("disabled", !isInterfaceAvail);
@@ -289,7 +290,7 @@ kimchi.setDefaultNetworkType = function(isInterfaceAvail) {
if (!isInterfaceAvail) {
kimchi.enableBridgeOptions(false);
} else {
- $("#bridge-options").slideDown(100);
+ $("#bridgeOptions").slideDown(100);
}
};
@@ -318,7 +319,6 @@ kimchi.cleanNetworkDialog = function() {
$("#networkVlanID").prop("disabled", true);
$("#enableVlan").prop("checked", false);
};
-
kimchi.setupNetworkFormEvent = function() {
$("#networkName").on("keyup", function(event) {
$("#networkName").toggleClass("invalid-field", !$("#networkName").val().match(/^[a-zA-Z0-9_]+$/));
diff --git a/ui/pages/tabs/network.html.tmpl b/ui/pages/tabs/network.html.tmpl
index e49b257..aacd2b6 100644
--- a/ui/pages/tabs/network.html.tmpl
+++ b/ui/pages/tabs/network.html.tmpl
@@ -68,16 +68,24 @@
<input type="radio" id="networkTypeBri" name="networkType" value="bridged">
<label for="networkTypeBri">$_("Bridged: Virtual machines are connected to physical network directly")</label>
</div>
- <div id="bridge-options">
- <div class="destination">
- <label for="networkInterface">$_("Destination"): </label>
- <select id="networkInterface"></select>
+ <div id="bridgeOptions">
+ <div class="bridge-option-column">
+ <div>
+ <label for="networkInterface">$_("Destination"): </label>
+ </div>
+ <div>
+ <select id="networkInterface"></select>
+ </div>
</div>
- <div class="VLAN">
- <label for="enableVlan">$_("Enable VLAN"): </label>
- <input id="enableVlan" type="checkbox" value=""/>
- <label for="networkVlanID">$_("VLAN ID"): </label>
- <input type="text" id="networkVlanID" disabled>
+ <div class="bridge-option-column">
+ <div>
+ <input id="enableVlan" type="checkbox" value=""/>
+ <label for="enableVlan">$_("Enable VLAN"): </label>
+ </div>
+ <div>
+ <label id="labelNetworkVlanID">$_("VLAN ID"): </label>
+ <input type="text" id="networkVlanID" disabled>
+ </div>
</div>
</div>
</div>
--
1.9.1
10 years, 7 months
[PATCH v2] Issue#305: Redesign bridged network UI section
by Wen Wang
Finished align vlan fields. Redesigned the pattern of the label positions
v1 -> v2:
Address to Hongliang Wang: Have the unrelated lines removed & Have the display format changed from table to div.
Address to Yuxin Huo: Have the unused IDs removed.
Signed-off-by: Wen Wang <wenwang(a)linux.vnet.ibm.com>
---
ui/css/theme-default/network.css | 18 +++++++++++++++---
ui/js/src/kimchi.network.js | 8 ++++----
ui/pages/tabs/network.html.tmpl | 26 +++++++++++++++++---------
3 files changed, 36 insertions(+), 16 deletions(-)
diff --git a/ui/css/theme-default/network.css b/ui/css/theme-default/network.css
index 67f2aa2..5a06715 100644
--- a/ui/css/theme-default/network.css
+++ b/ui/css/theme-default/network.css
@@ -209,19 +209,31 @@
vertical-align: top;
}
-.network-config .destination {
+.bridge-option-column {
+ display: inline-block;
margin-left: 28px;
+ vertical-align: middle;
}
-.network-config .VLAN {
+.bridge-option-column > div {
margin-left: 28px;
+ height: 25px;
+ line-height: 25px;
+}
+
+.bridge-option-column select {
+ height: 26px;
}
-.network-config .VLAN input[type="text"] {
+.bridge-option-column input[type="text"] {
height: 25px;
width: 60px;
}
+#labelNetworkVlanID {
+ margin-left: 26px;
+}
+
.network-config .input-hint-icon {
margin: -1px 1px 0 0;
display: inline-block;
diff --git a/ui/js/src/kimchi.network.js b/ui/js/src/kimchi.network.js
index 7a331be..ca6d29b 100644
--- a/ui/js/src/kimchi.network.js
+++ b/ui/js/src/kimchi.network.js
@@ -275,13 +275,14 @@ kimchi.enableBridgeOptions = function(enable) {
$("#networkVlanID").prop("disabled", true);
$("#networkVlanID").val("");
$("#networkInterface").val("");
- $("#bridge-options").slideUp(100);
+ $("#bridgeOptions").slideUp(100);
} else if (!$("#networkInterface").val()){
$("#networkInterface").prop("selectedIndex", 0);
- $("#bridge-options").slideDown(100);
+ $("#bridgeOptions").slideDown(100);
}
};
+
kimchi.setDefaultNetworkType = function(isInterfaceAvail) {
$("#networkTypeBri").prop("checked", isInterfaceAvail);
$("#networkTypeBri").prop("disabled", !isInterfaceAvail);
@@ -289,7 +290,7 @@ kimchi.setDefaultNetworkType = function(isInterfaceAvail) {
if (!isInterfaceAvail) {
kimchi.enableBridgeOptions(false);
} else {
- $("#bridge-options").slideDown(100);
+ $("#bridgeOptions").slideDown(100);
}
};
@@ -318,7 +319,6 @@ kimchi.cleanNetworkDialog = function() {
$("#networkVlanID").prop("disabled", true);
$("#enableVlan").prop("checked", false);
};
-
kimchi.setupNetworkFormEvent = function() {
$("#networkName").on("keyup", function(event) {
$("#networkName").toggleClass("invalid-field", !$("#networkName").val().match(/^[a-zA-Z0-9_]+$/));
diff --git a/ui/pages/tabs/network.html.tmpl b/ui/pages/tabs/network.html.tmpl
index e49b257..aacd2b6 100644
--- a/ui/pages/tabs/network.html.tmpl
+++ b/ui/pages/tabs/network.html.tmpl
@@ -68,16 +68,24 @@
<input type="radio" id="networkTypeBri" name="networkType" value="bridged">
<label for="networkTypeBri">$_("Bridged: Virtual machines are connected to physical network directly")</label>
</div>
- <div id="bridge-options">
- <div class="destination">
- <label for="networkInterface">$_("Destination"): </label>
- <select id="networkInterface"></select>
+ <div id="bridgeOptions">
+ <div class="bridge-option-column">
+ <div>
+ <label for="networkInterface">$_("Destination"): </label>
+ </div>
+ <div>
+ <select id="networkInterface"></select>
+ </div>
</div>
- <div class="VLAN">
- <label for="enableVlan">$_("Enable VLAN"): </label>
- <input id="enableVlan" type="checkbox" value=""/>
- <label for="networkVlanID">$_("VLAN ID"): </label>
- <input type="text" id="networkVlanID" disabled>
+ <div class="bridge-option-column">
+ <div>
+ <input id="enableVlan" type="checkbox" value=""/>
+ <label for="enableVlan">$_("Enable VLAN"): </label>
+ </div>
+ <div>
+ <label id="labelNetworkVlanID">$_("VLAN ID"): </label>
+ <input type="text" id="networkVlanID" disabled>
+ </div>
</div>
</div>
</div>
--
1.9.1
10 years, 7 months