--- /dev/null
+/* Note the #content is only needed to override weird crap in default styles */
+
+#content table.extended-profile {
+ width: 100%;
+ border-collapse: separate;
+ border-spacing: 8px;
+}
+#content table.extended-profile th {
+ color: #777;
+ background-color: #eee;
+ width: 150px;
+
+ padding-top: 0; /* override bizarre theme defaults */
+
+ text-align: right;
+ padding-right: 8px;
+}
+#content table.extended-profile td {
+ padding: 0; /* override bizarre theme defaults */
+
+ padding-left: 8px;
+}
\ No newline at end of file
if (empty($phones)) {
$pArrays[] = array(
'label' => _m('Phone'),
+ 'index' => 0,
'type' => 'phone',
'vcard' => 'tel',
'multi' => true
$pa = array(
'label' => _m('Phone'),
'type' => 'phone',
- 'index' => $phones[$i]->value_index,
+ 'index' => intva($phones[$i]->value_index),
'rel' => $phones[$i]->rel,
'value' => $phones[$i]->field_value,
'vcard' => 'tel'
$index = $field['index'];
$id = "extprofile-$name-$index";
$rel = $id . '-rel';
-
- $this->out->elementStart('div', array('class' => 'phone-edit'));
+ $this->out->elementStart(
+ 'div', array(
+ 'id' => $id . '-edit',
+ 'class' => 'phone-edit'
+ )
+ );
$this->out->input($id, null, $field['value']);
$this->out->dropdown(
$id . '-rel',
$this->out->element(
'a',
array(
- 'name' => $name,
+ 'class' => 'add_row',
'href' => 'javascript://'),
'+'
);
+ $this->out->element(
+ 'a',
+ array(
+ 'class' => 'remove_row',
+ 'href' => 'javascript://',
+ 'style' => 'display: none; '
+ ),
+ '-'
+ );
}
$this->out->elementEnd('div');
}
--- /dev/null
+var removeRow = function() {
+ var cnt = rowCount(this);
+ var table = $(this).closest('table');
+ console.log("row count = " + cnt);
+ if (cnt > 1) {
+ var target = $(this).closest('tr');
+ target.remove();
+ reorder(table);
+ }
+};
+
+var rowCount = function(row) {
+ var top = $(row).closest('table');
+ var trs = $(top).find('tr');
+ return trs.length - 1; // exclude th section header row
+};
+
+var reorder = function(table) {
+ var trs = $(table).find('tr').has('td');
+
+ $(trs).find('a').hide();
+
+ $(trs).each(function(i, tr) {
+ console.log("ROW " + i);
+ $(tr).find('a.remove_row').show();
+ replaceIndex(rowIndex(tr), i);
+ });
+
+ $(trs).last().find('a.add_row').show();
+
+ if (trs.length == 1) {
+ $(trs).find('a.remove_row').hide();
+ }
+
+};
+
+var rowIndex = function(elem) {
+ var idStr = $(elem).find('div').attr('id');
+ var id = idStr.match(/\d+/);
+ console.log("id = " + id);
+};
+
+var replaceIndex = function(elem, oldIndex, newIndex) {
+ $(elem).find('*').each(function() {
+ $.each(this.attributes, function(i, attrib) {
+ var regexp = /extprofile-.*-\d.*/;
+ var value = attrib.value;
+ var match = value.match(regexp);
+ if (match != null) {
+ attrib.value = value.replace("-" + oldIndex, "-" + newIndex);
+ console.log('match: oldIndex = ' + oldIndex + ' newIndex = ' + newIndex + ' name = ' + attrib.name + ' value = ' + attrib.value);
+ }
+ });
+ });
+}
+
+var resetRow = function(elem) {
+ $(elem).find('input').attr('value', '');
+ $(elem).find("select option[value='office']").attr("selected", true);
+}
+
+var addRow = function() {
+ var divId = $(this).closest('div').attr('id');
+ var index = divId.match(/\d+/);
+ console.log("Current row = " + index);
+ var tr = $(this).closest('tr');
+ var newtr = $(tr).clone();
+ var newIndex = parseInt(index) + 1;
+ replaceIndex(newtr, index, newIndex);
+ resetRow(newtr);
+ $(tr).after(newtr);
+ console.log("number of rows: " + rowCount(tr));
+ reorder($(this).closest('table'));
+};
+
+$(document).ready(
+
+function() {
+ $('.add_row').live('click', addRow);
+ $('.remove_row').live('click', removeRow);
+}
+
+);
\ No newline at end of file
+++ /dev/null
-/* Note the #content is only needed to override weird crap in default styles */
-
-#content table.extended-profile {
- width: 100%;
- border-collapse: separate;
- border-spacing: 8px;
-}
-#content table.extended-profile th {
- color: #777;
- background-color: #eee;
- width: 150px;
-
- padding-top: 0; /* override bizarre theme defaults */
-
- text-align: right;
- padding-right: 8px;
-}
-#content table.extended-profile td {
- padding: 0; /* override bizarre theme defaults */
-
- padding-left: 8px;
-}
\ No newline at end of file
function showStylesheets() {
parent::showStylesheets();
- $this->cssLink('plugins/ExtendedProfile/profiledetail.css');
+ $this->cssLink('plugins/ExtendedProfile/css/profiledetail.css');
+ return true;
+ }
+
+ function showScripts() {
+ parent::showScripts();
+ $this->script('plugins/ExtendedProfile/js/profiledetail.js');
return true;
}
$phoneTuples = array();
foreach($phones as $phone) {
- $firstkey = array_shift(array_keys($phone));
+ $firstkey = current(array_keys($phone));
$index = substr($firstkey, strrpos($firstkey, '-') + 1);
list($number, $rel) = array_values($phone);
'index' => $index,
'rel' => $rel
);
-
- return $phoneTuples;
}
- return $phones;
+ return $phoneTuples;
}
function arraySplit($array, $pieces)
$newCount = ceil(count($array) / $pieces);
$a = array_slice($array, 0, $newCount);
- $b = array_split(array_slice($array, $newCount), $pieces - 1);
+ $b = $this->arraySplit(array_slice($array, $newCount), $pieces - 1);
return array_merge(array($a), $b);
}