diff --git a/.gitignore b/.gitignore index 245f622e04..c946ff4276 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,8 @@ *~ /dev_bundle /dev_bundle*.tar.gz +/android_bundle +/android_bundle*.tar.gz /dist \#*\# .\#* diff --git a/docs/client/api.html b/docs/client/api.html index 8fcd5739c4..2e5a0c2458 100644 --- a/docs/client/api.html +++ b/docs/client/api.html @@ -20,6 +20,7 @@ don't want served to the client, such as code containing passwords or authentication mechanisms, should be kept in the `server` directory. {{/note}} +{{> api_box isCordova}} {{> autoApiBox "Meteor.startup"}} @@ -601,7 +602,7 @@ your application. Each document is a EJSON object. It includes an `_id` property whose value is unique in the collection, which Meteor will set when you first create the document. - // common code on client and server declares livedata-managed mongo + // common code on client and server declares a DDP-managed mongo // collection. Chatrooms = new Meteor.Collection("chatrooms"); Messages = new Meteor.Collection("messages"); @@ -1347,7 +1348,6 @@ See the [full list of modifiers](http://www.mongodb.org/display/DOCS/Updating#Updating-ModifierOperations). - {{> apiBoxTitle name="Sort Specifiers" id="sortspecifiers"}} Sorts may be specified using your choice of several syntaxes: @@ -2219,8 +2219,8 @@ any `Template.myTemplate` object. Helpers on `Template.body` are only available in the `
` tags of your app. To register a global helper, use [Template.registerHelper](#template_registerhelper). - Event maps on `Template.body` don't apply to elements added to the + body via `Blaze.render`, jQuery, or the DOM API, or to the body element itself. To handle events on the body, window, or document, use jQuery or the DOM API. diff --git a/docs/client/api.js b/docs/client/api.js index 7601a6b57c..593d6586f8 100644 --- a/docs/client/api.js +++ b/docs/client/api.js @@ -12,6 +12,13 @@ Template.api.isServer = { descr: ["Boolean variable. True if running in server environment."] }; +Template.api.isCordova = { + id: "meteor_iscordova", + name: "Meteor.isCordova", + locus: "Anywhere", + descr: ["Boolean variable. True if running in a Cordova mobile environment."] +}; + Template.api.startup = { id: "meteor_startup", name: "Meteor.startup(func)", @@ -24,6 +31,36 @@ Template.api.startup = { ] }; +Template.api.absoluteUrl = { + id: "meteor_absoluteurl", + name: "Meteor.absoluteUrl([path], [options])", + locus: "Anywhere", + descr: ["Generate an absolute URL pointing to the application. The server " + + "reads from the `ROOT_URL` environment variable to determine " + + "where it is running. This is taken care of automatically for " + + "apps deployed with `meteor deploy`, but must be provided when " + + "using `meteor build`."], + args: [ + {name: "path", + type: "String", + descr: 'A path to append to the root URL. Do not include a leading "`/`".' + } + ], + options: [ + {name: "secure", + type: "Boolean", + descr: "Create an HTTPS URL." + }, + {name: "replaceLocalhost", + type: "Boolean", + descr: "Replace localhost with 127.0.0.1. Useful for services that don't recognize localhost as a domain name."}, + {name: "rootUrl", + type: "String", + descr: "Override the default ROOT_URL from the server environment. For example: \"`http://foo.example.com`\"" + } + ] +}; + Template.api.settings = { id: "meteor_settings", name: "Meteor.settings", @@ -1094,6 +1131,11 @@ Template.api.loginWithExternalService = { name: "userEmail", type: "String", descr: "An email address that the external service will use to pre-fill the login prompt. Currently only supported with Meteor developer accounts." + }, + { + name: "loginStyle", + type: "String", + descr: 'Login style ("popup" or "redirect", defaults to the login service configuration). The "popup" style opens the login page in a separate popup window, which is generally preferred because the Meteor application doesn\'t need to be reloaded. The "redirect" style redirects the Meteor application\'s window to the login page, and the login service provider redirects back to the Meteor application which is then reloaded. The "redirect" style can be used in situations where a popup window can\'t be opened, such as in a mobile UIWebView. The "redirect" style however relies on session storage which isn\'t available in Safari private mode, so the "popup" style will be forced if session storage can\'t be used.' } ] }; diff --git a/docs/client/commandline.html b/docs/client/commandline.html index 0410e9bb26..7e3f522d8d 100644 --- a/docs/client/commandline.html +++ b/docs/client/commandline.html @@ -176,6 +176,25 @@ Lists all the packages that you have added to your project. For each package, lists the version that you are using. Lets you know if a newer version of that package is available. +Which permissions to request from the user for each external service.
","name":"requestPermissions"},{"type":{"names":["Object"]},"description":"To ask the user for permission to act on their behalf when offline, map the relevant external service to true. Currently only supported with Google. See Meteor.loginWithExternalService for more details.
If true, forces the user to approve the app's permissions, even if previously approved. Currently only supported with Google.
","name":"forceApprovalPrompt"},{"type":{"names":["String"]},"description":"Which fields to display in the user creation form. One of 'USERNAME_AND_EMAIL', 'USERNAME_AND_OPTIONAL_EMAIL', 'USERNAME_ONLY', or 'EMAIL_ONLY' (default).
New users with an email address will receive an address verification email.
","name":"sendVerificationEmail"},{"type":{"names":["Boolean"]},"description":"Calls to createUser from the client will be rejected. In addition, if you are using accounts-ui, the "Create account" link will not be available.
If set to a string, only allows new users if the domain part of their email address matches the string. If set to a function, only allows new users if the function returns true. The function is passed the full email address of the proposed new user. Works with password-based sign-in and external services that expose email addresses (Google, Facebook, GitHub). All existing users still can log in after enabling this option. Example: Accounts.config({ restrictCreationByEmailDomain: 'school.edu' }).
The number of days from when a user logs in until their token expires and they are logged out. Defaults to 90. Set to null to disable login expiration.
When using the oauth-encryption package, the 16 byte key using to encrypt sensitive account credentials in the database, encoded in base64. This option may only be specifed on the server. See packages/oauth-encryption/README.md for details.
Called whenever a login is attempted (either successful or unsuccessful). A login can be aborted by returning a falsy value or throwing an exception.
","name":"func"}],"name":"validateLoginAttempt","longname":"Accounts.validateLoginAttempt","kind":"function","memberof":"Accounts","scope":"static","___id":"T000002R000086","___s":true,"options":[],"locus":"Server"},"onLogin":{"meta":{"range":[1898,1973],"filename":"accounts_server.js","lineno":60,"path":"/Users/dgreenspan/meteor/meteor/packages/accounts-base","code":{"id":"astnode100001089","name":"Accounts.onLogin","type":"FunctionExpression","value":"function","paramnames":["func"]}},"summary":"Register a callback to be called after a login attempt succeeds.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"params":[{"type":{"names":["function"]},"description":"The callback to be called when login is successful.
","name":"func"}],"name":"onLogin","longname":"Accounts.onLogin","kind":"function","memberof":"Accounts","scope":"static","___id":"T000002R000087","___s":true,"options":[],"locus":"Server"},"onLoginFailure":{"meta":{"range":[2155,2244],"filename":"accounts_server.js","lineno":69,"path":"/Users/dgreenspan/meteor/meteor/packages/accounts-base","code":{"id":"astnode100001103","name":"Accounts.onLoginFailure","type":"FunctionExpression","value":"function","paramnames":["func"]}},"summary":"Register a callback to be called after a login attempt fails.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"params":[{"type":{"names":["function"]},"description":"The callback to be called after the login has failed.
","name":"func"}],"name":"onLoginFailure","longname":"Accounts.onLoginFailure","kind":"function","memberof":"Accounts","scope":"static","___id":"T000002R000088","___s":true,"options":[],"locus":"Server"},"onCreateUser":{"meta":{"range":[32747,32906],"filename":"accounts_server.js","lineno":986,"path":"/Users/dgreenspan/meteor/meteor/packages/accounts-base","code":{"id":"astnode100003117","name":"Accounts.onCreateUser","type":"FunctionExpression","value":"function","paramnames":["func"]},"vars":{"onCreateUserHook":null}},"summary":"Customize new user creation.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"params":[{"type":{"names":["function"]},"description":"Called whenever a new user is created. Return the new user object, or throw an Error to abort the creation.
Called whenever a new user is created. Takes the new user object, and returns true to allow the creation or false to abort.
","name":"func"}],"name":"validateNewUser","longname":"Accounts.validateNewUser","kind":"function","memberof":"Accounts","scope":"static","___id":"T000002R000310","___s":true,"options":[],"locus":"Server"},"createUser":{"meta":{"range":[3912,4457],"filename":"password_client.js","lineno":108,"path":"/Users/dgreenspan/meteor/meteor/packages/accounts-password","code":{"id":"astnode100009903","name":"Accounts.createUser","type":"FunctionExpression","value":"function","paramnames":["options","callback"]},"vars":{"options":null,"options.password":null}},"summary":"Create a new user.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["Object"]},"name":"options"},{"type":{"names":["function"]},"optional":true,"description":"Client only, optional callback. Called with no arguments on success, or with a single Error argument on failure.
A unique name for this user.
","name":"username"},{"type":{"names":["String"]},"description":"The user's email address.
","name":"email"},{"type":{"names":["String"]},"description":"The user's password. This is not sent in plain text over the wire.
","name":"password"},{"type":{"names":["Object"]},"description":"The user's profile, typically including the name field.
The user's current password. This is not sent in plain text over the wire.
","name":"oldPassword"},{"type":{"names":["String"]},"description":"A new password for the user. This is not sent in plain text over the wire.
","name":"newPassword"},{"type":{"names":["function"]},"optional":true,"description":"Optional callback. Called with no arguments on success, or with a single Error argument on failure.
Optional callback. Called with no arguments on success, or with a single Error argument on failure.
The email address to send a password reset link.
","name":"email"}],"locus":"Client"},"resetPassword":{"meta":{"range":[8168,8544],"filename":"password_client.js","lineno":226,"path":"/Users/dgreenspan/meteor/meteor/packages/accounts-password","code":{"id":"astnode100010139","name":"Accounts.resetPassword","type":"FunctionExpression","value":"function","paramnames":["token","newPassword","callback"]}},"summary":"Reset the password for a user using a token received in email. Logs the user in afterwards.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"params":[{"type":{"names":["String"]},"description":"The token retrieved from the reset password URL.
","name":"token"},{"type":{"names":["String"]},"description":"A new password for the user. This is not sent in plain text over the wire.
","name":"newPassword"},{"type":{"names":["function"]},"optional":true,"description":"Optional callback. Called with no arguments on success, or with a single Error argument on failure.
The token retrieved from the verification URL.
","name":"token"},{"type":{"names":["function"]},"optional":true,"description":"Optional callback. Called with no arguments on success, or with a single Error argument on failure.
The id of the user to update.
","name":"userId"},{"type":{"names":["String"]},"description":"A new password for the user.
","name":"newPassword"}],"name":"setPassword","longname":"Accounts.setPassword","kind":"function","memberof":"Accounts","scope":"static","___id":"T000002R000827","___s":true,"options":[],"locus":"Server"},"sendResetPasswordEmail":{"meta":{"range":[11744,13104],"filename":"password_server.js","lineno":364,"path":"/Users/dgreenspan/meteor/meteor/packages/accounts-password","code":{"id":"astnode100011172","name":"Accounts.sendResetPasswordEmail","type":"FunctionExpression","value":"function","paramnames":["userId","email"]},"vars":{"user":null,"email":null,"token":null,"when":null,"tokenRecord":null,".reset":null,"resetPasswordUrl":null,"options":null,"options.html":null}},"summary":"Send an email with a link the user can use to reset their password.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"params":[{"type":{"names":["String"]},"description":"The id of the user to send email to.
","name":"userId"},{"type":{"names":["String"]},"optional":true,"description":"Optional. Which address of the user's to send the email to. This address must be in the user's emails list. Defaults to the first email in the list.
The id of the user to send email to.
","name":"userId"},{"type":{"names":["String"]},"optional":true,"description":"Optional. Which address of the user's to send the email to. This address must be in the user's emails list. Defaults to the first email in the list.
The id of the user to send email to.
","name":"userId"},{"type":{"names":["String"]},"optional":true,"description":"Optional. Which address of the user's to send the email to. This address must be in the user's emails list. Defaults to the first unverified email in the list.
Optional callback. Called with no arguments on success, or with a single Error argument on failure.
Optional callback. Called with no arguments on success, or with a single Error argument on failure.
Either a string interpreted as a username or an email; or an object with a single key: email, username or id.
The user's password.
","name":"password"},{"type":{"names":["function"]},"optional":true,"description":"Optional callback. Called with no arguments on success, or with a single Error argument on failure.
The function to call when a new DDP connection is established.
","name":"callback"}],"memberof":"Meteor","name":"onConnection","longname":"Meteor.onConnection","kind":"function","scope":"static","___id":"T000002R064664","___s":true,"options":[],"locus":"Server"},"publish":{"meta":{"range":[45712,47678],"filename":"livedata_server.js","lineno":1370,"path":"/Users/dgreenspan/meteor/meteor/packages/livedata","code":{"id":"astnode100368441","name":"publish","type":"FunctionExpression","value":"function"},"vars":{"self":null,"options":null,"self.warned_about_autopublish":null,"self.publish_handlers[undefined]":null,"":null}},"summary":"Publish a record set.","memberof":"Meteor","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"params":[{"type":{"names":["String"]},"description":"Name of the record set. If null, the set has no name, and the record set is automatically sent to all connected clients.
Function called on the server each time a client subscribes. Inside the function, this is the publish handler object, described below. If the client passed arguments to subscribe, the function is called with the same arguments.
Dictionary whose keys are method names and values are functions.
","name":"methods"}],"memberof":"Meteor","name":"methods","longname":"Meteor.methods","kind":"function","scope":"static","___id":"T000002R064682","___s":true,"options":[],"locus":"Anywhere"},"startup":{"meta":{"range":[651,1018],"filename":"startup_client.js","lineno":27,"path":"/Users/dgreenspan/meteor/meteor/packages/meteor","code":{"id":"astnode100388147","name":"Meteor.startup","type":"FunctionExpression","value":"function","paramnames":["cb"]},"vars":{"doScroll":null,"":null}},"summary":"Run code when a client or a server starts.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["function"]},"description":"A function to run on startup.
","name":"func"}],"name":"startup","longname":"Meteor.startup","kind":"function","memberof":"Meteor","scope":"static","___id":"T000002R066213","___s":true,"options":[],"locus":"Anywhere"},"setTimeout":{"meta":{"range":[969,1082],"filename":"timers.js","lineno":28,"path":"/Users/dgreenspan/meteor/meteor/packages/meteor","code":{"id":"astnode100388310","name":"setTimeout","type":"FunctionExpression","value":"function"}},"memberof":"Meteor","summary":"Call a function in the future after waiting for a specified delay.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["function"]},"description":"The function to run
","name":"func"},{"type":{"names":["Number"]},"description":"Number of milliseconds to wait before calling function
","name":"delay"}],"name":"setTimeout","longname":"Meteor.setTimeout","kind":"function","scope":"static","___id":"T000002R066219","___s":true,"options":[],"locus":"Anywhere"},"setInterval":{"meta":{"range":[1351,1467],"filename":"timers.js","lineno":39,"path":"/Users/dgreenspan/meteor/meteor/packages/meteor","code":{"id":"astnode100388323","name":"setInterval","type":"FunctionExpression","value":"function"}},"memberof":"Meteor","summary":"Call a function repeatedly, with a time delay between calls.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["function"]},"description":"The function to run
","name":"func"},{"type":{"names":["Number"]},"description":"Number of milliseconds to wait between each function call.
","name":"delay"}],"name":"setInterval","longname":"Meteor.setInterval","kind":"function","scope":"static","___id":"T000002R066220","___s":true,"options":[],"locus":"Anywhere"},"clearInterval":{"meta":{"range":[1677,1738],"filename":"timers.js","lineno":49,"path":"/Users/dgreenspan/meteor/meteor/packages/meteor","code":{"id":"astnode100388336","name":"clearInterval","type":"FunctionExpression","value":"function"}},"memberof":"Meteor","summary":"Cancel a repeating function call scheduled by `Meteor.setInterval`.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["Number"]},"description":"The handle returned by Meteor.setInterval
The handle returned by Meteor.setTimeout
A path to append to the root URL. Do not include a leading "/".
Create an HTTPS URL.
","name":"secure"},{"type":{"names":["Boolean"]},"description":"Replace localhost with 127.0.0.1. Useful for services that don't recognize localhost as a domain name.
","name":"replaceLocalhost"},{"type":{"names":["String"]},"description":"Override the default ROOT_URL from the server environment. For example: "http://foo.example.com"
Function to call. It will be called with three arguments: the document, a 0-based index, and cursor itself.
","name":"callback"},{"type":{"names":["Any"]},"optional":true,"description":"An object which will be the value of this inside callback.
Function to call. It will be called with three arguments: the document, a 0-based index, and cursor itself.
","name":"callback"},{"type":{"names":["Any"]},"optional":true,"description":"An object which will be the value of this inside callback.
Functions to call to deliver the result set as it changes
","name":"callbacks"}],"name":"observe","longname":"Meteor.Collection.Cursor#observe","kind":"function","___id":"T000002R066579","___s":true,"options":[],"locus":"Anywhere"},"Cursor#observeChanges":{"meta":{"range":[10538,14491],"filename":"minimongo.js","lineno":322,"path":"/Users/dgreenspan/meteor/meteor/packages/minimongo","code":{"id":"astnode100393444","name":"observeChanges","type":"FunctionExpression","value":"function"},"vars":{"self":null,"ordered":null,"query":null,"qid":null,"self.collection.queries[undefined]":null,"query.results":null,"query.resultsSnapshot":null,"wrapCallback":null,"":null,"query.added":null,"query.changed":null,"query.removed":null,"query.addedBefore":null,"query.movedBefore":null,"each":null,"handle":null}},"summary":"Watch a query. Receive callbacks as the result set changes. Only the differences between the old and new documents are passed to the callbacks.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"memberof":"Meteor.Collection.Cursor","scope":"instance","params":[{"type":{"names":["Object"]},"description":"Functions to call to deliver the result set as it changes
","name":"callbacks"}],"name":"observeChanges","longname":"Meteor.Collection.Cursor#observeChanges","kind":"function","___id":"T000002R066581","___s":true,"options":[],"locus":"Anywhere"},"Cursor":{"meta":{"range":[2780,2967],"filename":"minimongo.js","lineno":89,"path":"/Users/dgreenspan/meteor/meteor/packages/minimongo","code":{}},"summary":"To create a cursor, use find. To access the documents in a cursor, use forEach, map, or fetch.","kind":"class","name":"Cursor","memberof":"Meteor.Collection","tags":[{"originalTitle":"instanceName","title":"instancename","text":"cursor","value":"cursor"}],"scope":"static","longname":"Meteor.Collection.Cursor","___id":"T000002R066521","___s":true,"options":[],"params":[],"instancename":"cursor"},"meta":{"range":[1419,8435],"filename":"collection.js","lineno":20,"path":"/Users/dgreenspan/meteor/meteor/packages/mongo-livedata","code":{"id":"astnode100412011","name":"Meteor.Collection","type":"FunctionExpression","value":"function","paramnames":["name","options"]},"vars":{"self":null,"name":null,"options":null,"options.connection":null,"self._makeNewID":null,"":null,"self._transform":null,"self._connection":null,"options._driver":null,"self._collection":null,"self._name":null,"ok":null}},"summary":"Constructor for a Collection","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"},{"originalTitle":"instancename","title":"instancename","text":"collection","value":"collection"}],"kind":"class","params":[{"type":{"names":["String"]},"description":"The name of the collection. If null, creates an unmanaged (unsynchronized) local collection.
","name":"name"},{"type":{"names":["Object"]},"optional":true,"name":"options"}],"name":"Collection","longname":"Meteor.Collection","memberof":"Meteor","scope":"static","___id":"T000002R068400","___s":true,"options":[{"type":{"names":["Object"]},"description":"The server connection that will manage this collection. Uses the default connection if not specified. Pass the return value of calling DDP.connect to specify a different server. Pass null to specify no connection. Unmanaged (name is null) collections cannot specify a connection.
The method of generating the _id fields of new documents in this collection. Possible values:
'STRING': random strings'MONGO': random Meteor.Collection.ObjectID valuesThe default id generation technique is 'STRING'.
An optional transformation function. Documents will be passed through this function before being returned from fetch or findOne, and before being passed to callbacks of observe, map, forEach, allow, and deny. Transforms are not applied for the callbacks of observeChanges or to cursors returned from publish functions.
Optional. The 24-character hexadecimal contents of the ObjectID to create
","name":"hexString"}],"name":"ObjectID","longname":"Meteor.Collection.ObjectID","memberof":"Meteor.Collection","scope":"static","___id":"T000002R068525","___s":true,"options":[],"locus":"Anywhere"}},"Collection#insert":{"meta":{"range":[15926,16365],"filename":"collection.js","lineno":407,"path":"/Users/dgreenspan/meteor/meteor/packages/mongo-livedata","code":{}},"summary":"Insert a document in the collection. Returns its unique _id.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"kind":"function","name":"insert","memberof":"Meteor.Collection","scope":"instance","params":[{"type":{"names":["Object"]},"description":"The document to insert. May not yet have an _id attribute, in which case Meteor will generate one for you.
","name":"doc"},{"type":{"names":["function"]},"optional":true,"description":"Optional. If present, called with an error object as the first argument and, if no error, the _id as the second.
","name":"callback"}],"longname":"Meteor.Collection#insert","___id":"T000002R068398","___s":true,"options":[],"locus":"Anywhere"},"Collection#update":{"meta":{"range":[16367,17137],"filename":"collection.js","lineno":417,"path":"/Users/dgreenspan/meteor/meteor/packages/mongo-livedata","code":{}},"summary":"Modify one or more documents in the collection. Returns the number of affected documents.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"kind":"function","name":"update","memberof":"Meteor.Collection","scope":"instance","params":[{"type":{"names":["MongoSelector"]},"description":"Specifies which documents to modify
","name":"selector"},{"type":{"names":["MongoModifier"]},"description":"Specifies how to modify the documents
","name":"modifier"},{"type":{"names":["Object"]},"optional":true,"name":"options"},{"type":{"names":["function"]},"optional":true,"description":"Optional. If present, called with an error object as the first argument and, if no error, the number of affected documents as the second.
","name":"callback"}],"longname":"Meteor.Collection#update","___id":"T000002R068399","___s":true,"options":[{"type":{"names":["Boolean"]},"description":"True to modify all matching documents; false to only modify one of the matching documents (the default).
","name":"multi"},{"type":{"names":["Boolean"]},"description":"True to insert a document if no matching documents are found.
","name":"upsert"}],"locus":"Anywhere"},"Collection#find":{"meta":{"range":[9195,10059],"filename":"collection.js","lineno":245,"path":"/Users/dgreenspan/meteor/meteor/packages/mongo-livedata","code":{}},"summary":"Find the documents in a collection that match the selector.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"kind":"function","name":"find","memberof":"Meteor.Collection","scope":"instance","params":[{"type":{"names":["MongoSelector"]},"optional":true,"description":"A query describing the documents to find
","name":"selector"},{"type":{"names":["Object"]},"optional":true,"name":"options"}],"longname":"Meteor.Collection#find","___id":"T000002R068450","___s":true,"options":[{"type":{"names":["MongoSortSpecifier"]},"description":"Sort order (default: natural order)
","name":"sort"},{"type":{"names":["Number"]},"description":"Number of results to skip at the beginning
","name":"skip"},{"type":{"names":["Number"]},"description":"Maximum number of results to return
","name":"limit"},{"type":{"names":["MongoFieldSpecifier"]},"description":"Dictionary of fields to return or exclude.
","name":"fields"},{"type":{"names":["Boolean"]},"description":"(Client only) Default true; pass false to disable reactivity
Overrides transform on the Collection for this cursor. Pass null to disable transformation.
A query describing the documents to find
","name":"selector"},{"type":{"names":["Object"]},"optional":true,"name":"options"}],"longname":"Meteor.Collection#findOne","___id":"T000002R068454","___s":true,"options":[{"type":{"names":["MongoSortSpecifier"]},"description":"Sort order (default: natural order)
","name":"sort"},{"type":{"names":["Number"]},"description":"Number of results to skip at the beginning
","name":"skip"},{"type":{"names":["MongoFieldSpecifier"]},"description":"Dictionary of fields to return or exclude.
","name":"fields"},{"type":{"names":["Boolean"]},"description":"(Client only) Default true; pass false to disable reactivity
","name":"reactive"},{"type":{"names":["function"]},"description":"Overrides transform on the Collection for this cursor. Pass null to disable transformation.
Specifies which documents to remove
","name":"selector"},{"type":{"names":["function"]},"optional":true,"description":"Optional. If present, called with an error object as its argument.
","name":"callback"}],"longname":"Meteor.Collection#remove","___id":"T000002R068481","___s":true,"options":[],"locus":"Anywhere"},"Collection#upsert":{"meta":{"range":[23713,24109],"filename":"collection.js","lineno":593,"path":"/Users/dgreenspan/meteor/meteor/packages/mongo-livedata","code":{"id":"astnode100413615","name":"Meteor.Collection.prototype.upsert","type":"FunctionExpression","value":"function","paramnames":["selector","modifier","options","callback"]},"vars":{"self":null,"callback":null,"options":null}},"summary":"Modify one or more documents in the collection, or insert one if no matching documents were found. Returns an object with keys `numberAffected` (the number of documents modified) and `insertedId` (the unique _id of the document that was inserted, if any).","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["MongoSelector"]},"description":"Specifies which documents to modify
","name":"selector"},{"type":{"names":["MongoModifier"]},"description":"Specifies how to modify the documents
","name":"modifier"},{"type":{"names":["Object"]},"optional":true,"name":"options"},{"type":{"names":["function"]},"optional":true,"description":"Optional. If present, called with an error object as the first argument and, if no error, the number of affected documents as the second.
","name":"callback"}],"name":"upsert","longname":"Meteor.Collection#upsert","kind":"function","memberof":"Meteor.Collection","scope":"instance","___id":"T000002R068511","___s":true,"options":[{"type":{"names":["Boolean"]},"description":"True to modify all matching documents; false to only modify one of the matching documents (the default).
","name":"multi"}],"locus":"Anywhere"},"Collection#allow":{"meta":{"range":[29204,29310],"filename":"collection.js","lineno":727,"path":"/Users/dgreenspan/meteor/meteor/packages/mongo-livedata","code":{"id":"astnode100413999","name":"Meteor.Collection.prototype.allow","type":"FunctionExpression","value":"function","paramnames":["options"]}},"summary":"Allow users to write directly to this collection from client code, subject to limitations you define.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"params":[{"type":{"names":["Object"]},"name":"options"}],"name":"allow","longname":"Meteor.Collection#allow","kind":"function","memberof":"Meteor.Collection","scope":"instance","___id":"T000002R068532","___s":true,"options":[{"type":{"names":["function"]},"name":"insert"},{"type":{"names":["function"]},"name":"update"},{"type":{"names":["function"]},"description":"Functions that look at a proposed modification to the database and return true if it should be allowed.
","name":"remove"},{"type":{"names":["Array.Optional performance enhancement. Limits the fields that will be fetched from the database for inspection by your update and remove functions.
Overrides transform on the Collection. Pass null to disable transformation.
Functions that look at a proposed modification to the database and return true if it should be denied, even if an allow rule says otherwise.
Optional performance enhancement. Limits the fields that will be fetched from the database for inspection by your update and remove functions.
Overrides transform on the Collection. Pass null to disable transformation.
A numeric error code, likely similar to an HTTP code (eg, 404, 500).
","name":"error"},{"type":{"names":["String"]},"optional":true,"description":"Optional. A short human-readable summary of the error, like 'Not Found'.
","name":"reason"},{"type":{"names":["String"]},"optional":true,"description":"Optional. Additional information about the error, like a textual stack trace.
","name":"details"}],"name":"Error","longname":"Meteor.Error","memberof":"Meteor","scope":"static","___id":"T000002R065930","___s":true,"options":[],"locus":"Anywhere"}},"MethodInvocation#isSimulation":{"comment":"/**\n * @summary Access inside a method invocation. Boolean value, true if this invocation is a stub.\n * @locus Anywhere\n * @name isSimulation\n * @memberOf MethodInvocation\n * @instance\n */","meta":{"range":[895,1097],"filename":"livedata_common.js","lineno":24,"path":"/Users/dgreenspan/meteor/meteor/packages/livedata","code":{}},"summary":"Access inside a method invocation. Boolean value, true if this invocation is a stub.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"name":"isSimulation","memberof":"MethodInvocation","scope":"instance","longname":"MethodInvocation#isSimulation","kind":"member","___id":"T000002R063084","___s":true,"locus":"Anywhere"},"MethodInvocation#userId":{"comment":"/**\n * @summary The id of the user that made this method call, or `null` if no user was logged in.\n * @locus Anywhere\n * @name userId\n * @memberOf MethodInvocation\n * @instance\n */","meta":{"range":[1407,1600],"filename":"livedata_common.js","lineno":41,"path":"/Users/dgreenspan/meteor/meteor/packages/livedata","code":{}},"summary":"The id of the user that made this method call, or `null` if no user was logged in.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"name":"userId","memberof":"MethodInvocation","scope":"instance","longname":"MethodInvocation#userId","kind":"member","___id":"T000002R063088","___s":true,"locus":"Anywhere"},"MethodInvocation#connection":{"comment":"/**\n * @summary Access inside a method invocation. The [connection](#meteor_onconnection) that this method was received on. `null` if the method is not associated with a connection, eg. a server initiated method call.\n * @locus Server\n * @name connection\n * @memberOf MethodInvocation\n * @instance\n */","meta":{"range":[1852,2166],"filename":"livedata_common.js","lineno":56,"path":"/Users/dgreenspan/meteor/meteor/packages/livedata","code":{}},"summary":"Access inside a method invocation. The [connection](#meteor_onconnection) that this method was received on. `null` if the method is not associated with a connection, eg. a server initiated method call.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"name":"connection","memberof":"MethodInvocation","scope":"instance","longname":"MethodInvocation#connection","kind":"member","___id":"T000002R063091","___s":true,"locus":"Server"},"Subscription#connection":{"comment":"/**\n * @summary Access inside the publish function. The incoming [connection](#meteor_onconnection) for this subscription.\n * @locus Server\n * @name connection\n * @memberOf Subscription\n * @instance\n */","meta":{"range":[27477,27692],"filename":"livedata_server.js","lineno":863,"path":"/Users/dgreenspan/meteor/meteor/packages/livedata","code":{}},"summary":"Access inside the publish function. The incoming [connection](#meteor_onconnection) for this subscription.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"name":"connection","memberof":"Subscription","scope":"instance","longname":"Subscription#connection","kind":"member","___id":"T000002R064588","___s":true,"locus":"Server"},"Subscription#userId":{"comment":"/**\n * @summary Access inside the publish function. The id of the logged-in user, or `null` if no user is logged in.\n * @locus Server\n * @memberOf Subscription\n * @name userId\n * @instance\n */","meta":{"range":[28731,28936],"filename":"livedata_server.js","lineno":905,"path":"/Users/dgreenspan/meteor/meteor/packages/livedata","code":{}},"summary":"Access inside the publish function. The id of the logged-in user, or `null` if no user is logged in.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"memberof":"Subscription","name":"userId","scope":"instance","longname":"Subscription#userId","kind":"member","___id":"T000002R064600","___s":true,"locus":"Server"},"Tracker":{"active":{"comment":"/**\n * @summary True if there is a current computation, meaning that dependencies on reactive data sources will be tracked and potentially cause the current computation to be rerun.\n * @locus Client\n */","meta":{"range":[418,440],"filename":"tracker.js","lineno":13,"path":"/Users/dgreenspan/meteor/meteor/packages/tracker","code":{"id":"astnode100506995","name":"Tracker.active","type":"Literal","value":"false","paramnames":[]}},"summary":"True if there is a current computation, meaning that dependencies on reactive data sources will be tracked and potentially cause the current computation to be rerun.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"name":"active","longname":"Tracker.active","kind":"member","memberof":"Tracker","scope":"static","___id":"T000002R076192","___s":true,"locus":"Client"},"currentComputation":{"comment":"/**\n * @summary The current computation, or `null` if there isn't one. The current computation is the [`Tracker.Computation`](#tracker_computation) object created by the innermost active call to `Tracker.autorun`, and it's the computation that gains dependencies when reactive data sources are accessed.\n * @locus Client\n */","meta":{"range":[824,857],"filename":"tracker.js","lineno":21,"path":"/Users/dgreenspan/meteor/meteor/packages/tracker","code":{"id":"astnode100507001","name":"Tracker.currentComputation","type":"Literal","value":"null","paramnames":[]}},"summary":"The current computation, or `null` if there isn't one. The current computation is the [`Tracker.Computation`](#tracker_computation) object created by the innermost active call to `Tracker.autorun`, and it's the computation that gains dependencies when reactive data sources are accessed.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"name":"currentComputation","longname":"Tracker.currentComputation","kind":"member","memberof":"Tracker","scope":"static","___id":"T000002R076193","___s":true,"locus":"Client"},"Computation#stopped":{"comment":"/**\n * @summary True if this computation has been stopped.\n * @locus Client\n * @memberOf Tracker.Computation\n * @instance\n * @name stopped\n */","meta":{"range":[4547,4702],"filename":"tracker.js","lineno":132,"path":"/Users/dgreenspan/meteor/meteor/packages/tracker","code":{}},"summary":"True if this computation has been stopped.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"memberof":"Tracker.Computation","scope":"instance","name":"stopped","longname":"Tracker.Computation#stopped","kind":"member","___id":"T000002R076219","___s":true,"locus":"Client"},"Computation#invalidated":{"comment":"/**\n * @summary True if this computation has been invalidated (and not yet rerun), or if it has been stopped.\n * @locus Client\n * @memberOf Tracker.Computation\n * @instance\n * @name invalidated\n */","meta":{"range":[4784,4994],"filename":"tracker.js","lineno":143,"path":"/Users/dgreenspan/meteor/meteor/packages/tracker","code":{}},"summary":"True if this computation has been invalidated (and not yet rerun), or if it has been stopped.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"memberof":"Tracker.Computation","scope":"instance","name":"invalidated","longname":"Tracker.Computation#invalidated","kind":"member","___id":"T000002R076221","___s":true,"locus":"Client"},"Computation#firstRun":{"comment":"/**\n * @summary True during the initial run of the computation at the time `Tracker.autorun` is called, and false on subsequent reruns and at other times.\n * @locus Client\n * @memberOf Tracker.Computation\n * @instance\n * @name firstRun\n */","meta":{"range":[5077,5329],"filename":"tracker.js","lineno":154,"path":"/Users/dgreenspan/meteor/meteor/packages/tracker","code":{}},"summary":"True during the initial run of the computation at the time `Tracker.autorun` is called, and false on subsequent reruns and at other times.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"memberof":"Tracker.Computation","scope":"instance","name":"firstRun","longname":"Tracker.Computation#firstRun","kind":"member","___id":"T000002R076223","___s":true,"locus":"Client"},"Computation":{"meta":{"range":[4266,5759],"filename":"tracker.js","lineno":122,"path":"/Users/dgreenspan/meteor/meteor/packages/tracker","code":{"id":"astnode100507250","name":"Tracker.Computation","type":"FunctionExpression","value":"function","paramnames":["f","parent"]},"vars":{"constructingComputation":null,"self":null,"self.stopped":null,"self.invalidated":null,"self.firstRun":null,"self._id":null,"self._onInvalidateCallbacks":null,"self._parent":null,"self._func":null,"self._recomputing":null,"errored":null}},"summary":"A Computation object represents code that is repeatedly rerun\nin response to\nreactive data changes. Computations don't have return values; they just\nperform actions, such as rerendering a template on the screen. Computations\nare created using Tracker.autorun. Use stop to prevent further rerunning of a\ncomputation.","tags":[{"originalTitle":"instancename","title":"instancename","text":"computation","value":"computation"}],"name":"Computation","longname":"Tracker.Computation","kind":"function","memberof":"Tracker","scope":"static","___id":"T000002R076216","___s":true,"options":[],"params":[],"instancename":"computation"},"Computation#onInvalidate":{"meta":{"range":[6268,6602],"filename":"tracker.js","lineno":189,"path":"/Users/dgreenspan/meteor/meteor/packages/tracker","code":{"id":"astnode100507352","name":"Tracker.Computation.prototype.onInvalidate","type":"FunctionExpression","value":"function","paramnames":["f"]},"vars":{"self":null,"":null}},"summary":"Registers `callback` to run when this computation is next invalidated, or runs it immediately if the computation is already invalidated. The callback is run exactly once and not upon future invalidations unless `onInvalidate` is called again after the computation becomes valid again.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"params":[{"type":{"names":["function"]},"description":"Function to be called on invalidation. Receives one argument, the computation that was invalidated.
","name":"callback"}],"name":"onInvalidate","longname":"Tracker.Computation#onInvalidate","kind":"function","memberof":"Tracker.Computation","scope":"instance","___id":"T000002R076233","___s":true,"options":[],"locus":"Client"},"Computation#invalidate":{"meta":{"range":[6748,7393],"filename":"tracker.js","lineno":210,"path":"/Users/dgreenspan/meteor/meteor/packages/tracker","code":{"id":"astnode100507404","name":"Tracker.Computation.prototype.invalidate","type":"FunctionExpression","value":"function","paramnames":[]},"vars":{"self":null,"self.invalidated":null,"i":null,"f":null,"":null,"self._onInvalidateCallbacks":null}},"summary":"Invalidates this computation so that it will be rerun.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"name":"invalidate","longname":"Tracker.Computation#invalidate","kind":"function","memberof":"Tracker.Computation","scope":"instance","___id":"T000002R076235","___s":true,"options":[],"params":[],"locus":"Client"},"Computation#stop":{"meta":{"range":[7520,7648],"filename":"tracker.js","lineno":239,"path":"/Users/dgreenspan/meteor/meteor/packages/tracker","code":{"id":"astnode100507487","name":"Tracker.Computation.prototype.stop","type":"FunctionExpression","value":"function","paramnames":[]},"vars":{"this.stopped":null}},"summary":"Prevents this computation from rerunning.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"name":"stop","longname":"Tracker.Computation#stop","kind":"function","memberof":"Tracker.Computation","scope":"instance","___id":"T000002R076242","___s":true,"options":[],"params":[],"locus":"Client"},"Dependency#depend":{"meta":{"range":[9967,10409],"filename":"tracker.js","lineno":317,"path":"/Users/dgreenspan/meteor/meteor/packages/tracker","code":{"id":"astnode100507639","name":"Tracker.Dependency.prototype.depend","type":"FunctionExpression","value":"function","paramnames":["computation"]},"vars":{"computation":null,"self":null,"id":null,"self._dependentsById[undefined]":null,"":null}},"summary":"Declares that the current computation (or `fromComputation` if given) depends on `dependency`. The computation will be invalidated the next time `dependency` changes.\n\nIf there is no current computation and `depend()` is called with no arguments, it does nothing and returns false.\n\nReturns true if the computation is a new dependent of `dependency` rather than an existing one.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"params":[{"type":{"names":["Tracker.Computation"]},"optional":true,"description":"An optional computation declared to depend on dependency instead of the current computation.
The function to run. It receives one argument: the Computation object that will be returned.
","name":"runFunc"}],"name":"autorun","longname":"Tracker.autorun","kind":"function","memberof":"Tracker","scope":"static","___id":"T000002R076280","___s":true,"options":[],"locus":"Client"},"nonreactive":{"meta":{"range":[14340,14533],"filename":"tracker.js","lineno":465,"path":"/Users/dgreenspan/meteor/meteor/packages/tracker","code":{"id":"astnode100507941","name":"Tracker.nonreactive","type":"FunctionExpression","value":"function","paramnames":["f"]},"vars":{"previous":null}},"summary":"Run a function without tracking dependencies.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"params":[{"type":{"names":["function"]},"description":"A function to call immediately.
","name":"func"}],"name":"nonreactive","longname":"Tracker.nonreactive","kind":"function","memberof":"Tracker","scope":"static","___id":"T000002R076283","___s":true,"options":[],"locus":"Client"},"onInvalidate":{"meta":{"range":[14970,15155],"filename":"tracker.js","lineno":482,"path":"/Users/dgreenspan/meteor/meteor/packages/tracker","code":{"id":"astnode100507969","name":"Tracker.onInvalidate","type":"FunctionExpression","value":"function","paramnames":["f"]}},"summary":"Registers a new [`onInvalidate`](#computation_oninvalidate) callback on the current computation (which must exist), to be called immediately when the current computation is invalidated or stopped.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"params":[{"type":{"names":["function"]},"description":"A callback function that will be invoked as func(c), where c is the computation on which the callback is registered.
A function to call at flush time.
","name":"callback"}],"name":"afterFlush","longname":"Tracker.afterFlush","kind":"function","memberof":"Tracker","scope":"static","___id":"T000002R076286","___s":true,"options":[],"locus":"Client"},"Dependency":{"meta":{"range":[9057,9122],"filename":"tracker.js","lineno":297,"path":"/Users/dgreenspan/meteor/meteor/packages/tracker","code":{"id":"astnode100507626","name":"Tracker.Dependency","type":"FunctionExpression","value":"function","paramnames":[]},"vars":{"this._dependentsById":null}},"summary":"A Dependency represents an atomic unit of reactive data that a\ncomputation might depend on. Reactive data sources such as Session or\nMinimongo internally create different Dependency objects for different\npieces of data, each of which may be depended on by multiple computations.\nWhen the data changes, the computations are invalidated.","kind":"class","tags":[{"originalTitle":"instanceName","title":"instancename","text":"dependency","value":"dependency"}],"name":"Dependency","longname":"Tracker.Dependency","memberof":"Tracker","scope":"static","___id":"T000002R076255","___s":true,"options":[],"params":[],"instancename":"dependency"}},"EJSON":{"newBinary":{"meta":{"range":[1470,1769],"filename":"base64.js","lineno":70,"path":"/Users/dgreenspan/meteor/meteor/packages/ejson","code":{"id":"astnode100271811","name":"EJSON.newBinary","type":"FunctionExpression","value":"function","paramnames":["len"]},"vars":{"ret":null,"i":null,"ret.$Uint8ArrayPolyfill":null}},"summary":"Allocate a new buffer of binary data that EJSON can serialize.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["Number"]},"description":"The number of bytes of binary data to allocate.
","name":"size"}],"name":"newBinary","longname":"EJSON.newBinary","kind":"function","memberof":"EJSON","scope":"static","___id":"T000002R051022","___s":true,"options":[],"locus":"Anywhere"},"addType":{"meta":{"range":[1156,1321],"filename":"ejson.js","lineno":24,"path":"/Users/dgreenspan/meteor/meteor/packages/ejson","code":{"id":"astnode100272661","name":"EJSON.addType","type":"FunctionExpression","value":"function","paramnames":["name","factory"]},"vars":{"customTypes[undefined]":null}},"summary":"Add a custom datatype to EJSON.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["String"]},"description":"A tag for your custom type; must be unique among custom data types defined in your project, and must match the result of your type's typeName method.
A function that deserializes a JSON-compatible value into an instance of your type. This should match the serialization performed by your type's toJSONValue method.
A value to serialize to plain JSON.
","name":"val"}],"name":"toJSONValue","longname":"EJSON.toJSONValue","kind":"function","memberof":"EJSON","scope":"static","___id":"T000002R051153","___s":true,"options":[],"locus":"Anywhere"},"fromJSONValue":{"meta":{"range":[7910,8166],"filename":"ejson.js","lineno":262,"path":"/Users/dgreenspan/meteor/meteor/packages/ejson","code":{"id":"astnode100273476","name":"EJSON.fromJSONValue","type":"FunctionExpression","value":"function","paramnames":["item"]},"vars":{"changed":null,"item":null}},"summary":"Deserialize an EJSON value from its plain JSON representation.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["JSONCompatible"]},"description":"A value to deserialize into EJSON.
","name":"val"}],"name":"fromJSONValue","longname":"EJSON.fromJSONValue","kind":"function","memberof":"EJSON","scope":"static","___id":"T000002R051164","___s":true,"options":[],"locus":"Anywhere"},"stringify":{"meta":{"range":[8794,9037],"filename":"ejson.js","lineno":283,"path":"/Users/dgreenspan/meteor/meteor/packages/ejson","code":{"id":"astnode100273517","name":"EJSON.stringify","type":"FunctionExpression","value":"function","paramnames":["item","options"]},"vars":{"json":null}},"summary":"Serialize a value to a string.\n\nFor EJSON values, the serialization fully represents the value. For non-EJSON values, serializes the same way as `JSON.stringify`.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["EJSON"]},"description":"A value to stringify.
","name":"val"},{"type":{"names":["Object"]},"optional":true,"name":"options"}],"name":"stringify","longname":"EJSON.stringify","kind":"function","memberof":"EJSON","scope":"static","___id":"T000002R051167","___s":true,"options":[{"type":{"names":["Boolean","Integer","String"]},"description":"Indents objects and arrays for easy readability. When true, indents by 2 spaces; when an integer, indents by that number of spaces; and when a string, uses the string as the indentation pattern.
When true, stringifies keys in an object in sorted order.
A string to parse into an EJSON value.
","name":"str"}],"name":"parse","longname":"EJSON.parse","kind":"function","memberof":"EJSON","scope":"static","___id":"T000002R051169","___s":true,"options":[],"locus":"Anywhere"},"isBinary":{"meta":{"range":[9595,9749],"filename":"ejson.js","lineno":308,"path":"/Users/dgreenspan/meteor/meteor/packages/ejson","code":{"id":"astnode100273586","name":"EJSON.isBinary","type":"FunctionExpression","value":"function","paramnames":["obj"]}},"summary":"Returns true if `x` is a buffer of binary data, as returned from [`EJSON.newBinary`](#ejson_new_binary).","params":[{"type":{"names":["Object"]},"description":"The variable to check.
","name":"x"}],"tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"name":"isBinary","longname":"EJSON.isBinary","kind":"function","memberof":"EJSON","scope":"static","___id":"T000002R051170","___s":true,"options":[],"locus":"Anywhere"},"equals":{"meta":{"range":[10268,12522],"filename":"ejson.js","lineno":321,"path":"/Users/dgreenspan/meteor/meteor/packages/ejson","code":{"id":"astnode100273611","name":"EJSON.equals","type":"FunctionExpression","value":"function","paramnames":["a","b","options"]},"vars":{"i":null,"keyOrderSensitive":null,"ret":null,"bKeys":null,"":null}},"summary":"Return true if `a` and `b` are equal to each other. Return false otherwise. Uses the `equals` method on `a` if present, otherwise performs a deep comparison.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["EJSON"]},"name":"a"},{"type":{"names":["EJSON"]},"name":"b"},{"type":{"names":["Object"]},"optional":true,"name":"options"}],"name":"equals","longname":"EJSON.equals","kind":"function","memberof":"EJSON","scope":"static","___id":"T000002R051171","___s":true,"options":[{"type":{"names":["Boolean"]},"description":"Compare in key sensitive order, if supported by the JavaScript implementation. For example, {a: 1, b: 2} is equal to {b: 2, a: 1} only when keyOrderSensitive is false. The default is false.
A value to copy.
","name":"val"}],"name":"clone","longname":"EJSON.clone","kind":"function","memberof":"EJSON","scope":"static","___id":"T000002R051182","___s":true,"options":[],"locus":"Anywhere"}},"HTTP":{"call":{"meta":{"range":[1471,6304],"filename":"httpcall_client.js","lineno":17,"path":"/Users/dgreenspan/meteor/meteor/packages/http","code":{"id":"astnode100310354","name":"HTTP.call","type":"FunctionExpression","value":"function","paramnames":["method","url","options","callback"]},"vars":{"callback":null,"options":null,"method":null,"headers":null,"content":null,"headers['Content-Type']":null,"params_for_url":null,"params_for_body":null,"query_match":null,"url":null,"username":null,"password":null,"colonLoc":null,"":null,"xhr":null,"k":null,"timed_out":null,"timer":null,"xhr.onreadystatechange":null}},"summary":"Perform an outbound HTTP request.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["String"]},"description":"The HTTP method to use, such as "GET", "POST", or "HEAD".
The URL to retrieve.
","name":"url"},{"type":{"names":["Object"]},"optional":true,"name":"options"},{"type":{"names":["function"]},"optional":true,"description":"Optional callback. If passed, the method runs asynchronously, instead of synchronously, and calls asyncCallback. On the client, this callback is required.
","name":"asyncCallback"}],"name":"call","longname":"HTTP.call","kind":"function","memberof":"HTTP","scope":"static","___id":"T000002R059617","___s":true,"options":[{"type":{"names":["String"]},"description":"String to use as the HTTP request body.
","name":"content"},{"type":{"names":["Object"]},"description":"JSON-able object to stringify and use as the HTTP request body. Overwrites content.
Query string to go in the URL. Overwrites any query string in url.
Dictionary of request parameters to be encoded and placed in the URL (for GETs) or request body (for POSTs). If content or data is specified, params will always be placed in the URL.
HTTP basic authentication string of the form "username:password"
Dictionary of strings, headers to add to the HTTP request.
","name":"headers"},{"type":{"names":["Number"]},"description":"Maximum time in milliseconds to wait for the request before failing. There is no timeout by default.
","name":"timeout"},{"type":{"names":["Boolean"]},"description":"If true, transparently follow HTTP redirects. Cannot be set to false on the client. Default true.
The value that should be returned by userId on this connection.
The URL of another Meteor application.
","name":"url"}],"name":"connect","longname":"DDP.connect","kind":"function","memberof":"DDP","scope":"static","___id":"T000002R063453","___s":true,"options":[],"locus":"Anywhere"}},"Subscription#error":{"meta":{"range":[35098,35259],"filename":"livedata_server.js","lineno":1074,"path":"/Users/dgreenspan/meteor/meteor/packages/livedata","code":{"id":"astnode100367727","name":"error","type":"FunctionExpression","value":"function"},"vars":{"self":null}},"summary":"Call inside the publish function. Stops this client's subscription, triggering a call on the client to the `onError` callback passed to [`Meteor.subscribe`](#meteor_subscribe), if any. If `error` is not a [`Meteor.Error`](#meteor_error), it will be [sanitized](#meteor_error).","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"params":[{"type":{"names":["Error"]},"description":"The error to pass to the client.
","name":"error"}],"scope":"instance","memberof":"Subscription","name":"error","longname":"Subscription#error","kind":"function","___id":"T000002R064624","___s":true,"options":[],"locus":"Server"},"Subscription#stop":{"meta":{"range":[35755,35903],"filename":"livedata_server.js","lineno":1092,"path":"/Users/dgreenspan/meteor/meteor/packages/livedata","code":{"id":"astnode100367752","name":"stop","type":"FunctionExpression","value":"function"},"vars":{"self":null}},"summary":"Call inside the publish function. Stops this client's subscription; the `onError` callback is *not* invoked on the client.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"scope":"instance","memberof":"Subscription","name":"stop","longname":"Subscription#stop","kind":"function","___id":"T000002R064626","___s":true,"options":[],"params":[],"locus":"Server"},"Subscription#onStop":{"meta":{"range":[36152,36306],"filename":"livedata_server.js","lineno":1106,"path":"/Users/dgreenspan/meteor/meteor/packages/livedata","code":{"id":"astnode100367775","name":"onStop","type":"FunctionExpression","value":"function"},"vars":{"self":null}},"summary":"Call inside the publish function. Registers a callback function to run when the subscription is stopped.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"memberof":"Subscription","scope":"instance","params":[{"type":{"names":["function"]},"description":"The callback function
","name":"func"}],"name":"onStop","longname":"Subscription#onStop","kind":"function","___id":"T000002R064628","___s":true,"options":[],"locus":"Server"},"Subscription#added":{"meta":{"range":[37038,37338],"filename":"livedata_server.js","lineno":1131,"path":"/Users/dgreenspan/meteor/meteor/packages/livedata","code":{"id":"astnode100367818","name":"added","type":"FunctionExpression","value":"function"},"vars":{"self":null,"id":null,"[undefined]":null}},"summary":"Call inside the publish function. Informs the subscriber that a document has been added to the record set.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"memberof":"Subscription","scope":"instance","params":[{"type":{"names":["String"]},"description":"The name of the collection that contains the new document.
","name":"collection"},{"type":{"names":["String"]},"description":"The new document's ID.
","name":"id"},{"type":{"names":["Object"]},"description":"The fields in the new document. If _id is present it is ignored.
The name of the collection that contains the changed document.
","name":"collection"},{"type":{"names":["String"]},"description":"The changed document's ID.
","name":"id"},{"type":{"names":["Object"]},"description":"The fields in the document that have changed, together with their new values. If a field is not present in fields it was left unchanged; if it is present in fields and has a value of undefined it was removed from the document. If _id is present it is ignored.
The name of the collection that the document has been removed from.
","name":"collection"},{"type":{"names":["String"]},"description":"The ID of the document that has been removed.
","name":"id"}],"name":"removed","longname":"Subscription#removed","kind":"function","___id":"T000002R064639","___s":true,"options":[],"locus":"Server"},"Subscription#ready":{"meta":{"range":[39354,39646],"filename":"livedata_server.js","lineno":1182,"path":"/Users/dgreenspan/meteor/meteor/packages/livedata","code":{"id":"astnode100367955","name":"ready","type":"FunctionExpression","value":"function"},"vars":{"self":null,"self._ready":null}},"summary":"Call inside the publish function. Informs the subscriber that an initial, complete snapshot of the record set has been sent. This will trigger a call on the client to the `onReady` callback passed to [`Meteor.subscribe`](#meteor_subscribe), if any.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"memberof":"Subscription","scope":"instance","name":"ready","longname":"Subscription#ready","kind":"function","___id":"T000002R064642","___s":true,"options":[],"params":[],"locus":"Server"},"Session":{"set":{"meta":{"range":[293,713],"filename":"session.js","lineno":12,"path":"/Users/dgreenspan/meteor/meteor/packages/session","code":{}},"memberof":"Session","kind":"function","name":"set","summary":"Set a variable in the session. Notify any listeners that the value has changed (eg: redraw templates, and rerun any [`Tracker.autorun`](#tracker_autorun) computations, that called [`Session.get`](#session_get) on this `key`.)","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"params":[{"type":{"names":["String"]},"description":"The key to set, eg, selectedItem
The new value for key
The key to set, eg, selectedItem
The new value for key
The name of the session variable to return
","name":"key"}],"scope":"static","longname":"Session.get","___id":"T000002R072602","___s":true,"options":[],"locus":"Client"},"equals":{"meta":{"range":[1528,1937],"filename":"session.js","lineno":38,"path":"/Users/dgreenspan/meteor/meteor/packages/session","code":{}},"memberof":"Session","kind":"function","name":"equals","summary":"Test if a session variable is equal to a value. If inside a [reactive computation](#reactivity), invalidate the computation the next time the variable changes to or from the value.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"params":[{"type":{"names":["String"]},"description":"The name of the session variable to test
","name":"key"},{"type":{"names":["String","Number","Boolean","null","undefined"]},"description":"The value to test against
","name":"value"}],"scope":"static","longname":"Session.equals","___id":"T000002R072606","___s":true,"options":[],"locus":"Client"}},"Subscription":{"meta":{"range":[27224,27324],"filename":"livedata_server.js","lineno":853,"path":"/Users/dgreenspan/meteor/meteor/packages/livedata","code":{}},"summary":"The server's side of a subscription","kind":"class","name":"Subscription","tags":[{"originalTitle":"instanceName","title":"instancename","text":"this","value":"this"}],"longname":"Subscription","___id":"T000002R064584","___s":true,"options":[],"params":[],"instancename":"this"}}; \ No newline at end of file +DocsData = {"Accounts":{"comment":"/**\n * @namespace Accounts\n * @summary The namespace for all accounts-related methods.\n */","meta":{"range":[0,90],"filename":"accounts_common.js","lineno":1,"path":"/Users/sashko/git/meteor/packages/accounts-base","code":{}},"kind":"namespace","name":"Accounts","summary":"The namespace for all accounts-related methods.","longname":"Accounts","___id":"T000002R000046","___s":true,"ui":{"comment":"/**\n * @summary Accounts UI\n * @namespace\n * @memberOf Accounts\n */","meta":{"range":[68,84],"filename":"accounts_ui.js","lineno":6,"path":"/Users/sashko/git/meteor/packages/accounts-ui-unstyled","code":{"id":"astnode100017011","name":"Accounts.ui","type":"ObjectExpression","value":"{}","paramnames":[]}},"summary":"Accounts UI","kind":"namespace","memberof":"Accounts","name":"ui","longname":"Accounts.ui","scope":"static","___id":"T000002R001212","___s":true,"config":{"meta":{"range":[1184,3840],"filename":"accounts_ui.js","lineno":25,"path":"/Users/sashko/git/meteor/packages/accounts-ui-unstyled","code":{"id":"astnode100017031","name":"Accounts.ui.config","type":"FunctionExpression","value":"function","paramnames":["options"]},"vars":{"VALID_KEYS":null,"":null,"Accounts.ui._options.passwordSignupFields":null}},"summary":"Configure the behavior of [`{{> loginButtons}}`](#accountsui).","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"params":[{"type":{"names":["Object"]},"name":"options"}],"name":"config","longname":"Accounts.ui.config","kind":"function","memberof":"Accounts.ui","scope":"static","___id":"T000002R001217","___s":true,"options":[{"type":{"names":["Object"]},"description":"Which permissions to request from the user for each external service.
","name":"requestPermissions"},{"type":{"names":["Object"]},"description":"To ask the user for permission to act on their behalf when offline, map the relevant external service to true. Currently only supported with Google. See Meteor.loginWithExternalService for more details.
If true, forces the user to approve the app's permissions, even if previously approved. Currently only supported with Google.
","name":"forceApprovalPrompt"},{"type":{"names":["String"]},"description":"Which fields to display in the user creation form. One of 'USERNAME_AND_EMAIL', 'USERNAME_AND_OPTIONAL_EMAIL', 'USERNAME_ONLY', or 'EMAIL_ONLY' (default).
New users with an email address will receive an address verification email.
","name":"sendVerificationEmail"},{"type":{"names":["Boolean"]},"description":"Calls to createUser from the client will be rejected. In addition, if you are using accounts-ui, the "Create account" link will not be available.
If set to a string, only allows new users if the domain part of their email address matches the string. If set to a function, only allows new users if the function returns true. The function is passed the full email address of the proposed new user. Works with password-based sign-in and external services that expose email addresses (Google, Facebook, GitHub). All existing users still can log in after enabling this option. Example: Accounts.config({ restrictCreationByEmailDomain: 'school.edu' }).
The number of days from when a user logs in until their token expires and they are logged out. Defaults to 90. Set to null to disable login expiration.
When using the oauth-encryption package, the 16 byte key using to encrypt sensitive account credentials in the database, encoded in base64. This option may only be specifed on the server. See packages/oauth-encryption/README.md for details.
Called whenever a login is attempted (either successful or unsuccessful). A login can be aborted by returning a falsy value or throwing an exception.
","name":"func"}],"name":"validateLoginAttempt","longname":"Accounts.validateLoginAttempt","kind":"function","memberof":"Accounts","scope":"static","___id":"T000002R000086","___s":true,"options":[],"locus":"Server"},"onLogin":{"meta":{"range":[1898,1973],"filename":"accounts_server.js","lineno":60,"path":"/Users/sashko/git/meteor/packages/accounts-base","code":{"id":"astnode100001093","name":"Accounts.onLogin","type":"FunctionExpression","value":"function","paramnames":["func"]}},"summary":"Register a callback to be called after a login attempt succeeds.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"params":[{"type":{"names":["function"]},"description":"The callback to be called when login is successful.
","name":"func"}],"name":"onLogin","longname":"Accounts.onLogin","kind":"function","memberof":"Accounts","scope":"static","___id":"T000002R000087","___s":true,"options":[],"locus":"Server"},"onLoginFailure":{"meta":{"range":[2155,2244],"filename":"accounts_server.js","lineno":69,"path":"/Users/sashko/git/meteor/packages/accounts-base","code":{"id":"astnode100001107","name":"Accounts.onLoginFailure","type":"FunctionExpression","value":"function","paramnames":["func"]}},"summary":"Register a callback to be called after a login attempt fails.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"params":[{"type":{"names":["function"]},"description":"The callback to be called after the login has failed.
","name":"func"}],"name":"onLoginFailure","longname":"Accounts.onLoginFailure","kind":"function","memberof":"Accounts","scope":"static","___id":"T000002R000088","___s":true,"options":[],"locus":"Server"},"onCreateUser":{"meta":{"range":[32747,32906],"filename":"accounts_server.js","lineno":986,"path":"/Users/sashko/git/meteor/packages/accounts-base","code":{"id":"astnode100003121","name":"Accounts.onCreateUser","type":"FunctionExpression","value":"function","paramnames":["func"]},"vars":{"onCreateUserHook":null}},"summary":"Customize new user creation.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"params":[{"type":{"names":["function"]},"description":"Called whenever a new user is created. Return the new user object, or throw an Error to abort the creation.
Called whenever a new user is created. Takes the new user object, and returns true to allow the creation or false to abort.
","name":"func"}],"name":"validateNewUser","longname":"Accounts.validateNewUser","kind":"function","memberof":"Accounts","scope":"static","___id":"T000002R000310","___s":true,"options":[],"locus":"Server"},"createUser":{"meta":{"range":[3912,4457],"filename":"password_client.js","lineno":108,"path":"/Users/sashko/git/meteor/packages/accounts-password","code":{"id":"astnode100009907","name":"Accounts.createUser","type":"FunctionExpression","value":"function","paramnames":["options","callback"]},"vars":{"options":null,"options.password":null}},"summary":"Create a new user.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["Object"]},"name":"options"},{"type":{"names":["function"]},"optional":true,"description":"Client only, optional callback. Called with no arguments on success, or with a single Error argument on failure.
A unique name for this user.
","name":"username"},{"type":{"names":["String"]},"description":"The user's email address.
","name":"email"},{"type":{"names":["String"]},"description":"The user's password. This is not sent in plain text over the wire.
","name":"password"},{"type":{"names":["Object"]},"description":"The user's profile, typically including the name field.
The user's current password. This is not sent in plain text over the wire.
","name":"oldPassword"},{"type":{"names":["String"]},"description":"A new password for the user. This is not sent in plain text over the wire.
","name":"newPassword"},{"type":{"names":["function"]},"optional":true,"description":"Optional callback. Called with no arguments on success, or with a single Error argument on failure.
Optional callback. Called with no arguments on success, or with a single Error argument on failure.
The email address to send a password reset link.
","name":"email"}],"locus":"Client"},"resetPassword":{"meta":{"range":[8168,8544],"filename":"password_client.js","lineno":226,"path":"/Users/sashko/git/meteor/packages/accounts-password","code":{"id":"astnode100010143","name":"Accounts.resetPassword","type":"FunctionExpression","value":"function","paramnames":["token","newPassword","callback"]}},"summary":"Reset the password for a user using a token received in email. Logs the user in afterwards.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"params":[{"type":{"names":["String"]},"description":"The token retrieved from the reset password URL.
","name":"token"},{"type":{"names":["String"]},"description":"A new password for the user. This is not sent in plain text over the wire.
","name":"newPassword"},{"type":{"names":["function"]},"optional":true,"description":"Optional callback. Called with no arguments on success, or with a single Error argument on failure.
The token retrieved from the verification URL.
","name":"token"},{"type":{"names":["function"]},"optional":true,"description":"Optional callback. Called with no arguments on success, or with a single Error argument on failure.
The id of the user to update.
","name":"userId"},{"type":{"names":["String"]},"description":"A new password for the user.
","name":"newPassword"}],"name":"setPassword","longname":"Accounts.setPassword","kind":"function","memberof":"Accounts","scope":"static","___id":"T000002R000827","___s":true,"options":[],"locus":"Server"},"sendResetPasswordEmail":{"meta":{"range":[11744,13104],"filename":"password_server.js","lineno":364,"path":"/Users/sashko/git/meteor/packages/accounts-password","code":{"id":"astnode100011176","name":"Accounts.sendResetPasswordEmail","type":"FunctionExpression","value":"function","paramnames":["userId","email"]},"vars":{"user":null,"email":null,"token":null,"when":null,"tokenRecord":null,".reset":null,"resetPasswordUrl":null,"options":null,"options.html":null}},"summary":"Send an email with a link the user can use to reset their password.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"params":[{"type":{"names":["String"]},"description":"The id of the user to send email to.
","name":"userId"},{"type":{"names":["String"]},"optional":true,"description":"Optional. Which address of the user's to send the email to. This address must be in the user's emails list. Defaults to the first email in the list.
The id of the user to send email to.
","name":"userId"},{"type":{"names":["String"]},"optional":true,"description":"Optional. Which address of the user's to send the email to. This address must be in the user's emails list. Defaults to the first email in the list.
The id of the user to send email to.
","name":"userId"},{"type":{"names":["String"]},"optional":true,"description":"Optional. Which address of the user's to send the email to. This address must be in the user's emails list. Defaults to the first unverified email in the list.
Optional callback. Called with no arguments on success, or with a single Error argument on failure.
Optional callback. Called with no arguments on success, or with a single Error argument on failure.
Either a string interpreted as a username or an email; or an object with a single key: email, username or id.
The user's password.
","name":"password"},{"type":{"names":["function"]},"optional":true,"description":"Optional callback. Called with no arguments on success, or with a single Error argument on failure.
The function to call when a new DDP connection is established.
","name":"callback"}],"memberof":"Meteor","name":"onConnection","longname":"Meteor.onConnection","kind":"function","scope":"static","___id":"T000002R052675","___s":true,"options":[],"locus":"Server"},"publish":{"meta":{"range":[45712,47678],"filename":"livedata_server.js","lineno":1370,"path":"/Users/sashko/git/meteor/packages/ddp","code":{"id":"astnode100290104","name":"publish","type":"FunctionExpression","value":"function"},"vars":{"self":null,"options":null,"self.warned_about_autopublish":null,"self.publish_handlers[undefined]":null,"":null}},"summary":"Publish a record set.","memberof":"Meteor","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"params":[{"type":{"names":["String"]},"description":"Name of the record set. If null, the set has no name, and the record set is automatically sent to all connected clients.
Function called on the server each time a client subscribes. Inside the function, this is the publish handler object, described below. If the client passed arguments to subscribe, the function is called with the same arguments.
Dictionary whose keys are method names and values are functions.
","name":"methods"}],"memberof":"Meteor","name":"methods","longname":"Meteor.methods","kind":"function","scope":"static","___id":"T000002R052693","___s":true,"options":[],"locus":"Anywhere"},"startup":{"meta":{"range":[651,1018],"filename":"startup_client.js","lineno":27,"path":"/Users/sashko/git/meteor/packages/meteor","code":{"id":"astnode100388207","name":"Meteor.startup","type":"FunctionExpression","value":"function","paramnames":["cb"]},"vars":{"doScroll":null,"":null}},"summary":"Run code when a client or a server starts.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["function"]},"description":"A function to run on startup.
","name":"func"}],"name":"startup","longname":"Meteor.startup","kind":"function","memberof":"Meteor","scope":"static","___id":"T000002R066219","___s":true,"options":[],"locus":"Anywhere"},"setTimeout":{"meta":{"range":[959,1072],"filename":"timers.js","lineno":28,"path":"/Users/sashko/git/meteor/packages/meteor","code":{"id":"astnode100388370","name":"setTimeout","type":"FunctionExpression","value":"function"}},"memberof":"Meteor","summary":"Call a function in the future after waiting for a specified delay.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["function"]},"description":"The function to run
","name":"func"},{"type":{"names":["Number"]},"description":"Number of milliseconds to wait before calling function
","name":"delay"}],"name":"setTimeout","longname":"Meteor.setTimeout","kind":"function","scope":"static","___id":"T000002R066225","___s":true,"options":[],"locus":"Anywhere"},"setInterval":{"meta":{"range":[1341,1457],"filename":"timers.js","lineno":39,"path":"/Users/sashko/git/meteor/packages/meteor","code":{"id":"astnode100388383","name":"setInterval","type":"FunctionExpression","value":"function"}},"memberof":"Meteor","summary":"Call a function repeatedly, with a time delay between calls.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["function"]},"description":"The function to run
","name":"func"},{"type":{"names":["Number"]},"description":"Number of milliseconds to wait between each function call.
","name":"delay"}],"name":"setInterval","longname":"Meteor.setInterval","kind":"function","scope":"static","___id":"T000002R066226","___s":true,"options":[],"locus":"Anywhere"},"clearInterval":{"meta":{"range":[1667,1728],"filename":"timers.js","lineno":49,"path":"/Users/sashko/git/meteor/packages/meteor","code":{"id":"astnode100388396","name":"clearInterval","type":"FunctionExpression","value":"function"}},"memberof":"Meteor","summary":"Cancel a repeating function call scheduled by `Meteor.setInterval`.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["Number"]},"description":"The handle returned by Meteor.setInterval
The handle returned by Meteor.setTimeout
A path to append to the root URL. Do not include a leading "/".
Create an HTTPS URL.
","name":"secure"},{"type":{"names":["Boolean"]},"description":"Replace localhost with 127.0.0.1. Useful for services that don't recognize localhost as a domain name.
","name":"replaceLocalhost"},{"type":{"names":["String"]},"description":"Override the default ROOT_URL from the server environment. For example: "http://foo.example.com"
Function to call. It will be called with three arguments: the document, a 0-based index, and cursor itself.
","name":"callback"},{"type":{"names":["Any"]},"optional":true,"description":"An object which will be the value of this inside callback.
Function to call. It will be called with three arguments: the document, a 0-based index, and cursor itself.
","name":"callback"},{"type":{"names":["Any"]},"optional":true,"description":"An object which will be the value of this inside callback.
Functions to call to deliver the result set as it changes
","name":"callbacks"}],"name":"observe","longname":"Meteor.Collection.Cursor#observe","kind":"function","___id":"T000002R066585","___s":true,"options":[],"locus":"Anywhere"},"Cursor#observeChanges":{"meta":{"range":[10538,14491],"filename":"minimongo.js","lineno":322,"path":"/Users/sashko/git/meteor/packages/minimongo","code":{"id":"astnode100393504","name":"observeChanges","type":"FunctionExpression","value":"function"},"vars":{"self":null,"ordered":null,"query":null,"qid":null,"self.collection.queries[undefined]":null,"query.results":null,"query.resultsSnapshot":null,"wrapCallback":null,"":null,"query.added":null,"query.changed":null,"query.removed":null,"query.addedBefore":null,"query.movedBefore":null,"each":null,"handle":null}},"summary":"Watch a query. Receive callbacks as the result set changes. Only the differences between the old and new documents are passed to the callbacks.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"memberof":"Meteor.Collection.Cursor","scope":"instance","params":[{"type":{"names":["Object"]},"description":"Functions to call to deliver the result set as it changes
","name":"callbacks"}],"name":"observeChanges","longname":"Meteor.Collection.Cursor#observeChanges","kind":"function","___id":"T000002R066587","___s":true,"options":[],"locus":"Anywhere"},"Cursor":{"meta":{"range":[2780,2967],"filename":"minimongo.js","lineno":89,"path":"/Users/sashko/git/meteor/packages/minimongo","code":{}},"summary":"To create a cursor, use find. To access the documents in a cursor, use forEach, map, or fetch.","kind":"class","name":"Cursor","memberof":"Meteor.Collection","tags":[{"originalTitle":"instanceName","title":"instancename","text":"cursor","value":"cursor"}],"scope":"static","longname":"Meteor.Collection.Cursor","___id":"T000002R066527","___s":true,"options":[],"params":[],"instancename":"cursor"},"meta":{"range":[1419,8435],"filename":"collection.js","lineno":20,"path":"/Users/sashko/git/meteor/packages/mongo","code":{"id":"astnode100412071","name":"Meteor.Collection","type":"FunctionExpression","value":"function","paramnames":["name","options"]},"vars":{"self":null,"name":null,"options":null,"options.connection":null,"self._makeNewID":null,"":null,"self._transform":null,"self._connection":null,"options._driver":null,"self._collection":null,"self._name":null,"ok":null}},"summary":"Constructor for a Collection","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"},{"originalTitle":"instancename","title":"instancename","text":"collection","value":"collection"}],"kind":"class","params":[{"type":{"names":["String"]},"description":"The name of the collection. If null, creates an unmanaged (unsynchronized) local collection.
","name":"name"},{"type":{"names":["Object"]},"optional":true,"name":"options"}],"name":"Collection","longname":"Meteor.Collection","memberof":"Meteor","scope":"static","___id":"T000002R068406","___s":true,"options":[{"type":{"names":["Object"]},"description":"The server connection that will manage this collection. Uses the default connection if not specified. Pass the return value of calling DDP.connect to specify a different server. Pass null to specify no connection. Unmanaged (name is null) collections cannot specify a connection.
The method of generating the _id fields of new documents in this collection. Possible values:
'STRING': random strings'MONGO': random Meteor.Collection.ObjectID valuesThe default id generation technique is 'STRING'.
An optional transformation function. Documents will be passed through this function before being returned from fetch or findOne, and before being passed to callbacks of observe, map, forEach, allow, and deny. Transforms are not applied for the callbacks of observeChanges or to cursors returned from publish functions.
Optional. The 24-character hexadecimal contents of the ObjectID to create
","name":"hexString"}],"name":"ObjectID","longname":"Meteor.Collection.ObjectID","memberof":"Meteor.Collection","scope":"static","___id":"T000002R068531","___s":true,"options":[],"locus":"Anywhere"}},"Collection#insert":{"meta":{"range":[15926,16365],"filename":"collection.js","lineno":407,"path":"/Users/sashko/git/meteor/packages/mongo","code":{}},"summary":"Insert a document in the collection. Returns its unique _id.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"kind":"function","name":"insert","memberof":"Meteor.Collection","scope":"instance","params":[{"type":{"names":["Object"]},"description":"The document to insert. May not yet have an _id attribute, in which case Meteor will generate one for you.
","name":"doc"},{"type":{"names":["function"]},"optional":true,"description":"Optional. If present, called with an error object as the first argument and, if no error, the _id as the second.
","name":"callback"}],"longname":"Meteor.Collection#insert","___id":"T000002R068404","___s":true,"options":[],"locus":"Anywhere"},"Collection#update":{"meta":{"range":[16367,17137],"filename":"collection.js","lineno":417,"path":"/Users/sashko/git/meteor/packages/mongo","code":{}},"summary":"Modify one or more documents in the collection. Returns the number of affected documents.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"kind":"function","name":"update","memberof":"Meteor.Collection","scope":"instance","params":[{"type":{"names":["MongoSelector"]},"description":"Specifies which documents to modify
","name":"selector"},{"type":{"names":["MongoModifier"]},"description":"Specifies how to modify the documents
","name":"modifier"},{"type":{"names":["Object"]},"optional":true,"name":"options"},{"type":{"names":["function"]},"optional":true,"description":"Optional. If present, called with an error object as the first argument and, if no error, the number of affected documents as the second.
","name":"callback"}],"longname":"Meteor.Collection#update","___id":"T000002R068405","___s":true,"options":[{"type":{"names":["Boolean"]},"description":"True to modify all matching documents; false to only modify one of the matching documents (the default).
","name":"multi"},{"type":{"names":["Boolean"]},"description":"True to insert a document if no matching documents are found.
","name":"upsert"}],"locus":"Anywhere"},"Collection#find":{"meta":{"range":[9195,10059],"filename":"collection.js","lineno":245,"path":"/Users/sashko/git/meteor/packages/mongo","code":{}},"summary":"Find the documents in a collection that match the selector.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"kind":"function","name":"find","memberof":"Meteor.Collection","scope":"instance","params":[{"type":{"names":["MongoSelector"]},"optional":true,"description":"A query describing the documents to find
","name":"selector"},{"type":{"names":["Object"]},"optional":true,"name":"options"}],"longname":"Meteor.Collection#find","___id":"T000002R068456","___s":true,"options":[{"type":{"names":["MongoSortSpecifier"]},"description":"Sort order (default: natural order)
","name":"sort"},{"type":{"names":["Number"]},"description":"Number of results to skip at the beginning
","name":"skip"},{"type":{"names":["Number"]},"description":"Maximum number of results to return
","name":"limit"},{"type":{"names":["MongoFieldSpecifier"]},"description":"Dictionary of fields to return or exclude.
","name":"fields"},{"type":{"names":["Boolean"]},"description":"(Client only) Default true; pass false to disable reactivity
Overrides transform on the Collection for this cursor. Pass null to disable transformation.
A query describing the documents to find
","name":"selector"},{"type":{"names":["Object"]},"optional":true,"name":"options"}],"longname":"Meteor.Collection#findOne","___id":"T000002R068460","___s":true,"options":[{"type":{"names":["MongoSortSpecifier"]},"description":"Sort order (default: natural order)
","name":"sort"},{"type":{"names":["Number"]},"description":"Number of results to skip at the beginning
","name":"skip"},{"type":{"names":["MongoFieldSpecifier"]},"description":"Dictionary of fields to return or exclude.
","name":"fields"},{"type":{"names":["Boolean"]},"description":"(Client only) Default true; pass false to disable reactivity
","name":"reactive"},{"type":{"names":["function"]},"description":"Overrides transform on the Collection for this cursor. Pass null to disable transformation.
Specifies which documents to remove
","name":"selector"},{"type":{"names":["function"]},"optional":true,"description":"Optional. If present, called with an error object as its argument.
","name":"callback"}],"longname":"Meteor.Collection#remove","___id":"T000002R068487","___s":true,"options":[],"locus":"Anywhere"},"Collection#upsert":{"meta":{"range":[23713,24109],"filename":"collection.js","lineno":593,"path":"/Users/sashko/git/meteor/packages/mongo","code":{"id":"astnode100413675","name":"Meteor.Collection.prototype.upsert","type":"FunctionExpression","value":"function","paramnames":["selector","modifier","options","callback"]},"vars":{"self":null,"callback":null,"options":null}},"summary":"Modify one or more documents in the collection, or insert one if no matching documents were found. Returns an object with keys `numberAffected` (the number of documents modified) and `insertedId` (the unique _id of the document that was inserted, if any).","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["MongoSelector"]},"description":"Specifies which documents to modify
","name":"selector"},{"type":{"names":["MongoModifier"]},"description":"Specifies how to modify the documents
","name":"modifier"},{"type":{"names":["Object"]},"optional":true,"name":"options"},{"type":{"names":["function"]},"optional":true,"description":"Optional. If present, called with an error object as the first argument and, if no error, the number of affected documents as the second.
","name":"callback"}],"name":"upsert","longname":"Meteor.Collection#upsert","kind":"function","memberof":"Meteor.Collection","scope":"instance","___id":"T000002R068517","___s":true,"options":[{"type":{"names":["Boolean"]},"description":"True to modify all matching documents; false to only modify one of the matching documents (the default).
","name":"multi"}],"locus":"Anywhere"},"Collection#allow":{"meta":{"range":[29204,29310],"filename":"collection.js","lineno":727,"path":"/Users/sashko/git/meteor/packages/mongo","code":{"id":"astnode100414059","name":"Meteor.Collection.prototype.allow","type":"FunctionExpression","value":"function","paramnames":["options"]}},"summary":"Allow users to write directly to this collection from client code, subject to limitations you define.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"params":[{"type":{"names":["Object"]},"name":"options"}],"name":"allow","longname":"Meteor.Collection#allow","kind":"function","memberof":"Meteor.Collection","scope":"instance","___id":"T000002R068538","___s":true,"options":[{"type":{"names":["function"]},"name":"insert"},{"type":{"names":["function"]},"name":"update"},{"type":{"names":["function"]},"description":"Functions that look at a proposed modification to the database and return true if it should be allowed.
","name":"remove"},{"type":{"names":["Array.Optional performance enhancement. Limits the fields that will be fetched from the database for inspection by your update and remove functions.
Overrides transform on the Collection. Pass null to disable transformation.
Functions that look at a proposed modification to the database and return true if it should be denied, even if an allow rule says otherwise.
Optional performance enhancement. Limits the fields that will be fetched from the database for inspection by your update and remove functions.
Overrides transform on the Collection. Pass null to disable transformation.
A numeric error code, likely similar to an HTTP code (eg, 404, 500).
","name":"error"},{"type":{"names":["String"]},"optional":true,"description":"Optional. A short human-readable summary of the error, like 'Not Found'.
","name":"reason"},{"type":{"names":["String"]},"optional":true,"description":"Optional. Additional information about the error, like a textual stack trace.
","name":"details"}],"name":"Error","longname":"Meteor.Error","memberof":"Meteor","scope":"static","___id":"T000002R065936","___s":true,"options":[],"locus":"Anywhere"}},"MethodInvocation#isSimulation":{"comment":"/**\n * @summary Access inside a method invocation. Boolean value, true if this invocation is a stub.\n * @locus Anywhere\n * @name isSimulation\n * @memberOf MethodInvocation\n * @instance\n */","meta":{"range":[895,1097],"filename":"livedata_common.js","lineno":24,"path":"/Users/sashko/git/meteor/packages/ddp","code":{}},"summary":"Access inside a method invocation. Boolean value, true if this invocation is a stub.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"name":"isSimulation","memberof":"MethodInvocation","scope":"instance","longname":"MethodInvocation#isSimulation","kind":"member","___id":"T000002R051095","___s":true,"locus":"Anywhere"},"MethodInvocation#userId":{"comment":"/**\n * @summary The id of the user that made this method call, or `null` if no user was logged in.\n * @locus Anywhere\n * @name userId\n * @memberOf MethodInvocation\n * @instance\n */","meta":{"range":[1407,1600],"filename":"livedata_common.js","lineno":41,"path":"/Users/sashko/git/meteor/packages/ddp","code":{}},"summary":"The id of the user that made this method call, or `null` if no user was logged in.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"name":"userId","memberof":"MethodInvocation","scope":"instance","longname":"MethodInvocation#userId","kind":"member","___id":"T000002R051099","___s":true,"locus":"Anywhere"},"MethodInvocation#connection":{"comment":"/**\n * @summary Access inside a method invocation. The [connection](#meteor_onconnection) that this method was received on. `null` if the method is not associated with a connection, eg. a server initiated method call.\n * @locus Server\n * @name connection\n * @memberOf MethodInvocation\n * @instance\n */","meta":{"range":[1852,2166],"filename":"livedata_common.js","lineno":56,"path":"/Users/sashko/git/meteor/packages/ddp","code":{}},"summary":"Access inside a method invocation. The [connection](#meteor_onconnection) that this method was received on. `null` if the method is not associated with a connection, eg. a server initiated method call.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"name":"connection","memberof":"MethodInvocation","scope":"instance","longname":"MethodInvocation#connection","kind":"member","___id":"T000002R051102","___s":true,"locus":"Server"},"Subscription#connection":{"comment":"/**\n * @summary Access inside the publish function. The incoming [connection](#meteor_onconnection) for this subscription.\n * @locus Server\n * @name connection\n * @memberOf Subscription\n * @instance\n */","meta":{"range":[27477,27692],"filename":"livedata_server.js","lineno":863,"path":"/Users/sashko/git/meteor/packages/ddp","code":{}},"summary":"Access inside the publish function. The incoming [connection](#meteor_onconnection) for this subscription.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"name":"connection","memberof":"Subscription","scope":"instance","longname":"Subscription#connection","kind":"member","___id":"T000002R052599","___s":true,"locus":"Server"},"Subscription#userId":{"comment":"/**\n * @summary Access inside the publish function. The id of the logged-in user, or `null` if no user is logged in.\n * @locus Server\n * @memberOf Subscription\n * @name userId\n * @instance\n */","meta":{"range":[28731,28936],"filename":"livedata_server.js","lineno":905,"path":"/Users/sashko/git/meteor/packages/ddp","code":{}},"summary":"Access inside the publish function. The id of the logged-in user, or `null` if no user is logged in.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"memberof":"Subscription","name":"userId","scope":"instance","longname":"Subscription#userId","kind":"member","___id":"T000002R052611","___s":true,"locus":"Server"},"Tracker":{"active":{"comment":"/**\n * @summary True if there is a current computation, meaning that dependencies on reactive data sources will be tracked and potentially cause the current computation to be rerun.\n * @locus Client\n */","meta":{"range":[418,440],"filename":"tracker.js","lineno":13,"path":"/Users/sashko/git/meteor/packages/tracker","code":{"id":"astnode100507105","name":"Tracker.active","type":"Literal","value":"false","paramnames":[]}},"summary":"True if there is a current computation, meaning that dependencies on reactive data sources will be tracked and potentially cause the current computation to be rerun.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"name":"active","longname":"Tracker.active","kind":"member","memberof":"Tracker","scope":"static","___id":"T000002R076202","___s":true,"locus":"Client"},"currentComputation":{"comment":"/**\n * @summary The current computation, or `null` if there isn't one. The current computation is the [`Tracker.Computation`](#tracker_computation) object created by the innermost active call to `Tracker.autorun`, and it's the computation that gains dependencies when reactive data sources are accessed.\n * @locus Client\n */","meta":{"range":[824,857],"filename":"tracker.js","lineno":21,"path":"/Users/sashko/git/meteor/packages/tracker","code":{"id":"astnode100507111","name":"Tracker.currentComputation","type":"Literal","value":"null","paramnames":[]}},"summary":"The current computation, or `null` if there isn't one. The current computation is the [`Tracker.Computation`](#tracker_computation) object created by the innermost active call to `Tracker.autorun`, and it's the computation that gains dependencies when reactive data sources are accessed.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"name":"currentComputation","longname":"Tracker.currentComputation","kind":"member","memberof":"Tracker","scope":"static","___id":"T000002R076203","___s":true,"locus":"Client"},"Computation#stopped":{"comment":"/**\n * @summary True if this computation has been stopped.\n * @locus Client\n * @memberOf Tracker.Computation\n * @instance\n * @name stopped\n */","meta":{"range":[4547,4702],"filename":"tracker.js","lineno":132,"path":"/Users/sashko/git/meteor/packages/tracker","code":{}},"summary":"True if this computation has been stopped.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"memberof":"Tracker.Computation","scope":"instance","name":"stopped","longname":"Tracker.Computation#stopped","kind":"member","___id":"T000002R076229","___s":true,"locus":"Client"},"Computation#invalidated":{"comment":"/**\n * @summary True if this computation has been invalidated (and not yet rerun), or if it has been stopped.\n * @locus Client\n * @memberOf Tracker.Computation\n * @instance\n * @name invalidated\n */","meta":{"range":[4784,4994],"filename":"tracker.js","lineno":143,"path":"/Users/sashko/git/meteor/packages/tracker","code":{}},"summary":"True if this computation has been invalidated (and not yet rerun), or if it has been stopped.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"memberof":"Tracker.Computation","scope":"instance","name":"invalidated","longname":"Tracker.Computation#invalidated","kind":"member","___id":"T000002R076231","___s":true,"locus":"Client"},"Computation#firstRun":{"comment":"/**\n * @summary True during the initial run of the computation at the time `Tracker.autorun` is called, and false on subsequent reruns and at other times.\n * @locus Client\n * @memberOf Tracker.Computation\n * @instance\n * @name firstRun\n */","meta":{"range":[5077,5329],"filename":"tracker.js","lineno":154,"path":"/Users/sashko/git/meteor/packages/tracker","code":{}},"summary":"True during the initial run of the computation at the time `Tracker.autorun` is called, and false on subsequent reruns and at other times.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"memberof":"Tracker.Computation","scope":"instance","name":"firstRun","longname":"Tracker.Computation#firstRun","kind":"member","___id":"T000002R076233","___s":true,"locus":"Client"},"Computation":{"meta":{"range":[4266,5759],"filename":"tracker.js","lineno":122,"path":"/Users/sashko/git/meteor/packages/tracker","code":{"id":"astnode100507360","name":"Tracker.Computation","type":"FunctionExpression","value":"function","paramnames":["f","parent"]},"vars":{"constructingComputation":null,"self":null,"self.stopped":null,"self.invalidated":null,"self.firstRun":null,"self._id":null,"self._onInvalidateCallbacks":null,"self._parent":null,"self._func":null,"self._recomputing":null,"errored":null}},"summary":"A Computation object represents code that is repeatedly rerun\nin response to\nreactive data changes. Computations don't have return values; they just\nperform actions, such as rerendering a template on the screen. Computations\nare created using Tracker.autorun. Use stop to prevent further rerunning of a\ncomputation.","tags":[{"originalTitle":"instancename","title":"instancename","text":"computation","value":"computation"}],"name":"Computation","longname":"Tracker.Computation","kind":"function","memberof":"Tracker","scope":"static","___id":"T000002R076226","___s":true,"options":[],"params":[],"instancename":"computation"},"Computation#onInvalidate":{"meta":{"range":[6268,6602],"filename":"tracker.js","lineno":189,"path":"/Users/sashko/git/meteor/packages/tracker","code":{"id":"astnode100507462","name":"Tracker.Computation.prototype.onInvalidate","type":"FunctionExpression","value":"function","paramnames":["f"]},"vars":{"self":null,"":null}},"summary":"Registers `callback` to run when this computation is next invalidated, or runs it immediately if the computation is already invalidated. The callback is run exactly once and not upon future invalidations unless `onInvalidate` is called again after the computation becomes valid again.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"params":[{"type":{"names":["function"]},"description":"Function to be called on invalidation. Receives one argument, the computation that was invalidated.
","name":"callback"}],"name":"onInvalidate","longname":"Tracker.Computation#onInvalidate","kind":"function","memberof":"Tracker.Computation","scope":"instance","___id":"T000002R076243","___s":true,"options":[],"locus":"Client"},"Computation#invalidate":{"meta":{"range":[6748,7393],"filename":"tracker.js","lineno":210,"path":"/Users/sashko/git/meteor/packages/tracker","code":{"id":"astnode100507514","name":"Tracker.Computation.prototype.invalidate","type":"FunctionExpression","value":"function","paramnames":[]},"vars":{"self":null,"self.invalidated":null,"i":null,"f":null,"":null,"self._onInvalidateCallbacks":null}},"summary":"Invalidates this computation so that it will be rerun.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"name":"invalidate","longname":"Tracker.Computation#invalidate","kind":"function","memberof":"Tracker.Computation","scope":"instance","___id":"T000002R076245","___s":true,"options":[],"params":[],"locus":"Client"},"Computation#stop":{"meta":{"range":[7520,7648],"filename":"tracker.js","lineno":239,"path":"/Users/sashko/git/meteor/packages/tracker","code":{"id":"astnode100507597","name":"Tracker.Computation.prototype.stop","type":"FunctionExpression","value":"function","paramnames":[]},"vars":{"this.stopped":null}},"summary":"Prevents this computation from rerunning.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"name":"stop","longname":"Tracker.Computation#stop","kind":"function","memberof":"Tracker.Computation","scope":"instance","___id":"T000002R076252","___s":true,"options":[],"params":[],"locus":"Client"},"Dependency#depend":{"meta":{"range":[9967,10409],"filename":"tracker.js","lineno":317,"path":"/Users/sashko/git/meteor/packages/tracker","code":{"id":"astnode100507749","name":"Tracker.Dependency.prototype.depend","type":"FunctionExpression","value":"function","paramnames":["computation"]},"vars":{"computation":null,"self":null,"id":null,"self._dependentsById[undefined]":null,"":null}},"summary":"Declares that the current computation (or `fromComputation` if given) depends on `dependency`. The computation will be invalidated the next time `dependency` changes.\n\nIf there is no current computation and `depend()` is called with no arguments, it does nothing and returns false.\n\nReturns true if the computation is a new dependent of `dependency` rather than an existing one.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"params":[{"type":{"names":["Tracker.Computation"]},"optional":true,"description":"An optional computation declared to depend on dependency instead of the current computation.
The function to run. It receives one argument: the Computation object that will be returned.
","name":"runFunc"}],"name":"autorun","longname":"Tracker.autorun","kind":"function","memberof":"Tracker","scope":"static","___id":"T000002R076290","___s":true,"options":[],"locus":"Client"},"nonreactive":{"meta":{"range":[14340,14533],"filename":"tracker.js","lineno":465,"path":"/Users/sashko/git/meteor/packages/tracker","code":{"id":"astnode100508051","name":"Tracker.nonreactive","type":"FunctionExpression","value":"function","paramnames":["f"]},"vars":{"previous":null}},"summary":"Run a function without tracking dependencies.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"params":[{"type":{"names":["function"]},"description":"A function to call immediately.
","name":"func"}],"name":"nonreactive","longname":"Tracker.nonreactive","kind":"function","memberof":"Tracker","scope":"static","___id":"T000002R076293","___s":true,"options":[],"locus":"Client"},"onInvalidate":{"meta":{"range":[14970,15155],"filename":"tracker.js","lineno":482,"path":"/Users/sashko/git/meteor/packages/tracker","code":{"id":"astnode100508079","name":"Tracker.onInvalidate","type":"FunctionExpression","value":"function","paramnames":["f"]}},"summary":"Registers a new [`onInvalidate`](#computation_oninvalidate) callback on the current computation (which must exist), to be called immediately when the current computation is invalidated or stopped.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"params":[{"type":{"names":["function"]},"description":"A callback function that will be invoked as func(c), where c is the computation on which the callback is registered.
A function to call at flush time.
","name":"callback"}],"name":"afterFlush","longname":"Tracker.afterFlush","kind":"function","memberof":"Tracker","scope":"static","___id":"T000002R076296","___s":true,"options":[],"locus":"Client"},"Dependency":{"meta":{"range":[9057,9122],"filename":"tracker.js","lineno":297,"path":"/Users/sashko/git/meteor/packages/tracker","code":{"id":"astnode100507736","name":"Tracker.Dependency","type":"FunctionExpression","value":"function","paramnames":[]},"vars":{"this._dependentsById":null}},"summary":"A Dependency represents an atomic unit of reactive data that a\ncomputation might depend on. Reactive data sources such as Session or\nMinimongo internally create different Dependency objects for different\npieces of data, each of which may be depended on by multiple computations.\nWhen the data changes, the computations are invalidated.","kind":"class","tags":[{"originalTitle":"instanceName","title":"instancename","text":"dependency","value":"dependency"}],"name":"Dependency","longname":"Tracker.Dependency","memberof":"Tracker","scope":"static","___id":"T000002R076265","___s":true,"options":[],"params":[],"instancename":"dependency"}},"MethodInvocation":{"meta":{"range":[372,2398],"filename":"livedata_common.js","lineno":13,"path":"/Users/sashko/git/meteor/packages/ddp","code":{"id":"astnode100272408","name":"MethodInvocation","type":"FunctionExpression","value":"function","paramnames":["options"]},"vars":{"self":null,"this.isSimulation":null,"this._unblock":null,"":null,"this._calledUnblock":null,"this.userId":null,"this._setUserId":null,"this.connection":null,"this.randomSeed":null,"this.randomStream":null}},"summary":"The state for a single invocation of a method, referenced by this\ninside a method definition.","params":[{"type":{"names":["Object"]},"name":"options"}],"tags":[{"originalTitle":"instanceName","title":"instancename","text":"this","value":"this"}],"name":"MethodInvocation","longname":"MethodInvocation","kind":"function","scope":"global","___id":"T000002R051093","___s":true,"options":[],"instancename":"this"},"MethodInvocation#unblock":{"meta":{"range":[2642,2742],"filename":"livedata_common.js","lineno":79,"path":"/Users/sashko/git/meteor/packages/ddp","code":{"id":"astnode100272492","name":"unblock","type":"FunctionExpression","value":"function"},"vars":{"self":null,"self._calledUnblock":null}},"summary":"Call inside a method invocation. Allow subsequent method from this client to begin running in a new fiber.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"memberof":"MethodInvocation","scope":"instance","name":"unblock","longname":"MethodInvocation#unblock","kind":"function","___id":"T000002R051106","___s":true,"options":[],"params":[],"locus":"Server"},"MethodInvocation#setUserId":{"meta":{"range":[2964,3183],"filename":"livedata_common.js","lineno":92,"path":"/Users/sashko/git/meteor/packages/ddp","code":{"id":"astnode100272510","name":"setUserId","type":"FunctionExpression","value":"function"},"vars":{"self":null,"self.userId":null}},"summary":"Set the logged in user.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"memberof":"MethodInvocation","scope":"instance","params":[{"type":{"names":["String","null"]},"description":"The value that should be returned by userId on this connection.
The URL of another Meteor application.
","name":"url"}],"name":"connect","longname":"DDP.connect","kind":"function","memberof":"DDP","scope":"static","___id":"T000002R051464","___s":true,"options":[],"locus":"Anywhere"}},"Subscription#error":{"meta":{"range":[35098,35259],"filename":"livedata_server.js","lineno":1074,"path":"/Users/sashko/git/meteor/packages/ddp","code":{"id":"astnode100289390","name":"error","type":"FunctionExpression","value":"function"},"vars":{"self":null}},"summary":"Call inside the publish function. Stops this client's subscription, triggering a call on the client to the `onError` callback passed to [`Meteor.subscribe`](#meteor_subscribe), if any. If `error` is not a [`Meteor.Error`](#meteor_error), it will be [sanitized](#meteor_error).","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"params":[{"type":{"names":["Error"]},"description":"The error to pass to the client.
","name":"error"}],"scope":"instance","memberof":"Subscription","name":"error","longname":"Subscription#error","kind":"function","___id":"T000002R052635","___s":true,"options":[],"locus":"Server"},"Subscription#stop":{"meta":{"range":[35755,35903],"filename":"livedata_server.js","lineno":1092,"path":"/Users/sashko/git/meteor/packages/ddp","code":{"id":"astnode100289415","name":"stop","type":"FunctionExpression","value":"function"},"vars":{"self":null}},"summary":"Call inside the publish function. Stops this client's subscription; the `onError` callback is *not* invoked on the client.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"scope":"instance","memberof":"Subscription","name":"stop","longname":"Subscription#stop","kind":"function","___id":"T000002R052637","___s":true,"options":[],"params":[],"locus":"Server"},"Subscription#onStop":{"meta":{"range":[36152,36306],"filename":"livedata_server.js","lineno":1106,"path":"/Users/sashko/git/meteor/packages/ddp","code":{"id":"astnode100289438","name":"onStop","type":"FunctionExpression","value":"function"},"vars":{"self":null}},"summary":"Call inside the publish function. Registers a callback function to run when the subscription is stopped.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"memberof":"Subscription","scope":"instance","params":[{"type":{"names":["function"]},"description":"The callback function
","name":"func"}],"name":"onStop","longname":"Subscription#onStop","kind":"function","___id":"T000002R052639","___s":true,"options":[],"locus":"Server"},"Subscription#added":{"meta":{"range":[37038,37338],"filename":"livedata_server.js","lineno":1131,"path":"/Users/sashko/git/meteor/packages/ddp","code":{"id":"astnode100289481","name":"added","type":"FunctionExpression","value":"function"},"vars":{"self":null,"id":null,"[undefined]":null}},"summary":"Call inside the publish function. Informs the subscriber that a document has been added to the record set.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"memberof":"Subscription","scope":"instance","params":[{"type":{"names":["String"]},"description":"The name of the collection that contains the new document.
","name":"collection"},{"type":{"names":["String"]},"description":"The new document's ID.
","name":"id"},{"type":{"names":["Object"]},"description":"The fields in the new document. If _id is present it is ignored.
The name of the collection that contains the changed document.
","name":"collection"},{"type":{"names":["String"]},"description":"The changed document's ID.
","name":"id"},{"type":{"names":["Object"]},"description":"The fields in the document that have changed, together with their new values. If a field is not present in fields it was left unchanged; if it is present in fields and has a value of undefined it was removed from the document. If _id is present it is ignored.
The name of the collection that the document has been removed from.
","name":"collection"},{"type":{"names":["String"]},"description":"The ID of the document that has been removed.
","name":"id"}],"name":"removed","longname":"Subscription#removed","kind":"function","___id":"T000002R052650","___s":true,"options":[],"locus":"Server"},"Subscription#ready":{"meta":{"range":[39354,39646],"filename":"livedata_server.js","lineno":1182,"path":"/Users/sashko/git/meteor/packages/ddp","code":{"id":"astnode100289618","name":"ready","type":"FunctionExpression","value":"function"},"vars":{"self":null,"self._ready":null}},"summary":"Call inside the publish function. Informs the subscriber that an initial, complete snapshot of the record set has been sent. This will trigger a call on the client to the `onReady` callback passed to [`Meteor.subscribe`](#meteor_subscribe), if any.","tags":[{"originalTitle":"locus","title":"locus","text":"Server","value":"Server"}],"memberof":"Subscription","scope":"instance","name":"ready","longname":"Subscription#ready","kind":"function","___id":"T000002R052653","___s":true,"options":[],"params":[],"locus":"Server"},"EJSON":{"newBinary":{"meta":{"range":[1470,1769],"filename":"base64.js","lineno":70,"path":"/Users/sashko/git/meteor/packages/ejson","code":{"id":"astnode100302934","name":"EJSON.newBinary","type":"FunctionExpression","value":"function","paramnames":["len"]},"vars":{"ret":null,"i":null,"ret.$Uint8ArrayPolyfill":null}},"summary":"Allocate a new buffer of binary data that EJSON can serialize.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["Number"]},"description":"The number of bytes of binary data to allocate.
","name":"size"}],"name":"newBinary","longname":"EJSON.newBinary","kind":"function","memberof":"EJSON","scope":"static","___id":"T000002R053658","___s":true,"options":[],"locus":"Anywhere"},"addType":{"meta":{"range":[1156,1321],"filename":"ejson.js","lineno":24,"path":"/Users/sashko/git/meteor/packages/ejson","code":{"id":"astnode100303784","name":"EJSON.addType","type":"FunctionExpression","value":"function","paramnames":["name","factory"]},"vars":{"customTypes[undefined]":null}},"summary":"Add a custom datatype to EJSON.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["String"]},"description":"A tag for your custom type; must be unique among custom data types defined in your project, and must match the result of your type's typeName method.
A function that deserializes a JSON-compatible value into an instance of your type. This should match the serialization performed by your type's toJSONValue method.
A value to serialize to plain JSON.
","name":"val"}],"name":"toJSONValue","longname":"EJSON.toJSONValue","kind":"function","memberof":"EJSON","scope":"static","___id":"T000002R053789","___s":true,"options":[],"locus":"Anywhere"},"fromJSONValue":{"meta":{"range":[7910,8166],"filename":"ejson.js","lineno":262,"path":"/Users/sashko/git/meteor/packages/ejson","code":{"id":"astnode100304599","name":"EJSON.fromJSONValue","type":"FunctionExpression","value":"function","paramnames":["item"]},"vars":{"changed":null,"item":null}},"summary":"Deserialize an EJSON value from its plain JSON representation.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["JSONCompatible"]},"description":"A value to deserialize into EJSON.
","name":"val"}],"name":"fromJSONValue","longname":"EJSON.fromJSONValue","kind":"function","memberof":"EJSON","scope":"static","___id":"T000002R053800","___s":true,"options":[],"locus":"Anywhere"},"stringify":{"meta":{"range":[8794,9037],"filename":"ejson.js","lineno":283,"path":"/Users/sashko/git/meteor/packages/ejson","code":{"id":"astnode100304640","name":"EJSON.stringify","type":"FunctionExpression","value":"function","paramnames":["item","options"]},"vars":{"json":null}},"summary":"Serialize a value to a string.\n\nFor EJSON values, the serialization fully represents the value. For non-EJSON values, serializes the same way as `JSON.stringify`.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["EJSON"]},"description":"A value to stringify.
","name":"val"},{"type":{"names":["Object"]},"optional":true,"name":"options"}],"name":"stringify","longname":"EJSON.stringify","kind":"function","memberof":"EJSON","scope":"static","___id":"T000002R053803","___s":true,"options":[{"type":{"names":["Boolean","Integer","String"]},"description":"Indents objects and arrays for easy readability. When true, indents by 2 spaces; when an integer, indents by that number of spaces; and when a string, uses the string as the indentation pattern.
When true, stringifies keys in an object in sorted order.
A string to parse into an EJSON value.
","name":"str"}],"name":"parse","longname":"EJSON.parse","kind":"function","memberof":"EJSON","scope":"static","___id":"T000002R053805","___s":true,"options":[],"locus":"Anywhere"},"isBinary":{"meta":{"range":[9595,9749],"filename":"ejson.js","lineno":308,"path":"/Users/sashko/git/meteor/packages/ejson","code":{"id":"astnode100304709","name":"EJSON.isBinary","type":"FunctionExpression","value":"function","paramnames":["obj"]}},"summary":"Returns true if `x` is a buffer of binary data, as returned from [`EJSON.newBinary`](#ejson_new_binary).","params":[{"type":{"names":["Object"]},"description":"The variable to check.
","name":"x"}],"tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"name":"isBinary","longname":"EJSON.isBinary","kind":"function","memberof":"EJSON","scope":"static","___id":"T000002R053806","___s":true,"options":[],"locus":"Anywhere"},"equals":{"meta":{"range":[10268,12522],"filename":"ejson.js","lineno":321,"path":"/Users/sashko/git/meteor/packages/ejson","code":{"id":"astnode100304734","name":"EJSON.equals","type":"FunctionExpression","value":"function","paramnames":["a","b","options"]},"vars":{"i":null,"keyOrderSensitive":null,"ret":null,"bKeys":null,"":null}},"summary":"Return true if `a` and `b` are equal to each other. Return false otherwise. Uses the `equals` method on `a` if present, otherwise performs a deep comparison.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["EJSON"]},"name":"a"},{"type":{"names":["EJSON"]},"name":"b"},{"type":{"names":["Object"]},"optional":true,"name":"options"}],"name":"equals","longname":"EJSON.equals","kind":"function","memberof":"EJSON","scope":"static","___id":"T000002R053807","___s":true,"options":[{"type":{"names":["Boolean"]},"description":"Compare in key sensitive order, if supported by the JavaScript implementation. For example, {a: 1, b: 2} is equal to {b: 2, a: 1} only when keyOrderSensitive is false. The default is false.
A value to copy.
","name":"val"}],"name":"clone","longname":"EJSON.clone","kind":"function","memberof":"EJSON","scope":"static","___id":"T000002R053818","___s":true,"options":[],"locus":"Anywhere"}},"HTTP":{"call":{"meta":{"range":[1471,6304],"filename":"httpcall_client.js","lineno":17,"path":"/Users/sashko/git/meteor/packages/http","code":{"id":"astnode100341477","name":"HTTP.call","type":"FunctionExpression","value":"function","paramnames":["method","url","options","callback"]},"vars":{"callback":null,"options":null,"method":null,"headers":null,"content":null,"headers['Content-Type']":null,"params_for_url":null,"params_for_body":null,"query_match":null,"url":null,"username":null,"password":null,"colonLoc":null,"":null,"xhr":null,"k":null,"timed_out":null,"timer":null,"xhr.onreadystatechange":null}},"summary":"Perform an outbound HTTP request.","tags":[{"originalTitle":"locus","title":"locus","text":"Anywhere","value":"Anywhere"}],"params":[{"type":{"names":["String"]},"description":"The HTTP method to use, such as "GET", "POST", or "HEAD".
The URL to retrieve.
","name":"url"},{"type":{"names":["Object"]},"optional":true,"name":"options"},{"type":{"names":["function"]},"optional":true,"description":"Optional callback. If passed, the method runs asynchronously, instead of synchronously, and calls asyncCallback. On the client, this callback is required.
","name":"asyncCallback"}],"name":"call","longname":"HTTP.call","kind":"function","memberof":"HTTP","scope":"static","___id":"T000002R062253","___s":true,"options":[{"type":{"names":["String"]},"description":"String to use as the HTTP request body.
","name":"content"},{"type":{"names":["Object"]},"description":"JSON-able object to stringify and use as the HTTP request body. Overwrites content.
Query string to go in the URL. Overwrites any query string in url.
Dictionary of request parameters to be encoded and placed in the URL (for GETs) or request body (for POSTs). If content or data is specified, params will always be placed in the URL.
HTTP basic authentication string of the form "username:password"
Dictionary of strings, headers to add to the HTTP request.
","name":"headers"},{"type":{"names":["Number"]},"description":"Maximum time in milliseconds to wait for the request before failing. There is no timeout by default.
","name":"timeout"},{"type":{"names":["Boolean"]},"description":"If true, transparently follow HTTP redirects. Cannot be set to false on the client. Default true.
The key to set, eg, selectedItem
The new value for key
The key to set, eg, selectedItem
The new value for key
The name of the session variable to return
","name":"key"}],"scope":"static","longname":"Session.get","___id":"T000002R072610","___s":true,"options":[],"locus":"Client"},"equals":{"meta":{"range":[1528,1937],"filename":"session.js","lineno":38,"path":"/Users/sashko/git/meteor/packages/session","code":{}},"memberof":"Session","kind":"function","name":"equals","summary":"Test if a session variable is equal to a value. If inside a [reactive computation](#reactivity), invalidate the computation the next time the variable changes to or from the value.","tags":[{"originalTitle":"locus","title":"locus","text":"Client","value":"Client"}],"params":[{"type":{"names":["String"]},"description":"The name of the session variable to test
","name":"key"},{"type":{"names":["String","Number","Boolean","null","undefined"]},"description":"The value to test against
","name":"value"}],"scope":"static","longname":"Session.equals","___id":"T000002R072614","___s":true,"options":[],"locus":"Client"}},"Subscription":{"meta":{"range":[27224,27324],"filename":"livedata_server.js","lineno":853,"path":"/Users/sashko/git/meteor/packages/ddp","code":{}},"summary":"The server's side of a subscription","kind":"class","name":"Subscription","tags":[{"originalTitle":"instanceName","title":"instancename","text":"this","value":"this"}],"longname":"Subscription","___id":"T000002R052595","___s":true,"options":[],"params":[],"instancename":"this"}}; \ No newline at end of file diff --git a/docs/client/packages/appcache.html b/docs/client/packages/appcache.html index 3163e5cadb..67addde864 100644 --- a/docs/client/packages/appcache.html +++ b/docs/client/packages/appcache.html @@ -24,7 +24,7 @@ caching simply add the `appcache` package to your project. (Note however that the `appcache` package by itself doesn't make *data* available offline: in an application loaded offline, a Meteor Collection will appear to be empty in the client until the Internet -becomes available and the browser is able to establish a livedata +becomes available and the browser is able to establish a DDP connection). The application cache works transparently in all supported browsers diff --git a/meteor b/meteor index 58a87b8fc9..de339fdc17 100755 --- a/meteor +++ b/meteor @@ -1,6 +1,6 @@ #!/bin/bash -BUNDLE_VERSION=0.3.51 +BUNDLE_VERSION=0.3.50 # OS Check. Put here because here is where we download the precompiled # bundles that are arch specific. diff --git a/packages/accounts-base/accounts_client.js b/packages/accounts-base/accounts_client.js index 62948cd246..f4e9e71469 100644 --- a/packages/accounts-base/accounts_client.js +++ b/packages/accounts-base/accounts_client.js @@ -292,6 +292,46 @@ Accounts.loginServicesConfigured = function () { return loginServicesHandle.ready(); }; +// Some login services such as the redirect login flow or the resume +// login handler can log the user in at page load time. The +// Meteor.loginWithX functions have a callback argument, but the +// callback function instance won't be in memory any longer if the +// page was reloaded. The `onPageLoadLogin` function allows a +// callback to be registered for the case where the login was +// initiated in a previous VM, and we now have the result of the login +// attempt in a new VM. + +var pageLoadLoginCallbacks = []; +var pageLoadLoginAttemptInfo = null; + +// Register a callback to be called if we have information about a +// login attempt at page load time. Call the callback immediately if +// we already have the page load login attempt info, otherwise stash +// the callback to be called if and when we do get the attempt info. +// +Accounts.onPageLoadLogin = function (f) { + if (pageLoadLoginAttemptInfo) + f(pageLoadLoginAttemptInfo); + else + pageLoadLoginCallbacks.push(f); +}; + + +// Receive the information about the login attempt at page load time. +// Call registered callbacks, and also record the info in case +// someone's callback hasn't been registered yet. +// +Accounts._pageLoadLogin = function (attemptInfo) { + if (pageLoadLoginAttemptInfo) { + Meteor._debug("Ignoring unexpected duplicate page load login attempt info"); + return; + } + _.each(pageLoadLoginCallbacks, function (callback) { callback(attemptInfo); }); + pageLoadLoginCallbacks = []; + pageLoadLoginAttemptInfo = attemptInfo; +}; + + /// /// HANDLEBARS HELPERS /// diff --git a/packages/accounts-base/localstorage_token.js b/packages/accounts-base/localstorage_token.js index 2fa0fbdfd9..91d93de79b 100644 --- a/packages/accounts-base/localstorage_token.js +++ b/packages/accounts-base/localstorage_token.js @@ -100,6 +100,16 @@ if (autoLoginEnabled) { Meteor._debug("Error logging in with token: " + err); makeClientLoggedOut(); } + Accounts._pageLoadLogin({ + type: "resume", + allowed: !err, + error: err, + methodName: "login", + // XXX This is duplicate code with loginWithToken, but + // loginWithToken can also be called at other times besides + // page load. + methodArguments: [{resume: token}] + }); }); } } diff --git a/packages/accounts-base/package.js b/packages/accounts-base/package.js index 15e1e1f936..3c5535f24e 100644 --- a/packages/accounts-base/package.js +++ b/packages/accounts-base/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "A user account system", - version: "1.0.0" + version: "1.0.1-rc0" }); Package.on_use(function (api) { @@ -17,11 +17,11 @@ Package.on_use(function (api) { api.use('service-configuration', ['client', 'server'], { unordered: true }); // needed for getting the currently logged-in user - api.use('livedata', ['client', 'server']); + api.use('ddp', ['client', 'server']); // need this because of the Meteor.users collection but in the future // we'd probably want to abstract this away - api.use('mongo-livedata', ['client', 'server']); + api.use('mongo', ['client', 'server']); // If the 'blaze' package is loaded, we'll define some helpers like // {{currentUser}}. If not, no biggie. diff --git a/packages/accounts-oauth/oauth_client.js b/packages/accounts-oauth/oauth_client.js index 5b8406c616..e6d1499079 100644 --- a/packages/accounts-oauth/oauth_client.js +++ b/packages/accounts-oauth/oauth_client.js @@ -1,3 +1,52 @@ +// Allow server to specify a specify subclass of errors. We should come +// up with a more generic way to do this! +var convertError = function (err) { + if (err && err instanceof Meteor.Error && + err.error === Accounts.LoginCancelledError.numericError) + return new Accounts.LoginCancelledError(err.reason); + else + return err; +}; + + +// For the redirect login flow, the final step is that we're +// redirected back to the application. The credentialToken for this +// login attempt is stored in the reload migration data, and the +// credentialSecret for a successful login is stored in session +// storage. + +Meteor.startup(function () { + var oauth = OAuth.getDataAfterRedirect(); + if (! oauth) + return; + + // We'll only have the credentialSecret if the login completed + // successfully. However we still call the login method anyway to + // retrieve the error if the login was unsuccessful. + + var methodName = 'login'; + var methodArguments = [{oauth: _.pick(oauth, 'credentialToken', 'credentialSecret')}]; + + Accounts.callLoginMethod({ + methodArguments: methodArguments, + userCallback: function (err) { + // The redirect login flow is complete. Construct an + // `attemptInfo` object with the login result, and report back + // to the code which initiated the login attempt + // (e.g. accounts-ui, when that package is being used). + err = convertError(err); + Accounts._pageLoadLogin({ + type: oauth.loginService, + allowed: !err, + error: err, + methodName: methodName, + methodArguments: methodArguments + }); + } + }); +}); + + // Send an OAuth login method to the server. If the user authorized // access in the popup this should log the user in, otherwise // nothing should happen. @@ -9,14 +58,7 @@ Accounts.oauth.tryLoginAfterPopupClosed = function(credentialToken, callback) { credentialSecret: credentialSecret }}], userCallback: callback && function (err) { - // Allow server to specify a specify subclass of errors. We should come - // up with a more generic way to do this! - if (err && err instanceof Meteor.Error && - err.error === Accounts.LoginCancelledError.numericError) { - callback(new Accounts.LoginCancelledError(err.reason)); - } else { - callback(err); - } + callback(convertError(err)); }}); }; diff --git a/packages/accounts-password/package.js b/packages/accounts-password/package.js index c12bb0dbd4..a145d3fd2f 100644 --- a/packages/accounts-password/package.js +++ b/packages/accounts-password/package.js @@ -1,6 +1,6 @@ Package.describe({ summary: "Password support for accounts", - version: "1.0.0" + version: "1.0.1-rc0" }); Package.on_use(function(api) { @@ -15,7 +15,7 @@ Package.on_use(function(api) { api.use('random', ['server']); api.use('check'); api.use('underscore'); - api.use('livedata', ['client', 'server']); + api.use('ddp', ['client', 'server']); api.add_files('email_templates.js', 'server'); api.add_files('password_server.js', 'server'); @@ -25,7 +25,7 @@ Package.on_use(function(api) { Package.on_test(function(api) { api.use(['accounts-password', 'tinytest', 'test-helpers', 'tracker', 'accounts-base', 'random', 'email', 'underscore', 'check', - 'livedata']); + 'ddp']); api.add_files('password_tests_setup.js', 'server'); api.add_files('password_tests.js', ['client', 'server']); api.add_files('email_tests_setup.js', 'server'); diff --git a/packages/accounts-ui-unstyled/login_buttons_dialogs.html b/packages/accounts-ui-unstyled/login_buttons_dialogs.html index 85708f673b..e4378c9d57 100644 --- a/packages/accounts-ui-unstyled/login_buttons_dialogs.html +++ b/packages/accounts-ui-unstyled/login_buttons_dialogs.html @@ -103,6 +103,16 @@ {{/each}} ++ Choose the login style: +
+
+
+
+
+
+
+