You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

636 lines
25 KiB

<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="chrome://global/skin/"?>
<?xml-stylesheet type="text/css" href="chrome://kmprefs/skin/"?>
<?xul-overlay href="chrome://kmprefs/content/kmprefs/ovrl-javascript.xul"?>
<?xul-overlay href="chrome://kmprefs/content/kmprefs/ovrl-languages.xul"?>
<!DOCTYPE page SYSTEM "chrome://kmprefs/locale/pref-display.dtd">
<page xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" id="prefDisplay" onload="init()">
<stringbundle id="pref_bundle" src="chrome://kmprefs/locale/pref.properties"/>
<stringbundle id="font_bundle" src="chrome://kmprefs/locale/pref-display.properties"/>
<script type="application/x-javascript" src="chrome://kmprefs/content/pref.js"/>
<script type="application/x-javascript" src="chrome://kmprefs/content/kplugins/jsbridge.js"/>
<!-- <script type="application/x-javascript" src="chrome://kmprefs/content/kmprefs/ovrl-languages.js"/> -->
<stringbundleset id="lang_stringbundleset">
<stringbundle id="acceptedBundle"
src="resource://gre/res/language.properties"/>
<stringbundle id="languagesBundle"
src="chrome://global/locale/languageNames.properties"/>
<stringbundle id="regionsBundle"
src="chrome://global/locale/regionNames.properties"/>
<stringbundle id="prefLangBundle"
src="chrome://kmprefs/locale/kmprefs/ovrl-languages.properties"/>
<script type="application/x-javascript" src="chrome://kmprefs/content/kmprefs/ovrl-languages.js"/>
</stringbundleset>
<script type="application/x-javascript">
<![CDATA[
function init() {
if (JSB.load) {
document.getElementById("imagePerm").removeAttribute("hidden");
}
for (var j = 0, b = document.getElementsByTagName("checkbox"); j < b.length; j++)
if (b[j].getAttribute("id") == "CSS")
b[j].checked = testMultiline(getFileContents(UserStyle), Placeholder._RegExp);
else
if (b[j].getAttribute("id") == "Marquee")
b[j].checked = testMultiline(getFileContents(UserStyle), Marquee._RegExp);
else
if (b[j].getAttribute("id") == "browser.display.use_document_fonts")
continue;
else
initCheckbox(b[j].getAttribute("id"));
for (var j = 0, r = document.getElementsByTagName("radiogroup"); j < r.length; j++)
initRadiogroup(r[j].getAttribute("id"));
Source.init();
// setInterval("initCheckbox('browser.frames.enabled');initRadiogroup('image.animation_mode');initRadiogroup('permissions.default.image')",100);
Zoom.init();
}
var Marquee = {
_Import : "marquee { -moz-binding: none; }",
_RegExp : "marquee[\\s]*\\{[\\s]*-moz-binding:[\\s]*none[\\s]*;[\\s]*\\}",
toggle : function (elem) {
if (elem.checked)
addToUserStyle(this._Import);
else
removeFromFile(UserStyle, this._RegExp);
}
};
var Placeholder = {
_Import : "img { -moz-force-broken-image-icon: 1; }",
_RegExp : "img[\\s]*\\{[\\s]*-moz-force-broken-image-icon:[\\s]*1[\\s]*;[\\s]*\\}",
_Elmnts : ["browser.display.show_image_placeholders",
"browser.display.force_inline_alttext",
"CSS"],
toggle : function (elem) {
switch (elem.id) {
case this._Elmnts[0]:
toggleCheckbox(this._Elmnts[0]);
if (document.getElementById(this._Elmnts[1]).checked)
toggleCheckbox(this._Elmnts[1]);
break;
case this._Elmnts[1]:
toggleCheckbox(this._Elmnts[1]);
if (document.getElementById(this._Elmnts[0]).checked)
toggleCheckbox(this._Elmnts[0]);
removeFromFile(UserStyle, this._RegExp);
break;
case this._Elmnts[2]:
if (document.getElementById(this._Elmnts[2]).checked) {
if (document.getElementById(this._Elmnts[1]).checked)
toggleCheckbox(this._Elmnts[1]);
addToUserStyle(this._Import);
} else
removeFromFile(UserStyle, this._RegExp);
break;
}
}
};
var Source = {
pref : null,
init : function () {
this.pref = new Array("kmeleon.general.sourceEnabled",
"kmeleon.general.sourceCommand");
initCheckbox(this.pref[0]);
initTextbox(this.pref[1], document.getElementById("pref_bundle").getString("pref_not_set"));
var elem = document.getElementById(this.pref[1]);
elem.disabled = !pref.getBoolPref(this.pref[0]);
elem.previousSibling.disabled = elem.disabled;
elem.nextSibling.disabled = elem.disabled;
},
selectFile : function () {
var bnd = document.getElementById("pref_bundle");
var dir = getFile(getFolder("ProgF"), "");
var fp = Components.classes["@mozilla.org/filepicker;1"]
.createInstance(nsIFilePicker);
fp.init(window, bnd.getString("select_" + this.pref[1]), nsIFilePicker.modeOpen);
fp.appendFilters(nsIFilePicker.filterApps);
fp.displayDirectory = dir;
var ret = fp.show();
if (ret == nsIFilePicker.returnOK) {
setCharPref(this.pref[1], fp.file.path);
initTextbox(this.pref[1], "");
}
}
};
var doneFonts = false;
function initFonts() {
if (!doneFonts) {
doneFonts = true;
var prefID = "browser.display.use_document_fonts";
document.getElementById(prefID).checked = (pref.getIntPref(prefID) > 0);
Fonts.init();
}
}
var FontEnumerator = Components.classes["@mozilla.org/gfx/fontenumerator;1"]
.createInstance()
.QueryInterface(Components.interfaces.nsIFontEnumerator);
var Fonts = {
allFnts : null,
langGrp : null,
fontTyp : ["serif", "sans-serif", "cursive", "fantasy", "monospace"],
pref : "font.language.group",
init : function () {
// this.langGrp = getPrefValue(this.pref); // returns properties file location
this.langGrp = document.getElementById(this.pref).value;
this._initSize("font.size.fixed", this.langGrp, false);
this._initSize("font.size.variable", this.langGrp, false);
this._initSize("font.minimum-size", this.langGrp, document.getElementById("font_bundle").getString("min_size_none"));
document.getElementById("default").value = getPrefValue("font.default." + this.langGrp);
for (var i = 0; i < this.fontTyp.length; i++)
this._initList(this.langGrp, this.fontTyp[i]);
},
_initList : function (langGroup, fontType) {
var elem = document.getElementById(fontType);
elem.disabled = true;
elem.removeChild(elem.firstChild);
var count = {
value : 0
},
deflt = null,
fonts = FontEnumerator.EnumerateFonts(langGroup, fontType, count);
if (fonts.length)
deflt = FontEnumerator.getDefaultFont(langGroup, fontType);
else {
// skip generic font type and try to find any fonts
fonts = FontEnumerator.EnumerateFonts(langGroup, "", count);
if (fonts.length)
deflt = FontEnumerator.getDefaultFont(langGroup, "");
}
if (!this.allFnts)
this.allFnts = FontEnumerator.EnumerateAllFonts(count);
var litem,
pitem = document.createElement("menupopup");
if (fonts.length) {
// list language-specific fonts first
if (deflt) {
// list default font first
litem = document.createElement("menuitem");
litem.setAttribute("value", ""); // blank value
litem.setAttribute("label", document.getElementById("font_bundle").getString("default_font").replace(/%S/, deflt));
pitem.appendChild(litem);
pitem.appendChild(document.createElement("menuseparator"));
}
for (var i = 0; i < fonts.length; i++) {
litem = document.createElement("menuitem");
litem.setAttribute("value", fonts[i]);
litem.setAttribute("label", fonts[i]);
pitem.appendChild(litem);
}
}
if (this.allFnts.length > fonts.length) {
if (fonts.length)
pitem.appendChild(document.createElement("menuseparator"));
for (var i = 0, j = 0, t; i < this.allFnts.length; i++) {
try {
t = fonts[j];
} catch (e) {
t = null;
}
if (this.allFnts[i] == t) {
j++;
continue;
} else {
litem = document.createElement("menuitem");
litem.setAttribute("value", this.allFnts[i]);
litem.setAttribute("label", this.allFnts[i]);
pitem.appendChild(litem);
}
}
}
elem.appendChild(pitem);
if (deflt == null)
deflt = this._getDefault(langGroup, fontType, elem);
else {
elem.selectedIndex = 0;
elem.disabled = false;
return;
}
elem.selectedItem = (deflt == null) ? elem.firstChild.firstChild : elem.getElementsByAttribute("value", deflt)[0];
var pref = "font.name." + fontType + "." + langGroup;
if (getPrefValue(pref) == null)
setCharPref(pref, elem.value);
elem.disabled = false;
},
_initSize : function (boxID, subID, emptyStr) {
var box = document.getElementById(boxID),
val = getPrefValue(boxID + "." + subID);
box.removeAttribute("onfocus");
box.removeAttribute("onblur");
if (val == null) {
val = document.getElementById("pref_bundle").getString("pref_not_set");
if (!box.readonly) {
box.setAttribute("onfocus", "this.value=''");
box.setAttribute("onblur", "Fonts._initSize('" + boxID + "','" + subID + "'," + ((emptyStr) ? ("'" + emptyStr + "'") : "false") + ")");
}
box.value = (emptyStr) ? emptyStr : val;
return;
}
if (!val && emptyStr) {
if (!box.readonly) {
box.setAttribute("onfocus", "this.value=''");
box.setAttribute("onblur", "Fonts._initSize('" + boxID + "','" + subID + "','" + emptyStr + "')");
}
box.value = emptyStr;
} else
box.value = val;
},
setSize : function (boxID, prefVal) {
if (prefVal) {
var re = new RegExp("^[0-9]+$");
if (re.test(prefVal)) {
prefVal = parseInt(prefVal);
if (prefVal)
pref.setIntPref(boxID + "." + this.langGrp, prefVal);
else
restoreDefault(boxID + "." + this.langGrp);
} else {
alert(document.getElementById("pref_bundle").getString("positive_integer_expected"));
document.getElementById(boxID).value = getPrefValue(boxID + "." + this.langGrp);
document.getElementById(boxID).focus();
}
} else
restoreDefault(boxID + "." + this.langGrp);
},
setFont : function (fontName, fontType) {
if (fontName)
setCharPref("font.name." + fontType + "." + this.langGrp, fontName);
else
restoreDefault("font.name." + fontType + "." + this.langGrp);
},
setDefaultFont : function (fontName) {
setCharPref("font.default." + this.langGrp, fontName);
},
_getDefault : function (langGroup, fontType, listItem) {
var val = getPrefValue("font.name." + fontType + "." + langGroup),
itm;
if (val == null) {
val = getPrefValue("font.name-list." + fontType + "." + langGroup);
if (val == null)
return null;
for (var i = 0; i < val.length; i++) {
val[i] = val[i].replace(/^\s*(.*)\s*$/, "$1") // remove leading/trailing whitespace
itm = listItem.getElementsByAttribute("value", val[i]);
if (itm && itm.item(0))
return val[i];
}
} else {
itm = listItem.getElementsByAttribute("value", val);
if (itm && itm.item(0))
return val;
}
return null;
}
};
var Zoom = {
pref : "zoom.defaultPercent",
prefmin : "zoom.minPercent",
prefmax : "zoom.maxPercent",
min : 30,
default: 100,
max : 300,
init : function () {
var numberbox = document.getElementById("zoom.defaultPercent");
var slider = document.getElementById("zoom.defaultPercentS");
var zoom_value = getPrefValue(Zoom.pref);
var zmin_p = getPrefValue(Zoom.prefmin);
var zmax_p = getPrefValue(Zoom.prefmax);
if (parseInt(zoom_value) > parseInt(zmax_p)) {
zoom_value = zmax_p;
} else if (parseInt(zoom_value) < parseInt(zmin_p)) {
zoom_value = zmin_p;
}
numberbox.valueNumber = zoom_value;
//numberbox.setAttribute("min",zmin_p);
numberbox.setAttribute("max", zmax_p);
document.getElementById("zlabel_min").value = zmin_p + " %";
document.getElementById("zlabel_max").value = zmax_p + " %";
slider.value = zoom_value;
slider.setAttribute("min", zmin_p);
slider.setAttribute("max", zmax_p);
},
changed : function (PrefID) {
var numberbox = document.getElementById("zoom.defaultPercent");
var slider = document.getElementById("zoom.defaultPercentS");
if (PrefID == numberbox.getAttribute("id")) {
var zmin_p = getPrefValue(Zoom.prefmin);
var zmax_p = getPrefValue(Zoom.prefmax);
var inputvalue = numberbox.valueNumber;
if (parseInt(inputvalue) >= parseInt(getPrefValue(Zoom.prefmin)) && parseInt(inputvalue) <= parseInt(getPrefValue(Zoom.prefmax))) {
slider.value = numberbox.valueNumber;
setIntPref(Zoom.pref, numberbox.valueNumber);
} else if (parseInt(inputvalue) > parseInt(zmax_p)) {
slider.value = zmax_p;
setIntPref(Zoom.pref, zmax_p);
} else if (parseInt(inputvalue) < parseInt(zmin_p)) {
slider.value = zmin_p;
setIntPref(Zoom.pref, zmin_p);
}
} else {
numberbox.valueNumber = slider.value;
setIntPref(Zoom.pref, numberbox.valueNumber);
}
},
normal : function () {
setIntPref(Zoom.pref, Zoom.default);
setIntPref(Zoom.prefmin, Zoom.min);
setIntPref(Zoom.prefmax, Zoom.max);
Zoom.init();
}
};
]]>
</script>
<vbox flex="1" style="overflow:auto">
<dialogheader title="&display.header;"/>
<separator class="thin"/>
<tabcontrol flex="1">
<tabbox flex="1">
<tabs>
<tab label="&general;"/>
<tab label="&fonts.label;" oncommand="initFonts()" onfocus="initFonts()"/>
<tab label="&images.label;"/>
<tab id="LanguagesWebTab" oncommand="initLangWeb()" onfocus="initLangWeb()"/>
</tabs>
<tabpanels flex="1">
<tabpanel flex="1" orient="vertical" style="overflow:auto">
<!-- General -->
<separator class="thin"/>
<!-- FRAMES OLD ... ###### pref obsolete, not working anymore
<groupbox>
<caption>
<label>&frames.label;</label>
</caption>
<checkbox oncommand="toggleCheckbox(this.id)" id="browser.frames.enabled" label="&frames.enable;"/>
<checkbox oncommand="toggleCheckbox(this.id)" id="layout.frames.force_resizability" label="&frames.resizable;"/>
<separator class="thin"/>
</groupbox>
FRAMES OLD -->
<hbox>
<!-- NEW: SUBDOCUMENTS / IFRAMES ###### ToDo: Create Exceptions Editor, add default pref, add in DTD universal "&permissions.load.never/always/noForeign", replace here with copy of Images code below and rename labels -->
<groupbox flex="1">
<caption>
<!--label>&subdocuments.load;</label-->
<label>Load Subdocuments (iframes etc.)</label>
</caption>
<radiogroup oncommand="try{pref.getIntPref(this.id);} catch(e){pref.setIntPref(this.id,1);} toggleRadiogroup(this.id);" id="permissions.default.subdocument">
<radio value="" label="&images.load.always;" hidden="true"/>
<!--radio value="2" label="&permissions.load.never;"/-->
<radio value="2" label="Never"/>
<radio value="1" label="&images.load.always;"/>
<radio value="3" label="&images.load.noForeign;"/>
</radiogroup>
<separator class="thin"/>
<hbox id="subdocPerm">
<!--button label="&exceptions;" oncommand="JSB.id('ID_SUBDOCUMENT_PERM')"/ -->
<button label="&exceptions;" oncommand="alert('Not yet implemented.\nUse addon ExExceptions special KM-version.\nOr edit permissions.sqlite manually (type is subdocument)');"/>
<hbox flex="1"/>
</hbox>
</groupbox>
<!-- NEW: MEDIA ###### ToDo: Create Exceptions Editor, add default pref, add in DTD universal "&permissions.load.never/always/noForeign", replace here with copy of Images code below and rename labels -->
<groupbox flex="1">
<caption>
<!--label>&media.load;</label-->
<label>Load Media (HTML5 Audio Video)</label>
</caption>
<radiogroup oncommand="try{pref.getIntPref(this.id);} catch(e){pref.setIntPref(this.id,1);} toggleRadiogroup(this.id);" id="permissions.default.media">
<radio value="" label="&images.load.always;" hidden="true"/>
<!--radio value="2" label="&permissions.load.never;"/-->
<radio value="2" label="Never"/>
<radio value="1" label="&images.load.always;"/>
<radio value="3" label="&images.load.noForeign;"/>
</radiogroup>
<separator class="thin"/>
<hbox id="mediaPerm">
<!--button label="&exceptions;" oncommand="JSB.id('ID_MEDIA_PERM')"/ -->
<button label="&exceptions;" oncommand="alert('Not yet implemented.\nEdit permissions.sqlite manually (type is media)\nFuture editor can look exactly like Image Exceptions:'); JSB.id('ID_IMAGE_PERM')"/>
<hbox flex="1"/>
</hbox>
</groupbox>
</hbox>
<separator class="thin"/>
<groupbox>
<caption>
<label>&text.label;</label>
</caption>
<checkbox oncommand="toggleCheckbox(this.id)" id="browser.blink_allowed" label="&text.blink;"/>
<checkbox oncommand="Marquee.toggle(this)" id="Marquee" label="&text.marquee;"/>
<description>&marquee.note;</description>
</groupbox>
<separator class="thin"/>
<groupbox>
<caption>
<label>&source.label;</label>
</caption>
<checkbox oncommand="toggleCheckbox(this.id);Source.init()" id="kmeleon.general.sourceEnabled" label="&source.external;"/>
<hbox align="center" style="padding-left:2em">
<label value="&source.viewer;"/>
<textbox id="kmeleon.general.sourceCommand" flex="1" class="uri-element" oninput="setCharPref(this.id,this.value)"/>
<button label="&browse;" oncommand="Source.selectFile()"/>
</hbox>
</groupbox>
<separator class="thin"/>
<groupbox>
<caption>
<label>&zoom.label;</label>
</caption>
<label value="&zoom.description;"/>
<hbox align="center">
<label id="zlabel_min" value="min %"/>
<scale id="zoom.defaultPercentS" min="0" max="300" width="270" onchange="Zoom.changed(this.id)"/>
<label id="zlabel_max" value="max %"/>
<separator class="thin"/>
<textbox id="zoom.defaultPercent" type="number" min="0" max="300" width="50" oninput="Zoom.changed(this.id)" onchange="Zoom.changed(this.id)"/>
<separator class="thin"/>
<button label="&zoom.normal;" oncommand="Zoom.normal()"/>
</hbox>
</groupbox>
<!-- General -->
</tabpanel>
<tabpanel flex="1" orient="vertical" style="overflow:auto">
<!-- Fonts -->
<groupbox>
<caption>
<hbox align="center">
<label value="&fonts.forLanguage;"/>
<menulist id="font.language.group" oncommand="Fonts.init()">
<menupopup>
<menuitem value="x-western" label="&font.langGroup.latin1;"/>
<menuitem value="x-central-euro" label="&font.langGroup.latin2;"/>
<menuitem value="ja" label="&font.langGroup.japanese;"/>
<menuitem value="zh-CN" label="&font.langGroup.simpl-chinese;"/>
<menuitem value="zh-TW" label="&font.langGroup.trad-chinese;"/>
<menuitem value="zh-HK" label="&font.langGroup.trad-chinese-hk;"/>
<menuitem value="ko" label="&font.langGroup.korean;"/>
<menuitem value="x-cyrillic" label="&font.langGroup.cyrillic;"/>
<menuitem value="x-baltic" label="&font.langGroup.baltic;"/>
<menuitem value="el" label="&font.langGroup.el;"/>
<menuitem value="tr" label="&font.langGroup.turkish;"/>
<menuitem value="th" label="&font.langGroup.thai;"/>
<menuitem value="he" label="&font.langGroup.hebrew;"/>
<menuitem value="ar" label="&font.langGroup.arabic;"/>
<menuitem value="x-devanagari" label="&font.langGroup.devanagari;"/>
<menuitem value="x-tamil" label="&font.langGroup.tamil;"/>
<menuitem value="x-armn" label="&font.langGroup.armenian;"/>
<menuitem value="x-beng" label="&font.langGroup.bengali;"/>
<menuitem value="x-cans" label="&font.langGroup.canadian;"/>
<menuitem value="x-ethi" label="&font.langGroup.ethiopic;"/>
<menuitem value="x-geor" label="&font.langGroup.georgian;"/>
<menuitem value="x-gujr" label="&font.langGroup.gujarati;"/>
<menuitem value="x-guru" label="&font.langGroup.gurmukhi;"/>
<menuitem value="x-khmr" label="&font.langGroup.khmer;"/>
<menuitem value="x-mlym" label="&font.langGroup.malayalam;"/>
<menuseparator/>
<menuitem value="x-unicode" label="&font.langGroup.unicode;"/>
<!--menuitem value="x-user-def" label="&font.langGroup.user-def;"/-->
</menupopup>
</menulist>
</hbox>
</caption>
<separator class="thin"/>
<grid>
<columns>
<column/>
<column flex="1"/>
<column/>
</columns>
<rows>
<row align="center">
<label value="&fonts.genericType;"/>
<label value="&fonts.typeface;"/>
<label value="&fonts.size;"/>
</row>
<row>
<separator class="thin"/>
</row>
<row align="center">
<label value="&fonts.proportional;"/>
<menulist id="default" oncommand="Fonts.setDefaultFont(this.value)">
<menupopup>
<menuitem value="serif" label="&fonts.default.serif;"/>
<menuitem value="sans-serif" label="&fonts.default.sans-serif;"/>
</menupopup>
</menulist>
<textbox id="font.size.variable" class="uri-element" size="4" oninput="Fonts.setSize(this.id,this.value)"/>
</row>
<row align="center">
<hbox align="center" pack="end">
<label value="&fonts.serif;"/>
</hbox>
<menulist id="serif" oncommand="Fonts.setFont(this.value,this.id)">
<menupopup/>
</menulist>
<spacer/>
</row>
<row align="center">
<hbox align="center" pack="end">
<label value="&fonts.sans-serif;"/>
</hbox>
<menulist id="sans-serif" oncommand="Fonts.setFont(this.value,this.id)">
<menupopup/>
</menulist>
<spacer/>
</row>
<row align="center">
<hbox align="center" pack="end">
<label value="&fonts.cursive;"/>
</hbox>
<menulist id="cursive" oncommand="Fonts.setFont(this.value,this.id)">
<menupopup/>
</menulist>
<spacer/>
</row>
<row align="center">
<hbox align="center" pack="end">
<label value="&fonts.fantasy;"/>
</hbox>
<menulist id="fantasy" oncommand="Fonts.setFont(this.value,this.id)">
<menupopup/>
</menulist>
<spacer/>
</row>
<row>
<separator class="thin"/>
</row>
<row align="center">
<label value="&fonts.monospace;"/>
<menulist id="monospace" oncommand="Fonts.setFont(this.value,this.id)">
<menupopup/>
</menulist>
<textbox id="font.size.fixed" class="uri-element" size="4" oninput="Fonts.setSize(this.id,this.value)"/>
</row>
<row>
<separator class="thin"/>
</row>
<row>
<spacer/>
<hbox align="center" pack="end">
<label value="&fonts.minSize;"/>
</hbox>
<textbox id="font.minimum-size" class="uri-element" size="4" oninput="Fonts.setSize(this.id,this.value)"/>
</row>
</rows>
</grid>
<separator class="thin"/>
</groupbox>
<separator class="thin"/>
<checkbox oncommand="pref.setIntPref(this.id,this.checked?1:0)" id="browser.display.use_document_fonts" label="&fonts.useDocFonts;"/>
<!-- Toggle between 0 (never) and 1 (quick); 2 (always) is deprecated -->
<!-- Fonts -->
</tabpanel>
<tabpanel flex="1" orient="vertical" style="overflow:auto">
<!-- Images -->
<separator class="thin"/>
<hbox>
<groupbox flex="1">
<caption>
<label>&images.load;</label>
</caption>
<radiogroup oncommand="toggleRadiogroup(this.id)" id="permissions.default.image">
<radio value="2" label="&images.load.never;"/>
<radio value="1" label="&images.load.always;"/>
<radio value="3" label="&images.load.noForeign;"/>
</radiogroup>
<separator class="thin"/>
<hbox id="imagePerm" hidden="true">
<button label="&exceptions;" oncommand="JSB.id('ID_IMAGE_PERM')"/>
<hbox flex="1"/>
</hbox>
</groupbox>
<groupbox flex="1">
<caption>
<label>&images.loop;</label>
</caption>
<radiogroup oncommand="toggleRadiogroup(this.id)" id="image.animation_mode">
<radio value="none" label="&images.loop.none;"/>
<radio value="normal" label="&images.loop.normal;"/>
<radio value="once" label="&images.loop.once;"/>
</radiogroup>
<separator class="thin"/>
</groupbox>
</hbox>
<separator class="thick"/>
<checkbox oncommand="toggleCheckbox(this.id)" id="browser.enable_automatic_image_resizing" label="&images.resizing;"/>
<separator class="thin"/>
<vbox id="domDISS"/>
<separator class="thick"/>
<groupbox>
<caption>
<label>&images.missing;</label>
</caption>
<checkbox oncommand="Placeholder.toggle(this);init()" id="browser.display.show_image_placeholders" label="&images.placeholders;"/>
<checkbox oncommand="Placeholder.toggle(this);init()" id="browser.display.force_inline_alttext" label="&images.inline.force;"/>
<description>&images.inline.note;</description>
<checkbox oncommand="Placeholder.toggle(this);init()" id="CSS" label="&images.block.force;"/>
<description>&restartNote1;</description>
</groupbox>
<!-- Images -->
</tabpanel>
<!-- Languages -->
<tabpanel id="LanguagesWebPages"/>
</tabpanels>
</tabbox>
</tabcontrol>
</vbox>
</page>