On 3/19/2010 2:34 PM, Chad C wrote:
I am sure there is a way to do this but I cannot figure it out with my limited knowledge of Exhibit:

I am using a tabular view to show all of the information in my database but the default formatting of the view is backwards from what I need to use. I currently have this in my HTML:

<div ex:role="view" ex:viewClass="Tabular"
ex:columns=".label, .manufacturer, .pocketdesktop, .patterns, .formats, .bestformat, .micplacement, .speaker, .inputs, .phantom, .usb, .tuner, .metronome, .memorysize, .maxmemory, .windscreen, .batteries, .externalpower, .plugplay, .backlight, .pitchcontrol, .playbackspeed, .accessories">
</div>

As formatted this displays with the .label on the left side of the screen and the other columns running from left to right next to it. I need the thing to be transposed with the .label on the top of the screen and the other information below it scrolling down the page. It is supposed to be a comparison chart of digital audio recorders with each column of the table representing the data for one individual model.

Is there a way to make Exhibit format it like this?

I'm afraid not. But if you append the code below after including exhibit-api.js, then I think the table will render sideways. I haven't tested the code myself yet.

David
-----


<script>
    Exhibit.TabularView.prototype._reconstruct = function() {
        var self = this;
        var collection = this._uiContext.getCollection();
        var database = this._uiContext.getDatabase();

        var bodyDiv = this._dom.bodyDiv;
        bodyDiv.innerHTML = "";

        /*
         *  Get the current collection and check if it's empty
         */
        var items = [];
        var originalSize = collection.countAllItems();
        if (originalSize > 0) {
            var currentSet = collection.getRestrictedItems();
currentSet.visit(function(itemID) { items.push({ id: itemID, sortKey: "" }); });
        }

        if (items.length > 0) {
            /*
             *  Sort the items
             */
            var sortColumn = this._columns[this._settings.sortColumn];
items.sort(this._createSortFunction(items, sortColumn.expression, this._settings.sortAscending));

            /*
             *  Create the column headers
             */
            var htmlColumns = [];

            var htmlColumnHeader = [];
            htmlColumns.push(htmlColumnHeader);

            var createColumnHeader = function(i) {
                var column = self._columns[i];
                if (column.label == null) {
                    column.label = self._getColumnLabel(column.expression);
                }

                var td = document.createElement("th");
                htmlColumnHeader.push(td);

                Exhibit.TabularView.createColumnHeader(
exhibit, td, column.label, i == self._settings.sortColumn, self._settings.sortAscending,
                    function(elmt, evt, target) {
                        self._doSort(i);
                        SimileAjax.DOM.cancelEvent(evt);
                        return false;
                    }
                );
            };
            for (var i = 0; i < this._columns.length; i++) {
                createColumnHeader(i);
            }

            /*
             *  Create item rows
             */
            var renderItem = function(i) {
                var item = items[i];

                var htmlColumn = [];
                htmlColumns.push(htmlColumn);

                for (var c = 0; c < self._columns.length; c++) {
                    var column = self._columns[c];
                    var td = document.createElement("td");
                    htmlColumn.push(td);

                    var results = column.expression.evaluate(
                        { "value" : item.id },
                        { "value" : "item" },
                        "value",
                        database
                    );

var valueType = column.format == "list" ? results.valueType : column.format;
                    column.uiContext.formatList(
                        results.values,
                        results.size,
                        valueType,
                        function(elmt) { td.appendChild(elmt); }
                    );

                    if (column.styler != null) {
                        column.styler(item.id, database, td);
                    }
                }

                if (self._settings.rowStyler != null) {
                    self._settings.rowStyler(item.id, database, tr, i);
                }
            };
            for (var i = 0; i < items.length; i++) {
                renderItem(i);
            }

            /*
             *  Construct the table
             */
            var table = document.createElement("table");
            table.className = "exhibit-tabularView-body";
            if (this._settings.tableStyler != null) {
                this._settings.tableStyler(table, database);
            } else {
                table.cellSpacing = this._settings.cellSpacing;
                table.cellPadding = this._settings.cellPadding;
                table.border = this._settings.border;
            }

            var rowCount = htmlColumns[0].length;
            for (var r = 0; r < rowCount; r++) {
                var tr = table.insertRow(table.rows.length);

                for (var c = 0; c < htmlColumns.length; c++) {
                    tr.appendChild(htmlColumns[c][r]);
                }
            }

            bodyDiv.appendChild(table);
        }
    };
</script>

--
You received this message because you are subscribed to the Google Groups "SIMILE 
Widgets" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/simile-widgets?hl=en.

Reply via email to