function onload () { active_dot = active_name; active_element = active_name; updateStatus (); elementCount = 0; for (var id in edit) { elementCount++; if (edit[id].onload) { edit[id].onload (); } edit[id].oldValue = edit[id].getValue (); } // quickbar initialesieren cbInit(); updateHide (); selectTab (active_name); showMessages (messages); var opener = top.getOpener (); if (opener) { new opener.Dot ().activate ({0:"cms_dot_"+group_number+"_"+active_dot}); } } function onresize () { if (active_name && (obj = document.getElementById ("scroll["+active_name+"]"))) { obj.className = "content_hidden"; obj.style.width = obj.parentNode.offsetWidth; obj.style.height = obj.parentNode.offsetHeight; obj.className = "content"; } for (var name in settings[active_name].elements) { if (edit[name] && edit[name].onresize) { edit[name].onresize (); } } } function focus () { try { top.focus (); } catch (e) {} if (edit[active_name]) { setTimeout (edit[active_name].focus, 0); } } function selectTab (tab) { var obj; if (obj = document.getElementById ("tab["+active_name+"]")) { obj.setActive (false); } if (obj = document.getElementById ("scroll["+active_name+"]")) { obj.className = "content_hidden"; } if (obj = document.getElementById ("tab["+tab+"]")) { obj.setActive (true); } if (obj = document.getElementById ("scroll["+tab+"]")) { obj.style.width = obj.parentNode.offsetWidth; obj.style.height = obj.parentNode.offsetHeight; obj.className = "tab_content"; } if (obj = document.getElementById ("setting")) { var hide = false; for (var name in settings[tab].elements) { if (name != tab) { hide = true; } } obj.className = hide ? "content_hidden" : "coolButton"; } active_name = tab; active_element = tab; onresize (); updateQuickbar (); updateStatus (); focus (); } function selectElement (element) { active_element = element; updateQuickbar (); updateStatus (); } function insertText (tab, text) { if (edit[tab].insertText) { edit[tab].insertText (text); hasChanged (tab); } } var hasChangedTimeout; function hasChanged (element, now, notSelect) { if (!window.active_element || element != active_element && !notSelect) { selectElement (element); } if (!now) { clearTimeout (hasChangedTimeout); hasChangedTimeout = setTimeout (function () {hasChanged (element, true, notSelect);}, 300); return; } var value = edit[element].getValue (); if (compareValue (edit[element].lastValue, value)) { return; } edit[element].lastValue = value; if (compareValue (value, edit[element].oldValue) == (state[element].hasChanged==true)) { state[element].quickbar.disabledButtons.undo = state[element].hasChanged; state[element].hasChanged = !state[element].hasChanged; updateQuickbar (); } updateHide (element); updateOpener (element, value, true); if (settings[element].autosave) { save (false, element); } } // Prüfen ob Elemente versteckt werden sollen function updateHide (element) { var update = false; var values = ""; var value = ""; var autosize = Array (); var autosizees = Array (); var count = 0; for (var id in state) { if (!edit[id]) { value = ""; } else if (edit[id].lastValue!=undefined) { if (edit[id].lastValue.src!=undefined) { value = edit[id].lastValue.src; } else if (edit[id].lastValue.href!=undefined) { value = edit[id].lastValue.href; } else { value = edit[id].lastValue; } } else { if (edit[id].oldValue.src!=undefined) { value = edit[id].oldValue.src; } else if (edit[id].oldValue.href!=undefined) { value = edit[id].oldValue.href; } else { value = edit[id].oldValue; } } values += "var "+id.replace (/ /g, "_")+"='"+escape (value)+"';"; } for (var id in state) { var obj = document.getElementById ("element["+id+"]"); var hide = false; if (state[id].hide_rule && id!=element) { try { hide = eval (values + state[id].hide_rule); update |= !obj.className == hide; obj.className = hide ? "hidden" : ""; } catch (e) {}; } if (state[id].openintab) { autosizees.push (autosize); autosize = Array (); } if (!hide && state[id].autosize) { autosize.push (id); } count++; } autosizees.push (autosize); for (var tab in autosizees) { var autosize = autosizees[tab]; first = true; for (var id in autosize) { id = autosize[id]; var obj = document.getElementById ("element["+id+"]"); if (settings[id].height) { obj.firstChild.style.height = "calc(24px + "+settings[id].height+"rem)"; } else if (first) { obj.firstChild.style.height = "100%"; first = false; } else { obj.firstChild.style.height = "calc("+(100/autosize.length)+"vh - "+((count-autosize.length)*48/autosize.length)+"px)"; } } document.getElementById ("foot_spacer").className = autosize.length ? "hidden" : ""; } if (update && element) { onresize (); } } function updateStatus () { top.setStatus (state[active_element].statusbar.value); } function updateValue (tab) { top.setProgress (true); var request = new Ajax ("tpl_edit_action.php", "action=value&tabid="+tab+"&winid="+winid); request.onCompletion = function (response) { if (response != edit[tab].oldValue) { edit[tab].setValue (response); edit[tab].oldValue = edit[tab].getValue (); hasChanged (tab); } updateStatus (); } request.run (); } // Aktualesiert die Anzeige im Opener (parent cms-Fenster oder Website) function updateOpener (tab, value, noParent) { var opener = top.getOpener (false); if (opener) { if (opener.edit && opener.edit[parent_name] && !noParent) { opener.edit[parent_name].setAttributes (edit[tab].getAttributes (value)); opener.focus (); top.close (); } else if (opener.cms) { var element = opener.document.getElementById (settings[tab].update_id==true ? ("cms_update_"+group_number+"_"+tab) : (settings[tab].update_id ? settings[tab].update_id : "cms_element_"+group_number+"_"+tab)); if (element) { if (settings[tab].update_attribute) { element.setAttribute (settings[tab].update_attribute, value.src ? value.src : (value.href ? value.href : (typeof value=="string" ? value : ""))); } else if (edit[tab].setUpdateValue) { edit[tab].setUpdateValue (element, value); } else if (state[tab].placeholder) { var request = new Ajax ("tpl_edit_action.php", "action=replacePlaceholder&tabid="+tab+"&value="+encodeURIComponent (edit[tab].getUpdateValue (value))); request.onCompletion = function (response) { element.innerHTML = response; } request.run (); } else { element.innerHTML = edit[tab].getUpdateValue (value); } } } } } var disableButtonsList = Array (); function updateQuickbar () { var hasChanged = false; for (var tab in state) { hasChanged |= state[tab].hasChanged; } state[active_element].quickbar.disabledButtons.save = !hasChanged; // alle Buttons enablen for (var name in disableButtonsList) { document.getElementById (name).setEnabled (true); } // inaktive Buttons disablen disableButtonsList = Array (); for (var name in state[active_element].quickbar.disabledButtons) { if (state[active_element].quickbar.disabledButtons[name]) { document.getElementById (name).setEnabled (false); disableButtonsList[name] = true; } } var multilingual = document.getElementById ("multilingual"); if (multilingual) { multilingual.setGray (!settings[active_element].multilingual); } } function updateDotStatus (tab) { var opener = top.getOpener (); if (opener) { var dot = opener.document.getElementById ("cms_dot_"+group_number+"_"+active_dot); if (dot && dot.update) { dot.update (); } } } function update (tab, new_group_number) { updateQuickbar (); updateDotStatus (tab); updateValue (tab); if (new_group_number && new_group_number != group_number) { group_number = new_group_number; var opener = top.getOpener (); if (opener) { new opener.Dot ().activate ({0:"cms_dot_"+group_number+"_"+active_dot}); } top.reload (true); } else if (settings[tab].reload) { top.reload (true); } } function save (onCompletion, tab) { // Alle zu speichernde Werte zusammen suchen var values = ""; for (var id in state) { if ((!tab || id == tab) && state[id].hasChanged && edit[id]) { state[id].hasChanged = false; if (!edit[id].save || !edit[id].save ()) { values += "&value["+id+"]="+encodeURIComponent (edit[id].getValue ()); } } } if (values) { top.setProgress (true); var path = window.location.pathname.replace (/(.*\/).*/, "$1"); // ist für Save beim direkten öffnen einer neuen Seite var request = new Ajax (path+"tpl_edit_action.php", "action=save&"+values+"&winid="+winid); request.onCompletion = onCompletion ? onCompletion : function (response) { try { eval (response); } catch (e) {}; } request.run (); return true; } else { return false; } } function undo (tab) { // zuerst Änderungen speichern if (save (function () {edit[tab].oldValue = edit[tab].getValue (); undo (tab)}, tab)) { return; } // Undo durchführen top.setProgress (true); var request = new Ajax ("tpl_edit_action.php", "action=undo&tabid="+tab+"&winid="+winid); request.onCompletion = function (response) { eval (response); update (tab); edit[tab].focus (); } request.run (); } function redo (tab) { top.setProgress (true); var request = new Ajax ("tpl_edit_action.php", "action=redo&tabid="+tab+"&winid="+winid); request.onCompletion = function (response) { eval (response); update (tab); edit[tab].focus (); } request.run (); } function del (tab) { top.setProgress (true); var request = new Ajax ("tpl_edit_action.php", "action=del&tabid="+tab+"&winid="+winid); request.onCompletion = function (response) { eval (response); update (tab); edit[tab].focus (); } request.run (); } function multilingual (tab) { top.setProgress (true); var request = new Ajax ("tpl_edit_action.php", "action=multilingual&tabid="+tab+"&winid="+winid); request.onCompletion = function (response) { eval (response); update (tab); edit[tab].focus (); } request.run (); } function history (tab) { } function compare (tab) { if (top.compare_window && !top.compare_window.closed) { top.compare_window.close (); } top.compare_window = window.open ("index.php?tpl=compare&group="+group_number+"&name="+tab, "cms_compare", "width=100, height=50, left=0, top=0, status=no, toolbar=no, location=no, scrollbars=no, resizable=yes"); } function reload () { top.reload (true); } function help () { top.setProgress (true); var request = new Ajax ("tpl_edit_action.php", "action=message&text=help text"); request.onCompletion = function (response) { showMessages ({0:{type : "info", text : response}}); top.setProgress (false); } request.run (); } function setting (tab) { // zuerst Änderungen speichern if (save (function () {setting (tab)})) { return; } window.location.href = window.location.pathname + "?tpl=element settings&name="+tab; } function compareValue (a, b) { if (typeof a == "object") { for (var i in a) { if (a[i] != b[i]) { return false; } } for (var i in b) { if (b[i] != a[i]) { return false; } } return true; } else { return (a == b); } }