--- /dev/null
+/**
+ * Horde identity selection javascript.
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ */
+
+var IdentitySelect = {
+
+ newChoice: function()
+ {
+ var id = $('identity').down('[value=' + $F('identity') + ']').value;
+
+ if (id < 0) {
+ $('prefs').reset();
+ $('identity').setValue(id);
+ return;
+ }
+
+ this.identities[id].each(function(a) {
+ var field = $(a[0]);
+ if (!field) {
+ return;
+ }
+
+ switch (a[1]) {
+ case "enum":
+ for (var j = 0; j < field.options.length; ++j) {
+ if (field.options[j].value == a[2]) {
+ field.selectedIndex = j;
+ break;
+ }
+ }
+ break;
+
+ case "implicit":
+ eval("newChoice_" + a[0] + "(" + a[2] + ")");
+ break;
+
+ case "checkbox":
+ default:
+ field.setValue(a[2]);
+ break;
+ }
+ });
+ },
+
+ deleteIdentity: function()
+ {
+ var params, q,
+ id = $('identity').down('[value=' + $F('identity') + ']').value;
+
+ if (id >= 0) {
+ q = this.deleteurl.indexOf('?');
+ params = this.deleteurl.toQueryParams();
+ params.id = id;
+ window.location.assign(this.deleteurl.substring(0, q) + '?' + params.toQueryString());
+ }
+ },
+
+ onDomLoad: function()
+ {
+ if ($('identity')) {
+ $('identity').observe('change', this.newChoice.bind(this));
+ }
+ if ($('deleteidentity')) {
+ $('deleteidentity').observe('click', this.deleteIdentity.bind(this));
+ }
+ }
+
+};
+
+document.observe('dom:loaded', IdentitySelect.onDomLoad.bind(IdentitySelect));
<?php if ($prefs->isLocked('default_identity')): ?>
-<input type="hidden" name="identity" value="<?php echo (int)$GLOBALS['identity']->getDefault() ?>" />
+<input type="hidden" name="identity" value="<?php echo intval($GLOBALS['identity']->getDefault()) ?>" />
<?php else: ?>
-<script type="text/javascript">
-var identities = [];
<?php
-global $identity;
-$identities = $identity->getAll('id');
-$default_identity = $identity->getDefault();
-$members = $prefGroups['identities']['members'];
-for ($i = 0; $i < count($identities); ++$i):
-?>
-identities[<?php echo $i ?>] = [];
-<?php
-$k = 0;
-foreach ($members as $member):
- if ($member == 'default_identity' ||
- !empty($_prefs[$member]['locked']) ||
- $_prefs[$member]['type'] == 'special' ||
- $_prefs[$member]['type'] == 'link') {
- continue;
- }
-?>
-identities[<?php echo $i ?>][<?php echo $k++ ?>] = ["<?php echo $member ?>", "<?php echo $_prefs[$member]['type'] ?>", <?php
-$val = $identity->getValue($member, $i);
-switch ($_prefs[$member]['type']) {
-case 'checkbox':
- echo $val ? 'true' : 'false';
- break;
+ $identities = $GLOBALS['identity']->getAll('id');
+ $default_identity = $GLOBALS['identity']->getDefault();
+ $members = $prefGroups['identities']['members'];
-case 'number':
- echo (int)$val;
- break;
+ $out = array();
-case 'textarea':
- if (is_array($val)) {
- $val = implode("\n", $val);
- }
- $val = Horde_String::convertCharset($val, Horde_Nls::getCharset(), 'UTF-8');
- echo 'decodeURIComponent("' . rawurlencode($val) . '")';
- break;
+ for ($i = 0, $icnt = count($identities); $i < $icnt; ++$i) {
+ $tmp = array();
+ foreach ($members as $member) {
+ if ($member == 'default_identity' ||
+ !empty($_prefs[$member]['locked']) ||
+ $_prefs[$member]['type'] == 'special' ||
+ $_prefs[$member]['type'] == 'link') {
+ continue;
+ }
-default:
- $val = Horde_String::convertCharset($val, Horde_Nls::getCharset(), 'UTF-8');
- echo 'decodeURIComponent("' . rawurlencode($val) . '")';
-}
-?>];
-<?php endforeach; endfor; ?>
+ $val = $GLOBALS['identity']->getValue($member, $i);
+ switch ($_prefs[$member]['type']) {
+ case 'checkbox':
+ $val2 = $val ? 'true' : 'false';
+ break;
-function newChoice()
-{
- var field, val;
- var index = document.prefs.identity.selectedIndex;
- var id = document.prefs.identity.options[index].value;
- if (id < 0) {
- document.prefs.reset();
- document.prefs.identity.selectedIndex = index;
- return;
- }
- for (var i = 0; i < identities[id].length; i++) {
- field = document.prefs[identities[id][i][0]];
- if (!field) {
- continue;
- }
- val = identities[id][i][2];
- switch (identities[id][i][1]) {
- case "enum":
- for (var j = 0; j < field.options.length; j++) {
- if (field.options[j].value == val) {
- field.selectedIndex = j;
- break;
- }
- }
- break;
+ case 'number':
+ $val2 = intval($val);
+ break;
- case "checkbox":
- field.checked = val;
- break;
+ case 'textarea':
+ if (is_array($val)) {
+ $val = implode("\n", $val);
+ }
+ // Fall-through
- case "implicit":
- eval("newChoice_" + identities[id][i][0] + "(val)");
- break;
+ default:
+ $val2 = Horde_String::convertCharset($val, Horde_Nls::getCharset(), 'UTF-8');
+ }
- default:
- field.value = val;
+ $tmp[] = array(
+ $member,
+ $_prefs[$member]['type'],
+ $val2
+ );
}
+
+ $out[] = $tmp;
}
-}
-</script>
-<br />
-<?php echo Horde::label('identity', _("Select the identity you want to change:")) ?><br />
-<select name="identity" id="identity" onchange="javascript:newChoice()">
+
+ Horde::addScriptFile('identityselect.js', 'horde');
+ echo Horde::wrapInlineScript(array(
+ 'IdentitySelect.identities = ' . Horde_Serialize::serialize($out, Horde_Serialize::JSON)
+ ));
+?>
+<div>
+ <?php echo Horde::label('identity', _("Select the identity you want to change:")) ?>
+</div>
+<div>
+ <select name="identity" id="identity">
<option value="-2" selected="selected"><?php echo _("None") ?></option>
<option value="-1"><?php echo _("Create a new one") ?></option>
-<?php for ($i = 0; $i < count($identities); $i++): ?>
+<?php for ($i = 0, $icnt = count($identities); $i < $icnt; ++$i): ?>
<option value="<?php echo $i ?>"<?php if ($i == $default_identity) echo ' selected="selected"' ?>><?php echo htmlspecialchars($identities[$i]) ?></option>
<?php endfor; ?>
-</select><br />
+ </select>
+</div>
<?php endif; ?>