Always generate valid DOM identifiers using html_identifier() write original identifier string to rel attribute where possible
| | |
| | | } |
| | | |
| | | /** |
| | | * Convert the given string into a valid HTML identifier |
| | | * Same functionality as done in app.js with this.identifier_expr |
| | | * |
| | | */ |
| | | function html_identifier($str) |
| | | { |
| | | return asciiwords($str, true, '_'); |
| | | } |
| | | |
| | | /** |
| | | * Remove single and double quotes from given string |
| | | * |
| | | * @param string Input value |
| | |
| | | while ($table_data && ($sql_arr = $db->fetch_assoc($table_data))) |
| | | { |
| | | $zebra_class = $c % 2 ? 'even' : 'odd'; |
| | | $table->add_row(array('id' => 'rcmrow' . $sql_arr[$id_col], 'class' => $zebra_class)); |
| | | $table->add_row(array('id' => 'rcmrow' . html_identifier($sql_arr[$id_col]), 'class' => $zebra_class)); |
| | | |
| | | // format each col |
| | | foreach ($a_show_cols as $col) |
| | |
| | | if (!empty($row_data['class'])) |
| | | $zebra_class .= ' '.$row_data['class']; |
| | | |
| | | $table->add_row(array('id' => 'rcmrow' . $row_data[$id_col], 'class' => $zebra_class)); |
| | | $table->add_row(array('id' => 'rcmrow' . html_identifier($row_data[$id_col]), 'class' => $zebra_class)); |
| | | |
| | | // format each col |
| | | foreach ($a_show_cols as $col) |
| | |
| | | } |
| | | |
| | | // make folder name safe for ids and class names |
| | | $folder_id = asciiwords($folder['id'], true, '_'); |
| | | $folder_id = html_identifier($folder['id']); |
| | | $classes = array('mailbox'); |
| | | |
| | | // set special class for Sent, Drafts, Trash and Junk |
| | |
| | | $link_attrib = $folder['virtual'] ? array() : array( |
| | | 'href' => rcmail_url('', array('_mbox' => $folder['id'])), |
| | | 'onclick' => sprintf("return %s.command('list','%s',this)", JS_OBJECT_NAME, $js_name), |
| | | 'rel' => $folder['id'], |
| | | 'title' => $title, |
| | | ); |
| | | |
| | |
| | | // update a contact record in the list |
| | | this.update_contact_row = function(cid, cols_arr, newcid) |
| | | { |
| | | cid = String(cid).replace(this.identifier_expr, '_'); |
| | | newcid = String(newcid).replace(this.identifier_expr, '_'); |
| | | |
| | | var row; |
| | | if (this.contact_list.rows[cid] && (row = this.contact_list.rows[cid].obj)) { |
| | | for (var c=0; c<cols_arr.length; c++) |
| | |
| | | even = rowcount%2, |
| | | row = document.createElement('tr'); |
| | | |
| | | row.id = 'rcmrow'+cid; |
| | | row.id = 'rcmrow'+String(cid).replace(this.identifier_expr, '_'); |
| | | row.className = 'contact '+(even ? 'even' : 'odd'); |
| | | |
| | | if (this.contact_list.in_selection(cid)) |
| | |
| | | $line_templ = html::tag('li', array( |
| | | 'id' => 'rcmli%s', 'class' => 'addressbook %s'), |
| | | html::a(array('href' => '%s', |
| | | 'rel' => '%s', |
| | | 'onclick' => "return ".JS_OBJECT_NAME.".command('list','%s',this)"), '%s')); |
| | | |
| | | // currently selected is the first address source in the list |
| | |
| | | foreach ((array)$OUTPUT->env['address_sources'] as $j => $source) { |
| | | $id = strval($source['id'] ? $source['id'] : $j); |
| | | $js_id = JQ($id); |
| | | $dom_id = preg_replace('/[^a-z0-9\-_]/i', '_', $id); |
| | | $out .= sprintf($line_templ, $dom_id, ($current === $id ? 'selected' : ''), |
| | | $out .= sprintf($line_templ, |
| | | html_identifier($id), |
| | | ($current === $id ? 'selected' : ''), |
| | | Q(rcmail_url(null, array('_source' => $id))), |
| | | $source['id'], |
| | | $js_id, (!empty($source['name']) ? Q($source['name']) : Q($id))); |
| | | |
| | | $groupdata = array('out' => $out, 'jsdata' => $jsdata, 'source' => $id); |
| | |
| | | $line_templ = html::tag('li', array( |
| | | 'id' => 'rcmliG%s', 'class' => 'contactgroup'), |
| | | html::a(array('href' => '#', |
| | | 'rel' => '%s:%s', |
| | | 'onclick' => "return ".JS_OBJECT_NAME.".command('listgroup',{'source':'%s','id':'%s'},this)"), '%s')); |
| | | |
| | | $jsdata = array(); |
| | | foreach ($groups as $group) { |
| | | $args['out'] .= sprintf($line_templ, asciiwords($args['source'] . $group['ID'], true, '_'), $args['source'], $group['ID'], Q($group['name'])); |
| | | $args['out'] .= sprintf($line_templ, |
| | | html_identifier($args['source'] . $group['ID']), |
| | | $args['source'], $group['ID'], |
| | | $args['source'], $group['ID'], Q($group['name']) |
| | | ); |
| | | $args['jsdata']['G'.$args['source'].$group['ID']] = array( |
| | | 'source' => $args['source'], 'id' => $group['ID'], |
| | | 'name' => $group['name'], 'type' => 'group'); |
| | |
| | | $result = $CONTACTS->search($CONTACTS->primary_key, $insert_id); |
| | | |
| | | rcmail_js_contacts_list($result, 'parent.'); |
| | | $OUTPUT->command('parent.contact_list.select', $insert_id); |
| | | $OUTPUT->command('parent.contact_list.select', html_identifier($insert_id)); |
| | | |
| | | // update record count display |
| | | $CONTACTS->reset(); |