Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id E9E58200B36 for ; Tue, 31 May 2016 09:58:33 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id E8849160A40; Tue, 31 May 2016 07:58:33 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 511C0160A46 for ; Tue, 31 May 2016 09:58:31 +0200 (CEST) Received: (qmail 13446 invoked by uid 500); 31 May 2016 07:58:30 -0000 Mailing-List: contact commits-help@couchdb.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@couchdb.apache.org Delivered-To: mailing list commits@couchdb.apache.org Received: (qmail 12276 invoked by uid 99); 31 May 2016 07:58:29 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 31 May 2016 07:58:29 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 8A201E7DE8; Tue, 31 May 2016 07:58:29 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: garren@apache.org To: commits@couchdb.apache.org Date: Tue, 31 May 2016 07:58:39 -0000 Message-Id: <4dea2194d43d4faca6b11b8695fc4c12@git.apache.org> In-Reply-To: <826f942c00d741a39f68a9f9dd68d256@git.apache.org> References: <826f942c00d741a39f68a9f9dd68d256@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [11/27] fauxton commit: updated refs/heads/master to 0ca35da archived-at: Tue, 31 May 2016 07:58:34 -0000 http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/0ca35da7/app/addons/documents/rev-browser/rev-browser.components.react.jsx ---------------------------------------------------------------------- diff --git a/app/addons/documents/rev-browser/rev-browser.components.react.jsx b/app/addons/documents/rev-browser/rev-browser.components.react.jsx index 89c44eb..d49a6cc 100644 --- a/app/addons/documents/rev-browser/rev-browser.components.react.jsx +++ b/app/addons/documents/rev-browser/rev-browser.components.react.jsx @@ -11,431 +11,419 @@ // the License. -define([ - '../../../core/api', - '../../../app', - 'react', - 'react-dom', - './rev-browser.actions', - './rev-browser.stores', - '../../components/react-components.react', +import FauxtonAPI from "../../../core/api"; +import app from "../../../app"; +import React from "react"; +import ReactDOM from "react-dom"; +import RevActions from "./rev-browser.actions"; +import RevStores from "./rev-browser.stores"; +import ReactComponents from "../../components/react-components.react"; +import { ButtonGroup, Button, Modal } from "react-bootstrap"; +import ReactSelect from "react-select"; +import jdp from "jsondiffpatch"; +import jdpformatters from "jsondiffpatch/src/formatters/html"; +import ace from "brace"; +import "jsondiffpatch/public/formatters-styles/html.css"; - 'react-bootstrap', - 'react-select', - 'jsondiffpatch', - 'jsondiffpatch/src/formatters/html', +const storageKeyDeleteConflictsModal = 'deleteConflictsHideModal'; - 'brace', +const store = RevStores.revBrowserStore; +const ConfirmButton = ReactComponents.ConfirmButton; - 'jsondiffpatch/public/formatters-styles/html.css' -], (FauxtonAPI, app, React, ReactDOM, RevActions, RevStores, ReactComponents, - ReactBootstrap, ReactSelect, jdp, jdpformatters, ace) => { +require('brace/ext/static_highlight'); +const highlight = ace.acequire('ace/ext/static_highlight'); - const storageKeyDeleteConflictsModal = 'deleteConflictsHideModal'; +require('brace/mode/json'); +const JavaScriptMode = ace.acequire('ace/mode/json').Mode; - const store = RevStores.revBrowserStore; - const ConfirmButton = ReactComponents.ConfirmButton; +require('brace/theme/idle_fingers'); +const theme = ace.acequire('ace/theme/idle_fingers'); - const ButtonGroup = ReactBootstrap.ButtonGroup; - const Button = ReactBootstrap.Button; - const Modal = ReactBootstrap.Modal; - require('brace/ext/static_highlight'); - const highlight = ace.acequire('ace/ext/static_highlight'); +class DiffyController extends React.Component { - require('brace/mode/json'); - const JavaScriptMode = ace.acequire('ace/mode/json').Mode; - - require('brace/theme/idle_fingers'); - const theme = ace.acequire('ace/theme/idle_fingers'); + constructor (props) { + super(props); + this.state = this.getStoreState(); + } - class DiffyController extends React.Component { + getStoreState () { + + return { + tree: store.getRevTree(), + ours: store.getOurs(), + theirs: store.getTheirs(), + conflictingRevs: store.getConflictingRevs(), + dropdownData: store.getDropdownData(), + isDiffViewEnabled: store.getIsDiffViewEnabled(), + databaseName: store.getDatabaseName() + }; + } - constructor (props) { - super(props); + componentDidMount () { + store.on('change', this.onChange, this); + } - this.state = this.getStoreState(); - } + componentWillUnmount () { + store.off('change', this.onChange); + } - getStoreState () { - - return { - tree: store.getRevTree(), - ours: store.getOurs(), - theirs: store.getTheirs(), - conflictingRevs: store.getConflictingRevs(), - dropdownData: store.getDropdownData(), - isDiffViewEnabled: store.getIsDiffViewEnabled(), - databaseName: store.getDatabaseName() - }; - } + onChange () { + this.setState(this.getStoreState()); + } - componentDidMount () { - store.on('change', this.onChange, this); - } + toggleDiffView (enableDiff) { + RevActions.toggleDiffView(enableDiff); + } - componentWillUnmount () { - store.off('change', this.onChange); - } + render () { + const {tree, ours, theirs, dropdownData, conflictingRevs, isDiffViewEnabled} = this.state; - onChange () { - this.setState(this.getStoreState()); + if (!tree) { + return null; } - toggleDiffView (enableDiff) { - RevActions.toggleDiffView(enableDiff); + // no conflicts happened for this doc + if (!theirs || !conflictingRevs.length) { + return

No conflicts

; } - render () { - const {tree, ours, theirs, dropdownData, conflictingRevs, isDiffViewEnabled} = this.state; - - if (!tree) { - return null; - } - - // no conflicts happened for this doc - if (!theirs || !conflictingRevs.length) { - return

No conflicts

; - } - - return ( -
- -
- - - - -
- - {isDiffViewEnabled ? - : - } + return ( +
+ +
+ + + +
- ); - } - }; - - - class SplitScreenArea extends React.Component { - - constructor (props) { - super(props); - } - componentDidUpdate () { - this.hightlightAfterRender(); - } + {isDiffViewEnabled ? + : + } +
+ ); + } +} - componentDidMount () { - this.hightlightAfterRender(); - } - hightlightAfterRender () { - const format = (input) => { return JSON.stringify(input, null, ' '); }; +class SplitScreenArea extends React.Component { - const jsmode = new JavaScriptMode(); - const left = ReactDOM.findDOMNode(this.refs.revLeftOurs); - const right = ReactDOM.findDOMNode(this.refs.revRightTheirs); + constructor (props) { + super(props); + } - const leftRes = highlight.render(format(this.props.ours), jsmode, theme, 0, true); - left.innerHTML = leftRes.html; - const rightRes = highlight.render(format(this.props.theirs), jsmode, theme, 0, true); - right.innerHTML = rightRes.html; - } + componentDidUpdate () { + this.hightlightAfterRender(); + } - render () { - const {ours, theirs} = this.props; + componentDidMount () { + this.hightlightAfterRender(); + } - if (!ours || !theirs) { - return
; - } + hightlightAfterRender () { + const format = (input) => { return JSON.stringify(input, null, ' '); }; - return ( -
-
-
{ours._rev} (Server-Selected Rev)
-

-          
+ const jsmode = new JavaScriptMode(); + const left = ReactDOM.findDOMNode(this.refs.revLeftOurs); + const right = ReactDOM.findDOMNode(this.refs.revRightTheirs); -
-
{theirs._rev}
-

-          
-
- ); - } + const leftRes = highlight.render(format(this.props.ours), jsmode, theme, 0, true); + left.innerHTML = leftRes.html; + const rightRes = highlight.render(format(this.props.theirs), jsmode, theme, 0, true); + right.innerHTML = rightRes.html; } - const RevisionDiffArea = ({ours, theirs}) => { + render () { + const {ours, theirs} = this.props; + if (!ours || !theirs) { return
; } - const delta = jdp.diff(ours, theirs); - const html = jdpformatters.format(delta, ours); - return ( -
-
+
+
+
{ours._rev} (Server-Selected Rev)
+

         
-
- ); - }; - RevisionDiffArea.propTypes = { - ours: React.PropTypes.object, - theirs: React.PropTypes.object, - currentRev: React.PropTypes.string - }; - - const ConflictingRevisionsDropDown = ({options, selected, onRevisionClick, onBackwardClick, onForwardClick}) => { - return ( -
- -
- +
+
{theirs._rev}
+

         
-
); - }; - ConflictingRevisionsDropDown.propTypes = { - options: React.PropTypes.array.isRequired, - selected: React.PropTypes.string.isRequired, - onRevisionClick: React.PropTypes.func.isRequired, - onBackwardClick: React.PropTypes.func.isRequired, - onForwardClick: React.PropTypes.func.isRequired, - }; + } +} - class RevisionBrowserControls extends React.Component { +const RevisionDiffArea = ({ours, theirs}) => { + if (!ours || !theirs) { + return
; + } - constructor (props) { - super(props); + const delta = jdp.diff(ours, theirs); + const html = jdpformatters.format(delta, ours); - this.state = {showModal: false}; - } - - onRevisionClick (revTheirs) { + return ( +
+
+
+
+ ); +}; +RevisionDiffArea.propTypes = { + ours: React.PropTypes.object, + theirs: React.PropTypes.object, + currentRev: React.PropTypes.string +}; + + +const ConflictingRevisionsDropDown = ({options, selected, onRevisionClick, onBackwardClick, onForwardClick}) => { + return ( +
+ +
+ +
+ +
+ ); +}; +ConflictingRevisionsDropDown.propTypes = { + options: React.PropTypes.array.isRequired, + selected: React.PropTypes.string.isRequired, + onRevisionClick: React.PropTypes.func.isRequired, + onBackwardClick: React.PropTypes.func.isRequired, + onForwardClick: React.PropTypes.func.isRequired, +}; + +class RevisionBrowserControls extends React.Component { + + constructor (props) { + super(props); + + this.state = {showModal: false}; + } - RevActions.chooseLeaves(this.props.ours, revTheirs.value); - } + onRevisionClick (revTheirs) { - onForwardClick () { - const conflictingRevs = this.props.conflictingRevs; - const index = conflictingRevs.indexOf(this.props.theirs._rev); + RevActions.chooseLeaves(this.props.ours, revTheirs.value); + } - const next = conflictingRevs[index + 1]; + onForwardClick () { + const conflictingRevs = this.props.conflictingRevs; + const index = conflictingRevs.indexOf(this.props.theirs._rev); - if (!next) { - return; - } + const next = conflictingRevs[index + 1]; - RevActions.chooseLeaves(this.props.ours, next); + if (!next) { + return; } - onBackwardClick () { - const conflictingRevs = this.props.conflictingRevs; - const index = conflictingRevs.indexOf(this.props.theirs._rev); + RevActions.chooseLeaves(this.props.ours, next); + } - const next = conflictingRevs[index - 1]; + onBackwardClick () { + const conflictingRevs = this.props.conflictingRevs; + const index = conflictingRevs.indexOf(this.props.theirs._rev); - if (!next) { - return; - } + const next = conflictingRevs[index - 1]; - RevActions.chooseLeaves(this.props.ours, next); + if (!next) { + return; } - selectAsWinner (docToWin, doNotShowModalAgain) { - if (doNotShowModalAgain) { - app.utils.localStorageSet(storageKeyDeleteConflictsModal, true); - } + RevActions.chooseLeaves(this.props.ours, next); + } - RevActions.selectRevAsWinner(this.props.databaseName, docToWin._id, this.props.tree.paths, docToWin._rev); + selectAsWinner (docToWin, doNotShowModalAgain) { + if (doNotShowModalAgain) { + app.utils.localStorageSet(storageKeyDeleteConflictsModal, true); } - onSelectAsWinnerClick (docToWin) { - if (app.utils.localStorageGet(storageKeyDeleteConflictsModal) !== true) { - RevActions.showConfirmModal(true, docToWin); - return; - } + RevActions.selectRevAsWinner(this.props.databaseName, docToWin._id, this.props.tree.paths, docToWin._rev); + } - this.selectAsWinner(docToWin); + onSelectAsWinnerClick (docToWin) { + if (app.utils.localStorageGet(storageKeyDeleteConflictsModal) !== true) { + RevActions.showConfirmModal(true, docToWin); + return; } - render () { - const {tree, conflictingRevs} = this.props; - const cellStyle = {paddingRight: '30px'}; - - return ( -
- - - - - - - - - - - - - - -
Server-Selected Rev: -
- {tree.winner} -
-
- -
Conflicting Revisions: - - - -
-
+ this.selectAsWinner(docToWin); + } - ); - } + render () { + const {tree, conflictingRevs} = this.props; + const cellStyle = {paddingRight: '30px'}; + + return ( +
+ + + + + + + + + + + + + + +
Server-Selected Rev: +
+ {tree.winner} +
+
+ +
Conflicting Revisions: + + + +
+
+ + ); } - RevisionBrowserControls.propTypes = { - tree: React.PropTypes.object.isRequired, - ours: React.PropTypes.object.isRequired, - conflictingRevs: React.PropTypes.array.isRequired, - }; +} +RevisionBrowserControls.propTypes = { + tree: React.PropTypes.object.isRequired, + ours: React.PropTypes.object.isRequired, + conflictingRevs: React.PropTypes.array.isRequired, +}; - class ConfirmModal extends React.Component { +class ConfirmModal extends React.Component { - constructor (props) { - super(props); + constructor (props) { + super(props); - this.state = this.getStoreState(); - } + this.state = this.getStoreState(); + } - getStoreState () { - return { - show: store.getShowConfirmModal(), - docToWin: store.getDocToWin(), - checked: false - }; - } + getStoreState () { + return { + show: store.getShowConfirmModal(), + docToWin: store.getDocToWin(), + checked: false + }; + } - componentDidMount () { - store.on('change', this.onChange, this); - } + componentDidMount () { + store.on('change', this.onChange, this); + } - componentWillUnmount () { - store.off('change', this.onChange); - } + componentWillUnmount () { + store.off('change', this.onChange); + } - onChange () { - this.setState(this.getStoreState()); - } + onChange () { + this.setState(this.getStoreState()); + } - close () { - RevActions.showConfirmModal(false, null); - } + close () { + RevActions.showConfirmModal(false, null); + } - onDeleteConflicts () { - const hideModal = this.state.checked; - this.props.onConfirm(this.state.docToWin, hideModal); - } + onDeleteConflicts () { + const hideModal = this.state.checked; + this.props.onConfirm(this.state.docToWin, hideModal); + } - render () { - return ( - - - Solve Conflicts - - -

- Do you want to delete all conflicting revisions for this document? -

- - -
- -
- -
- - Cancel - - - -
-
- ); - } - }; - ConfirmModal.propTypes = { - onConfirm: React.PropTypes.func.isRequired, - }; - - const BackForwardControls = ({onClick, forward, backward}) => { - const icon = forward ? 'fonticon-right-open' : 'fonticon-left-open'; - const style = {height: '20px', width: '11px', marginTop: '7px'}; - - return
; - }; - BackForwardControls.propTypes = { - onClick: React.PropTypes.func.isRequired, - }; - - return { - DiffyController: DiffyController - }; - -}); + render () { + return ( + + + Solve Conflicts + + +

+ Do you want to delete all conflicting revisions for this document? +

+ + +
+ +
+ +
+ + Cancel + + + +
+
+ ); + } +} +ConfirmModal.propTypes = { + onConfirm: React.PropTypes.func.isRequired, +}; + +const BackForwardControls = ({onClick, forward, backward}) => { + const icon = forward ? 'fonticon-right-open' : 'fonticon-left-open'; + const style = {height: '20px', width: '11px', marginTop: '7px'}; + + return
; +}; +BackForwardControls.propTypes = { + onClick: React.PropTypes.func.isRequired, +}; + +export default { + DiffyController: DiffyController +}; http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/0ca35da7/app/addons/documents/rev-browser/rev-browser.stores.js ---------------------------------------------------------------------- diff --git a/app/addons/documents/rev-browser/rev-browser.stores.js b/app/addons/documents/rev-browser/rev-browser.stores.js index 28a6dfd..c4b4afa 100644 --- a/app/addons/documents/rev-browser/rev-browser.stores.js +++ b/app/addons/documents/rev-browser/rev-browser.stores.js @@ -10,114 +10,111 @@ // License for the specific language governing permissions and limitations under // the License. -define([ - '../../../core/api', - './rev-browser.actiontypes' -], (FauxtonAPI, ActionTypes) => { +import FauxtonAPI from "../../../core/api"; +import ActionTypes from "./rev-browser.actiontypes"; - const Stores = {}; +const Stores = {}; - Stores.RevBrowserStore = FauxtonAPI.Store.extend({ - initialize: function () { - this.reset(); - }, +Stores.RevBrowserStore = FauxtonAPI.Store.extend({ + initialize: function () { + this.reset(); + }, - reset: function () { - this._revTree = null; + reset: function () { + this._revTree = null; - this._ours = null; - this._theirs = null; + this._ours = null; + this._theirs = null; - this._dropDownData = null; - this._isDiffViewEnabled = true; + this._dropDownData = null; + this._isDiffViewEnabled = true; - this._databaseName = null; + this._databaseName = null; - this._showConfirmModal = false; - this._docToWin = null; - }, + this._showConfirmModal = false; + this._docToWin = null; + }, - prepareDropdownData: function (revs) { - return revs.map((el) => { + prepareDropdownData: function (revs) { + return revs.map((el) => { - return { value: el, label: el }; - }); - }, + return { value: el, label: el }; + }); + }, - getRevTree: function () { - return this._revTree; - }, + getRevTree: function () { + return this._revTree; + }, - getDatabaseName: function () { - return this._databaseName; - }, + getDatabaseName: function () { + return this._databaseName; + }, - getOurs: function () { - return this._ours; - }, + getOurs: function () { + return this._ours; + }, - getTheirs: function () { - return this._theirs; - }, + getTheirs: function () { + return this._theirs; + }, - getConflictingRevs: function () { - return this._conflictingRevs; - }, + getConflictingRevs: function () { + return this._conflictingRevs; + }, - getDropdownData: function () { - return this._dropDownData; - }, + getDropdownData: function () { + return this._dropDownData; + }, - getIsDiffViewEnabled: function () { - return this._isDiffViewEnabled; - }, + getIsDiffViewEnabled: function () { + return this._isDiffViewEnabled; + }, - getShowConfirmModal: function () { - return this._showConfirmModal; - }, + getShowConfirmModal: function () { + return this._showConfirmModal; + }, - getDocToWin: function () { - return this._docToWin; - }, + getDocToWin: function () { + return this._docToWin; + }, - dispatch: function (action) { - switch (action.type) { - case ActionTypes.REV_BROWSER_REV_TREE_LOADED: - this._revTree = action.options.tree; - this._ours = action.options.doc; - this._conflictingRevs = action.options.conflictingRevs; - this._theirs = action.options.conflictDoc; + dispatch: function (action) { + switch (action.type) { + case ActionTypes.REV_BROWSER_REV_TREE_LOADED: + this._revTree = action.options.tree; + this._ours = action.options.doc; + this._conflictingRevs = action.options.conflictingRevs; + this._theirs = action.options.conflictDoc; - this._dropDownData = this.prepareDropdownData(this._conflictingRevs); + this._dropDownData = this.prepareDropdownData(this._conflictingRevs); - this._databaseName = action.options.databaseName; - break; + this._databaseName = action.options.databaseName; + break; - case ActionTypes.REV_BROWSER_DIFF_DOCS_READY: - this._theirs = action.options.theirs; - break; + case ActionTypes.REV_BROWSER_DIFF_DOCS_READY: + this._theirs = action.options.theirs; + break; - case ActionTypes.REV_BROWSER_DIFF_ENABLE_DIFF_VIEW: - this._isDiffViewEnabled = action.options.enableDiff; - break; + case ActionTypes.REV_BROWSER_DIFF_ENABLE_DIFF_VIEW: + this._isDiffViewEnabled = action.options.enableDiff; + break; - case ActionTypes.REV_BROWSER_SHOW_CONFIRM_MODAL: - this._showConfirmModal = action.options.show; - this._docToWin = action.options.docToWin; - break; + case ActionTypes.REV_BROWSER_SHOW_CONFIRM_MODAL: + this._showConfirmModal = action.options.show; + this._docToWin = action.options.docToWin; + break; - default: - return; - // do nothing - } - - this.triggerChange(); + default: + return; + // do nothing } - }); - - Stores.revBrowserStore = new Stores.RevBrowserStore(); - Stores.revBrowserStore.dispatchToken = FauxtonAPI.dispatcher.register(Stores.revBrowserStore.dispatch); + this.triggerChange(); + } - return Stores; }); + +Stores.revBrowserStore = new Stores.RevBrowserStore(); +Stores.revBrowserStore.dispatchToken = FauxtonAPI.dispatcher.register(Stores.revBrowserStore.dispatch); + +export default Stores; http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/0ca35da7/app/addons/documents/rev-browser/tests/fixtures.js ---------------------------------------------------------------------- diff --git a/app/addons/documents/rev-browser/tests/fixtures.js b/app/addons/documents/rev-browser/tests/fixtures.js index f8f2e3a..650d9a9 100644 --- a/app/addons/documents/rev-browser/tests/fixtures.js +++ b/app/addons/documents/rev-browser/tests/fixtures.js @@ -10,63 +10,60 @@ // License for the specific language governing permissions and limitations under // the License. -define([], () => { - - const twoPaths = { - "paths": [ - [ - "4-2868f2429e2211f74e656663f39b0cb8", - "3-b1a15f62533e8d3344504855c7c006f7", - "2-3016a16f8d02b6062c0f85af048974df", - "1-a2701a97f75439f13e9062ad8a9e2b9c" - ], - [ - "6-9831e318304c35efafa6faa57a54809f", - "5-8eadb1a781b835cce132a339250bba53", - "4-3c1720cc9f559444f7e717a070f8eaec", - "3-b1a15f62533e8d3344504855c7c006f7", - "2-3016a16f8d02b6062c0f85af048974df", - "1-a2701a97f75439f13e9062ad8a9e2b9c" - ] +const twoPaths = { + "paths": [ + [ + "4-2868f2429e2211f74e656663f39b0cb8", + "3-b1a15f62533e8d3344504855c7c006f7", + "2-3016a16f8d02b6062c0f85af048974df", + "1-a2701a97f75439f13e9062ad8a9e2b9c" ], - "deleted": {}, - "winner": "6-9831e318304c35efafa6faa57a54809f" - }; + [ + "6-9831e318304c35efafa6faa57a54809f", + "5-8eadb1a781b835cce132a339250bba53", + "4-3c1720cc9f559444f7e717a070f8eaec", + "3-b1a15f62533e8d3344504855c7c006f7", + "2-3016a16f8d02b6062c0f85af048974df", + "1-a2701a97f75439f13e9062ad8a9e2b9c" + ] + ], + "deleted": {}, + "winner": "6-9831e318304c35efafa6faa57a54809f" +}; - const threePaths = { - "paths": [ - [ - "5-5555f2429e2211f74e656663f39b0cb8", - "4-2868f2429e2211f74e656663f39b0cb8", - "3-b1a15f62533e8d3344504855c7c006f7", - "2-3016a16f8d02b6062c0f85af048974df", - "1-a2701a97f75439f13e9062ad8a9e2b9c" - ], - [ - "7-1309b41d34787f7ba95280802f327dc2", - "6-9831e318304c35efafa6faa57a54809f", - "5-8eadb1a781b835cce132a339250bba53", - "4-3c1720cc9f559444f7e717a070f8eaec", - "3-b1a15f62533e8d3344504855c7c006f7", - "2-3016a16f8d02b6062c0f85af048974df", - "1-a2701a97f75439f13e9062ad8a9e2b9c" - ], - [ - "7-1f1bb5806f33c8922277ea053d6fc4ed", - "6-9831e318304c35efafa6faa57a54809f", - "5-8eadb1a781b835cce132a339250bba53", - "4-3c1720cc9f559444f7e717a070f8eaec", - "3-b1a15f62533e8d3344504855c7c006f7", - "2-3016a16f8d02b6062c0f85af048974df", - "1-a2701a97f75439f13e9062ad8a9e2b9c" - ] +const threePaths = { + "paths": [ + [ + "5-5555f2429e2211f74e656663f39b0cb8", + "4-2868f2429e2211f74e656663f39b0cb8", + "3-b1a15f62533e8d3344504855c7c006f7", + "2-3016a16f8d02b6062c0f85af048974df", + "1-a2701a97f75439f13e9062ad8a9e2b9c" + ], + [ + "7-1309b41d34787f7ba95280802f327dc2", + "6-9831e318304c35efafa6faa57a54809f", + "5-8eadb1a781b835cce132a339250bba53", + "4-3c1720cc9f559444f7e717a070f8eaec", + "3-b1a15f62533e8d3344504855c7c006f7", + "2-3016a16f8d02b6062c0f85af048974df", + "1-a2701a97f75439f13e9062ad8a9e2b9c" ], - "deleted": {}, - "winner": "7-1f1bb5806f33c8922277ea053d6fc4ed" - }; + [ + "7-1f1bb5806f33c8922277ea053d6fc4ed", + "6-9831e318304c35efafa6faa57a54809f", + "5-8eadb1a781b835cce132a339250bba53", + "4-3c1720cc9f559444f7e717a070f8eaec", + "3-b1a15f62533e8d3344504855c7c006f7", + "2-3016a16f8d02b6062c0f85af048974df", + "1-a2701a97f75439f13e9062ad8a9e2b9c" + ] + ], + "deleted": {}, + "winner": "7-1f1bb5806f33c8922277ea053d6fc4ed" +}; - return { - twoPaths: twoPaths, - threePaths: threePaths - }; -}); +export default { + twoPaths: twoPaths, + threePaths: threePaths +}; http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/0ca35da7/app/addons/documents/rev-browser/tests/rev-browser.actionsSpec.js ---------------------------------------------------------------------- diff --git a/app/addons/documents/rev-browser/tests/rev-browser.actionsSpec.js b/app/addons/documents/rev-browser/tests/rev-browser.actionsSpec.js index f43962e..b0678ce 100644 --- a/app/addons/documents/rev-browser/tests/rev-browser.actionsSpec.js +++ b/app/addons/documents/rev-browser/tests/rev-browser.actionsSpec.js @@ -10,85 +10,81 @@ // License for the specific language governing permissions and limitations under // the License. -define([ - '../../../../core/api', - '../rev-browser.actions', - './fixtures', +import FauxtonAPI from "../../../../core/api"; +import RevActions from "../rev-browser.actions"; +import fixtures from "./fixtures"; +import utils from "../../../../../test/mocha/testUtils"; - '../../../../../test/mocha/testUtils' -], (FauxtonAPI, RevActions, fixtures, utils) => { +const assert = utils.assert; - const assert = utils.assert; +describe('RevActions', () => { - describe('RevActions', () => { + it('getConflictingRevs gets the revisions which are obsolete, winner', () => { - it('getConflictingRevs gets the revisions which are obsolete, winner', () => { + const res = RevActions.getConflictingRevs( + fixtures.threePaths.paths, + "7-1f1bb5806f33c8922277ea053d6fc4ed", + Object.keys({}) + ); - const res = RevActions.getConflictingRevs( - fixtures.threePaths.paths, - "7-1f1bb5806f33c8922277ea053d6fc4ed", - Object.keys({}) - ); + const expected = [ + "5-5555f2429e2211f74e656663f39b0cb8", + "7-1309b41d34787f7ba95280802f327dc2" + ]; - const expected = [ - "5-5555f2429e2211f74e656663f39b0cb8", - "7-1309b41d34787f7ba95280802f327dc2" - ]; - - assert.deepEqual(expected, res); - }); - - it('getConflictingRevs gets the revisions which are obsolete, sidetrack with a lot lower rev', () => { - - const res = RevActions.getConflictingRevs( - fixtures.threePaths.paths, - "5-5555f2429e2211f74e656663f39b0cb8", - Object.keys({}) - ); - - const expected = [ - "7-1309b41d34787f7ba95280802f327dc2", - "7-1f1bb5806f33c8922277ea053d6fc4ed" - ]; + assert.deepEqual(expected, res); + }); - assert.deepEqual(expected, res); - }); + it('getConflictingRevs gets the revisions which are obsolete, sidetrack with a lot lower rev', () => { - it('getConflictingRevs filters out deleted revisions', () => { + const res = RevActions.getConflictingRevs( + fixtures.threePaths.paths, + "5-5555f2429e2211f74e656663f39b0cb8", + Object.keys({}) + ); - const res = RevActions.getConflictingRevs( - fixtures.threePaths.paths, - "5-5555f2429e2211f74e656663f39b0cb8", - Object.keys({ '7-1f1bb5806f33c8922277ea053d6fc4ed': true }) - ); + const expected = [ + "7-1309b41d34787f7ba95280802f327dc2", + "7-1f1bb5806f33c8922277ea053d6fc4ed" + ]; - const expected = [ - "7-1309b41d34787f7ba95280802f327dc2" - ]; + assert.deepEqual(expected, res); + }); - assert.deepEqual(expected, res); - }); + it('getConflictingRevs filters out deleted revisions', () => { - it('buildBulkDeletePayload prepares the payload for bulkdocs', () => { + const res = RevActions.getConflictingRevs( + fixtures.threePaths.paths, + "5-5555f2429e2211f74e656663f39b0cb8", + Object.keys({ '7-1f1bb5806f33c8922277ea053d6fc4ed': true }) + ); - const data = [ - "7-1309b41d34787f7ba95280802f327dc2", - "6-9831e318304c35efafa6faa57a54809f", - "5-8eadb1a781b835cce132a339250bba53", - "4-3c1720cc9f559444f7e717a070f8eaec", - "7-1f1bb5806f33c8922277ea053d6fc4ed" - ]; + const expected = [ + "7-1309b41d34787f7ba95280802f327dc2" + ]; - const res = RevActions.buildBulkDeletePayload('fooId', data); + assert.deepEqual(expected, res); + }); - assert.deepEqual([ - { "_id": "fooId", "_rev": "7-1309b41d34787f7ba95280802f327dc2", "_deleted": true }, - { "_id": "fooId", "_rev": "6-9831e318304c35efafa6faa57a54809f", "_deleted": true }, - { "_id": "fooId", "_rev": "5-8eadb1a781b835cce132a339250bba53", "_deleted": true }, - { "_id": "fooId", "_rev": "4-3c1720cc9f559444f7e717a070f8eaec", "_deleted": true }, - { "_id": "fooId", "_rev": "7-1f1bb5806f33c8922277ea053d6fc4ed", "_deleted": true }, - ], res.docs); - }); + it('buildBulkDeletePayload prepares the payload for bulkdocs', () => { + + const data = [ + "7-1309b41d34787f7ba95280802f327dc2", + "6-9831e318304c35efafa6faa57a54809f", + "5-8eadb1a781b835cce132a339250bba53", + "4-3c1720cc9f559444f7e717a070f8eaec", + "7-1f1bb5806f33c8922277ea053d6fc4ed" + ]; + + const res = RevActions.buildBulkDeletePayload('fooId', data); + + assert.deepEqual([ + { "_id": "fooId", "_rev": "7-1309b41d34787f7ba95280802f327dc2", "_deleted": true }, + { "_id": "fooId", "_rev": "6-9831e318304c35efafa6faa57a54809f", "_deleted": true }, + { "_id": "fooId", "_rev": "5-8eadb1a781b835cce132a339250bba53", "_deleted": true }, + { "_id": "fooId", "_rev": "4-3c1720cc9f559444f7e717a070f8eaec", "_deleted": true }, + { "_id": "fooId", "_rev": "7-1f1bb5806f33c8922277ea053d6fc4ed", "_deleted": true }, + ], res.docs); }); }); http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/0ca35da7/app/addons/documents/routes-doc-editor.js ---------------------------------------------------------------------- diff --git a/app/addons/documents/routes-doc-editor.js b/app/addons/documents/routes-doc-editor.js index 0702a40..59d91b6 100644 --- a/app/addons/documents/routes-doc-editor.js +++ b/app/addons/documents/routes-doc-editor.js @@ -10,160 +10,152 @@ // License for the specific language governing permissions and limitations under // the License. -define([ - '../../app', - '../../core/api', - './helpers', - './resources', - '../databases/base', - './doc-editor/actions', - './doc-editor/components.react', +import app from "../../app"; +import FauxtonAPI from "../../core/api"; +import Helpers from "./helpers"; +import Documents from "./resources"; +import Databases from "../databases/base"; +import Actions from "./doc-editor/actions"; +import ReactComponents from "./doc-editor/components.react"; +import RevBrowserActions from "./rev-browser/rev-browser.actions"; +import RevBrowserComponents from "./rev-browser/rev-browser.components.react"; + + +const RevBrowserRouteObject = FauxtonAPI.RouteObject.extend({ + layout: 'doc_editor', + disableLoader: true, + selectedHeader: 'Databases', + roles: ['fx_loggedIn'], + + routes: { + 'database/:database/:doc/conflicts': 'revisionBrowser' + }, + + initialize: function (route, masterLayout, options) { + const databaseName = options[0]; + + this.docId = options[1]; + this.database = this.database || new Databases.Model({ id: databaseName }); + this.doc = new Documents.Doc({ _id: this.docId }, { database: this.database }); + }, + + crumbs: function () { + const previousPage = Helpers.getPreviousPageForDoc(this.database, this.wasCloned); + const docUrl = FauxtonAPI.urls('document', 'app', this.database.safeID(), this.docId); + + return [ + { type: 'back', link: previousPage }, + { name: this.docId + ' > Conflicts', link: '#' } + ]; + }, + + apiUrl: function () { + return [this.doc.url('apiurl'), this.doc.documentation()]; + }, + + revisionBrowser: function (databaseName, docId) { + RevBrowserActions.showConfirmModal(false, null); + RevBrowserActions.initDiffEditor(databaseName, docId); + this.setComponent('#dashboard-content', RevBrowserComponents.DiffyController); + } - './rev-browser/rev-browser.actions', - './rev-browser/rev-browser.components.react' -], +}); -(app, FauxtonAPI, Helpers, Documents, Databases, Actions, ReactComponents, -RevBrowserActions, RevBrowserComponents) => { +const DocEditorRouteObject = FauxtonAPI.RouteObject.extend({ + layout: 'doc_editor', + disableLoader: true, + selectedHeader: 'Databases', + roles: ['fx_loggedIn'], - const RevBrowserRouteObject = FauxtonAPI.RouteObject.extend({ - layout: 'doc_editor', - disableLoader: true, - selectedHeader: 'Databases', - roles: ['fx_loggedIn'], + initialize: function (route, masterLayout, options) { + this.databaseName = options[0]; + this.docId = options[1]; + this.database = this.database || new Databases.Model({ id: this.databaseName }); + this.doc = new Documents.NewDoc(null, { database: this.database }); + this.wasCloned = false; + }, - routes: { - 'database/:database/:doc/conflicts': 'revisionBrowser' - }, + routes: { + 'database/:database/:doc/code_editor': 'codeEditor', + 'database/:database/_design/:ddoc': 'showDesignDoc', + 'database/:database/:doc': 'codeEditor', + 'database/:database/new': 'codeEditor' + }, - initialize: function (route, masterLayout, options) { - const databaseName = options[0]; + events: { + 'route:duplicateDoc': 'duplicateDoc' + }, - this.docId = options[1]; - this.database = this.database || new Databases.Model({ id: databaseName }); - this.doc = new Documents.Doc({ _id: this.docId }, { database: this.database }); - }, + crumbs: function () { - crumbs: function () { - const previousPage = Helpers.getPreviousPageForDoc(this.database, this.wasCloned); - const docUrl = FauxtonAPI.urls('document', 'app', this.database.safeID(), this.docId); + if (this.docId) { + let previousPage = Helpers.getPreviousPageForDoc(this.database, this.wasCloned); return [ { type: 'back', link: previousPage }, - { name: this.docId + ' > Conflicts', link: '#' } + { name: this.docId, link: '#' } ]; - }, - - apiUrl: function () { - return [this.doc.url('apiurl'), this.doc.documentation()]; - }, - - revisionBrowser: function (databaseName, docId) { - RevBrowserActions.showConfirmModal(false, null); - RevBrowserActions.initDiffEditor(databaseName, docId); - this.setComponent('#dashboard-content', RevBrowserComponents.DiffyController); } - }); - - const DocEditorRouteObject = FauxtonAPI.RouteObject.extend({ - layout: 'doc_editor', - disableLoader: true, - selectedHeader: 'Databases', + let previousPage = Helpers.getPreviousPageForDoc(this.database); + return [ + { type: 'back', link: previousPage }, + { name: 'New Document', link: '#' } + ]; + }, - roles: ['fx_loggedIn'], + codeEditor: function (databaseName, docId) { + this.database = new Databases.Model({ id: databaseName }); - initialize: function (route, masterLayout, options) { - this.databaseName = options[0]; - this.docId = options[1]; - this.database = this.database || new Databases.Model({ id: this.databaseName }); - this.doc = new Documents.NewDoc(null, { database: this.database }); - this.wasCloned = false; - }, - - routes: { - 'database/:database/:doc/code_editor': 'codeEditor', - 'database/:database/_design/:ddoc': 'showDesignDoc', - 'database/:database/:doc': 'codeEditor', - 'database/:database/new': 'codeEditor' - }, - - events: { - 'route:duplicateDoc': 'duplicateDoc' - }, - - crumbs: function () { + if (docId) { + this.doc = new Documents.Doc({ _id: docId }, { database: this.database, fetchConflicts: true }); + } - if (this.docId) { - let previousPage = Helpers.getPreviousPageForDoc(this.database, this.wasCloned); + Actions.initDocEditor({ doc: this.doc, database: this.database }); + this.setComponent('#dashboard-content', ReactComponents.DocEditorController, { + database: this.database, + isNewDoc: docId ? false : true, + previousPage: '#/' + Helpers.getPreviousPageForDoc(this.database) + }); + }, - return [ - { type: 'back', link: previousPage }, - { name: this.docId, link: '#' } - ]; - } + showDesignDoc: function (database, ddoc) { + this.codeEditor(database, '_design/' + ddoc); + }, - let previousPage = Helpers.getPreviousPageForDoc(this.database); - return [ - { type: 'back', link: previousPage }, - { name: 'New Document', link: '#' } - ]; - }, + duplicateDoc: function (newId) { + var doc = this.doc, + database = this.database; - codeEditor: function (databaseName, docId) { - this.database = new Databases.Model({ id: databaseName }); + this.docID = newId; - if (docId) { - this.doc = new Documents.Doc({ _id: docId }, { database: this.database, fetchConflicts: true }); - } + var that = this; + doc.copy(newId).then(function () { + doc.set({ _id: newId }); + that.wasCloned = true; - Actions.initDocEditor({ doc: this.doc, database: this.database }); - this.setComponent('#dashboard-content', ReactComponents.DocEditorController, { - database: this.database, - isNewDoc: docId ? false : true, - previousPage: '#/' + Helpers.getPreviousPageForDoc(this.database) - }); - }, - - showDesignDoc: function (database, ddoc) { - this.codeEditor(database, '_design/' + ddoc); - }, - - duplicateDoc: function (newId) { - var doc = this.doc, - database = this.database; - - this.docID = newId; - - var that = this; - doc.copy(newId).then(function () { - doc.set({ _id: newId }); - that.wasCloned = true; - - FauxtonAPI.navigate('/database/' + database.safeID() + '/' + app.utils.safeURLName(newId), { trigger: true }); - FauxtonAPI.addNotification({ - msg: 'Document has been duplicated.' - }); - - }, function (error) { - var errorMsg = 'Could not duplicate document, reason: ' + error.responseText + '.'; - FauxtonAPI.addNotification({ - msg: errorMsg, - type: 'error' - }); + FauxtonAPI.navigate('/database/' + database.safeID() + '/' + app.utils.safeURLName(newId), { trigger: true }); + FauxtonAPI.addNotification({ + msg: 'Document has been duplicated.' }); - }, - apiUrl: function () { - return [this.doc.url('apiurl'), this.doc.documentation()]; - } - }); + }, function (error) { + var errorMsg = 'Could not duplicate document, reason: ' + error.responseText + '.'; + FauxtonAPI.addNotification({ + msg: errorMsg, + type: 'error' + }); + }); + }, + apiUrl: function () { + return [this.doc.url('apiurl'), this.doc.documentation()]; + } +}); - return { - DocEditorRouteObject: DocEditorRouteObject, - RevBrowserRouteObject: RevBrowserRouteObject - }; -}); +export default { + DocEditorRouteObject: DocEditorRouteObject, + RevBrowserRouteObject: RevBrowserRouteObject +}; http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/0ca35da7/app/addons/documents/routes-documents.js ---------------------------------------------------------------------- diff --git a/app/addons/documents/routes-documents.js b/app/addons/documents/routes-documents.js index 29ab8da..32f67c7 100644 --- a/app/addons/documents/routes-documents.js +++ b/app/addons/documents/routes-documents.js @@ -10,201 +10,192 @@ // License for the specific language governing permissions and limitations under // the License. -define([ - "../../app", - "../../core/api", - - // Modules - './shared-routes', - './views', - './changes/components.react', - './changes/actions', - '../databases/base', - './resources', - '../fauxton/components', - './index-results/stores', - './index-results/actions', - './index-results/index-results.components.react', - './pagination/pagination.react', - './header/header.react', - './header/header.actions', - './sidebar/actions', - './designdocinfo/actions', - './designdocinfo/components.react', - '../components/actions' -], - -function (app, FauxtonAPI, BaseRoute, Documents, Changes, ChangesActions, Databases, Resources, Components, - IndexResultStores, IndexResultsActions, IndexResultsComponents, ReactPagination, ReactHeader, ReactActions, - SidebarActions, DesignDocInfoActions, DesignDocInfoComponents, ComponentsActions) { - - var DocumentsRouteObject = BaseRoute.extend({ - layout: "with_tabs_sidebar", - routes: { - "database/:database/_all_docs(:extra)": { - route: "allDocs", - roles: ["fx_loggedIn"] - }, - "database/:database/_design/:ddoc/_info": { - route: "designDocMetadata", - roles: ['fx_loggedIn'] - }, - 'database/:database/_changes': 'changes' - }, - - events: { - "route:reloadDesignDocs": "reloadDesignDocs" - }, - - initialize: function (route, masterLayout, options) { - this.initViews(options[0]); - this.listenToLookaheadTray(); - }, - - establish: function () { - return [ - this.designDocs.fetch({ reset: true }), - this.allDatabases.fetchOnce() - ]; - }, - - initViews: function (dbName) { - this.databaseName = dbName; - this.database = new Databases.Model({id: this.databaseName}); - this.allDatabases = this.getAllDatabases(); - - this.createDesignDocsCollection(); - - this.rightHeader = this.setView("#right-header", new Documents.Views.RightAllDocsHeader({ - database: this.database - })); - - this.addLeftHeader(); - this.addSidebar(); - }, - - designDocMetadata: function (database, ddoc) { - this.removeComponent('#footer'); - this.removeComponent('#react-headerbar'); - this.removeComponent('#dashboard-upper-content'); - - var designDocInfo = new Resources.DdocInfo({ _id: "_design/" + ddoc }, { database: this.database }); - DesignDocInfoActions.fetchDesignDocInfo({ - ddocName: ddoc, - designDocInfo: designDocInfo - }); - this.setComponent("#dashboard-lower-content", DesignDocInfoComponents.DesignDocInfo); - - SidebarActions.selectNavItem('designDoc', { - designDocName: ddoc, - designDocSection: 'metadata' - }); - - this.leftheader.updateCrumbs(this.getCrumbs(this.database)); - this.rightHeader.hideQueryOptions(); - - this.apiUrl = [designDocInfo.url('apiurl'), designDocInfo.documentation()]; - }, - - /* - * docParams are the options collection uses to fetch from the server - * urlParams are what are shown in the url and to the user - * They are not the same when paginating - */ - allDocs: function (databaseName, options) { - var params = this.createParams(options), - urlParams = params.urlParams, - docParams = params.docParams, - collection; - - this.setComponent('#react-headerbar', ReactHeader.BulkDocumentHeaderController, {showIncludeAllDocs: true}); - this.setComponent('#footer', ReactPagination.Footer); - - this.leftheader.updateCrumbs(this.getCrumbs(this.database)); - - - // includes_docs = true if you are visiting the _replicator/_users databases - if (['_replicator', '_users'].indexOf(databaseName) > -1) { - docParams.include_docs = true; - urlParams = params.docParams; - var updatedURL = FauxtonAPI.urls('allDocs', 'app', databaseName, '?' + $.param(urlParams)); - FauxtonAPI.navigate(updatedURL, {trigger: false, replace: true}); - } - - this.database.buildAllDocs(docParams); - collection = this.database.allDocs; - - var tab = 'all-docs'; - if (docParams.startkey && docParams.startkey.indexOf("_design") > -1) { - tab = 'design-docs'; - } - - SidebarActions.selectNavItem(tab); - ComponentsActions.showDeleteDatabaseModal({showDeleteModal: false, dbId: ''}); - - this.removeComponent('#dashboard-upper-content'); - - if (!docParams) { - docParams = {}; - } - - var frozenCollection = app.utils.localStorageGet('include_docs_bulkdocs'); - window.localStorage.removeItem('include_docs_bulkdocs'); - - IndexResultsActions.newResultsList({ - collection: collection, - textEmptyIndex: 'No Documents Found', - bulkCollection: new Documents.BulkDeleteDocCollection(frozenCollection, { databaseId: this.database.safeID() }), - }); - - this.database.allDocs.paging.pageSize = IndexResultStores.indexResultsStore.getPerPage(); - - this.setComponent('#dashboard-lower-content', IndexResultsComponents.List); - - // this used to be a function that returned the object, but be warned: it caused a closure with a reference to - // the initial this.database object which can change - this.apiUrl = [this.database.allDocs.urlRef("apiurl", urlParams), this.database.allDocs.documentation()]; - - // update the rightHeader with the latest & greatest info - this.rightHeader.resetQueryOptions({ queryParams: urlParams }); - this.rightHeader.showQueryOptions(); - }, - - reloadDesignDocs: function (event) { - this.addSidebar(); // this ensures the design docs get reloaded - if (event && event.selectedTab) { - SidebarActions.selectNavItem(event.selectedTab); - } - }, - - changes: function () { - ChangesActions.initChanges({ - databaseName: this.database.id - }); - this.setComponent('#dashboard-upper-content', Changes.ChangesHeaderController); - this.setComponent("#dashboard-lower-content", Changes.ChangesController); - - this.removeComponent('#footer'); - this.removeComponent('#react-headerbar'); - - this.viewEditor && this.viewEditor.remove(); - - SidebarActions.selectNavItem('changes'); - this.leftheader.updateCrumbs(this.getCrumbs(this.database)); - this.rightHeader.hideQueryOptions(); - - this.apiUrl = function () { - return [FauxtonAPI.urls('changes', 'apiurl', this.database.id, ''), this.database.documentation()]; - }; - }, +import app from "../../app"; +import FauxtonAPI from "../../core/api"; +import BaseRoute from "./shared-routes"; +import Documents from "./views"; +import Changes from "./changes/components.react"; +import ChangesActions from "./changes/actions"; +import Databases from "../databases/base"; +import Resources from "./resources"; +import Components from "../fauxton/components"; +import IndexResultStores from "./index-results/stores"; +import IndexResultsActions from "./index-results/actions"; +import IndexResultsComponents from "./index-results/index-results.components.react"; +import ReactPagination from "./pagination/pagination.react"; +import ReactHeader from "./header/header.react"; +import ReactActions from "./header/header.actions"; +import SidebarActions from "./sidebar/actions"; +import DesignDocInfoActions from "./designdocinfo/actions"; +import DesignDocInfoComponents from "./designdocinfo/components.react"; +import ComponentsActions from "../components/actions"; + +var DocumentsRouteObject = BaseRoute.extend({ + layout: "with_tabs_sidebar", + routes: { + "database/:database/_all_docs(:extra)": { + route: "allDocs", + roles: ["fx_loggedIn"] + }, + "database/:database/_design/:ddoc/_info": { + route: "designDocMetadata", + roles: ['fx_loggedIn'] + }, + 'database/:database/_changes': 'changes' + }, + + events: { + "route:reloadDesignDocs": "reloadDesignDocs" + }, + + initialize: function (route, masterLayout, options) { + this.initViews(options[0]); + this.listenToLookaheadTray(); + }, + + establish: function () { + return [ + this.designDocs.fetch({ reset: true }), + this.allDatabases.fetchOnce() + ]; + }, + + initViews: function (dbName) { + this.databaseName = dbName; + this.database = new Databases.Model({id: this.databaseName}); + this.allDatabases = this.getAllDatabases(); + + this.createDesignDocsCollection(); + + this.rightHeader = this.setView("#right-header", new Documents.Views.RightAllDocsHeader({ + database: this.database + })); + + this.addLeftHeader(); + this.addSidebar(); + }, + + designDocMetadata: function (database, ddoc) { + this.removeComponent('#footer'); + this.removeComponent('#react-headerbar'); + this.removeComponent('#dashboard-upper-content'); + + var designDocInfo = new Resources.DdocInfo({ _id: "_design/" + ddoc }, { database: this.database }); + DesignDocInfoActions.fetchDesignDocInfo({ + ddocName: ddoc, + designDocInfo: designDocInfo + }); + this.setComponent("#dashboard-lower-content", DesignDocInfoComponents.DesignDocInfo); + + SidebarActions.selectNavItem('designDoc', { + designDocName: ddoc, + designDocSection: 'metadata' + }); + + this.leftheader.updateCrumbs(this.getCrumbs(this.database)); + this.rightHeader.hideQueryOptions(); + + this.apiUrl = [designDocInfo.url('apiurl'), designDocInfo.documentation()]; + }, + + /* + * docParams are the options collection uses to fetch from the server + * urlParams are what are shown in the url and to the user + * They are not the same when paginating + */ + allDocs: function (databaseName, options) { + var params = this.createParams(options), + urlParams = params.urlParams, + docParams = params.docParams, + collection; + + this.setComponent('#react-headerbar', ReactHeader.BulkDocumentHeaderController, {showIncludeAllDocs: true}); + this.setComponent('#footer', ReactPagination.Footer); + + this.leftheader.updateCrumbs(this.getCrumbs(this.database)); + + + // includes_docs = true if you are visiting the _replicator/_users databases + if (['_replicator', '_users'].indexOf(databaseName) > -1) { + docParams.include_docs = true; + urlParams = params.docParams; + var updatedURL = FauxtonAPI.urls('allDocs', 'app', databaseName, '?' + $.param(urlParams)); + FauxtonAPI.navigate(updatedURL, {trigger: false, replace: true}); + } + + this.database.buildAllDocs(docParams); + collection = this.database.allDocs; + + var tab = 'all-docs'; + if (docParams.startkey && docParams.startkey.indexOf("_design") > -1) { + tab = 'design-docs'; + } + + SidebarActions.selectNavItem(tab); + ComponentsActions.showDeleteDatabaseModal({showDeleteModal: false, dbId: ''}); + + this.removeComponent('#dashboard-upper-content'); - cleanup: function () { - // we're no longer interested in listening to the lookahead tray event on this route object - this.stopListening(FauxtonAPI.Events, 'lookaheadTray:update', this.onSelectDatabase); - FauxtonAPI.RouteObject.prototype.cleanup.apply(this); - } + if (!docParams) { + docParams = {}; + } + var frozenCollection = app.utils.localStorageGet('include_docs_bulkdocs'); + window.localStorage.removeItem('include_docs_bulkdocs'); + + IndexResultsActions.newResultsList({ + collection: collection, + textEmptyIndex: 'No Documents Found', + bulkCollection: new Documents.BulkDeleteDocCollection(frozenCollection, { databaseId: this.database.safeID() }), + }); + + this.database.allDocs.paging.pageSize = IndexResultStores.indexResultsStore.getPerPage(); + + this.setComponent('#dashboard-lower-content', IndexResultsComponents.List); + + // this used to be a function that returned the object, but be warned: it caused a closure with a reference to + // the initial this.database object which can change + this.apiUrl = [this.database.allDocs.urlRef("apiurl", urlParams), this.database.allDocs.documentation()]; + + // update the rightHeader with the latest & greatest info + this.rightHeader.resetQueryOptions({ queryParams: urlParams }); + this.rightHeader.showQueryOptions(); + }, + + reloadDesignDocs: function (event) { + this.addSidebar(); // this ensures the design docs get reloaded + if (event && event.selectedTab) { + SidebarActions.selectNavItem(event.selectedTab); + } + }, + + changes: function () { + ChangesActions.initChanges({ + databaseName: this.database.id }); + this.setComponent('#dashboard-upper-content', Changes.ChangesHeaderController); + this.setComponent("#dashboard-lower-content", Changes.ChangesController); + + this.removeComponent('#footer'); + this.removeComponent('#react-headerbar'); + + this.viewEditor && this.viewEditor.remove(); + + SidebarActions.selectNavItem('changes'); + this.leftheader.updateCrumbs(this.getCrumbs(this.database)); + this.rightHeader.hideQueryOptions(); + + this.apiUrl = function () { + return [FauxtonAPI.urls('changes', 'apiurl', this.database.id, ''), this.database.documentation()]; + }; + }, + + cleanup: function () { + // we're no longer interested in listening to the lookahead tray event on this route object + this.stopListening(FauxtonAPI.Events, 'lookaheadTray:update', this.onSelectDatabase); + FauxtonAPI.RouteObject.prototype.cleanup.apply(this); + } + +}); - return DocumentsRouteObject; - }); +export default DocumentsRouteObject; http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/0ca35da7/app/addons/documents/routes-index-editor.js ---------------------------------------------------------------------- diff --git a/app/addons/documents/routes-index-editor.js b/app/addons/documents/routes-index-editor.js index d1f760a..d371433 100644 --- a/app/addons/documents/routes-index-editor.js +++ b/app/addons/documents/routes-index-editor.js @@ -10,174 +10,165 @@ // License for the specific language governing permissions and limitations under // the License. -define([ - '../../app', - '../../core/api', - - // Modules - "./helpers", - './shared-routes', - './views', - './index-editor/components.react', - './index-editor/actions', - '../databases/base', - '../fauxton/components', - './index-results/stores', - './index-results/actions', - './index-results/index-results.components.react', - './pagination/pagination.react', - './header/header.react', - './header/header.actions', - './sidebar/actions' -], - -function (app, FauxtonAPI, Helpers, BaseRoute, Documents, IndexEditorComponents, ActionsIndexEditor, - Databases, Components, IndexResultsStores, IndexResultsActions, - IndexResultsComponents, ReactPagination, ReactHeader, ReactHeaderActions, SidebarActions) { - - - var IndexEditorAndResults = BaseRoute.extend({ - layout: 'with_tabs_sidebar', - routes: { - 'database/:database/new_view': { - route: 'createView', - roles: ['fx_loggedIn'] - }, - 'database/:database/new_view/:designDoc': { - route: 'createView', - roles: ['fx_loggedIn'] - }, - 'database/:database/_design/:ddoc/_view/:view': { - route: 'showView', - roles: ['fx_loggedIn'] - }, - 'database/:database/_design/:ddoc/_view/:view/edit': { - route: 'editView', - roles: ['fx_loggedIn'] - } - }, - - initialize: function (route, masterLayout, options) { - var databaseName = options[0]; - this.databaseName = databaseName; - this.database = new Databases.Model({id: databaseName}); - this.allDatabases = new Databases.List(); - this.createDesignDocsCollection(); - this.addLeftHeader(); - this.addSidebar(); +import app from "../../app"; +import FauxtonAPI from "../../core/api"; +import Helpers from "./helpers"; +import BaseRoute from "./shared-routes"; +import Documents from "./views"; +import IndexEditorComponents from "./index-editor/components.react"; +import ActionsIndexEditor from "./index-editor/actions"; +import Databases from "../databases/base"; +import Components from "../fauxton/components"; +import IndexResultsStores from "./index-results/stores"; +import IndexResultsActions from "./index-results/actions"; +import IndexResultsComponents from "./index-results/index-results.components.react"; +import ReactPagination from "./pagination/pagination.react"; +import ReactHeader from "./header/header.react"; +import ReactHeaderActions from "./header/header.actions"; +import SidebarActions from "./sidebar/actions"; + + +var IndexEditorAndResults = BaseRoute.extend({ + layout: 'with_tabs_sidebar', + routes: { + 'database/:database/new_view': { + route: 'createView', + roles: ['fx_loggedIn'] }, - - establish: function () { - return [ - this.designDocs.fetch({ reset: true }), - this.allDatabases.fetchOnce() - ]; + 'database/:database/new_view/:designDoc': { + route: 'createView', + roles: ['fx_loggedIn'] }, - - showView: function (databaseName, ddoc, viewName) { - var params = this.createParams(), - urlParams = params.urlParams, - docParams = params.docParams, - decodeDdoc = decodeURIComponent(ddoc); - - this.rightHeader = this.setView('#right-header', new Documents.Views.RightAllDocsHeader({ - database: this.database - })); - - viewName = viewName.replace(/\?.*$/, ''); - this.setComponent('#footer', ReactPagination.Footer); - - this.indexedDocs = new Documents.IndexCollection(null, { - database: this.database, - design: decodeDdoc, - view: viewName, - params: docParams, - paging: { - pageSize: IndexResultsStores.indexResultsStore.getPerPage() - } - }); - - ActionsIndexEditor.clearIndex(); - - IndexResultsActions.newResultsList({ - collection: this.indexedDocs, - bulkCollection: new Documents.BulkDeleteDocCollection([], { databaseId: this.database.safeID() }), - }); - - ActionsIndexEditor.fetchDesignDocsBeforeEdit({ - viewName: viewName, - newView: false, - database: this.database, - designDocs: this.designDocs, - designDocId: '_design/' + decodeDdoc - }); - - SidebarActions.selectNavItem('designDoc', { - designDocName: ddoc, - designDocSection: 'Views', - indexName: viewName - }); - - this.setComponent('#react-headerbar', ReactHeader.BulkDocumentHeaderController, {showIncludeAllDocs: true}); - this.setComponent('#dashboard-lower-content', IndexResultsComponents.List); - - this.apiUrl = function () { - return [this.indexedDocs.urlRef('apiurl'), FauxtonAPI.constants.DOC_URLS.GENERAL]; - }; - - this.showQueryOptions(urlParams, ddoc, viewName); + 'database/:database/_design/:ddoc/_view/:view': { + route: 'showView', + roles: ['fx_loggedIn'] }, - - createView: function (database, _designDoc) { - var newDesignDoc = true; - var designDoc = 'new-doc'; - - if (_designDoc) { - designDoc = '_design/' + _designDoc; - newDesignDoc = false; + 'database/:database/_design/:ddoc/_view/:view/edit': { + route: 'editView', + roles: ['fx_loggedIn'] + } + }, + + initialize: function (route, masterLayout, options) { + var databaseName = options[0]; + this.databaseName = databaseName; + this.database = new Databases.Model({id: databaseName}); + this.allDatabases = new Databases.List(); + this.createDesignDocsCollection(); + this.addLeftHeader(); + this.addSidebar(); + }, + + establish: function () { + return [ + this.designDocs.fetch({ reset: true }), + this.allDatabases.fetchOnce() + ]; + }, + + showView: function (databaseName, ddoc, viewName) { + var params = this.createParams(), + urlParams = params.urlParams, + docParams = params.docParams, + decodeDdoc = decodeURIComponent(ddoc); + + this.rightHeader = this.setView('#right-header', new Documents.Views.RightAllDocsHeader({ + database: this.database + })); + + viewName = viewName.replace(/\?.*$/, ''); + this.setComponent('#footer', ReactPagination.Footer); + + this.indexedDocs = new Documents.IndexCollection(null, { + database: this.database, + design: decodeDdoc, + view: viewName, + params: docParams, + paging: { + pageSize: IndexResultsStores.indexResultsStore.getPerPage() } - - ActionsIndexEditor.fetchDesignDocsBeforeEdit({ - viewName: 'new-view', - newView: true, - database: this.database, - designDocs: this.designDocs, - designDocId: designDoc, - newDesignDoc: newDesignDoc - }); - - this.removeComponent('#react-headerbar'); - this.removeComponent('#footer'); - this.setComponent('#dashboard-lower-content', IndexEditorComponents.EditorController); - SidebarActions.selectNavItem(''); - }, - - editView: function (databaseName, ddocName, viewName) { - ActionsIndexEditor.fetchDesignDocsBeforeEdit({ - viewName: viewName, - newView: false, - database: this.database, - designDocs: this.designDocs, - designDocId: '_design/' + ddocName - }); - - SidebarActions.selectNavItem('designDoc', { - designDocName: ddocName, - designDocSection: 'Views', - indexName: viewName - }); - - this.apiUrl = function () { - return [FauxtonAPI.urls('view', 'apiurl', databaseName, ddocName, viewName), FauxtonAPI.constants.DOC_URLS.GENERAL]; - }; - - this.removeView('#right-header'); - this.removeComponent('#react-headerbar'); - this.removeComponent('#footer'); - this.setComponent('#dashboard-lower-content', IndexEditorComponents.EditorController); + }); + + ActionsIndexEditor.clearIndex(); + + IndexResultsActions.newResultsList({ + collection: this.indexedDocs, + bulkCollection: new Documents.BulkDeleteDocCollection([], { databaseId: this.database.safeID() }), + }); + + ActionsIndexEditor.fetchDesignDocsBeforeEdit({ + viewName: viewName, + newView: false, + database: this.database, + designDocs: this.designDocs, + designDocId: '_design/' + decodeDdoc + }); + + SidebarActions.selectNavItem('designDoc', { + designDocName: ddoc, + designDocSection: 'Views', + indexName: viewName + }); + + this.setComponent('#react-headerbar', ReactHeader.BulkDocumentHeaderController, {showIncludeAllDocs: true}); + this.setComponent('#dashboard-lower-content', IndexResultsComponents.List); + + this.apiUrl = function () { + return [this.indexedDocs.urlRef('apiurl'), FauxtonAPI.constants.DOC_URLS.GENERAL]; + }; + + this.showQueryOptions(urlParams, ddoc, viewName); + }, + + createView: function (database, _designDoc) { + var newDesignDoc = true; + var designDoc = 'new-doc'; + + if (_designDoc) { + designDoc = '_design/' + _designDoc; + newDesignDoc = false; } - }); + ActionsIndexEditor.fetchDesignDocsBeforeEdit({ + viewName: 'new-view', + newView: true, + database: this.database, + designDocs: this.designDocs, + designDocId: designDoc, + newDesignDoc: newDesignDoc + }); + + this.removeComponent('#react-headerbar'); + this.removeComponent('#footer'); + this.setComponent('#dashboard-lower-content', IndexEditorComponents.EditorController); + SidebarActions.selectNavItem(''); + }, + + editView: function (databaseName, ddocName, viewName) { + ActionsIndexEditor.fetchDesignDocsBeforeEdit({ + viewName: viewName, + newView: false, + database: this.database, + designDocs: this.designDocs, + designDocId: '_design/' + ddocName + }); + + SidebarActions.selectNavItem('designDoc', { + designDocName: ddocName, + designDocSection: 'Views', + indexName: viewName + }); + + this.apiUrl = function () { + return [FauxtonAPI.urls('view', 'apiurl', databaseName, ddocName, viewName), FauxtonAPI.constants.DOC_URLS.GENERAL]; + }; + + this.removeView('#right-header'); + this.removeComponent('#react-headerbar'); + this.removeComponent('#footer'); + this.setComponent('#dashboard-lower-content', IndexEditorComponents.EditorController); + } - return IndexEditorAndResults; }); + +export default IndexEditorAndResults; http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/0ca35da7/app/addons/documents/routes-mango.js ---------------------------------------------------------------------- diff --git a/app/addons/documents/routes-mango.js b/app/addons/documents/routes-mango.js index ee11d34..b76f799 100644 --- a/app/addons/documents/routes-mango.js +++ b/app/addons/documents/routes-mango.js @@ -10,158 +10,145 @@ // License for the specific language governing permissions and limitations under // the License. -define([ - '../../app', - '../../core/api', - // Modules - './helpers', - './shared-routes', - '../databases/resources', - - '../fauxton/components', - './resources', - './views', - './index-results/actions', - './index-results/stores', - - './header/header.react', - './header/header.actions', - './pagination/pagination.react', - - './mango/mango.components.react', - './mango/mango.actions', - './mango/mango.stores', - './index-results/index-results.components.react', - './sidebar/actions', -], - - -function (app, FauxtonAPI, Helpers, BaseRoute, Databases, - Components, Resources, Documents, IndexResultsActions, IndexResultStores, - ReactHeader, ReactActions, ReactPagination, - MangoComponents, MangoActions, MangoStores, IndexResultsComponents, SidebarActions) { - - var MangoIndexEditorAndQueryEditor = BaseRoute.extend({ - layout: 'two_pane', - routes: { - 'database/:database/_index': { - route: 'createIndex', - roles: ['fx_loggedIn'] - }, - 'database/:database/_find': { - route: 'findUsingIndex', - roles: ['fx_loggedIn'] - }, +import app from "../../app"; +import FauxtonAPI from "../../core/api"; +import Helpers from "./helpers"; +import BaseRoute from "./shared-routes"; +import Databases from "../databases/resources"; +import Components from "../fauxton/components"; +import Resources from "./resources"; +import Documents from "./views"; +import IndexResultsActions from "./index-results/actions"; +import IndexResultStores from "./index-results/stores"; +import ReactHeader from "./header/header.react"; +import ReactActions from "./header/header.actions"; +import ReactPagination from "./pagination/pagination.react"; +import MangoComponents from "./mango/mango.components.react"; +import MangoActions from "./mango/mango.actions"; +import MangoStores from "./mango/mango.stores"; +import IndexResultsComponents from "./index-results/index-results.components.react"; +import SidebarActions from "./sidebar/actions"; + +var MangoIndexEditorAndQueryEditor = BaseRoute.extend({ + layout: 'two_pane', + routes: { + 'database/:database/_index': { + route: 'createIndex', + roles: ['fx_loggedIn'] }, - - initialize: function (route, masterLayout, options) { - var databaseName = options[0]; - this.databaseName = databaseName; - this.database = new Databases.Model({id: databaseName}); - - // magic methods - this.allDatabases = this.getAllDatabases(); - this.createDesignDocsCollection(); - this.addLeftHeader(); - - MangoActions.setDatabase({ - database: this.database - }); + 'database/:database/_find': { + route: 'findUsingIndex', + roles: ['fx_loggedIn'] }, - - findUsingIndex: function () { - var params = this.createParams(), - urlParams = params.urlParams, - mangoResultCollection = new Resources.MangoDocumentCollection(null, { - database: this.database, - paging: { - pageSize: IndexResultStores.indexResultsStore.getPerPage() - } - }), - mangoIndexList = new Resources.MangoIndexCollection(null, { - database: this.database, - params: null, - paging: { - pageSize: IndexResultStores.indexResultsStore.getPerPage() - } - }); - - SidebarActions.selectNavItem('mango-query'); - this.setComponent('#react-headerbar', ReactHeader.BulkDocumentHeaderController, {showIncludeAllDocs: false}); - this.setComponent('#footer', ReactPagination.Footer); - - IndexResultsActions.newMangoResultsList({ - collection: mangoResultCollection, - textEmptyIndex: 'No Results', - bulkCollection: new Documents.BulkDeleteDocCollection([], { databaseId: this.database.safeID() }), - }); - - MangoActions.getIndexList({ - indexList: mangoIndexList - }); - - var url = FauxtonAPI.urls('allDocs', 'app', this.database.safeID(), '?limit=' + FauxtonAPI.constants.DATABASES.DOCUMENT_LIMIT); - this.breadcrumbs = this.setView('#breadcrumbs', new Components.Breadcrumbs({ - toggleDisabled: true, - crumbs: [ - {'type': 'back', 'link': url}, - {'name': app.i18n.en_US['mango-title-editor'], 'link': url} - ] - })); - - this.setComponent('#left-content', MangoComponents.MangoQueryEditorController, { - description: app.i18n.en_US['mango-descripton'], - editorTitle: app.i18n.en_US['mango-title-editor'], - additionalIndexesText: app.i18n.en_US['mango-additional-indexes-heading'] - }); - this.setComponent('#dashboard-lower-content', IndexResultsComponents.List); - - this.apiUrl = function () { - return [mangoResultCollection.urlRef('query-apiurl', urlParams), FauxtonAPI.constants.DOC_URLS.MANGO_SEARCH]; - }; - }, - - createIndex: function (database) { - var params = this.createParams(), - urlParams = params.urlParams, - mangoIndexCollection = new Resources.MangoIndexCollection(null, { - database: this.database, - params: null, - paging: { - pageSize: IndexResultStores.indexResultsStore.getPerPage() - } - }); - - IndexResultsActions.newResultsList({ - collection: mangoIndexCollection, - bulkCollection: new Documents.MangoBulkDeleteDocCollection([], { databaseId: this.database.safeID() }), - typeOfIndex: 'mango' - }); - - var url = FauxtonAPI.urls('allDocs', 'app', this.database.safeID(), '?limit=' + FauxtonAPI.constants.DATABASES.DOCUMENT_LIMIT); - this.breadcrumbs = this.setView('#breadcrumbs', new Components.Breadcrumbs({ - toggleDisabled: true, - crumbs: [ - {'type': 'back', 'link': url}, - {'name': app.i18n.en_US['mango-indexeditor-title'], 'link': url } - ] - })); - - this.setComponent('#react-headerbar', ReactHeader.BulkDocumentHeaderController, {showIncludeAllDocs: false}); - this.setComponent('#footer', ReactPagination.Footer); - - this.setComponent('#dashboard-lower-content', IndexResultsComponents.List); - this.setComponent('#left-content', MangoComponents.MangoIndexEditorController, { - description: app.i18n.en_US['mango-descripton-index-editor'] - }); - - this.apiUrl = function () { - return [mangoIndexCollection.urlRef('index-apiurl', urlParams), FauxtonAPI.constants.DOC_URLS.MANGO_INDEX]; - }; - } - }); - - return { - MangoIndexEditorAndQueryEditor: MangoIndexEditorAndQueryEditor - }; + }, + + initialize: function (route, masterLayout, options) { + var databaseName = options[0]; + this.databaseName = databaseName; + this.database = new Databases.Model({id: databaseName}); + + // magic methods + this.allDatabases = this.getAllDatabases(); + this.createDesignDocsCollection(); + this.addLeftHeader(); + + MangoActions.setDatabase({ + database: this.database + }); + }, + + findUsingIndex: function () { + var params = this.createParams(), + urlParams = params.urlParams, + mangoResultCollection = new Resources.MangoDocumentCollection(null, { + database: this.database, + paging: { + pageSize: IndexResultStores.indexResultsStore.getPerPage() + } + }), + mangoIndexList = new Resources.MangoIndexCollection(null, { + database: this.database, + params: null, + paging: { + pageSize: IndexResultStores.indexResultsStore.getPerPage() + } + }); + + SidebarActions.selectNavItem('mango-query'); + this.setComponent('#react-headerbar', ReactHeader.BulkDocumentHeaderController, {showIncludeAllDocs: false}); + this.setComponent('#footer', ReactPagination.Footer); + + IndexResultsActions.newMangoResultsList({ + collection: mangoResultCollection, + textEmptyIndex: 'No Results', + bulkCollection: new Documents.BulkDeleteDocCollection([], { databaseId: this.database.safeID() }), + }); + + MangoActions.getIndexList({ + indexList: mangoIndexList + }); + + var url = FauxtonAPI.urls('allDocs', 'app', this.database.safeID(), '?limit=' + FauxtonAPI.constants.DATABASES.DOCUMENT_LIMIT); + this.breadcrumbs = this.setView('#breadcrumbs', new Components.Breadcrumbs({ + toggleDisabled: true, + crumbs: [ + {'type': 'back', 'link': url}, + {'name': app.i18n.en_US['mango-title-editor'], 'link': url} + ] + })); + + this.setComponent('#left-content', MangoComponents.MangoQueryEditorController, { + description: app.i18n.en_US['mango-descripton'], + editorTitle: app.i18n.en_US['mango-title-editor'], + additionalIndexesText: app.i18n.en_US['mango-additional-indexes-heading'] + }); + this.setComponent('#dashboard-lower-content', IndexResultsComponents.List); + + this.apiUrl = function () { + return [mangoResultCollection.urlRef('query-apiurl', urlParams), FauxtonAPI.constants.DOC_URLS.MANGO_SEARCH]; + }; + }, + + createIndex: function (database) { + var params = this.createParams(), + urlParams = params.urlParams, + mangoIndexCollection = new Resources.MangoIndexCollection(null, { + database: this.database, + params: null, + paging: { + pageSize: IndexResultStores.indexResultsStore.getPerPage() + } + }); + + IndexResultsActions.newResultsList({ + collection: mangoIndexCollection, + bulkCollection: new Documents.MangoBulkDeleteDocCollection([], { databaseId: this.database.safeID() }), + typeOfIndex: 'mango' + }); + + var url = FauxtonAPI.urls('allDocs', 'app', this.database.safeID(), '?limit=' + FauxtonAPI.constants.DATABASES.DOCUMENT_LIMIT); + this.breadcrumbs = this.setView('#breadcrumbs', new Components.Breadcrumbs({ + toggleDisabled: true, + crumbs: [ + {'type': 'back', 'link': url}, + {'name': app.i18n.en_US['mango-indexeditor-title'], 'link': url } + ] + })); + + this.setComponent('#react-headerbar', ReactHeader.BulkDocumentHeaderController, {showIncludeAllDocs: false}); + this.setComponent('#footer', ReactPagination.Footer); + + this.setComponent('#dashboard-lower-content', IndexResultsComponents.List); + this.setComponent('#left-content', MangoComponents.MangoIndexEditorController, { + description: app.i18n.en_US['mango-descripton-index-editor'] + }); + + this.apiUrl = function () { + return [mangoIndexCollection.urlRef('index-apiurl', urlParams), FauxtonAPI.constants.DOC_URLS.MANGO_INDEX]; + }; + } }); + +export default { + MangoIndexEditorAndQueryEditor: MangoIndexEditorAndQueryEditor +}; http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/0ca35da7/app/addons/documents/routes.js ---------------------------------------------------------------------- diff --git a/app/addons/documents/routes.js b/app/addons/documents/routes.js index f994780..3d09471 100644 --- a/app/addons/documents/routes.js +++ b/app/addons/documents/routes.js @@ -10,23 +10,17 @@ // License for the specific language governing permissions and limitations under // the License. -define([ - './views', - './routes-documents', - './routes-doc-editor', - './routes-index-editor', - './routes-mango' -], +import Documents from "./views"; +import DocumentsRouteObject from "./routes-documents"; +import docEditor from "./routes-doc-editor"; +import IndexEditorRouteObject from "./routes-index-editor"; +import Mango from "./routes-mango"; +Documents.RouteObjects = [ + docEditor.DocEditorRouteObject, + docEditor.RevBrowserRouteObject, + DocumentsRouteObject, + IndexEditorRouteObject, + Mango.MangoIndexEditorAndQueryEditor +]; - -function (Documents, DocumentsRouteObject, docEditor, IndexEditorRouteObject, Mango) { - Documents.RouteObjects = [ - docEditor.DocEditorRouteObject, - docEditor.RevBrowserRouteObject, - DocumentsRouteObject, - IndexEditorRouteObject, - Mango.MangoIndexEditorAndQueryEditor - ]; - - return Documents; -}); +export default Documents;