You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ga...@apache.org on 2016/05/31 07:58:43 UTC
[15/27] fauxton commit: updated refs/heads/master to 0ca35da
http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/0ca35da7/app/addons/documents/index-results/stores.js
----------------------------------------------------------------------
diff --git a/app/addons/documents/index-results/stores.js b/app/addons/documents/index-results/stores.js
index eedbad9..282df98 100644
--- a/app/addons/documents/index-results/stores.js
+++ b/app/addons/documents/index-results/stores.js
@@ -10,841 +10,833 @@
// License for the specific language governing permissions and limitations under
// the License.
-define([
- '../../../app',
- '../../../core/api',
- './actiontypes',
- '../header/header.actiontypes',
- '../pagination/actiontypes',
-
- '../resources',
- '../mango/mango.helper',
- '../resources',
- '../../databases/resources'
-],
-
-function (app, FauxtonAPI, ActionTypes, HeaderActionTypes, PaginationActionTypes,
- Documents, MangoHelper, Resources, DatabaseResources) {
+import app from "../../../app";
+import FauxtonAPI from "../../../core/api";
+import ActionTypes from "./actiontypes";
+import HeaderActionTypes from "../header/header.actiontypes";
+import PaginationActionTypes from "../pagination/actiontypes";
+import Documents from "../resources";
+import MangoHelper from "../mango/mango.helper";
+import Resources from "../resources";
+import DatabaseResources from "../../databases/resources";
+
+var Stores = {};
+
+var maxDocLimit = 10000;
+
+Stores.IndexResultsStore = FauxtonAPI.Store.extend({
+
+ initialize: function () {
+ this.reset();
+ },
+
+ reset: function () {
+ this._collection = new Backbone.Collection.extend({
+ url: ''
+ });
+
+ this._filteredCollection = [];
+ this._bulkDeleteDocCollection = new Resources.BulkDeleteDocCollection([], {});
+
+ this.clearSelectedItems();
+ this._isLoading = false;
+ this._textEmptyIndex = 'No Documents Found';
+ this._typeOfIndex = 'view';
+
+ this._tableViewSelectedFields = [];
+ this._isPrioritizedEnabled = false;
+
+ this._tableSchema = [];
+ this._tableView = false;
+
+ this.resetPagination();
+ },
+
+ resetPagination: function () {
+ this._pageStart = 1;
+ this._currentPage = 1;
+ this._enabled = true;
+ this._newView = false;
+ this._docLimit = _.isUndefined(this._docLimit) ? maxDocLimit : this._docLimit;
+
+ this.initPerPage();
+ },
+
+ setDocumentLimit: function (docLimit) {
+ if (docLimit) {
+ this._docLimit = docLimit;
+ } else {
+ this._docLimit = maxDocLimit;
+ }
- var Stores = {};
+ this.initPerPage();
+ },
- var maxDocLimit = 10000;
+ getCollection: function () {
+ return this._collection;
+ },
- Stores.IndexResultsStore = FauxtonAPI.Store.extend({
+ canShowPrevious: function () {
+ if (!this._enabled) { return false; }
+ if (!this._collection || !this._collection.hasPrevious) { return false; }
- initialize: function () {
- this.reset();
- },
+ return this._collection.hasPrevious();
+ },
- reset: function () {
- this._collection = new Backbone.Collection.extend({
- url: ''
- });
+ canShowNext: function () {
+ if (!this._enabled) { return this._enabled; }
- this._filteredCollection = [];
- this._bulkDeleteDocCollection = new Resources.BulkDeleteDocCollection([], {});
+ if ((this._pageStart + this._perPage) >= this._docLimit) {
+ return false;
+ }
- this.clearSelectedItems();
- this._isLoading = false;
- this._textEmptyIndex = 'No Documents Found';
- this._typeOfIndex = 'view';
+ if (!this._collection || !this._collection.hasNext) { return false; }
- this._tableViewSelectedFields = [];
- this._isPrioritizedEnabled = false;
+ return this._collection.hasNext();
+ },
- this._tableSchema = [];
- this._tableView = false;
+ paginateNext: function () {
+ this._currentPage += 1;
+ this._pageStart += this.getPerPage();
+ this._collection.paging.pageSize = this.documentsLeftToFetch();
+ },
- this.resetPagination();
- },
+ paginatePrevious: function () {
+ this._currentPage -= 1;
- resetPagination: function () {
+ this._pageStart = this._pageStart - this.getPerPage();
+ if (this._pageStart < 1) {
this._pageStart = 1;
- this._currentPage = 1;
- this._enabled = true;
- this._newView = false;
- this._docLimit = _.isUndefined(this._docLimit) ? maxDocLimit : this._docLimit;
-
- this.initPerPage();
- },
-
- setDocumentLimit: function (docLimit) {
- if (docLimit) {
- this._docLimit = docLimit;
- } else {
- this._docLimit = maxDocLimit;
- }
-
- this.initPerPage();
- },
-
- getCollection: function () {
- return this._collection;
- },
-
- canShowPrevious: function () {
- if (!this._enabled) { return false; }
- if (!this._collection || !this._collection.hasPrevious) { return false; }
-
- return this._collection.hasPrevious();
- },
-
- canShowNext: function () {
- if (!this._enabled) { return this._enabled; }
-
- if ((this._pageStart + this._perPage) >= this._docLimit) {
- return false;
- }
-
- if (!this._collection || !this._collection.hasNext) { return false; }
-
- return this._collection.hasNext();
- },
-
- paginateNext: function () {
- this._currentPage += 1;
- this._pageStart += this.getPerPage();
- this._collection.paging.pageSize = this.documentsLeftToFetch();
- },
-
- paginatePrevious: function () {
- this._currentPage -= 1;
-
- this._pageStart = this._pageStart - this.getPerPage();
- if (this._pageStart < 1) {
- this._pageStart = 1;
- }
-
- this._collection.paging.pageSize = this.getPerPage();
- },
+ }
- getCurrentPage: function () {
- return this._currentPage;
- },
+ this._collection.paging.pageSize = this.getPerPage();
+ },
- totalDocsViewed: function () {
- return this._perPage * this._currentPage;
- },
+ getCurrentPage: function () {
+ return this._currentPage;
+ },
- documentsLeftToFetch: function () {
- var documentsLeftToFetch = this._docLimit - this.totalDocsViewed();
+ totalDocsViewed: function () {
+ return this._perPage * this._currentPage;
+ },
- if (documentsLeftToFetch < this.getPerPage() ) {
- return documentsLeftToFetch;
- }
+ documentsLeftToFetch: function () {
+ var documentsLeftToFetch = this._docLimit - this.totalDocsViewed();
- return this._perPage;
- },
+ if (documentsLeftToFetch < this.getPerPage() ) {
+ return documentsLeftToFetch;
+ }
- getPerPage: function () {
- return this._perPage;
- },
+ return this._perPage;
+ },
- initPerPage: function () {
- var perPage = FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE;
+ getPerPage: function () {
+ return this._perPage;
+ },
- if (window.localStorage) {
- var storedPerPage = app.utils.localStorageGet('fauxton:perpage');
+ initPerPage: function () {
+ var perPage = FauxtonAPI.constants.MISC.DEFAULT_PAGE_SIZE;
- if (storedPerPage) {
- perPage = parseInt(storedPerPage, 10);
- }
- }
+ if (window.localStorage) {
+ var storedPerPage = app.utils.localStorageGet('fauxton:perpage');
- if (this._docLimit < perPage) {
- perPage = this._docLimit;
+ if (storedPerPage) {
+ perPage = parseInt(storedPerPage, 10);
}
+ }
- this.setPerPage(perPage);
- },
+ if (this._docLimit < perPage) {
+ perPage = this._docLimit;
+ }
- setPerPage: function (perPage) {
- this._perPage = perPage;
- app.utils.localStorageSet('fauxton:perpage', perPage);
+ this.setPerPage(perPage);
+ },
- if (this._collection && this._collection.pageSizeReset) {
- this._collection.pageSizeReset(perPage, {fetch: false});
- }
- },
+ setPerPage: function (perPage) {
+ this._perPage = perPage;
+ app.utils.localStorageSet('fauxton:perpage', perPage);
- getTotalRows: function () {
- if (!this._collection) { return false; }
+ if (this._collection && this._collection.pageSizeReset) {
+ this._collection.pageSizeReset(perPage, {fetch: false});
+ }
+ },
- return this._collection.length;
- },
+ getTotalRows: function () {
+ if (!this._collection) { return false; }
- getPageStart: function () {
- return this._pageStart;
- },
+ return this._collection.length;
+ },
- getPageEnd: function () {
- if (!this._collection) { return false; }
- return this._pageStart + this._collection.length - 1;
- },
+ getPageStart: function () {
+ return this._pageStart;
+ },
- getUpdateSeq: function () {
- if (!this._collection) { return false; }
- if (!this._collection.updateSeq) { return false; }
- return this._collection.updateSeq();
- },
+ getPageEnd: function () {
+ if (!this._collection) { return false; }
+ return this._pageStart + this._collection.length - 1;
+ },
- clearSelectedItems: function () {
- this._bulkDeleteDocCollection.reset([]);
- },
+ getUpdateSeq: function () {
+ if (!this._collection) { return false; }
+ if (!this._collection.updateSeq) { return false; }
+ return this._collection.updateSeq();
+ },
- newResults: function (options) {
- this._collection = options.collection;
+ clearSelectedItems: function () {
+ this._bulkDeleteDocCollection.reset([]);
+ },
- this._bulkDeleteDocCollection = options.bulkCollection;
+ newResults: function (options) {
+ this._collection = options.collection;
- if (options.textEmptyIndex) {
- this._textEmptyIndex = options.textEmptyIndex;
- }
+ this._bulkDeleteDocCollection = options.bulkCollection;
- if (options.typeOfIndex) {
- this._typeOfIndex = options.typeOfIndex;
- }
+ if (options.textEmptyIndex) {
+ this._textEmptyIndex = options.textEmptyIndex;
+ }
- this._cachedSelected = [];
+ if (options.typeOfIndex) {
+ this._typeOfIndex = options.typeOfIndex;
+ }
- this._filteredCollection = this._collection.filter(filterOutGeneratedMangoDocs);
+ this._cachedSelected = [];
- function filterOutGeneratedMangoDocs (doc) {
- if (doc.get && typeof doc.get === 'function') {
- return doc.get('language') !== 'query';
- }
+ this._filteredCollection = this._collection.filter(filterOutGeneratedMangoDocs);
- return doc.language !== 'query';
+ function filterOutGeneratedMangoDocs (doc) {
+ if (doc.get && typeof doc.get === 'function') {
+ return doc.get('language') !== 'query';
}
- },
- getTypeOfIndex: function () {
- return this._typeOfIndex;
- },
+ return doc.language !== 'query';
+ }
+ },
- isEditable: function (doc) {
- if (!this._collection) {
- return false;
- }
+ getTypeOfIndex: function () {
+ return this._typeOfIndex;
+ },
- if (doc && this.isGhostDoc(doc)) {
- return false;
- }
+ isEditable: function (doc) {
+ if (!this._collection) {
+ return false;
+ }
- if (doc && !doc.get('_id')) {
- return false;
- }
+ if (doc && this.isGhostDoc(doc)) {
+ return false;
+ }
- if (!this._collection.isEditable) {
- return false;
- }
+ if (doc && !doc.get('_id')) {
+ return false;
+ }
- return this._collection.isEditable();
- },
+ if (!this._collection.isEditable) {
+ return false;
+ }
- isGhostDoc: function (doc) {
- // ghost docs are empty results where all properties were
- // filtered away by mango
- return !doc || !doc.attributes || !Object.keys(doc.attributes).length;
- },
+ return this._collection.isEditable();
+ },
- isDeletable: function (doc) {
- if (this.isGhostDoc(doc)) {
- return false;
- }
+ isGhostDoc: function (doc) {
+ // ghost docs are empty results where all properties were
+ // filtered away by mango
+ return !doc || !doc.attributes || !Object.keys(doc.attributes).length;
+ },
- return doc.isDeletable();
- },
+ isDeletable: function (doc) {
+ if (this.isGhostDoc(doc)) {
+ return false;
+ }
- getCollection: function () {
- return this._collection;
- },
+ return doc.isDeletable();
+ },
- getBulkDocCollection: function () {
- return this._bulkDeleteDocCollection;
- },
+ getCollection: function () {
+ return this._collection;
+ },
- getDocContent: function (originalDoc) {
- var doc = originalDoc.toJSON();
+ getBulkDocCollection: function () {
+ return this._bulkDeleteDocCollection;
+ },
- return JSON.stringify(doc, null, ' ');
- },
+ getDocContent: function (originalDoc) {
+ var doc = originalDoc.toJSON();
- getDocId: function (doc) {
+ return JSON.stringify(doc, null, ' ');
+ },
- if (!_.isUndefined(doc.id)) {
- return doc.id;
- }
+ getDocId: function (doc) {
- if (doc.get('key')) {
- return doc.get('key').toString();
- }
+ if (!_.isUndefined(doc.id)) {
+ return doc.id;
+ }
- return '';
- },
+ if (doc.get('key')) {
+ return doc.get('key').toString();
+ }
- getMangoDocContent: function (originalDoc) {
- var doc = originalDoc.toJSON();
+ return '';
+ },
- delete doc.ddoc;
- delete doc.name;
+ getMangoDocContent: function (originalDoc) {
+ var doc = originalDoc.toJSON();
- return JSON.stringify(doc, null, ' ');
- },
+ delete doc.ddoc;
+ delete doc.name;
- getMangoDoc: function (doc, index) {
- var selector,
- header;
+ return JSON.stringify(doc, null, ' ');
+ },
- if (doc.get('def') && doc.get('def').fields) {
+ getMangoDoc: function (doc, index) {
+ var selector,
+ header;
- header = MangoHelper.getIndexName(doc);
+ if (doc.get('def') && doc.get('def').fields) {
- return {
- content: this.getMangoDocContent(doc),
- header: header,
- id: doc.getId(),
- keylabel: '',
- url: doc.isFromView() ? doc.url('app') : doc.url('web-index'),
- isDeletable: this.isDeletable(doc),
- isEditable: this.isEditable(doc)
- };
- }
+ header = MangoHelper.getIndexName(doc);
- // we filtered away our content with the fields param
return {
- content: ' ',
+ content: this.getMangoDocContent(doc),
header: header,
- id: this.getDocId(doc) + index,
+ id: doc.getId(),
keylabel: '',
- url: this.isEditable(doc) ? doc.url('app') : null,
+ url: doc.isFromView() ? doc.url('app') : doc.url('web-index'),
isDeletable: this.isDeletable(doc),
isEditable: this.isEditable(doc)
};
- },
+ }
- getResults: function () {
- var hasBulkDeletableDoc;
- var res;
+ // we filtered away our content with the fields param
+ return {
+ content: ' ',
+ header: header,
+ id: this.getDocId(doc) + index,
+ keylabel: '',
+ url: this.isEditable(doc) ? doc.url('app') : null,
+ isDeletable: this.isDeletable(doc),
+ isEditable: this.isEditable(doc)
+ };
+ },
+
+ getResults: function () {
+ var hasBulkDeletableDoc;
+ var res;
+
+ // Table sytle view
+ if (this.getIsTableView()) {
+ return this.getTableViewData();
+ }
- // Table sytle view
- if (this.getIsTableView()) {
- return this.getTableViewData();
- }
+ // JSON style views
+ res = this._filteredCollection
+ .map(function (doc, i) {
+ if (doc.get('def') || this.isGhostDoc(doc)) {
+ return this.getMangoDoc(doc, i);
+ }
+ return {
+ content: this.getDocContent(doc),
+ id: this.getDocId(doc),
+ _rev: doc.get('_rev'),
+ header: this.getDocId(doc),
+ keylabel: doc.isFromView() ? 'key' : 'id',
+ url: this.getDocId(doc) ? doc.url('app') : null,
+ isDeletable: this.isDeletable(doc),
+ isEditable: this.isEditable(doc)
+ };
+ }, this);
- // JSON style views
- res = this._filteredCollection
- .map(function (doc, i) {
- if (doc.get('def') || this.isGhostDoc(doc)) {
- return this.getMangoDoc(doc, i);
- }
- return {
- content: this.getDocContent(doc),
- id: this.getDocId(doc),
- _rev: doc.get('_rev'),
- header: this.getDocId(doc),
- keylabel: doc.isFromView() ? 'key' : 'id',
- url: this.getDocId(doc) ? doc.url('app') : null,
- isDeletable: this.isDeletable(doc),
- isEditable: this.isEditable(doc)
- };
- }, this);
-
- hasBulkDeletableDoc = this.hasBulkDeletableDoc(this._filteredCollection);
+ hasBulkDeletableDoc = this.hasBulkDeletableDoc(this._filteredCollection);
- return {
- displayedFields: this.getDisplayCountForTableView(),
- hasBulkDeletableDoc: hasBulkDeletableDoc,
- results: res
- };
- },
+ return {
+ displayedFields: this.getDisplayCountForTableView(),
+ hasBulkDeletableDoc: hasBulkDeletableDoc,
+ results: res
+ };
+ },
- getPseudoSchema: function (data) {
- var cache = [];
+ getPseudoSchema: function (data) {
+ var cache = [];
- data.forEach(function (el) {
- Object.keys(el).forEach(function (k) {
- cache.push(k);
- });
+ data.forEach(function (el) {
+ Object.keys(el).forEach(function (k) {
+ cache.push(k);
});
+ });
- cache = _.uniq(cache);
+ cache = _.uniq(cache);
- // always begin with _id
- var i = cache.indexOf('_id');
- if (i !== -1) {
- cache.splice(i, 1);
- cache.unshift('_id');
- }
+ // always begin with _id
+ var i = cache.indexOf('_id');
+ if (i !== -1) {
+ cache.splice(i, 1);
+ cache.unshift('_id');
+ }
- return cache;
- },
+ return cache;
+ },
- normalizeTableData: function (data, isView) {
- // filter out cruft
- if (isView) {
- return data;
- }
+ normalizeTableData: function (data, isView) {
+ // filter out cruft
+ if (isView) {
+ return data;
+ }
- return data.map(function (el) {
- return el.doc || el;
- });
- },
+ return data.map(function (el) {
+ return el.doc || el;
+ });
+ },
- isIncludeDocsEnabled: function () {
- var params = app.getParams();
+ isIncludeDocsEnabled: function () {
+ var params = app.getParams();
- return !!params.include_docs;
- },
+ return !!params.include_docs;
+ },
- getPrioritizedFields: function (data, max) {
- var res = data.reduce(function (acc, el) {
- acc = acc.concat(Object.keys(el));
- return acc;
- }, []);
+ getPrioritizedFields: function (data, max) {
+ var res = data.reduce(function (acc, el) {
+ acc = acc.concat(Object.keys(el));
+ return acc;
+ }, []);
- res = _.countBy(res, function (el) {
- return el;
- });
+ res = _.countBy(res, function (el) {
+ return el;
+ });
- delete res._id;
- delete res.id;
- delete res._rev;
-
- res = Object.keys(res).reduce(function (acc, el) {
- acc.push([res[el], el]);
- return acc;
- }, []);
-
- res = this.sortByTwoFields(res);
- res = res.slice(0, max);
-
- return res.reduce(function (acc, el) {
- acc.push(el[1]);
- return acc;
- }, []);
- },
-
- sortByTwoFields: function (elements) {
- // given:
- // var a = [[2, "b"], [3, "z"], [1, "a"], [3, "a"]]
- // it sorts to:
- // [[3, "a"], [3, "z"], [2, "b"], [1, "a"]]
- // note that the arrays with 3 got the first two arrays
- // _and_ that the second values in the array with 3 are also sorted
-
- function _recursiveSort (a, b, index) {
- if (a[index] === b[index]) {
- return index < 2 ? _recursiveSort(a, b, index + 1) : 0;
- }
+ delete res._id;
+ delete res.id;
+ delete res._rev;
- // second elements asc
- if (index === 1) {
- return (a[index] < b[index]) ? -1 : 1;
- }
+ res = Object.keys(res).reduce(function (acc, el) {
+ acc.push([res[el], el]);
+ return acc;
+ }, []);
- // first elements desc
- return (a[index] < b[index]) ? 1 : -1;
+ res = this.sortByTwoFields(res);
+ res = res.slice(0, max);
+
+ return res.reduce(function (acc, el) {
+ acc.push(el[1]);
+ return acc;
+ }, []);
+ },
+
+ sortByTwoFields: function (elements) {
+ // given:
+ // var a = [[2, "b"], [3, "z"], [1, "a"], [3, "a"]]
+ // it sorts to:
+ // [[3, "a"], [3, "z"], [2, "b"], [1, "a"]]
+ // note that the arrays with 3 got the first two arrays
+ // _and_ that the second values in the array with 3 are also sorted
+
+ function _recursiveSort (a, b, index) {
+ if (a[index] === b[index]) {
+ return index < 2 ? _recursiveSort(a, b, index + 1) : 0;
}
- return elements.sort(function (a, b) {
- return _recursiveSort(a, b, 0);
- });
- },
+ // second elements asc
+ if (index === 1) {
+ return (a[index] < b[index]) ? -1 : 1;
+ }
- hasIdOrRev: function (schema) {
+ // first elements desc
+ return (a[index] < b[index]) ? 1 : -1;
+ }
- return schema.indexOf('_id') !== -1 ||
- schema.indexOf('id') !== -1 ||
- schema.indexOf('_rev') !== -1;
- },
+ return elements.sort(function (a, b) {
+ return _recursiveSort(a, b, 0);
+ });
+ },
- getNotSelectedFields: function (selectedFields, allFields) {
- var without = _.without.bind(this, allFields);
- return without.apply(this, selectedFields);
- },
+ hasIdOrRev: function (schema) {
- getDisplayCountForTableView: function () {
- var allFieldCount;
- var shownCount;
+ return schema.indexOf('_id') !== -1 ||
+ schema.indexOf('id') !== -1 ||
+ schema.indexOf('_rev') !== -1;
+ },
- if (!this.getIsTableView()) {
- return null;
- }
+ getNotSelectedFields: function (selectedFields, allFields) {
+ var without = _.without.bind(this, allFields);
+ return without.apply(this, selectedFields);
+ },
- if (!this.isIncludeDocsEnabled()) {
- return null;
- }
+ getDisplayCountForTableView: function () {
+ var allFieldCount;
+ var shownCount;
- shownCount = _.uniq(this._tableViewSelectedFields).length;
+ if (!this.getIsTableView()) {
+ return null;
+ }
- allFieldCount = this._tableSchema.length;
- if (_.contains(this._tableSchema, '_id', '_rev')) {
- allFieldCount = allFieldCount - 1;
- }
+ if (!this.isIncludeDocsEnabled()) {
+ return null;
+ }
- if (_.contains(this._tableSchema, '_id', '_rev')) {
- shownCount = shownCount + 1;
- }
+ shownCount = _.uniq(this._tableViewSelectedFields).length;
- return {shown: shownCount, allFieldCount: allFieldCount};
- },
-
- getTableViewData: function () {
- var res;
- var schema;
- var hasIdOrRev;
- var hasIdOrRev;
- var prioritizedFields;
- var hasBulkDeletableDoc;
- var database = this.getDatabase();
- var isView = !!this._collection.view;
-
- // softmigration remove backbone
- var data;
- var collectionType = this._collection.collectionType;
- data = this._filteredCollection.map(function (el) {
- return fixDocIdForMango(el.toJSON(), collectionType);
- });
+ allFieldCount = this._tableSchema.length;
+ if (_.contains(this._tableSchema, '_id', '_rev')) {
+ allFieldCount = allFieldCount - 1;
+ }
- function fixDocIdForMango (doc, docType) {
- if (docType !== 'MangoIndex') {
- return doc;
- }
+ if (_.contains(this._tableSchema, '_id', '_rev')) {
+ shownCount = shownCount + 1;
+ }
- doc.id = doc.ddoc;
+ return {shown: shownCount, allFieldCount: allFieldCount};
+ },
+
+ getTableViewData: function () {
+ var res;
+ var schema;
+ var hasIdOrRev;
+ var hasIdOrRev;
+ var prioritizedFields;
+ var hasBulkDeletableDoc;
+ var database = this.getDatabase();
+ var isView = !!this._collection.view;
+
+ // softmigration remove backbone
+ var data;
+ var collectionType = this._collection.collectionType;
+ data = this._filteredCollection.map(function (el) {
+ return fixDocIdForMango(el.toJSON(), collectionType);
+ });
+
+ function fixDocIdForMango (doc, docType) {
+ if (docType !== 'MangoIndex') {
return doc;
}
- function isJSONDocEditable (doc, docType) {
+ doc.id = doc.ddoc;
+ return doc;
+ }
- if (!doc) {
- return;
- }
+ function isJSONDocEditable (doc, docType) {
- if (docType === 'MangoIndex') {
- return false;
- }
+ if (!doc) {
+ return;
+ }
- if (!Object.keys(doc).length) {
- return false;
- }
+ if (docType === 'MangoIndex') {
+ return false;
+ }
- if (!doc._id) {
- return false;
- }
+ if (!Object.keys(doc).length) {
+ return false;
+ }
- return true;
+ if (!doc._id) {
+ return false;
}
- function isJSONDocBulkDeletable (doc, docType) {
- if (docType === 'MangoIndex') {
- return doc.type !== 'special';
- }
+ return true;
+ }
- return !!doc._id && !!doc._rev;
+ function isJSONDocBulkDeletable (doc, docType) {
+ if (docType === 'MangoIndex') {
+ return doc.type !== 'special';
}
- // softmigration end
+ return !!doc._id && !!doc._rev;
+ }
- var isIncludeDocsEnabled = this.isIncludeDocsEnabled();
- var notSelectedFields = null;
- if (isIncludeDocsEnabled) {
+ // softmigration end
- data = this.normalizeTableData(data, isView);
- schema = this.getPseudoSchema(data);
- hasIdOrRev = this.hasIdOrRev(schema);
+ var isIncludeDocsEnabled = this.isIncludeDocsEnabled();
+ var notSelectedFields = null;
+ if (isIncludeDocsEnabled) {
- if (!this._isPrioritizedEnabled) {
- this._tableViewSelectedFields = this._cachedSelected || [];
- }
-
- if (this._tableViewSelectedFields.length === 0) {
- prioritizedFields = this.getPrioritizedFields(data, hasIdOrRev ? 4 : 5);
- this._tableViewSelectedFields = prioritizedFields;
- this._cachedSelected = this._tableViewSelectedFields;
- }
+ data = this.normalizeTableData(data, isView);
+ schema = this.getPseudoSchema(data);
+ hasIdOrRev = this.hasIdOrRev(schema);
- var schemaWithoutMetaDataFields = _.without(schema, '_id', '_rev', '_attachment');
- notSelectedFields = this.getNotSelectedFields(this._tableViewSelectedFields, schemaWithoutMetaDataFields);
+ if (!this._isPrioritizedEnabled) {
+ this._tableViewSelectedFields = this._cachedSelected || [];
+ }
- if (this._isPrioritizedEnabled) {
- notSelectedFields = null;
- this._tableViewSelectedFields = schemaWithoutMetaDataFields;
- }
+ if (this._tableViewSelectedFields.length === 0) {
+ prioritizedFields = this.getPrioritizedFields(data, hasIdOrRev ? 4 : 5);
+ this._tableViewSelectedFields = prioritizedFields;
+ this._cachedSelected = this._tableViewSelectedFields;
+ }
+ var schemaWithoutMetaDataFields = _.without(schema, '_id', '_rev', '_attachment');
+ notSelectedFields = this.getNotSelectedFields(this._tableViewSelectedFields, schemaWithoutMetaDataFields);
- } else {
- schema = this.getPseudoSchema(data);
- this._tableViewSelectedFields = _.without(schema, '_id', '_rev', '_attachment');
+ if (this._isPrioritizedEnabled) {
+ notSelectedFields = null;
+ this._tableViewSelectedFields = schemaWithoutMetaDataFields;
}
- this._notSelectedFields = notSelectedFields;
- this._tableSchema = schema;
- var dbId = database.safeID();
+ } else {
+ schema = this.getPseudoSchema(data);
+ this._tableViewSelectedFields = _.without(schema, '_id', '_rev', '_attachment');
+ }
- res = data.map(function (doc) {
- var safeId = app.utils.getSafeIdForDoc(doc._id || doc.id); // inconsistent apis for GET between mango and views
- var url;
+ this._notSelectedFields = notSelectedFields;
+ this._tableSchema = schema;
- if (safeId) {
- url = FauxtonAPI.urls('document', 'app', dbId, safeId);
- }
+ var dbId = database.safeID();
- return {
- content: doc,
- id: doc._id || doc.id, // inconsistent apis for GET between mango and views
- _rev: doc._rev,
- header: '',
- keylabel: '',
- url: url,
- isDeletable: isJSONDocBulkDeletable(doc, collectionType),
- isEditable: isJSONDocEditable(doc, collectionType)
- };
- }.bind(this));
+ res = data.map(function (doc) {
+ var safeId = app.utils.getSafeIdForDoc(doc._id || doc.id); // inconsistent apis for GET between mango and views
+ var url;
- hasBulkDeletableDoc = this.hasBulkDeletableDoc(this._filteredCollection);
+ if (safeId) {
+ url = FauxtonAPI.urls('document', 'app', dbId, safeId);
+ }
return {
- notSelectedFields: notSelectedFields,
- hasMetadata: this.getHasMetadata(schema),
- selectedFields: this._tableViewSelectedFields,
- hasBulkDeletableDoc: hasBulkDeletableDoc,
- schema: schema,
- results: res,
- displayedFields: this.getDisplayCountForTableView(),
+ content: doc,
+ id: doc._id || doc.id, // inconsistent apis for GET between mango and views
+ _rev: doc._rev,
+ header: '',
+ keylabel: '',
+ url: url,
+ isDeletable: isJSONDocBulkDeletable(doc, collectionType),
+ isEditable: isJSONDocEditable(doc, collectionType)
};
- },
-
- changeTableViewFields: function (options) {
- var newSelectedRow = options.newSelectedRow;
- var i = options.index;
+ }.bind(this));
+
+ hasBulkDeletableDoc = this.hasBulkDeletableDoc(this._filteredCollection);
+
+ return {
+ notSelectedFields: notSelectedFields,
+ hasMetadata: this.getHasMetadata(schema),
+ selectedFields: this._tableViewSelectedFields,
+ hasBulkDeletableDoc: hasBulkDeletableDoc,
+ schema: schema,
+ results: res,
+ displayedFields: this.getDisplayCountForTableView(),
+ };
+ },
+
+ changeTableViewFields: function (options) {
+ var newSelectedRow = options.newSelectedRow;
+ var i = options.index;
+
+ this._tableViewSelectedFields[i] = newSelectedRow;
+ },
+
+ getHasMetadata: function (schema) {
+ return _.contains(schema, '_id', '_rev');
+ },
+
+ hasBulkDeletableDoc: function (docs) {
+ var found = false;
+ var length = docs.length;
+ var i;
+
+ // use a for loop here as we can end it once we found the first id
+ for (i = 0; i < length; i++) {
+ if (docs[i].isBulkDeletable()) {
+ found = true;
+ break;
+ }
+ }
- this._tableViewSelectedFields[i] = newSelectedRow;
- },
+ return found;
+ },
- getHasMetadata: function (schema) {
- return _.contains(schema, '_id', '_rev');
- },
+ hasResults: function () {
+ if (this.isLoading()) { return this.isLoading(); }
+ return this._collection.length > 0;
+ },
- hasBulkDeletableDoc: function (docs) {
- var found = false;
- var length = docs.length;
- var i;
+ isLoading: function () {
+ return this._isLoading;
+ },
- // use a for loop here as we can end it once we found the first id
- for (i = 0; i < length; i++) {
- if (docs[i].isBulkDeletable()) {
- found = true;
- break;
- }
- }
+ selectDoc: function (doc, noReset) {
- return found;
- },
+ if (!doc._id || doc._id === '_all_docs') {
+ return;
+ }
- hasResults: function () {
- if (this.isLoading()) { return this.isLoading(); }
- return this._collection.length > 0;
- },
+ if (!this._bulkDeleteDocCollection.get(doc._id)) {
+ this._bulkDeleteDocCollection.add(doc);
+ return;
+ }
- isLoading: function () {
- return this._isLoading;
- },
+ this._bulkDeleteDocCollection.remove(doc._id);
+ },
- selectDoc: function (doc, noReset) {
+ selectAllDocuments: function () {
+ this.deSelectCurrentCollection();
- if (!doc._id || doc._id === '_all_docs') {
- return;
- }
+ this._collection.each(function (doc) {
- if (!this._bulkDeleteDocCollection.get(doc._id)) {
- this._bulkDeleteDocCollection.add(doc);
+ if (!doc.isBulkDeletable()) {
return;
}
- this._bulkDeleteDocCollection.remove(doc._id);
- },
-
- selectAllDocuments: function () {
- this.deSelectCurrentCollection();
-
- this._collection.each(function (doc) {
-
- if (!doc.isBulkDeletable()) {
- return;
- }
-
- this.selectDoc({
- _id: doc.id,
- _rev: doc.get('_rev'),
- _deleted: true
- });
- }, this);
-
- },
-
- deSelectCurrentCollection: function () {
- this._collection.each(function (doc) {
-
- if (!doc.isBulkDeletable()) {
- return;
- }
-
- this._bulkDeleteDocCollection.remove(doc.id);
- }, this);
- },
-
- toggleSelectAllDocuments: function () {
- if (this.areAllDocumentsSelected()) {
- return this.deSelectCurrentCollection();
- }
+ this.selectDoc({
+ _id: doc.id,
+ _rev: doc.get('_rev'),
+ _deleted: true
+ });
+ }, this);
- return this.selectAllDocuments();
- },
+ },
- togglePrioritizedTableView: function () {
- this._isPrioritizedEnabled = !this._isPrioritizedEnabled;
- },
+ deSelectCurrentCollection: function () {
+ this._collection.each(function (doc) {
- areAllDocumentsSelected: function () {
- if (this._collection.length === 0) {
- return false;
+ if (!doc.isBulkDeletable()) {
+ return;
}
- var foundAllOnThisPage = true;
-
- var selected = this._bulkDeleteDocCollection.pluck('_id');
+ this._bulkDeleteDocCollection.remove(doc.id);
+ }, this);
+ },
- this._collection.forEach(function (doc) {
- if (!doc.isBulkDeletable()) {
- return;
- }
-
- if (!_.contains(selected, doc.id)) {
- foundAllOnThisPage = false;
- }
- }.bind(this));
-
- return foundAllOnThisPage;
- },
+ toggleSelectAllDocuments: function () {
+ if (this.areAllDocumentsSelected()) {
+ return this.deSelectCurrentCollection();
+ }
- getSelectedItemsLength: function () {
- return this._bulkDeleteDocCollection.length;
- },
+ return this.selectAllDocuments();
+ },
- getDatabase: function () {
- return this._collection.database;
- },
+ togglePrioritizedTableView: function () {
+ this._isPrioritizedEnabled = !this._isPrioritizedEnabled;
+ },
- getTextEmptyIndex: function () {
- return this._textEmptyIndex;
- },
+ areAllDocumentsSelected: function () {
+ if (this._collection.length === 0) {
+ return false;
+ }
- hasSelectedItem: function () {
- return this.getSelectedItemsLength() > 0;
- },
+ var foundAllOnThisPage = true;
- toggleTableView: function (options) {
- var enableTableView = options.enable;
+ var selected = this._bulkDeleteDocCollection.pluck('_id');
- if (enableTableView) {
- this._tableView = true;
+ this._collection.forEach(function (doc) {
+ if (!doc.isBulkDeletable()) {
return;
}
- this._tableView = false;
- },
+ if (!_.contains(selected, doc.id)) {
+ foundAllOnThisPage = false;
+ }
+ }.bind(this));
- getIsTableView: function () {
- return this._tableView;
- },
+ return foundAllOnThisPage;
+ },
- getIsPrioritizedEnabled: function () {
- return this._isPrioritizedEnabled;
- },
+ getSelectedItemsLength: function () {
+ return this._bulkDeleteDocCollection.length;
+ },
- getCurrentViewType: function () {
+ getDatabase: function () {
+ return this._collection.database;
+ },
- if (this._tableView) {
- return 'table';
- }
+ getTextEmptyIndex: function () {
+ return this._textEmptyIndex;
+ },
- return 'expanded';
- },
+ hasSelectedItem: function () {
+ return this.getSelectedItemsLength() > 0;
+ },
- getShowPrioritizedFieldToggler: function () {
- return this.isIncludeDocsEnabled() && this.getIsTableView();
- },
+ toggleTableView: function (options) {
+ var enableTableView = options.enable;
- clearResultsBeforeFetch: function () {
- if (this._collection && this._collection.reset) {
- this._collection.reset();
- }
- this._isLoading = true;
- },
+ if (enableTableView) {
+ this._tableView = true;
+ return;
+ }
- resultsResetFromFetch: function () {
- this._isLoading = false;
- },
+ this._tableView = false;
+ },
- dispatch: function (action) {
- switch (action.type) {
- case ActionTypes.INDEX_RESULTS_NEW_RESULTS:
- this.newResults(action.options);
- break;
- case ActionTypes.INDEX_RESULTS_RESET:
- this.resultsResetFromFetch();
- break;
- case ActionTypes.INDEX_RESULTS_SELECT_DOC:
- this.selectDoc(action.options);
- break;
- case ActionTypes.INDEX_RESULTS_CLEAR_RESULTS:
- this.clearResultsBeforeFetch();
- break;
- case ActionTypes.INDEX_RESULTS_TOOGLE_SELECT_ALL_DOCUMENTS:
- this.toggleSelectAllDocuments();
- break;
- case ActionTypes.INDEX_RESULTS_SELECT_NEW_FIELD_IN_TABLE:
- this.changeTableViewFields(action.options);
- break;
- case ActionTypes.INDEX_RESULTS_TOGGLE_PRIORITIZED_TABLE_VIEW:
- this.togglePrioritizedTableView();
- break;
-
- case HeaderActionTypes.TOGGLE_TABLEVIEW:
- this.toggleTableView(action.options);
- break;
+ getIsTableView: function () {
+ return this._tableView;
+ },
- case PaginationActionTypes.SET_PAGINATION_DOCUMENT_LIMIT:
- this.setDocumentLimit(action.docLimit);
- break;
- case PaginationActionTypes.PAGINATE_NEXT:
- this.paginateNext();
- break;
- case PaginationActionTypes.PAGINATE_PREVIOUS:
- this.paginatePrevious();
- break;
- case PaginationActionTypes.PER_PAGE_CHANGE:
- this.resetPagination();
- this.setPerPage(action.perPage);
- break;
+ getIsPrioritizedEnabled: function () {
+ return this._isPrioritizedEnabled;
+ },
- default:
- return;
- // do nothing
- }
+ getCurrentViewType: function () {
- this.triggerChange();
+ if (this._tableView) {
+ return 'table';
}
- });
+ return 'expanded';
+ },
- Stores.indexResultsStore = new Stores.IndexResultsStore();
+ getShowPrioritizedFieldToggler: function () {
+ return this.isIncludeDocsEnabled() && this.getIsTableView();
+ },
- Stores.indexResultsStore.dispatchToken = FauxtonAPI.dispatcher.register(Stores.indexResultsStore.dispatch);
+ clearResultsBeforeFetch: function () {
+ if (this._collection && this._collection.reset) {
+ this._collection.reset();
+ }
+ this._isLoading = true;
+ },
+
+ resultsResetFromFetch: function () {
+ this._isLoading = false;
+ },
+
+ dispatch: function (action) {
+ switch (action.type) {
+ case ActionTypes.INDEX_RESULTS_NEW_RESULTS:
+ this.newResults(action.options);
+ break;
+ case ActionTypes.INDEX_RESULTS_RESET:
+ this.resultsResetFromFetch();
+ break;
+ case ActionTypes.INDEX_RESULTS_SELECT_DOC:
+ this.selectDoc(action.options);
+ break;
+ case ActionTypes.INDEX_RESULTS_CLEAR_RESULTS:
+ this.clearResultsBeforeFetch();
+ break;
+ case ActionTypes.INDEX_RESULTS_TOOGLE_SELECT_ALL_DOCUMENTS:
+ this.toggleSelectAllDocuments();
+ break;
+ case ActionTypes.INDEX_RESULTS_SELECT_NEW_FIELD_IN_TABLE:
+ this.changeTableViewFields(action.options);
+ break;
+ case ActionTypes.INDEX_RESULTS_TOGGLE_PRIORITIZED_TABLE_VIEW:
+ this.togglePrioritizedTableView();
+ break;
+
+ case HeaderActionTypes.TOGGLE_TABLEVIEW:
+ this.toggleTableView(action.options);
+ break;
+
+ case PaginationActionTypes.SET_PAGINATION_DOCUMENT_LIMIT:
+ this.setDocumentLimit(action.docLimit);
+ break;
+ case PaginationActionTypes.PAGINATE_NEXT:
+ this.paginateNext();
+ break;
+ case PaginationActionTypes.PAGINATE_PREVIOUS:
+ this.paginatePrevious();
+ break;
+ case PaginationActionTypes.PER_PAGE_CHANGE:
+ this.resetPagination();
+ this.setPerPage(action.perPage);
+ break;
+
+ default:
+ return;
+ // do nothing
+ }
- return Stores;
+ this.triggerChange();
+ }
});
+
+Stores.indexResultsStore = new Stores.IndexResultsStore();
+
+Stores.indexResultsStore.dispatchToken = FauxtonAPI.dispatcher.register(Stores.indexResultsStore.dispatch);
+
+export default Stores;
http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/0ca35da7/app/addons/documents/index-results/tests/index-results.actionsSpec.js
----------------------------------------------------------------------
diff --git a/app/addons/documents/index-results/tests/index-results.actionsSpec.js b/app/addons/documents/index-results/tests/index-results.actionsSpec.js
index f4ee3b1..dd64acf 100644
--- a/app/addons/documents/index-results/tests/index-results.actionsSpec.js
+++ b/app/addons/documents/index-results/tests/index-results.actionsSpec.js
@@ -10,93 +10,89 @@
// License for the specific language governing permissions and limitations under
// the License.
-define([
- '../../../../core/api',
- '../actions',
- '../stores',
- '../../resources',
- '../../sidebar/actions',
- '../../../../../test/mocha/testUtils',
- '../../tests/document-test-helper',
-
-], function (FauxtonAPI, Actions, Stores, Documents, SidebarActions, testUtils, documentTestHelper) {
- var assert = testUtils.assert;
- var restore = testUtils.restore;
- var store;
-
- var createDocColumn = documentTestHelper.createDocColumn;
-
- describe('#deleteSelected', function () {
- var confirmStub;
- var bulkDeleteCollection;
-
- beforeEach(function () {
- Stores.indexResultsStore = new Stores.IndexResultsStore();
- Stores.indexResultsStore.dispatchToken = FauxtonAPI.dispatcher.register(Stores.indexResultsStore.dispatch);
- store = Stores.indexResultsStore;
- store.reset();
-
- bulkDeleteCollection = new Documents.BulkDeleteDocCollection([], {databaseId: '1'});
- store._bulkDeleteDocCollection = bulkDeleteCollection;
- store._collection = createDocColumn([{_id: 'testId1'}, {_id: 'testId2'}]);
-
- store._selectedItems = {
- 'testId1': true,
- 'testId2': true
- };
-
- confirmStub = sinon.stub(window, 'confirm');
- confirmStub.returns(true);
-
- });
-
- afterEach(function () {
- restore(window.confirm);
- restore(FauxtonAPI.addNotification);
- restore(Actions.reloadResultsList);
- restore(SidebarActions.refresh);
- restore(Actions.newResultsList);
- });
-
- it('doesn\'t delete if user denies confirmation', function () {
- window.confirm.restore();
-
- var stub = sinon.stub(window, 'confirm');
- stub.returns(false);
-
- var spy = sinon.spy(bulkDeleteCollection, 'bulkDelete');
-
- Actions.deleteSelected(bulkDeleteCollection, 1);
-
- assert.notOk(spy.calledOnce);
- });
-
- it('on success notifies all deleted', function (done) {
- var spy = sinon.spy(FauxtonAPI, 'addNotification');
- var sidebarSpy = sinon.spy(SidebarActions, 'refresh');
- var promise = FauxtonAPI.Deferred();
- var ids = {
- errorIds: []
- };
- var bulkDelete = {
- bulkDelete: function () {
- promise.resolve(ids);
- return promise;
- },
- reset: function () {
- done();
- }
- };
-
- var reloadResultsListStub = sinon.stub(Actions, 'reloadResultsList');
- var stubPromise = FauxtonAPI.Deferred();
- stubPromise.resolve();
- reloadResultsListStub.returns(stubPromise);
-
- Actions.deleteSelected(bulkDelete, 1);
-
- assert.ok(spy.calledOnce);
- assert.ok(sidebarSpy.calledOnce);
- });
+import FauxtonAPI from "../../../../core/api";
+import Actions from "../actions";
+import Stores from "../stores";
+import Documents from "../../resources";
+import SidebarActions from "../../sidebar/actions";
+import testUtils from "../../../../../test/mocha/testUtils";
+import documentTestHelper from "../../tests/document-test-helper";
+var assert = testUtils.assert;
+var restore = testUtils.restore;
+var store;
+
+var createDocColumn = documentTestHelper.createDocColumn;
+
+describe('#deleteSelected', function () {
+ var confirmStub;
+ var bulkDeleteCollection;
+
+ beforeEach(function () {
+ Stores.indexResultsStore = new Stores.IndexResultsStore();
+ Stores.indexResultsStore.dispatchToken = FauxtonAPI.dispatcher.register(Stores.indexResultsStore.dispatch);
+ store = Stores.indexResultsStore;
+ store.reset();
+
+ bulkDeleteCollection = new Documents.BulkDeleteDocCollection([], {databaseId: '1'});
+ store._bulkDeleteDocCollection = bulkDeleteCollection;
+ store._collection = createDocColumn([{_id: 'testId1'}, {_id: 'testId2'}]);
+
+ store._selectedItems = {
+ 'testId1': true,
+ 'testId2': true
+ };
+
+ confirmStub = sinon.stub(window, 'confirm');
+ confirmStub.returns(true);
+
+ });
+
+ afterEach(function () {
+ restore(window.confirm);
+ restore(FauxtonAPI.addNotification);
+ restore(Actions.reloadResultsList);
+ restore(SidebarActions.refresh);
+ restore(Actions.newResultsList);
+ });
+
+ it('doesn\'t delete if user denies confirmation', function () {
+ window.confirm.restore();
+
+ var stub = sinon.stub(window, 'confirm');
+ stub.returns(false);
+
+ var spy = sinon.spy(bulkDeleteCollection, 'bulkDelete');
+
+ Actions.deleteSelected(bulkDeleteCollection, 1);
+
+ assert.notOk(spy.calledOnce);
+ });
+
+ it('on success notifies all deleted', function (done) {
+ var spy = sinon.spy(FauxtonAPI, 'addNotification');
+ var sidebarSpy = sinon.spy(SidebarActions, 'refresh');
+ var promise = FauxtonAPI.Deferred();
+ var ids = {
+ errorIds: []
+ };
+ var bulkDelete = {
+ bulkDelete: function () {
+ promise.resolve(ids);
+ return promise;
+ },
+ reset: function () {
+ done();
+ }
+ };
+
+ var reloadResultsListStub = sinon.stub(Actions, 'reloadResultsList');
+ var stubPromise = FauxtonAPI.Deferred();
+ stubPromise.resolve();
+ reloadResultsListStub.returns(stubPromise);
+
+ Actions.deleteSelected(bulkDelete, 1);
+
+ assert.ok(spy.calledOnce);
+ assert.ok(sidebarSpy.calledOnce);
});
});
http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/0ca35da7/app/addons/documents/index-results/tests/index-results.componentsSpec.react.jsx
----------------------------------------------------------------------
diff --git a/app/addons/documents/index-results/tests/index-results.componentsSpec.react.jsx b/app/addons/documents/index-results/tests/index-results.componentsSpec.react.jsx
index 3092d62..11bf3a3 100644
--- a/app/addons/documents/index-results/tests/index-results.componentsSpec.react.jsx
+++ b/app/addons/documents/index-results/tests/index-results.componentsSpec.react.jsx
@@ -9,325 +9,322 @@
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
-define([
- '../../../../core/api',
- '../index-results.components.react',
- '../actions',
- '../stores',
- '../../resources',
- '../../../databases/resources',
- '../../tests/document-test-helper',
- '../../../../../test/mocha/testUtils',
- "react",
- 'react-dom',
- 'react-addons-test-utils',
- 'sinon'
-], function (FauxtonAPI, Views, IndexResultsActions, Stores, Documents, Databases, documentTestHelper, utils, React, ReactDOM, TestUtils,
- sinon) {
- FauxtonAPI.router = new FauxtonAPI.Router([]);
-
- var assert = utils.assert;
- var store = Stores.indexResultsStore;
- var createDocColumn = documentTestHelper.createDocColumn;
- var createMangoIndexDocColumn = documentTestHelper.createMangoIndexDocColumn;
-
- describe('Index Results', function () {
- var container, instance;
-
- describe('no results text', function () {
- beforeEach(function () {
- container = document.createElement('div');
- store.reset();
- });
+import FauxtonAPI from "../../../../core/api";
+import Views from "../index-results.components.react";
+import IndexResultsActions from "../actions";
+import Stores from "../stores";
+import Documents from "../../resources";
+import Databases from "../../../databases/resources";
+import documentTestHelper from "../../tests/document-test-helper";
+import utils from "../../../../../test/mocha/testUtils";
+import React from "react";
+import ReactDOM from "react-dom";
+import TestUtils from "react-addons-test-utils";
+import sinon from "sinon";
+
+FauxtonAPI.router = new FauxtonAPI.Router([]);
+
+var assert = utils.assert;
+var store = Stores.indexResultsStore;
+var createDocColumn = documentTestHelper.createDocColumn;
+var createMangoIndexDocColumn = documentTestHelper.createMangoIndexDocColumn;
+
+describe('Index Results', function () {
+ var container, instance;
+
+ describe('no results text', function () {
+ beforeEach(function () {
+ container = document.createElement('div');
+ store.reset();
+ });
+
+ afterEach(function () {
+ ReactDOM.unmountComponentAtNode(ReactDOM.findDOMNode(instance).parentNode);
+ store.reset();
+ });
- afterEach(function () {
- ReactDOM.unmountComponentAtNode(ReactDOM.findDOMNode(instance).parentNode);
- store.reset();
+ it('renders a default text', function () {
+ IndexResultsActions.newResultsList({
+ collection: [],
+ bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
});
+ IndexResultsActions.resultsListReset();
- it('renders a default text', function () {
- IndexResultsActions.newResultsList({
- collection: [],
- bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
- });
- IndexResultsActions.resultsListReset();
+ instance = TestUtils.renderIntoDocument(<Views.List />, container);
+ var $el = $(ReactDOM.findDOMNode(instance));
+ assert.equal($el.text(), 'No Documents Found');
+ });
- instance = TestUtils.renderIntoDocument(<Views.List />, container);
- var $el = $(ReactDOM.findDOMNode(instance));
- assert.equal($el.text(), 'No Documents Found');
+ it('you can change the default text', function () {
+ IndexResultsActions.newResultsList({
+ collection: {
+ forEach: function () {},
+ filter: function () { return []; },
+ fetch: function () {
+ return {
+ then: function (cb) {
+ cb();
+ }
+ };
+ }
+ },
+ bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
+ textEmptyIndex: 'I <3 Hamburg'
});
- it('you can change the default text', function () {
- IndexResultsActions.newResultsList({
- collection: {
- forEach: function () {},
- filter: function () { return []; },
- fetch: function () {
- return {
- then: function (cb) {
- cb();
- }
- };
- }
- },
- bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
- textEmptyIndex: 'I <3 Hamburg'
- });
-
-
- instance = TestUtils.renderIntoDocument(<Views.List />, container);
- var $el = $(ReactDOM.findDOMNode(instance));
- assert.equal($el.text(), 'I <3 Hamburg');
- });
+
+ instance = TestUtils.renderIntoDocument(<Views.List />, container);
+ var $el = $(ReactDOM.findDOMNode(instance));
+ assert.equal($el.text(), 'I <3 Hamburg');
});
+ });
- describe('checkbox rendering', function () {
- var opts = {
- params: {},
- database: {
- safeID: function () { return '1';}
- }
- };
-
- beforeEach(function () {
- container = document.createElement('div');
- store.reset();
- });
+ describe('checkbox rendering', function () {
+ var opts = {
+ params: {},
+ database: {
+ safeID: function () { return '1';}
+ }
+ };
+
+ beforeEach(function () {
+ container = document.createElement('div');
+ store.reset();
+ });
- afterEach(function () {
- ReactDOM.unmountComponentAtNode(ReactDOM.findDOMNode(instance).parentNode);
- store.reset();
+ afterEach(function () {
+ ReactDOM.unmountComponentAtNode(ReactDOM.findDOMNode(instance).parentNode);
+ store.reset();
+ });
+
+ it('does not render checkboxes for elements with just the special index (Mango Index List)', function () {
+ IndexResultsActions.sendMessageNewResultList({
+ collection: createMangoIndexDocColumn([{foo: 'testId1', type: 'special'}]),
+ bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
});
- it('does not render checkboxes for elements with just the special index (Mango Index List)', function () {
- IndexResultsActions.sendMessageNewResultList({
- collection: createMangoIndexDocColumn([{foo: 'testId1', type: 'special'}]),
- bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
- });
+ store.toggleTableView({enable: true});
- store.toggleTableView({enable: true});
+ IndexResultsActions.resultsListReset();
- IndexResultsActions.resultsListReset();
+ instance = TestUtils.renderIntoDocument(
+ <Views.List />,
+ container
+ );
- instance = TestUtils.renderIntoDocument(
- <Views.List />,
- container
- );
+ var $el = $(ReactDOM.findDOMNode(instance));
- var $el = $(ReactDOM.findDOMNode(instance));
+ assert.ok($el.find('.tableview-checkbox-cell input').length === 0);
+ });
- assert.ok($el.find('.tableview-checkbox-cell input').length === 0);
+ it('renders checkboxes for elements with more than just the the special index (Mango Index List)', function () {
+ IndexResultsActions.sendMessageNewResultList({
+ collection: createMangoIndexDocColumn([{
+ ddoc: null,
+ name: 'biene',
+ type: 'json',
+ def: {fields: [{_id: 'desc'}]}
+ },
+ {
+ ddoc: null,
+ name: 'biene',
+ type: 'special',
+ def: {fields: [{_id: 'desc'}]}
+ }]),
+ bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
});
- it('renders checkboxes for elements with more than just the the special index (Mango Index List)', function () {
- IndexResultsActions.sendMessageNewResultList({
- collection: createMangoIndexDocColumn([{
- ddoc: null,
- name: 'biene',
- type: 'json',
- def: {fields: [{_id: 'desc'}]}
- },
- {
- ddoc: null,
- name: 'biene',
- type: 'special',
- def: {fields: [{_id: 'desc'}]}
- }]),
- bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
- });
-
- store.toggleTableView({enable: true});
-
- IndexResultsActions.resultsListReset();
-
- instance = TestUtils.renderIntoDocument(
- <Views.List />,
- container
- );
-
- var $el = $(ReactDOM.findDOMNode(instance));
-
- assert.ok($el.find('.tableview-checkbox-cell input').length > 0);
+ store.toggleTableView({enable: true});
+
+ IndexResultsActions.resultsListReset();
+
+ instance = TestUtils.renderIntoDocument(
+ <Views.List />,
+ container
+ );
+
+ var $el = $(ReactDOM.findDOMNode(instance));
+
+ assert.ok($el.find('.tableview-checkbox-cell input').length > 0);
+ });
+
+ it('does not render checkboxes for elements with no id in a table (usual docs)', function () {
+ IndexResultsActions.sendMessageNewResultList({
+ collection: createDocColumn([{
+ ddoc: null,
+ name: 'biene',
+ type: 'special',
+ def: {fields: [{_id: 'desc'}]}
+ }]),
+ bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
});
- it('does not render checkboxes for elements with no id in a table (usual docs)', function () {
- IndexResultsActions.sendMessageNewResultList({
- collection: createDocColumn([{
- ddoc: null,
- name: 'biene',
- type: 'special',
- def: {fields: [{_id: 'desc'}]}
- }]),
- bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
- });
+ store.toggleTableView({enable: true});
- store.toggleTableView({enable: true});
+ IndexResultsActions.resultsListReset();
- IndexResultsActions.resultsListReset();
+ instance = TestUtils.renderIntoDocument(
+ <Views.List />,
+ container
+ );
- instance = TestUtils.renderIntoDocument(
- <Views.List />,
- container
- );
+ var $el = $(ReactDOM.findDOMNode(instance));
- var $el = $(ReactDOM.findDOMNode(instance));
+ assert.ok($el.find('.tableview-checkbox-cell input').length === 0);
+ });
- assert.ok($el.find('.tableview-checkbox-cell input').length === 0);
+ it('does not render checkboxes for elements with no rev in a table (usual docs)', function () {
+ IndexResultsActions.sendMessageNewResultList({
+ collection: createDocColumn([{id: '1', foo: 'testId1'}, {id: '1', bar: 'testId1'}]),
+ bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
});
- it('does not render checkboxes for elements with no rev in a table (usual docs)', function () {
- IndexResultsActions.sendMessageNewResultList({
- collection: createDocColumn([{id: '1', foo: 'testId1'}, {id: '1', bar: 'testId1'}]),
- bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
- });
+ store.toggleTableView({enable: true});
- store.toggleTableView({enable: true});
+ IndexResultsActions.resultsListReset();
- IndexResultsActions.resultsListReset();
+ instance = TestUtils.renderIntoDocument(
+ <Views.List />,
+ container
+ );
- instance = TestUtils.renderIntoDocument(
- <Views.List />,
- container
- );
+ var $el = $(ReactDOM.findDOMNode(instance));
- var $el = $(ReactDOM.findDOMNode(instance));
+ assert.ok($el.find('.tableview-checkbox-cell input').length === 0);
+ });
- assert.ok($el.find('.tableview-checkbox-cell input').length === 0);
+ it('renders checkboxes for elements with an id and rev in a table (usual docs)', function () {
+ IndexResultsActions.sendMessageNewResultList({
+ collection: createDocColumn([{id: '1', foo: 'testId1', rev: 'foo'}, {bar: 'testId1', rev: 'foo'}]),
+ bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
});
- it('renders checkboxes for elements with an id and rev in a table (usual docs)', function () {
- IndexResultsActions.sendMessageNewResultList({
- collection: createDocColumn([{id: '1', foo: 'testId1', rev: 'foo'}, {bar: 'testId1', rev: 'foo'}]),
- bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
- });
+ store.toggleTableView({enable: true});
- store.toggleTableView({enable: true});
+ IndexResultsActions.resultsListReset();
- IndexResultsActions.resultsListReset();
+ instance = TestUtils.renderIntoDocument(
+ <Views.List />,
+ container
+ );
- instance = TestUtils.renderIntoDocument(
- <Views.List />,
- container
- );
+ var $el = $(ReactDOM.findDOMNode(instance));
- var $el = $(ReactDOM.findDOMNode(instance));
+ assert.ok($el.find('.tableview-checkbox-cell input').length > 0);
+ });
- assert.ok($el.find('.tableview-checkbox-cell input').length > 0);
+ it('renders checkboxes for elements with an id and rev in a json view (usual docs)', function () {
+ IndexResultsActions.sendMessageNewResultList({
+ collection: createDocColumn([{id: '1', emma: 'testId1', rev: 'foo'}, {bar: 'testId1'}]),
+ bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
});
- it('renders checkboxes for elements with an id and rev in a json view (usual docs)', function () {
- IndexResultsActions.sendMessageNewResultList({
- collection: createDocColumn([{id: '1', emma: 'testId1', rev: 'foo'}, {bar: 'testId1'}]),
- bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
- });
+ IndexResultsActions.resultsListReset();
- IndexResultsActions.resultsListReset();
+ store.toggleTableView({enable: false});
- store.toggleTableView({enable: false});
+ instance = TestUtils.renderIntoDocument(
+ <Views.List />,
+ container
+ );
- instance = TestUtils.renderIntoDocument(
- <Views.List />,
- container
- );
+ var $el = $(ReactDOM.findDOMNode(instance));
+ assert.ok($el.find('.js-row-select').length > 0);
+ });
- var $el = $(ReactDOM.findDOMNode(instance));
- assert.ok($el.find('.js-row-select').length > 0);
+ it('does not render checkboxes for elements with that are not deletable in a json view (usual docs)', function () {
+ IndexResultsActions.sendMessageNewResultList({
+ collection: createDocColumn([{foo: 'testId1', rev: 'foo'}, {bar: 'testId1'}]),
+ bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
});
- it('does not render checkboxes for elements with that are not deletable in a json view (usual docs)', function () {
- IndexResultsActions.sendMessageNewResultList({
- collection: createDocColumn([{foo: 'testId1', rev: 'foo'}, {bar: 'testId1'}]),
- bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
- });
+ IndexResultsActions.resultsListReset();
- IndexResultsActions.resultsListReset();
+ store.toggleTableView({enable: false});
- store.toggleTableView({enable: false});
+ instance = TestUtils.renderIntoDocument(
+ <Views.List />,
+ container
+ );
- instance = TestUtils.renderIntoDocument(
- <Views.List />,
- container
- );
+ var $el = $(ReactDOM.findDOMNode(instance));
- var $el = $(ReactDOM.findDOMNode(instance));
+ assert.notOk($el.hasClass('show-select'));
+ });
- assert.notOk($el.hasClass('show-select'));
- });
+ });
+ describe('cellcontent', function () {
+ beforeEach(function () {
+ container = document.createElement('div');
+ store.reset();
});
- describe('cellcontent', function () {
- beforeEach(function () {
- container = document.createElement('div');
- store.reset();
- });
+ afterEach(function () {
+ ReactDOM.unmountComponentAtNode(ReactDOM.findDOMNode(instance).parentNode);
+ store.reset();
+ });
- afterEach(function () {
- ReactDOM.unmountComponentAtNode(ReactDOM.findDOMNode(instance).parentNode);
- store.reset();
- });
+ it('formats title elements for better readability', function () {
+ var doc = {object: {a: 1, foo: [1, 2, 3]}};
- it('formats title elements for better readability', function () {
- var doc = {object: {a: 1, foo: [1, 2, 3]}};
+ IndexResultsActions.sendMessageNewResultList({
+ collection: createDocColumn([doc]),
+ bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
+ });
- IndexResultsActions.sendMessageNewResultList({
- collection: createDocColumn([doc]),
- bulkCollection: new Documents.BulkDeleteDocCollection([], {databaseId: '1'}),
- });
+ store.toggleTableView({enable: true});
- store.toggleTableView({enable: true});
+ IndexResultsActions.resultsListReset();
- IndexResultsActions.resultsListReset();
+ instance = TestUtils.renderIntoDocument(
+ <Views.List />,
+ container
+ );
- instance = TestUtils.renderIntoDocument(
- <Views.List />,
- container
- );
+ var $el = $(ReactDOM.findDOMNode(instance));
+ var $targetNode = $el.find('td.tableview-el-last').prev();
- var $el = $(ReactDOM.findDOMNode(instance));
- var $targetNode = $el.find('td.tableview-el-last').prev();
+ var formattedDoc = JSON.stringify(doc.object, null, ' ');
+ assert.equal($targetNode.attr('title'), formattedDoc);
+ });
- var formattedDoc = JSON.stringify(doc.object, null, ' ');
- assert.equal($targetNode.attr('title'), formattedDoc);
- });
+ });
+ describe('loading', function () {
+ beforeEach(function () {
+ container = document.createElement('div');
+ store.reset();
});
- describe('loading', function () {
- beforeEach(function () {
- container = document.createElement('div');
- store.reset();
- });
-
- afterEach(function () {
- ReactDOM.unmountComponentAtNode(ReactDOM.findDOMNode(instance).parentNode);
- store.reset();
- });
+ afterEach(function () {
+ ReactDOM.unmountComponentAtNode(ReactDOM.findDOMNode(instance).parentNode);
+ store.reset();
+ });
- it('should show loading component', function () {
- var results = {results: []};
- instance = TestUtils.renderIntoDocument(
- <Views.ResultsScreen results={results} isLoading={true} />,
- container
- );
+ it('should show loading component', function () {
+ var results = {results: []};
+ instance = TestUtils.renderIntoDocument(
+ <Views.ResultsScreen results={results} isLoading={true} />,
+ container
+ );
- var $el = $(ReactDOM.findDOMNode(instance));
+ var $el = $(ReactDOM.findDOMNode(instance));
- assert.ok($el.find('.loading-lines').length === 1);
- });
+ assert.ok($el.find('.loading-lines').length === 1);
+ });
- it('should not show loading component', function () {
- var results = {results: []};
- instance = TestUtils.renderIntoDocument(
- <Views.ResultsScreen results={results} isLoading={false} />,
- container
- );
+ it('should not show loading component', function () {
+ var results = {results: []};
+ instance = TestUtils.renderIntoDocument(
+ <Views.ResultsScreen results={results} isLoading={false} />,
+ container
+ );
- var $el = $(ReactDOM.findDOMNode(instance));
+ var $el = $(ReactDOM.findDOMNode(instance));
- assert.ok($el.find('.loading-lines').length === 0);
- });
+ assert.ok($el.find('.loading-lines').length === 0);
});
-
});
+
});