I have a dgrid, and use JsonRest to get data from the server side. I pressed a button to filter the data.
Here is the html code:
<div data-dojo-type="dijit/TitlePane" title="<b>查询</b>">
<div class="row-fluid">
<div class="span12">
<div class="row-fluid">
<div class="span10 offset1">
<table>
<tr>
<td>批号:</td>
<td><input id="simple_store_dgrid_search_batch_no"
style="width: 120px; height: 20px"
data-dojo-type="dijit/form/TextBox" /></td>
</tr>
</table>
</div>
</div>
<div class="row-fluid">
<div class="span6 offset6">
<button type="button" id="simple_store_dgrid_clear_button">清除</button>
<button type="button" id="simple_store_dgrid_search_button">查询</button>
</div>
</div>
</div>
</div>
</div>
<div id="simple_store_dgrid_table_toolbar"></div>
<div id="simple_store_dgrid_table"></div>
js code:
require([ "dgrid/OnDemandGrid", "dgrid/Selection", "dgrid/Keyboard", "dojo/_base/declare",
"dojo/store/JsonRest", "dojo/store/Observable", "dgrid/extensions/Pagination",
"dijit/Toolbar", "dijit/form/Button", 'dojo/query', "dijit/registry", "dojo/domReady!" ],
function(Grid, Selection, Keyboard, declare, JsonRest, Observable, Pagination, Toolbar,
Button, query, registry) {
**var jsonRest = JsonRest({
target : "../rest/dGrid/",
idProperty : "batchId"
});
var store = Observable(jsonRest);**
var columns = [ {
label : '批号',
field : 'batchId',
sortable : true
}, {
label : '创建日期',
field : 'creationDate',
sortable : true
}, {
label : '创建人',
field : 'createdBy',
sortable : true
}, {
label : '描述',
field : 'description',
sortable : true
} ];
**var grid = new (declare([ Grid, Selection, Keyboard, Pagination ]))({
store : store,
getBeforePut : false,
columns : columns,
minRowsPerPage : 10,
pagingLinks : 1,
loadingMessage : '数据加载...',
selectionMode : "single",
noDataMessage : '没有查到数据'
}, "simple_store_dgrid_table");
grid.startup();**
var toolbar = new Toolbar({}, "simple_store_dgrid_table_toolbar");
var clear = new Button({
onClick : function() {
var batch_no = registry.byId("simple_store_dgrid_search_batch_no");
batch_no.set('value', '');
}
}, "simple_store_dgrid_clear_button");
var search = new Button({
onClick : function() {
**var batch_no = registry.byId("simple_store_dgrid_search_batch_no");
grid.set("query", {
batch_no : batch_no.get('value')
});**
}
}, "simple_store_dgrid_search_button");
});
I can always get data from the server side, but sometimes the data is not rendered.
Quita la paginacion:
Note: the Pagination extension should be mixed into List or Grid, NOT one of the OnDemand constructors, since those contain their own virtual scrolling logic. Internally, Pagination inherits from the same _StoreMixin module inherited by the OnDemand prototypes for common integration with dojo/store.
https://github.com/SitePen/dgrid/wiki/Pagination
Related
I'm trying to utilize radio buttons to make a simple accordion in vue. Everything works except I can't get the accordion to only show a single view at once.
Once the view has been expanded I seem to longer be able to close it without creating a separate v-model for the whole group and adding a conditional around it. Is it not possible to get a radio button to default to its off state after it is no longer selected?
<div v-for="(item, index) in options">
<label :for="'l' + item.name">{{ item.name }}</label>
<input type="radio" :id="'l' + item.name" name="internalFinish" v-model="item.selected" :value="true">
<div v-if="item.selected">
<p>Accordion Open</p>
</div>
</div>
https://jsfiddle.net/s5ohgvde/
Bind the radio input value to unique value like item.name then bind the v-model to another property which will be used as condition in v-if=
<div id="app">
<div v-for="(item, index) in options">
<label :for="'l' + item.name">{{ item.name }}</label>
<input type="radio" :id="'l' + item.name" name="internalFinish" v-model="selectedOption" :value="item.name" >
<div v-if="item.name===selectedOption">
<p>Accordion Open</p>
</div>
</div>
</div>
<script>
new Vue({
el: "#app",
data: {
selectedOption:null,
options : [
{
name : 'Plasterboard with Skim Finish',
range : false,
selected : false,
selectedValue : 0
},
{
name : 'Plasterboard on Dabs',
range : { min : 0, max : 100},
selected : false,
selectedValue : 0
},
{
name : 'Plaster Finish',
range : { min : 60, max : 100},
selected : false,
selectedValue : 0
},
]
}
})
</script>
I edited your code.I have simply added a new value for each record in the array as id.And a new data named selected with a #click event for the input. So it checks whether the id is equal to the selected item id, if so it will display only the relevant one. You can see the fiddle here https://jsfiddle.net/bugnrvt2/1/
<label :for="'l' + item.name">{{ item.name }}</label>
<input #click="selected = item.id" type="radio" :id="'l' + item.name" name="internalFinish" v-model="item.selected" :value="true">
<div v-if="selected == item.id">
<p>Accordion Open</p>
</div>
</div>
</div>
new Vue({
el: "#app",
data: {
options : [
{
name : 'Plasterboard with Skim Finish',
range : false,
selected : false,
selectedValue : 0,
id: 1
},
{
name : 'Plasterboard on Dabs',
range : { min : 0, max : 100},
selected : false,
selectedValue : 0,
id: 2
},
{
name : 'Plaster Finish',
range : { min : 60, max : 100},
selected : false,
selectedValue : 0,
id: 3
},
],
selected: 0
}
})
I would recommend doing something like this instead of a radio button or atleast try with a checkbox because checkbox can either hold true or false but its not so in case of radio button
new Vue({
el: "#app",
data: {
selectedRow: null,
options : [
{
name : 'Plasterboard with Skim Finish',
range : false,
selected : false,
selectedValue : 0
},
{
name : 'Plasterboard on Dabs',
range : { min : 0, max : 100},
selected : false,
selectedValue : 0
},
{
name : 'Plaster Finish',
range : { min : 60, max : 100},
selected : false,
selectedValue : 0
},
]
}
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<div v-for="(item, index) in options">
<label :for="'l' + item.name">{{ item.name }}</label>
<!-- <input type="checkbox" :id="'l' + item.name" name="internalFinish" v-model="item.selected" :value="true">-->
<span :id="'l' + item.name" name="internalFinish" class="caret-down" #click="selectedRow = item.name">
<span v-if="selectedRow === item.name">▲</span>
<span v-else>▼</span></span>
<div v-if="selectedRow === item.name">
<p>Accordion Open</p>
</div>
</div>
</div>
Thanks for the suggestions, I ended up reseting each option to selected = false on change.
unselectOthers(index) {
for (var i = this.options.length - 1; i >= 0; i--) {
if (i != index) {
this.options[i].selected = false;
}
}
}
<input type="radio" :id="'l' + item.name" name="internalFinish" v-model="item.selected" :value="item.name" #change.prevent="unselectOthers(index)">
Depending on the array 'r.meta.fields' a specific sort icon of each column needs to be shown. When the template is rendering, it is working correctly. But when the array change, the template isn't changing anymore.
<th v-for="field in r.meta.fields">
{{field.label}}
<a href="#" #click.prevent="sortField(field)">
<div class="fa fa-sort-up" v-if="field.sort_direction === 'desc'"></div>
<div class="fa fa-sort-down" v-else-if="field.sort_direction === 'asc'"></div>
<div class="fa fa-sort" v-else-if="field.sortable"></div>
</a>
What could be the problem?
You could create a mapping for the sort icons and handle the changes on click:
const vm = new Vue({
el: '#app',
data() {
const iconMap = {
sort: {
'asc': 'fa-sort-up',
'desc': 'fa-sort-down'
}
};
return {
r: {
meta: {
fields: [
{
label: 'field #1',
sortable: false,
sort_direction: 'asc',
icon: ''
},
{
label: 'field #2',
sortable: true,
sort_direction: 'desc',
icon: iconMap.sort['desc']// Initially sortable in descending order
}
]
}
},
iconMap
}
},
methods: {
sortField(field) {
let direction = (field.sort_direction === 'asc') ? 'desc' : 'asc';
let icon = this.iconMap.sort[direction] || '';
field.sort_direction = direction;
field.icon = icon;
}
}
})
Template or HTML
<div id="app">
<table>
<tr>
<th v-for="field in r.meta.fields" :key="field.label">
{{field.label}}
<a href="#"
:class="field.icon"
#click.prevent="sortField(field)"></a>
</th>
</tr>
</table>
</div>
if you are using something like
r.meta.fields = newValue
then this won't work.
you should use
Vue.set(r.meta.fields, indexOfItem, newValue)
document here: vue update array
I need to be able to switch between an input field and a label. When the button "Add Location" is clicked (which create a new div), the input field must be visible. But when the div "Expandable" is maximized it must be hidden and the label visible instead!
The input field should only be visible right after the mentioned button is clicked, else the label has to take its place. What is the best way to achieve this? I was thinking about using some sort of toggle since I am using that in other places.
The label and the input field is placed in the div class "switch".
You can also see the code in this jsFiddle!
Html
<div id="lotsOfDivs">
<addingdivs></addingdivs>
</div>
Vue
var gate = 0;
Vue.component('addingdivs', {
template: `
<div>
<div id="header">
<button class="addDiv" type="button" #click="createDiv">ADD LOCATION</button>
</div>
<div class="parent" v-for="div in divs" :style=" div.height ? { 'height': div.height }: null">
<div class="big" v-if="div.expanded" :key="'expanded' + div.id">
<div class="switch">
<input type="text" v-if="inputFieldInfo">
<label class="propertyLabel" v-else>
<div class="firstChild">
<button class="done" #click="increaseLimit">INCREASE</button>
</div>
<div class="secondChild">
<button class="done" #click="expand(div)">EXPAND</button>
</div>
</div>
<div class="small" v-else :key="'collapsed' + div.id">
<button class="done" #click="expand(div)">EXPAND</button>
</div>
</div>
</div>
`,
data: function() {
return {
gate: gate,
height: "",
count: 0,
locationsArr: ["one", "two", "three"],
divs: [],
InputFieldInfo: false
}
},
methods: {
expand: function(div) {
if (div.expanded) {
div.expanded = false
this.height = ''
} else {
div.expanded = true
this.height = '7vh'
}
},
createDiv: function() {
if (this.count <= gate) { // Here you can decide how many divs that will be generated
// this.count++;
this.divs.push({
id: this.count,
expanded: true,
inputFieldInfo: true,
height: '',
});
this.count++
}},
increaseLimit: function() {
// Here you can increase the number of divs that it's possible to generate
gate++;
}
}
});
new Vue({
el: '#lotsOfDivs',
});
The template had a few compilation errors:
The <label> needs a closing tag (and text content to be useful)
The <div class="big"> needs a closing tag
The v-if was bound to inputFieldInfo, but that variable was declared as InputFieldInfo (note the uppercase I), but based on your behavior description, this field should be unique per location container, so a single data property like this wouldn't work (if I understood your description correctly).
Each location container should have a variable to contain the location name (e.g., locationName) and another variable to contain the show/hide Boolean for the <input> and <label> (i.e., inputFieldInfo):
createDiv: function() {
this.divs.push({
// ...
inputFieldInfo: true,
locationName: ''
});
}
Then, we could bind div.inputFieldInfo and div.locationName to the <input>. We bind to v-model so that the user's text is automatically reflected to the div.locationName variable:
<input v-if="div.inputFieldInfo" v-model="div.locationName">
The <label>'s content should be div.locationName so that it contains the text from the <input> when shown:
<label class="propertyLabel" v-else>{{div.locationName}}</label>
To switch the <input> with the <label> when the expand-button is clicked, we update expand() to set div.inputFieldInfo to false but only when div.locationName is not empty (this gives the user a chance to revisit/re-expand the container to fill in the location later if needed):
expand: function(div) {
if (div.expanded) {
div.expanded = false
if (div.locationName) {
div.inputFieldInfo = false
}
// ...
updated jsfiddle
You had some missing closing tags and an error with InputFieldInfo, it should have a lowercase i.
var gate = 0;
Vue.component('addingdivs', {
template: `
<div>
<div id="header">
<button class="addDiv" type="button" #click="createDiv">ADD LOCATION</button>
</div>
<div class="parent" v-for="div in divs" :style=" div.height ? { 'height': div.height }: null">
<div class="big" v-if="div.expanded" :key="'expanded' + div.id">
<div class="switch">
<input type="text" v-if="inputFieldInfo">
<label class="propertyLabel" v-else>Label</label>
<div class="firstChild">
<button class="done" #click="increaseLimit">INCREASE</button>
</div>
<div class="secondChild">
<button class="done" #click="expand(div)">EXPAND</button>
</div>
</div>
</div>
<div class="small" v-else :key="'collapsed' + div.id">
<button class="done" #click="expand(div)">EXPAND</button>
</div>
</div>
</div>
`,
data: function() {
return {
gate: gate,
height: "",
count: 0,
locationsArr: ["one", "two", "three"],
divs: [],
inputFieldInfo: true
}
},
methods: {
expand: function(div) {
this.inputFieldInfo = false
if (div.expanded) {
div.expanded = false
this.height = ''
} else {
div.expanded = true
this.height = '7vh'
}
},
createDiv: function() {
this.inputFieldInfo = true
if (this.count <= gate) { // Here you can decide how many divs that will be generated
// this.count++;
this.divs.push({
id: this.count,
expanded: true,
inputFieldInfo: true,
height: '',
});
this.count++
}
},
increaseLimit: function() {
// Here you can increase the number of divs that it's possible to generate
gate++;
}
}
});
new Vue({
el: '#lotsOfDivs',
});
You just basically toggle the inputFieldInfo data, whenever each button is pressed.
You can do that by using toggle variable like this
Vue.component('addingdivs', {
template: `
<div>
<div>
<input type="text" v-if="takeinput">
<label v-if="!takeinput">
<button #click="toggleInput()">
</div>
</div>
`,
data: function() {
return {
takeinput:true,
}
},
methods: {
toggleInput: function(){
let vm = this;
vm.takeinput = ( vm.takeinput == true) ? false : true
}
}
});
new Vue({
el: '#lotsOfDivs',
});
In this example, we are just toggeling value of takeinput on click , so according the value either label or input will be showed.
This is very basic exmpale. But you can extend it as your need
I'm trying to create a common area for my navigation/menus (vertical) in my shell page. This shell's menu area will then be updated by new set of menus on every page transition. heres inside my shell.js
define(function (require) {
var router = require('durandal/plugins/router');
var Menu = function (name, children) {
this.name = ko.observable(name);
this.children = ko.observableArray(children);
}
var Menus = ko.observableArray([]);
function GetDSRList() {
router.navigateTo('#/reports/list2');
}
function activate() {
router.mapNav('reports/index', 'viewmodels/reports/index', 'Reports');
router.mapNav('reports/list', 'viewmodels/reports/list', 'List');
router.mapNav('reports/list2', 'viewmodels/reports/list2', 'List2');
router.mapNav('home/menu', 'viewmodels/home/menu', 'Main');
return router.activate('home/menu');
}
function viewAttached() {
$(document).ready(function () {
$("#panelbar").kendoPanelBar({
expandMode: "single"
}),
$("#splitter").kendoSplitter({
panes: [
{ collapsible: false, resizable: false, size: "20%" },
{ collapsible: false }
]
});
});
}
function token() {
return $("input[name='__RequestVerificationToken']").val();
}
var shell = {
router: router,
activate: activate,
viewAttached: viewAttached,
GetDSRList: GetDSRList,
Menus: Menus,
token: token,
Menu: Menu
}
return shell;
And for the View (shell.html)
<div style="height:100%;">
<div class="loader" data-bind="css: { active: router.isNavigating }">
</div>
<div id="splitter" style="border:0;height:100%">
<div class="nav-panel-section">
<ul id="panelbar">
<li data-bind="foreach : Menus">
<span class="k-link k-header" data-bind="text: name">
<span class="k-icon k-i-arrow-s k-panelbar-expand"></span>
</span>
<ul data-bind="foreach: children">
<li>
<span class="k-link" data-bind="text: $data,click:this.GetDSRList"></span>
</li>
</ul>
</li>
</ul>
</div>
Log off
<div id ="partialContent">
<div class="container-fluid page-host">
<!--ko compose: {
model: router.activeItem, //wiring the router
afterCompose: router.afterCompose, //wiring the router
cacheViews:true //telling composition to keep views in the dom, and reuse them (only a good idea with singleton view models)
}--><!--/ko-->
<form method="post" action="Account/LogOff" id="logoutForm" >
<input type="hidden" name="__RequestVerificationToken" data-bind="value:token"/>
</form>
</div>
</div>
</div>
</div>
Then going to the url '#/reports/list2' i have this viewmodel (list2.js) :
define(function (require) {
var shell = require('viewmodels/home/shell')
function activate() {
shell.Menus = [];
shell.Menus = [
new shell.Menu("Menu3", ["A", "B", "C"]),
new shell.Menu("Menu5", ["A", "B", "C"])
];
}
var list2 = {
activate : activate
}
return list2;
});
But the shell's menu UI does not change unless you refresh the entire page. Am I missing something here? Thnx
Your problem is that you create an observableArray and then wipe it out on the new view model load. You need to use the setter function for your observableArray to maintain it's connection to the DOM (please don't correct my grammar on that one, trying to KISS!!)
function activate() {
shell.Menus = ([]);
shell.Menus = ([
new shell.Menu("Menu3", ["A", "B", "C"]),
new shell.Menu("Menu5", ["A", "B", "C"])
]);
}
Simply adding the parans should fix your issue. When you are clearing use the parans, when you are setting use the parans.
I am refering to the simpledemo in this question http://demo.swfupload.org/v220/simpledemo/index.php
I want to be able to pass a variable which is set by a dropdown menu.
the uploader is initiated by
var swfu;
window.onload = function() {
var settings = {
flash_url : "<?php global_data::show_admin_dir(); ?>SWFUpload v2.2.0.1 Samples/demos/swfupload/swfupload.swf",
upload_url: "<?php global_data::show_admin_dir(); ?>upload.php",
post_params: {"PHPSESSID" : "<?php echo session_id(); ?>" },
file_size_limit : "100 MB",
file_types : "*.*",
file_types_description : "All Files",
file_upload_limit : 100,
file_queue_limit : 0,
custom_settings : {
progressTarget : "fsUploadProgress",
cancelButtonId : "btnCancel"
},
debug: false,
// Button settings
button_image_url: "images/TestImageNoText_65x29.png",
button_width: "95",
button_height: "29",
button_placeholder_id: "spanButtonPlaceHolder",
button_text: '<span class="theFont">UPLOAD</span>',
button_text_style: ".theFont { font-size: 16; }",
button_text_left_padding: 12,
button_text_top_padding: 3,
// The event handler functions are defined in handlers.js
file_queued_handler : fileQueued,
file_queue_error_handler : fileQueueError,
file_dialog_complete_handler : fileDialogComplete,
upload_start_handler : uploadStart,
upload_progress_handler : uploadProgress,
upload_error_handler : uploadError,
upload_success_handler : uploadSuccess,
upload_complete_handler : uploadComplete,
queue_complete_handler : queueComplete // Queue plugin event
};
swfu = new SWFUpload(settings);
};
and the form is as follows
<form id="form1" action="index.php" method="post" enctype="multipart/form-data">
<p><label>Category: </label><input type="radio" name="for" class="radio" value="category" checked="checked" /><select name="foo"><option>...</option><?php global_data::show_breadcrum_list( 'option', " / " ); ?></select></p>
<p><label>Product: </label><input type="radio" name="for" class="radio" value="category" /><select disabled="disabled"><option name="foo">...</option><?php global_data::show_breadcrum_list( 'option', " / " ); ?></select></p>
<div class="fieldset flash" id="fsUploadProgress">
<span class="legend">Upload Queue</span>
</div>
<div id="divStatus">0 Files Uploaded</div>
<div>
<span id="spanButtonPlaceHolder"></span>
<input id="btnCancel" type="button" value="Cancel All Uploads" onclick="swfu.cancelQueue();" disabled="disabled" style="margin-left: 2px; font-size: 8pt; height: 29px;" />
</div>
</form>
if anyone could point me in the right direction it would be much appreciated.
###### EDIT #####
I may have found a way...
using post_params: {"PHPSESSID" : "<?php echo session_id(); ?>", "PR" : thing },
in the init settings and wrapping it all in a function
function loader( thing ) {
....
}
and then using
$(document).ready(function(){
$('select[name=foo]').change(function(){
loader( $(':selected', this).text() );
});
});
it will work, but if i change the select option a second time before uploading it will get an error and only send the first choice instead of the second...
I was trying to do a similar thing and after finding this solution and discussing it with my collegue, we solved it yet another way using the Javascript API available with swfupload.
We were trying to pass a quality setting along with video uploads. Ultimately the solutions to this problem involve how to change post_params. To start with post_params will be the default value of the dropdown:
var selected_quality = $('select#quality-".$dirId." option:selected').val();
...
post_params: {'quality' : selected_quality},
Then you can use the addPostParam method (located in swfupload.js) to update this when options are selected in your dropdown.
$('select#quality-".$dirId."').change(function () {
swfu.addPostParam('quality' , this.value);
});
I have solved this problem in two ways (both using jquery): cookies and mysql. The concept would be a
$('select[name=foo]').change(function(){
$.cookie('dropdown', $(this).val());
});
so that when you change the dropdown, you now have a cookie. in upload.php you can then call that cookie and use it as your variable.
The other option was
$('select[name=foo]').change(function(){
$.post('updatedatabase.php', {'dropdown': $(this).val()});
});
Then you'd call your database from upload.php to get the last value of your dropdown. neither way is very elegant, but I've gotten them working before. I would love if someone posted a more elegant solution.
######## EDIT #######
Right this works a charm.
$(function() {
function loader( thing ) {
var settings = {
flash_url : admin_dir + "SWFUpload v2.2.0.1 Samples/demos/swfupload/swfupload.swf",
upload_url: web_root + "pm_admin/upload_image",
post_params: { "aj" : "true", "PR" : thing },
file_size_limit : "100 MB",
file_types : "*.*",
file_types_description : "All Files",
file_upload_limit : 100,
file_queue_limit : 0,
custom_settings : {
progressTarget : "fsUploadProgress",
cancelButtonId : "btnCancel"
},
debug: false,
// Button settings
button_image_url: "images/TestImageNoText_65x29.png",
button_width: "95",
button_height: "29",
button_placeholder_id: "spanButtonPlaceHolder",
button_text: '<span class="theFont">UPLOAD</span>',
button_text_style: ".theFont { font-size: 16; }",
button_text_left_padding: 12,
button_text_top_padding: 3,
// The event handler functions are defined in handlers.js
file_queued_handler : fileQueued,
file_queue_error_handler : fileQueueError,
file_dialog_complete_handler : fileDialogComplete,
upload_start_handler : uploadStart,
upload_progress_handler : uploadProgress,
upload_error_handler : uploadError,
upload_success_handler : uploadSuccess,
upload_complete_handler : uploadComplete,
queue_complete_handler : queueComplete // Queue plugin event
};
swfu = new SWFUpload(settings);
};
function pre_load(){
var data = '';
data += '<div class="fieldset flash" id="fsUploadProgress">';
data += ' <span class="legend">Upload Queue</span>';
data += '</div>';
data += '<div id="divStatus">0 Files Uploaded</div>';
data += '<div>';
data += ' <span id="spanButtonPlaceHolder"></span>';
data += ' <input id="btnCancel" type="button" value="Cancel All Uploads" onclick="swfu.cancelQueue();" disabled="disabled" style="margin-left: 2px; font-size: 8pt; height: 29px;" />';
data += '</div>';
return data;
}
/* args stores the input/select/textarea/radio's name and then it's value and then passes a single serialised string when uploading */
/* then use a trigger to update the array, off focus, change, keyup... along thos lines on a class set for all inputs, selects and so on... works a treat */
var args = {};
$('.radio').click(function(){
var ob = $(this).siblings('select');
$('#uploader-wrapper').html(pre_load());
$('.radio').siblings('select').attr('disabled', 'disabled');
ob.removeAttr('disabled');
args[$(this).attr('name')] = $(this).val();
args[ob.attr('name')] = $(':selected', ob).text();
loader( $.param(args) );
})
$('select[name=foo]').change(function(){
var ob = $(this);
$('#uploader-wrapper').html(pre_load());
args[ob.attr('name')] = $(':selected', ob).text();
loader( $.param(args) );
});
});
with form:
<form id="form1" action="index.php" method="post" enctype="multipart/form-data">
<p><label>Category: </label><input type="radio" name="for" class="radio" value="category" checked="checked" /><select name="foo"><option>...</option><?php global_data::show_breadcrum_list( 'option', " / " ); ?></select></p>
<p><label>Product: </label><input type="radio" name="for" class="radio" value="category" /><select disabled="disabled"><option name="foo">...</option><?php global_data::show_breadcrum_list( 'option', " / " ); ?></select></p>
<div id="uploader-wrapper">
<div class="fieldset flash" id="fsUploadProgress">
<span class="legend">Upload Queue</span>
</div>
<div id="divStatus">0 Files Uploaded</div>
<div>
<span id="spanButtonPlaceHolder"></span>
<input id="btnCancel" type="button" value="Cancel All Uploads" onclick="swfu.cancelQueue();" disabled="disabled" style="margin-left: 2px; font-size: 8pt; height: 29px;" />
</div>
</div>
</form>