IE fixes for preview, modal dialog instead of popup window
This commit is contained in:
parent
cdda6235d7
commit
b3a1e6cfa3
1 changed files with 83 additions and 34 deletions
|
|
@ -5,7 +5,7 @@
|
|||
$connect = YAHOO.util.Connect,
|
||||
$json = YAHOO.lang.JSON,
|
||||
$dom = YAHOO.util.Dom,
|
||||
assetId, panel, panelRendered, onHide;
|
||||
assetId, panel, panelRendered, onHide, previewPanel;
|
||||
|
||||
function absolute(url) {
|
||||
// We have to do this innerHTML trick or it doesn't work on IE6
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
}
|
||||
|
||||
function base() {
|
||||
return absolute('_#').slice(0, -2);
|
||||
return absolute('_#').slice(0, -2) || '/';
|
||||
}
|
||||
|
||||
function runConfigDialog(k) {
|
||||
|
|
@ -35,6 +35,25 @@
|
|||
}
|
||||
}
|
||||
|
||||
function on_fetch(o) {
|
||||
var h = o.getResponseHeader,
|
||||
start = h['X-Webgui-Template-Variables-Start'],
|
||||
end = h['X-Webgui-Template-Variables-End'],
|
||||
text = o.responseText,
|
||||
si = text.indexOf(start) + start.length,
|
||||
ei = text.indexOf(end),
|
||||
raw = text.slice(si, ei),
|
||||
vars = $json.parse(raw),
|
||||
pretty = $json.stringify(vars, null, 4),
|
||||
vbox = document.getElementById('previewVars'),
|
||||
k = o.argument;
|
||||
|
||||
vbox.value = pretty;
|
||||
if (k) {
|
||||
k(pretty);
|
||||
}
|
||||
}
|
||||
|
||||
function fetch(k) {
|
||||
var url = document.getElementById('previewFetchUrl').value,
|
||||
abs, b;
|
||||
|
|
@ -57,23 +76,8 @@
|
|||
$connect.initHeader('X-Webgui-Template-Variables', assetId);
|
||||
$connect.asyncRequest(
|
||||
'GET', url, {
|
||||
success: function (o) {
|
||||
var h = o.getResponseHeader,
|
||||
start = h['X-Webgui-Template-Variables-Start'],
|
||||
end = h['X-Webgui-Template-Variables-End'],
|
||||
text = o.responseText,
|
||||
si = text.indexOf(start) + start.length,
|
||||
ei = text.indexOf(end),
|
||||
raw = text.slice(si, ei),
|
||||
vars = $json.parse(raw),
|
||||
pretty = $json.stringify(vars, 0, 4),
|
||||
vbox = document.getElementById('previewVars');
|
||||
|
||||
vbox.value = pretty;
|
||||
if (k) {
|
||||
k(pretty);
|
||||
}
|
||||
},
|
||||
argument: k,
|
||||
success: on_fetch,
|
||||
failure: function (o) {
|
||||
alert(o.statusText);
|
||||
}
|
||||
|
|
@ -84,7 +88,6 @@
|
|||
function withVariables(k) {
|
||||
var inBox = document.getElementById('previewVars').value;
|
||||
|
||||
|
||||
function finish(raw) {
|
||||
var parsed, flat;
|
||||
try {
|
||||
|
|
@ -113,29 +116,74 @@
|
|||
variables : v,
|
||||
parser : document.getElementById('parser_formId').value,
|
||||
func : 'preview'
|
||||
}, form = document.createElement('form'), input, key;
|
||||
},
|
||||
form = document.createElement('form'),
|
||||
target = document.getElementById('preview_target'),
|
||||
iframe, setSize, input, key;
|
||||
|
||||
if (target) {
|
||||
previewPanel.show();
|
||||
}
|
||||
else {
|
||||
target = document.createElement('div');
|
||||
target.id = 'preview_target';
|
||||
target.innerHTML =
|
||||
'<div class="hd"></div>' +
|
||||
'<div class="bd">' +
|
||||
'<iframe name="preview_target">' +
|
||||
'</div>' +
|
||||
'<div class="ft"></div>';
|
||||
body.appendChild(target);
|
||||
previewPanel = new YAHOO.widget.Panel(target, {
|
||||
close : true,
|
||||
draggable : false,
|
||||
underlay : 'shadow',
|
||||
modal : true,
|
||||
fixedcenter : true
|
||||
});
|
||||
|
||||
// i18n'd title
|
||||
previewPanel.setHeader(
|
||||
document.getElementById('preview').value
|
||||
);
|
||||
|
||||
iframe = target.childNodes[1].firstChild;
|
||||
setSize = function () {
|
||||
iframe.style.width = $dom.getViewportWidth() * 0.8 + 'px';
|
||||
iframe.style.height = $dom.getViewportHeight() * 0.8 + 'px';
|
||||
};
|
||||
setSize();
|
||||
YAHOO.widget.Overlay.windowResizeEvent.subscribe(setSize);
|
||||
previewPanel.render();
|
||||
}
|
||||
|
||||
if ($dom.getElementsBy(function (e) {
|
||||
return e.value === '1';
|
||||
}, 'input', 'previewRaw_row')[0].checked)
|
||||
}, 'input', 'previewRaw_row')[0].checked)
|
||||
{
|
||||
params.plainText = 'true';
|
||||
}
|
||||
|
||||
form.method = 'POST';
|
||||
form.action = window.location.pathname;
|
||||
form.target = '_blank';
|
||||
|
||||
form.target = 'preview_target';
|
||||
form.method = 'POST';
|
||||
for (key in params) {
|
||||
if (params.hasOwnProperty(key)) {
|
||||
input = document.createElement('input');
|
||||
input.type = 'hidden';
|
||||
input.name = key;
|
||||
try {
|
||||
// IE fails at setting names, so let's try an IE only
|
||||
// way to do this first.
|
||||
input = document.createElement(
|
||||
'<input name="' + key + '">'
|
||||
);
|
||||
}
|
||||
catch (e) {
|
||||
input = document.createElement('input');
|
||||
input.name = key;
|
||||
}
|
||||
input.value = params[key];
|
||||
form.appendChild(input);
|
||||
}
|
||||
}
|
||||
|
||||
body.appendChild(form);
|
||||
form.submit();
|
||||
body.removeChild(form);
|
||||
|
|
@ -148,11 +196,12 @@
|
|||
panel.parentNode.removeChild(panel);
|
||||
document.body.appendChild(panel);
|
||||
panel = new YAHOO.widget.Panel(panel, {
|
||||
close : true,
|
||||
draggable : false,
|
||||
underlay : 'shadow',
|
||||
modal : true,
|
||||
fixedcenter : true
|
||||
close : true,
|
||||
draggable : false,
|
||||
underlay : 'shadow',
|
||||
modal : true,
|
||||
fixedcenter : true,
|
||||
constraintoviewport : true
|
||||
});
|
||||
$event.on('previewFetch', 'click', fetch);
|
||||
$event.on('preview', 'click', render);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue