Merge branch 'devel' into release-0.9.4

Conflicts:
	docs/client/data.js
This commit is contained in:
Sashko Stubailo
2014-09-29 10:40:39 -07:00
151 changed files with 3950 additions and 3156 deletions

View File

@@ -41,6 +41,7 @@ GITHUB: marcandre <github@marc-andre.ca>
GITHUB: mart-jansink <m.jansink@gmail.com>
GITHUB: MaximDubrovin <maxxdubrovin@gmail.com>
GITHUB: meawoppl <meawoppl@gmail.com>
GITHUB: meonkeys <haircut@gmail.com>
GITHUB: michaelbishop <michael@michaelsplace.net>
GITHUB: mitar <mitar.git@tnode.com>
GITHUB: mitar <mitar.github@tnode.com>
@@ -50,6 +51,7 @@ GITHUB: nathan-muir <ndmuir@gmail.com>
GITHUB: Neftedollar <oildollar@gmail.com>
GITHUB: paulswartz <paulswartz@gmail.com>
GITHUB: Pent <jon@empire5design.com>
GITHUB: prapicault <pascal@rapicault.net>
GITHUB: queso <joshua.owens@gmail.com>
GITHUB: rcy <rcyeske@gmail.com>
GITHUB: RichardLitt <richard.littauer@gmail.com>
@@ -64,11 +66,15 @@ GITHUB: thatneat <thatneat@users.noreply.github.com>
GITHUB: timhaines <tmhaines@gmail.com>
GITHUB: tmeasday <tom@thesnail.org>
GITHUB: twhy <tom.wanghaiyi@gmail.com>
GITHUB: waitingkuo <waitingkuo0527@gmail.com>
GITHUB: wulfmeister <wulfmeister@users.noreply.github.com>
GITHUB: yeputons <egor.suvorov@gmail.com>
GITHUB: zol <zol@percolatestudio.com>
METEOR: arbesfeld <arbesfeld@gmail.com>
METEOR: avital <avital@thewe.net>
METEOR: ben <ben@meteor.com>
METEOR: ben <bn@cs.stanford.edu>
METEOR: debergalis <matt@meteor.com>
METEOR: dgreensp <dgreenspan@alum.mit.edu>
METEOR: ekatek <ekate@meteor.com>

View File

@@ -3,6 +3,76 @@
* Rename `{{> UI.dynamic}}` to `{{> Template.dynamic}}`, and likewise
with `UI.contentBlock` and `UI.elseBlock`.
* Deprecate the `amplify`, `backbone`, `bootstrap`, and `d3` integration
packages in favor of community alternatives. These packages will no
longer be maintained by MDG.
* Rename the `showdown` package to `markdown`.
* Deprecate the `Template.someTemplate.myHelper = ...` syntax in favor
of `Template.someTemplate.helpers(...)`. Using the older syntax still
works, but it prints a deprecation warning to the console.
## v0.9.3
### More Package Version Number Flexibility
* Packages now support relying on multiple major versions of their
dependencies (eg `blaze@1.0.0 || 2.0.0`). Additionally, you can now
call `api.versionsFrom(<release>)` multiple times, or with an array
(eg `api.versionsFrom([<release1>, <release2>])`. Meteor will
interpret this to mean that the package will work with packages from
all the listed releases.
* Support for "wrapped package" version numbers. There is now a `_` field
in version numbers. The `_` field must be an integer, and versions with
the `_` are sorted after versions without. This allows using the
upstream version number as the Meteor package version number and being
able to publish multiple version of the Meteor package (e.g.
`jquery@1.11.1_2`).
Note: packages using the `||` operator or the `_` symbol in their
versions or dependencies will be invisible to pre-0.9.3 users. Meteor
versions 0.9.2 and before do not understand the new version formats and
will not be able to use versions of packages that use the new features.
### Other Command-line Tool Improvements
* More detailed constraint solver output. Meteor now tells you which
constraints prevent upgrading or adding new packages. This will make
it much easier to update your app to new versions.
* Better handling of pre-release versions (e.g. versions with
`-`). Pre-release packages will now be included in an app if and only
if there is no way to meet the app's constraints without using a
pre-release package.
* Add `meteor admin set-unmigrated` to allow maintainers to hide
pre-0.9.0 packages in `meteor search` and `meteor show`. This will not
stop users from continuing to use the package, but it helps prevent
new users from finding old non-functional packages.
* Progress bars for time-intensive operations, like downloading large
packages.
### Other Changes
* Offically support `Meteor.wrapAsync` (renamed from
`Meteor._wrapAsync`). Additionally, `Meteor.wrapAsync` now lets you
pass an object to bind as `this` in the wrapped call. See
https://docs.meteor.com/#meteor_wrapasync.
* The `reactive-dict` package now allows an optional name argument to
enable data persistence during hot code push.
Patches by Github users evliu, meonkeys, mitar, mizzao, mquandalle,
prapicault, waitingkuo, wulfmeister.
## v0.9.2.2
* Fix regression in 0.9.2 that prevented some users from accessing the

View File

@@ -95,6 +95,8 @@ css-parse: https://github.com/reworkcss/css-parse
css-stringify: https://github.com/reworkcss/css-stringify
callsite: https://github.com/visionmedia/callsite
indexof: https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz
escape-html: https://github.com/component/escape-html
express: https://github.com/strongloop/express
----------
Copyright (c) 2010 TJ Holowaychuk <tj@vision-media.ca>
@@ -102,6 +104,7 @@ Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>
Copyright (c) 2012 TJ Holowaychuk <tj@vision-media.ca>
Copyright (c) 2013 TJ Holowaychuk <tj@vision-media.ca>
Copyright (c) 2011, 2013 TJ Holowaychuk <tj@vision-media.ca>
Copyright (c) 2009-2014 TJ Holowaychuk <tj@vision-media.ca>
----------
@@ -328,6 +331,7 @@ tty-browserify: https://github.com/substack/tty-browserify
typedarray: https://github.com/substack/typedarray
vm-browserify: https://github.com/substack/vm-browserify
wordwrap: https://github.com/substack/node-wordwrap
yargs: https://github.com/chevex/yargs
----------
Copyright 2010, 2011, 2012, 2013 James Halliday (mail@substack.net)
@@ -876,6 +880,74 @@ Modifications made by the following entities are licensed as above:
- Eloy Duran, Fingertips <eloy@fngtps.com>
----------
accepts: https://github.com/jshttp/accepts
merge-descriptors: https://github.com/component/merge-descriptors
type-is: https://github.com/jshttp/type-is
----------
Copyright (c) 2013 Jonathan Ong me@jongleberry.com
Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
----------
parseurl: https://github.com/expressjs/parseurl
----------
Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
Copyright (c) 2014 Douglas Christopher Wilson <doug@somethingdoug.com>
----------
serve-static: https://github.com/expressjs/serve-static
----------
Copyright (c) 2010 Sencha Inc.
Copyright (c) 2011 LearnBoost
Copyright (c) 2011 TJ Holowaychuk
Copyright (c) 2014 Douglas Christopher Wilson
----------
negotiator: https://github.com/jshttp/negotiator
----------
Original "Negotiator" program Copyright Federico Romero
Port to JavaScript Copyright Isaac Z. Schlueter
----------
options: https://github.com/einaros/options.js
tinycolor: https://github.com/einaros/tinycolor
ws: https://github.com/einaros/ws
----------
Copyright (c) 2011 Einar Otto Stangvik <einaros@gmail.com>
Copyright (c) 2012 Einar Otto Stangvik <einaros@gmail.com>
----------
path-to-regexp: https://github.com/component/path-to-regexp
----------
Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)
----------
truncate: https://github.com/FGRibreau/node-truncate
----------
Copyright (c) 2013 Francois-Guillaume Ribreau
----------
utils-merge: https://github.com/jaredhanson/utils-merge
----------
Copyright (c) 2013 Jared Hanson
==============
Apache License
@@ -1997,6 +2069,14 @@ Except where noted, this license applies to any and all software
programs and associated documentation files created by the
Original Author, when distributed with the Software.
----------
strong-data-uri: https://github.com/strongloop/strong-data-uri
----------
Redistributed under the terms of the Artistic License, version 2.0.
http://opensource.org/licenses/Artistic-2.0
----------
browserify: https://github.com/substack/node-browserify

View File

@@ -1 +1 @@
METEOR@0.9.2.2
METEOR@0.9.3

View File

@@ -1,58 +1,58 @@
appcache@1.0.1
application-configuration@1.0.2
autoupdate@1.1.0
autoupdate@1.1.1
base64@1.0.0
binary-heap@1.0.0
blaze-tools@1.0.0
blaze@2.0.0
blaze@2.0.1
boilerplate-generator@1.0.0
callback-hook@1.0.0
check@1.0.0
check@1.0.1
code-prettify@1.0.0
coffeescript@1.0.3
ctl-helper@1.0.3
ctl@1.0.1
ddp@1.0.8
deps@1.0.3
ejson@1.0.2
ddp@1.0.9
deps@1.0.4
ejson@1.0.3
fastclick@1.0.0
follower-livedata@1.0.1
geojson-utils@1.0.0
html-tools@1.0.0
html-tools@1.0.1
htmljs@1.0.1
http@1.0.5
http@1.0.6
id-map@1.0.0
jquery-waypoints@1.0.0
jquery@1.0.0
json@1.0.0
less@1.0.8
livedata@1.0.9
less@1.0.9
livedata@1.0.10
logging@1.0.3
meteor-platform@1.1.0
meteor@1.1.0
meteor-platform@1.1.1
meteor@1.1.1
minifiers@1.1.0
minimongo@1.0.3
mobile-status-bar@1.0.0
mongo@1.0.5
mongo@1.0.6
observe-sequence@1.0.2
ordered-dict@1.0.0
random@1.0.0
reactive-dict@1.0.2
reactive-var@1.0.1
reactive-dict@1.0.3
reactive-var@1.0.2
reload-safetybelt@1.0.0
reload@1.1.0
retry@1.0.0
routepolicy@1.0.1
session@1.0.1
session@1.0.2
showdown@1.0.1
spacebars-compiler@1.0.2
spacebars@1.0.1
spacebars@1.0.2
spiderable@1.0.3
standard-app-packages@1.0.1
templating@1.0.6
standard-app-packages@1.0.2
templating@1.0.7
tracker@1.0.2
ui@1.0.2
ui@1.0.3
underscore@1.0.0
url@1.0.0
webapp-hashing@1.0.0
webapp@1.1.1
webapp@1.1.2

View File

@@ -1633,14 +1633,18 @@ Example:
{{lt}}/template>
///// in JS file
Template.postsView.posts = function() {
return Posts.find();
};
Template.postsView.helpers({
posts: function() {
return Posts.find();
}
});
Template.postItem.postClass = function() {
return Session.equals("selectedPost", this._id) ?
"selected" : "";
};
Template.postItem.helpers({
postClass: function() {
return Session.equals("selectedPost", this._id) ?
"selected" : "";
}
});
Template.postItem.events({
'click': function() {
@@ -2229,12 +2233,6 @@ Example:
Now you can invoke this helper with `{{dstache}}foo}}` in the template defined
with `<{{! }}template name="myTemplate">`.
The following syntax is a shorthand for when you only have one helper to define:
Template.myTemplate.foo = function () {
return Session.get("foo");
};
To create a helper that can be used in any template, use
[`Template.registerHelper`](#template_registerhelper).

View File

@@ -148,7 +148,9 @@ can add multiple packages with one command
Optionally, adds version constraints. Running `meteor add package@1.1.0` will
add the package at version `1.1.0` or higher (but not `2.0.0` or higher). If you
want to use version `1.1.0` exactly, use `meteor add package@=1.1.0`.
want to use version `1.1.0` exactly, use `meteor add package@=1.1.0`. You can also
'or' constraints together: for example, '=1.0.0 || =2.0.1' means either 1.0.0 (exactly)
or 2.0.1 (exactly).
To remove a version constraint for a specific package, run `meteor add` again
without specifying a version. For example above, to stop using version `1.1.0`

View File

@@ -457,9 +457,11 @@ functions in JavaScript. Just add the helper functions directly on the
{{lt}}/template>
// in client/myapp.js: reactive helper function
Template.forecast.prediction = function () {
return Session.get("weather");
};
Template.forecast.helpers({
prediction: function () {
return Session.get("weather");
}
});
// in the JavaScript console
> Session.set("weather", "cloudy");
@@ -481,9 +483,11 @@ To iterate over an array or database cursor, use `{{dstache}}#each}}`:
{{lt}}/template>
// in myapp.js
Template.players.topScorers = function () {
return Users.find({score: {$gt: 100}}, {sort: {score: -1}});
};
Template.players.helpers({
topScorers: function () {
return Users.find({score: {$gt: 100}}, {sort: {score: -1}});
}
});
In this case, the data is coming from a database query. When the
database cursor is passed to `{{dstache}}#each}}`, it will wire up all of the
@@ -495,9 +499,11 @@ in `this`. Note that some block helpers change the current context (notably
`{{dstache}}#each}}` and `{{dstache}}#with}}`):
// in a JavaScript file
Template.players.leagueIs = function (league) {
return this.league === league;
};
Template.players.helpers({
leagueIs: function (league) {
return this.league === league;
}
});
<!-- in a HTML file -->
<template name="players">
@@ -514,7 +520,9 @@ in `this`. Note that some block helpers change the current context (notably
Helpers can also be used to pass in constant data.
// Works fine with {{dstache}}#each sections}}
Template.report.sections = ["Situation", "Complication", "Resolution"];
Template.report.helpers({
sections: ["Situation", "Complication", "Resolution"]
});
Finally, you can use an `events` declaration on a template function to set up a
table of event handlers. The format is documented at [Event
@@ -782,6 +790,12 @@ things). However, we will still write the new versions.json file.
{{/note}}
Meteor uses extended semver versioning for its packages: that means that the version
number has three parts separated by dots: major version, minor version and patch version
(for example: 1.2.3) with an optional pre-release version. You can read more about it here
(www.semver.org). Additionally, because some meteor packages wrap external libraries,
Meteor supports the convention of using _ to denote a wrap number.
You can read more about [`package.js`](#packagejs) files in the API
section.

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +1,8 @@
Template.headline.release = function () {
return Meteor.release ? "0.9.2.2" : "(checkout)";
};
Template.headline.helpers({
release: function () {
return Meteor.release ? "0.9.3" : "(checkout)";
}
});
Meteor.startup(function () {
// XXX this is broken by the new multi-page layout. Also, it was
@@ -401,14 +403,10 @@ var toc = [
"Packages", [ [
"accounts-ui",
"amplify",
"appcache",
"audit-argument-checks",
"backbone",
"bootstrap",
"browser-policy",
"coffeescript",
"d3",
"fastclick",
"force-ssl",
"jquery",
@@ -450,44 +448,48 @@ var name_to_id = function (name) {
return x;
};
Template.nav.sections = function () {
var ret = [];
var walk = function (items, depth) {
_.each(items, function (item) {
// Work around (eg) accidental trailing commas leading to spurious holes
// in IE8.
if (!item)
return;
if (item instanceof Array)
walk(item, depth + 1);
else {
if (typeof(item) === "string")
item = {name: item};
ret.push(_.extend({
type: "section",
id: item.name && name_to_id(item.name) || undefined,
depth: depth,
style: ''
}, item));
}
});
};
Template.nav.helpers({
sections: function () {
var ret = [];
var walk = function (items, depth) {
_.each(items, function (item) {
// Work around (eg) accidental trailing commas leading to spurious holes
// in IE8.
if (!item)
return;
if (item instanceof Array)
walk(item, depth + 1);
else {
if (typeof(item) === "string")
item = {name: item};
ret.push(_.extend({
type: "section",
id: item.name && name_to_id(item.name) || undefined,
depth: depth,
style: ''
}, item));
}
});
};
walk(toc, 1);
return ret;
};
walk(toc, 1);
return ret;
},
Template.nav.type = function (what) {
return this.type === what;
};
type: function (what) {
return this.type === what;
},
Template.nav.maybe_current = function () {
return Session.equals("section", this.id) ? "current" : "";
};
maybe_current: function () {
return Session.equals("section", this.id) ? "current" : "";
}
});
Template.nav_section.depthIs = function (n) {
return this.depth === n;
};
Template.nav_section.helpers({
depthIs: function (n) {
return this.depth === n;
}
});
// Show hidden TOC when menu icon is tapped
Template.nav.events({

View File

@@ -19,14 +19,10 @@ and removed with:
Meteor Development Group maintains the following packages:
{{> pkg_accounts_ui}}
{{> pkg_amplify}}
{{> pkg_appcache}}
{{> pkg_audit_argument_checks}}
{{> pkg_backbone}}
{{> pkg_bootstrap}}
{{> pkg_browser_policy}}
{{> pkg_coffeescript}}
{{> pkg_d3}}
{{> pkg_fastclick}}
{{> pkg_force_ssl}}
{{> pkg_jquery}}

View File

@@ -1,14 +0,0 @@
<template name="pkg_amplify">
{{#markdown}}
## `amplify`
[Amplify](http://amplifyjs.com/) provides a simple cross-browser API for HTML5 local storage, an
in-browser communication channel for loosely coupling application
components, and several useful utility functions.
Amplify defines a global namespace `amplify` on the client only. It does
not run on the server.
{{/markdown}}
</template>

View File

@@ -1,11 +0,0 @@
<template name="pkg_backbone">
{{#markdown}}
## `backbone`
[Backbone](http://documentcloud.github.com/backbone/) is a popular client-side MVC framework for managing complex
data in the browser. In addition to the MVC and DOM-binding
functionality, it also provides an API for HTML5 pushState and
client-side URL routing.
{{/markdown}}
</template>

View File

@@ -1,13 +0,0 @@
<template name="pkg_bootstrap">
{{#markdown}}
## `bootstrap`
[Twitter's Bootstrap](http://twitter.github.com/bootstrap/) package is a front-end toolkit for faster, more
beautiful web development. Bootstrap provides simple and flexible HTML,
CSS, and JavaScript for popular user interface components and
interactions including typography, forms, buttons, tables, grids, and
navigation.
{{/markdown}}
</template>

View File

@@ -1,17 +0,0 @@
<template name="pkg_d3">
{{#markdown}}
## `d3`
[D3.js](http://d3js.org/) is a JavaScript library for manipulating
documents based on data. D3 helps you bring data to life using HTML, SVG
and CSS. D3's emphasis on web standards gives you the full capabilities
of modern browsers without tying yourself to a proprietary framework,
combining powerful visualization components and a data-driven approach
to DOM manipulation.
The `d3` package adds the D3 library to the client JavaScript
bundle. It has no effect on the server.
{{/markdown}}
</template>

View File

@@ -1 +1 @@
METEOR@0.9.2.2
METEOR@0.9.3

View File

@@ -1,52 +1,52 @@
application-configuration@1.0.2
autopublish@1.0.0
autoupdate@1.1.0
autoupdate@1.1.1
base64@1.0.0
binary-heap@1.0.0
blaze-tools@1.0.0
blaze@2.0.0
blaze@2.0.1
boilerplate-generator@1.0.0
callback-hook@1.0.0
check@1.0.0
check@1.0.1
ctl-helper@1.0.3
ctl@1.0.1
ddp@1.0.8
deps@1.0.3
ejson@1.0.2
ddp@1.0.9
deps@1.0.4
ejson@1.0.3
fastclick@1.0.0
follower-livedata@1.0.1
geojson-utils@1.0.0
html-tools@1.0.0
html-tools@1.0.1
htmljs@1.0.1
http@1.0.5
http@1.0.6
id-map@1.0.0
insecure@1.0.0
jquery@1.0.0
json@1.0.0
livedata@1.0.9
livedata@1.0.10
logging@1.0.3
meteor-platform@1.1.0
meteor@1.1.0
meteor-platform@1.1.1
meteor@1.1.1
minifiers@1.1.0
minimongo@1.0.3
mobile-status-bar@1.0.0
mongo@1.0.5
mongo@1.0.6
observe-sequence@1.0.2
ordered-dict@1.0.0
random@1.0.0
reactive-dict@1.0.2
reactive-var@1.0.1
reactive-dict@1.0.3
reactive-var@1.0.2
reload@1.1.0
retry@1.0.0
routepolicy@1.0.1
session@1.0.1
session@1.0.2
spacebars-compiler@1.0.2
spacebars@1.0.1
standard-app-packages@1.0.1
templating@1.0.6
spacebars@1.0.2
standard-app-packages@1.0.2
templating@1.0.7
tracker@1.0.2
ui@1.0.2
ui@1.0.3
underscore@1.0.0
url@1.0.0
webapp-hashing@1.0.0
webapp@1.1.1
webapp@1.1.2

View File

@@ -1,2 +0,0 @@
android
ios

View File

@@ -1 +1 @@
METEOR@0.9.2.2
METEOR@0.9.3

View File

@@ -1,52 +1,52 @@
application-configuration@1.0.2
autopublish@1.0.0
autoupdate@1.1.0
autoupdate@1.1.1
base64@1.0.0
binary-heap@1.0.0
blaze-tools@1.0.0
blaze@2.0.0
blaze@2.0.1
boilerplate-generator@1.0.0
callback-hook@1.0.0
check@1.0.0
check@1.0.1
ctl-helper@1.0.3
ctl@1.0.1
ddp@1.0.8
deps@1.0.3
ejson@1.0.2
ddp@1.0.9
deps@1.0.4
ejson@1.0.3
fastclick@1.0.0
follower-livedata@1.0.1
geojson-utils@1.0.0
html-tools@1.0.0
html-tools@1.0.1
htmljs@1.0.1
http@1.0.5
http@1.0.6
id-map@1.0.0
insecure@1.0.0
jquery@1.0.0
json@1.0.0
livedata@1.0.9
livedata@1.0.10
logging@1.0.3
meteor-platform@1.1.0
meteor@1.1.0
meteor-platform@1.1.1
meteor@1.1.1
minifiers@1.1.0
minimongo@1.0.3
mobile-status-bar@1.0.0
mongo@1.0.5
mongo@1.0.6
observe-sequence@1.0.2
ordered-dict@1.0.0
random@1.0.0
reactive-dict@1.0.2
reactive-var@1.0.1
reactive-dict@1.0.3
reactive-var@1.0.2
reload@1.1.0
retry@1.0.0
routepolicy@1.0.1
session@1.0.1
session@1.0.2
spacebars-compiler@1.0.2
spacebars@1.0.1
standard-app-packages@1.0.1
templating@1.0.6
spacebars@1.0.2
standard-app-packages@1.0.2
templating@1.0.7
tracker@1.0.2
ui@1.0.2
ui@1.0.3
underscore@1.0.0
url@1.0.0
webapp-hashing@1.0.0
webapp@1.1.1
webapp@1.1.2

View File

@@ -4,18 +4,21 @@
Players = new Mongo.Collection("players");
if (Meteor.isClient) {
Template.leaderboard.players = function () {
return Players.find({}, {sort: {score: -1, name: 1}});
};
Template.leaderboard.helpers({
players: function () {
return Players.find({}, {sort: {score: -1, name: 1}});
},
selected_name: function () {
var player = Players.findOne(Session.get("selected_player"));
return player && player.name;
}
});
Template.leaderboard.selected_name = function () {
var player = Players.findOne(Session.get("selected_player"));
return player && player.name;
};
Template.player.selected = function () {
return Session.equals("selected_player", this._id) ? "selected" : '';
};
Template.player.helpers({
selected: function () {
return Session.equals("selected_player", this._id) ? "selected" : '';
}
});
Template.leaderboard.events({
'click button.inc': function () {

View File

@@ -1 +1 @@
METEOR@0.9.2.2
METEOR@0.9.3

View File

@@ -1,48 +1,48 @@
accounts-base@1.1.0
accounts-facebook@1.0.0
accounts-oauth@1.1.0
accounts-password@1.0.1
accounts-twitter@1.0.0
accounts-ui-unstyled@1.1.1
accounts-ui@1.1.0
accounts-base@1.1.1
accounts-facebook@1.0.1
accounts-oauth@1.1.1
accounts-password@1.0.2
accounts-twitter@1.0.1
accounts-ui-unstyled@1.1.2
accounts-ui@1.1.1
application-configuration@1.0.2
audit-argument-checks@1.0.0
autoupdate@1.1.0
autoupdate@1.1.1
base64@1.0.0
binary-heap@1.0.0
blaze-tools@1.0.0
blaze@2.0.0
blaze@2.0.1
boilerplate-generator@1.0.0
bootstrap@1.0.1
callback-hook@1.0.0
check@1.0.0
check@1.0.1
ctl-helper@1.0.3
ctl@1.0.1
d3@1.0.0
ddp@1.0.8
deps@1.0.3
ejson@1.0.2
email@1.0.2
ddp@1.0.9
deps@1.0.4
ejson@1.0.3
email@1.0.3
facebook@1.1.0
fastclick@1.0.0
follower-livedata@1.0.1
geojson-utils@1.0.0
html-tools@1.0.0
html-tools@1.0.1
htmljs@1.0.1
http@1.0.5
http@1.0.6
id-map@1.0.0
jquery@1.0.0
json@1.0.0
less@1.0.8
livedata@1.0.9
less@1.0.9
livedata@1.0.10
localstorage@1.0.0
logging@1.0.3
meteor-platform@1.1.0
meteor@1.1.0
meteor-platform@1.1.1
meteor@1.1.1
minifiers@1.1.0
minimongo@1.0.3
mobile-status-bar@1.0.0
mongo@1.0.5
mongo@1.0.6
npm-bcrypt@0.7.7
oauth1@1.1.0
oauth2@1.1.0
@@ -50,23 +50,23 @@ oauth@1.1.0
observe-sequence@1.0.2
ordered-dict@1.0.0
random@1.0.0
reactive-dict@1.0.2
reactive-var@1.0.1
reactive-dict@1.0.3
reactive-var@1.0.2
reload@1.1.0
retry@1.0.0
routepolicy@1.0.1
service-configuration@1.0.1
session@1.0.1
session@1.0.2
sha@1.0.0
spacebars-compiler@1.0.2
spacebars@1.0.1
spacebars@1.0.2
srp@1.0.0
standard-app-packages@1.0.1
templating@1.0.6
standard-app-packages@1.0.2
templating@1.0.7
tracker@1.0.2
twitter@1.1.0
ui@1.0.2
ui@1.0.3
underscore@1.0.0
url@1.0.0
webapp-hashing@1.0.0
webapp@1.1.1
webapp@1.1.2

View File

@@ -20,32 +20,30 @@ Meteor.startup(function () {
///////////////////////////////////////////////////////////////////////////////
// Party details sidebar
Template.details.party = function () {
return Parties.findOne(Session.get("selected"));
};
Template.details.helpers({
party: function () {
return Parties.findOne(Session.get("selected"));
},
anyParties: function () {
return Parties.find().count() > 0;
},
creatorName: function () {
var owner = Meteor.users.findOne(this.owner);
if (owner._id === Meteor.userId())
return "me";
return displayName(owner);
},
canRemove: function () {
return this.owner === Meteor.userId() && attending(this) === 0;
},
maybeChosen: function (what) {
var myRsvp = _.find(this.rsvps, function (r) {
return r.user === Meteor.userId();
}) || {};
Template.details.anyParties = function () {
return Parties.find().count() > 0;
};
Template.details.creatorName = function () {
var owner = Meteor.users.findOne(this.owner);
if (owner._id === Meteor.userId())
return "me";
return displayName(owner);
};
Template.details.canRemove = function () {
return this.owner === Meteor.userId() && attending(this) === 0;
};
Template.details.maybeChosen = function (what) {
var myRsvp = _.find(this.rsvps, function (r) {
return r.user === Meteor.userId();
}) || {};
return what == myRsvp.rsvp ? "chosen btn-inverse" : "";
};
return what == myRsvp.rsvp ? "chosen btn-inverse" : "";
}
});
Template.details.events({
'click .rsvp_yes': function () {
@@ -73,34 +71,36 @@ Template.details.events({
///////////////////////////////////////////////////////////////////////////////
// Party attendance widget
Template.attendance.rsvpName = function () {
var user = Meteor.users.findOne(this.user);
return displayName(user);
};
Template.attendance.helpers({
rsvpName: function () {
var user = Meteor.users.findOne(this.user);
return displayName(user);
},
Template.attendance.outstandingInvitations = function () {
var party = Parties.findOne(this._id);
return Meteor.users.find({$and: [
{_id: {$in: party.invited}}, // they're invited
{_id: {$nin: _.pluck(party.rsvps, 'user')}} // but haven't RSVP'd
]});
};
outstandingInvitations: function () {
var party = Parties.findOne(this._id);
return Meteor.users.find({$and: [
{_id: {$in: party.invited}}, // they're invited
{_id: {$nin: _.pluck(party.rsvps, 'user')}} // but haven't RSVP'd
]});
},
Template.attendance.invitationName = function () {
return displayName(this);
};
invitationName: function () {
return displayName(this);
},
Template.attendance.rsvpIs = function (what) {
return this.rsvp === what;
};
rsvpIs: function (what) {
return this.rsvp === what;
},
Template.attendance.nobody = function () {
return ! this.public && (this.rsvps.length + this.invited.length === 0);
};
nobody: function () {
return ! this.public && (this.rsvps.length + this.invited.length === 0);
},
Template.attendance.canInvite = function () {
return ! this.public && this.owner === Meteor.userId();
};
canInvite: function () {
return ! this.public && this.owner === Meteor.userId();
}
});
///////////////////////////////////////////////////////////////////////////////
// Map display
@@ -204,9 +204,11 @@ var openCreateDialog = function (x, y) {
Session.set("showCreateDialog", true);
};
Template.page.showCreateDialog = function () {
return Session.get("showCreateDialog");
};
Template.page.helpers({
showCreateDialog: function () {
return Session.get("showCreateDialog");
}
});
Template.createDialog.events({
'click .save': function (event, template) {
@@ -239,9 +241,11 @@ Template.createDialog.events({
}
});
Template.createDialog.error = function () {
return Session.get("createError");
};
Template.createDialog.helpers({
error: function () {
return Session.get("createError");
}
});
///////////////////////////////////////////////////////////////////////////////
// Invite dialog
@@ -250,9 +254,11 @@ var openInviteDialog = function () {
Session.set("showInviteDialog", true);
};
Template.page.showInviteDialog = function () {
return Session.get("showInviteDialog");
};
Template.page.helpers({
showInviteDialog: function () {
return Session.get("showInviteDialog");
}
});
Template.inviteDialog.events({
'click .invite': function (event, template) {
@@ -264,14 +270,16 @@ Template.inviteDialog.events({
}
});
Template.inviteDialog.uninvited = function () {
var party = Parties.findOne(Session.get("selected"));
if (! party)
return []; // party hasn't loaded yet
return Meteor.users.find({$nor: [{_id: {$in: party.invited}},
{_id: party.owner}]});
};
Template.inviteDialog.helpers({
uninvited: function () {
var party = Parties.findOne(Session.get("selected"));
if (! party)
return []; // party hasn't loaded yet
return Meteor.users.find({$nor: [{_id: {$in: party.invited}},
{_id: party.owner}]});
},
Template.inviteDialog.displayName = function () {
return displayName(this);
};
displayName: function () {
return displayName(this);
}
});

View File

@@ -1 +1 @@
METEOR@0.9.2.2
METEOR@0.9.3

View File

@@ -1,53 +1,53 @@
application-configuration@1.0.2
autoupdate@1.1.0
autoupdate@1.1.1
backbone@1.0.0
base64@1.0.0
binary-heap@1.0.0
blaze-tools@1.0.0
blaze@2.0.0
blaze@2.0.1
boilerplate-generator@1.0.0
callback-hook@1.0.0
check@1.0.0
check@1.0.1
ctl-helper@1.0.3
ctl@1.0.1
ddp@1.0.8
deps@1.0.3
ejson@1.0.2
ddp@1.0.9
deps@1.0.4
ejson@1.0.3
fastclick@1.0.0
follower-livedata@1.0.1
geojson-utils@1.0.0
html-tools@1.0.0
html-tools@1.0.1
htmljs@1.0.1
http@1.0.5
http@1.0.6
id-map@1.0.0
insecure@1.0.0
jquery@1.0.0
json@1.0.0
livedata@1.0.9
livedata@1.0.10
logging@1.0.3
meteor-platform@1.1.0
meteor@1.1.0
meteor-platform@1.1.1
meteor@1.1.1
minifiers@1.1.0
minimongo@1.0.3
mobile-status-bar@1.0.0
mongo@1.0.5
mongo@1.0.6
observe-sequence@1.0.2
ordered-dict@1.0.0
random@1.0.0
reactive-dict@1.0.2
reactive-var@1.0.1
reactive-dict@1.0.3
reactive-var@1.0.2
reload@1.1.0
retry@1.0.0
routepolicy@1.0.1
session@1.0.1
session@1.0.2
spacebars-compiler@1.0.2
spacebars@1.0.1
spacebars@1.0.2
spiderable@1.0.3
standard-app-packages@1.0.1
templating@1.0.6
standard-app-packages@1.0.2
templating@1.0.7
tracker@1.0.2
ui@1.0.2
ui@1.0.3
underscore@1.0.0
url@1.0.0
webapp-hashing@1.0.0
webapp@1.1.1
webapp@1.1.2

View File

@@ -77,13 +77,15 @@ var activateInput = function (input) {
////////// Lists //////////
Template.lists.loading = function () {
return !listsHandle.ready();
};
Template.lists.helpers({
loading: function () {
return !listsHandle.ready();
},
Template.lists.lists = function () {
return Lists.find({}, {sort: {name: 1}});
};
lists: function () {
return Lists.find({}, {sort: {name: 1}});
}
});
Template.lists.events({
'mousedown .list': function (evt) { // select list
@@ -123,27 +125,33 @@ Template.lists.events(okCancelEvents(
}
}));
Template.lists.selected = function () {
return Session.equals('list_id', this._id) ? 'selected' : '';
};
Template.lists.helpers({
selected: function () {
return Session.equals('list_id', this._id) ? 'selected' : '';
},
Template.lists.name_class = function () {
return this.name ? '' : 'empty';
};
name_class: function () {
return this.name ? '' : 'empty';
},
Template.lists.editing = function () {
return Session.equals('editing_listname', this._id);
};
editing: function () {
return Session.equals('editing_listname', this._id);
}
});
////////// Todos //////////
Template.todos.loading = function () {
return todosHandle && !todosHandle.ready();
};
Template.todos.helpers({
loading: function () {
return todosHandle && !todosHandle.ready();
}
});
Template.todos.any_list_selected = function () {
return !Session.equals('list_id', null);
};
Template.todos.helpers({
any_list_selected: function () {
return !Session.equals('list_id', null);
}
});
Template.todos.events(okCancelEvents(
'#new-todo',
@@ -161,40 +169,44 @@ Template.todos.events(okCancelEvents(
}
}));
Template.todos.todos = function () {
// Determine which todos to display in main pane,
// selected based on list_id and tag_filter.
Template.todos.helpers({
todos: function () {
// Determine which todos to display in main pane,
// selected based on list_id and tag_filter.
var list_id = Session.get('list_id');
if (!list_id)
return [];
var list_id = Session.get('list_id');
if (!list_id)
return [];
var sel = {list_id: list_id};
var tag_filter = Session.get('tag_filter');
if (tag_filter)
sel.tags = tag_filter;
var sel = {list_id: list_id};
var tag_filter = Session.get('tag_filter');
if (tag_filter)
sel.tags = tag_filter;
return Todos.find(sel, {sort: {timestamp: 1}});
};
return Todos.find(sel, {sort: {timestamp: 1}});
}
});
Template.todo_item.tag_objs = function () {
var todo_id = this._id;
return _.map(this.tags || [], function (tag) {
return {todo_id: todo_id, tag: tag};
});
};
Template.todo_item.helpers({
tag_objs: function () {
var todo_id = this._id;
return _.map(this.tags || [], function (tag) {
return {todo_id: todo_id, tag: tag};
});
},
Template.todo_item.done_class = function () {
return this.done ? 'done' : '';
};
done_class: function () {
return this.done ? 'done' : '';
},
Template.todo_item.editing = function () {
return Session.equals('editing_itemname', this._id);
};
editing: function () {
return Session.equals('editing_itemname', this._id);
},
Template.todo_item.adding_tag = function () {
return Session.equals('editing_addtag', this._id);
};
adding_tag: function () {
return Session.equals('editing_addtag', this._id);
}
});
Template.todo_item.events({
'click .check': function () {
@@ -256,34 +268,36 @@ Template.todo_item.events(okCancelEvents(
////////// Tag Filter //////////
// Pick out the unique tags from all todos in current list.
Template.tag_filter.tags = function () {
var tag_infos = [];
var total_count = 0;
Template.tag_filter.helpers({
tags: function () {
var tag_infos = [];
var total_count = 0;
Todos.find({list_id: Session.get('list_id')}).forEach(function (todo) {
_.each(todo.tags, function (tag) {
var tag_info = _.find(tag_infos, function (x) { return x.tag === tag; });
if (! tag_info)
tag_infos.push({tag: tag, count: 1});
else
tag_info.count++;
Todos.find({list_id: Session.get('list_id')}).forEach(function (todo) {
_.each(todo.tags, function (tag) {
var tag_info = _.find(tag_infos, function (x) { return x.tag === tag; });
if (! tag_info)
tag_infos.push({tag: tag, count: 1});
else
tag_info.count++;
});
total_count++;
});
total_count++;
});
tag_infos = _.sortBy(tag_infos, function (x) { return x.tag; });
tag_infos.unshift({tag: null, count: total_count});
tag_infos = _.sortBy(tag_infos, function (x) { return x.tag; });
tag_infos.unshift({tag: null, count: total_count});
return tag_infos;
};
return tag_infos;
},
Template.tag_filter.tag_text = function () {
return this.tag || "All items";
};
tag_text: function () {
return this.tag || "All items";
},
Template.tag_filter.selected = function () {
return Session.equals('tag_filter', this.tag) ? 'selected' : '';
};
selected: function () {
return Session.equals('tag_filter', this.tag) ? 'selected' : '';
}
});
Template.tag_filter.events({
'mousedown .tag': function () {

View File

@@ -1 +1 @@
METEOR@0.9.2.2
METEOR@0.9.3

View File

@@ -1,51 +1,51 @@
application-configuration@1.0.2
autoupdate@1.1.0
autoupdate@1.1.1
base64@1.0.0
binary-heap@1.0.0
blaze-tools@1.0.0
blaze@2.0.0
blaze@2.0.1
boilerplate-generator@1.0.0
callback-hook@1.0.0
check@1.0.0
check@1.0.1
ctl-helper@1.0.3
ctl@1.0.1
ddp@1.0.8
deps@1.0.3
ejson@1.0.2
ddp@1.0.9
deps@1.0.4
ejson@1.0.3
fastclick@1.0.0
follower-livedata@1.0.1
geojson-utils@1.0.0
html-tools@1.0.0
html-tools@1.0.1
htmljs@1.0.1
http@1.0.5
http@1.0.6
id-map@1.0.0
insecure@1.0.0
jquery@1.0.0
json@1.0.0
livedata@1.0.9
livedata@1.0.10
logging@1.0.3
meteor-platform@1.1.0
meteor@1.1.0
meteor-platform@1.1.1
meteor@1.1.1
minifiers@1.1.0
minimongo@1.0.3
mobile-status-bar@1.0.0
mongo@1.0.5
mongo@1.0.6
observe-sequence@1.0.2
ordered-dict@1.0.0
random@1.0.0
reactive-dict@1.0.2
reactive-var@1.0.1
reactive-dict@1.0.3
reactive-var@1.0.2
reload@1.1.0
retry@1.0.0
routepolicy@1.0.1
session@1.0.1
session@1.0.2
spacebars-compiler@1.0.2
spacebars@1.0.1
standard-app-packages@1.0.1
templating@1.0.6
spacebars@1.0.2
standard-app-packages@1.0.2
templating@1.0.7
tracker@1.0.2
ui@1.0.2
ui@1.0.3
underscore@1.0.0
url@1.0.0
webapp-hashing@1.0.0
webapp@1.1.1
webapp@1.1.2

View File

@@ -43,33 +43,35 @@ var clear_selected_positions = function () {
////// offers a button to start a fresh game.
//////
Template.lobby.show = function () {
// only show lobby if we're not in a game
return !game();
};
Template.lobby.helpers({
show: function () {
// only show lobby if we're not in a game
return !game();
},
Template.lobby.waiting = function () {
var players = Players.find({_id: {$ne: Session.get('player_id')},
name: {$ne: ''},
game_id: {$exists: false}});
waiting: function () {
var players = Players.find({_id: {$ne: Session.get('player_id')},
name: {$ne: ''},
game_id: {$exists: false}});
return players;
};
return players;
},
Template.lobby.count = function () {
var players = Players.find({_id: {$ne: Session.get('player_id')},
name: {$ne: ''},
game_id: {$exists: false}});
count: function () {
var players = Players.find({_id: {$ne: Session.get('player_id')},
name: {$ne: ''},
game_id: {$exists: false}});
return players.count();
};
return players.count();
},
Template.lobby.disabled = function () {
var me = player();
if (me && me.name)
return '';
return 'disabled';
};
disabled: function () {
var me = player();
if (me && me.name)
return '';
return 'disabled';
}
});
var trim = function (string) { return string.replace(/^\s+|\s+$/g, ''); };
@@ -92,26 +94,28 @@ var SPLASH = ['','','','',
'P', 'L', 'A', 'Y',
'','','',''];
Template.board.square = function (i) {
var g = game();
return g && g.board && g.board[i] || SPLASH[i];
};
Template.board.helpers({
square: function (i) {
var g = game();
return g && g.board && g.board[i] || SPLASH[i];
},
Template.board.selected = function (i) {
return Session.get('selected_' + i);
};
selected: function (i) {
return Session.get('selected_' + i);
},
Template.board.clock = function () {
var clock = game() && game().clock;
clock: function () {
var clock = game() && game().clock;
if (!clock || clock === 0)
return;
if (!clock || clock === 0)
return;
// format into M:SS
var min = Math.floor(clock / 60);
var sec = clock % 60;
return min + ':' + (sec < 10 ? ('0' + sec) : sec);
};
// format into M:SS
var min = Math.floor(clock / 60);
var sec = clock % 60;
return min + ':' + (sec < 10 ? ('0' + sec) : sec);
}
});
Template.board.events({
'click .square': function (evt) {
@@ -127,9 +131,11 @@ Template.board.events({
////// scratchpad is where we enter new words.
//////
Template.scratchpad.show = function () {
return game() && game().clock > 0;
};
Template.scratchpad.helpers({
show: function () {
return game() && game().clock > 0;
}
});
Template.scratchpad.events({
'click button, keyup input': function (evt) {
@@ -151,9 +157,11 @@ Template.scratchpad.events({
}
});
Template.postgame.show = function () {
return game() && game().clock === 0;
};
Template.postgame.helpers({
show: function () {
return game() && game().clock === 0;
}
});
Template.postgame.events({
'click button': function (evt) {
@@ -165,37 +173,43 @@ Template.postgame.events({
////// scores shows everyone's score and word list.
//////
Template.scores.show = function () {
return !!game();
};
Template.scores.helpers({
show: function () {
return !!game();
},
Template.scores.players = function () {
return game() && game().players;
};
players: function () {
return game() && game().players;
}
});
Template.player.winner = function () {
var g = game();
if (g.winners && _.include(g.winners, this._id))
return 'winner';
return '';
};
Template.player.helpers({
winner: function () {
var g = game();
if (g.winners && _.include(g.winners, this._id))
return 'winner';
return '';
},
Template.player.total_score = function () {
var words = Words.find({game_id: game() && game()._id,
player_id: this._id});
total_score: function () {
var words = Words.find({game_id: game() && game()._id,
player_id: this._id});
var score = 0;
words.forEach(function (word) {
if (word.score)
score += word.score;
});
return score;
};
var score = 0;
words.forEach(function (word) {
if (word.score)
score += word.score;
});
return score;
}
});
Template.words.words = function () {
return Words.find({game_id: game() && game()._id,
player_id: this._id});
};
Template.words.helpers({
words: function () {
return Words.find({game_id: game() && game()._id,
player_id: this._id});
}
});
//////

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "A user account system",
version: "1.1.0"
version: "1.1.1"
});
Package.on_use(function (api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Login service for Facebook accounts",
version: "1.0.0"
version: "1.0.1"
});
Package.on_use(function(api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Login service for Github accounts",
version: "1.0.0"
version: "1.0.1"
});
Package.on_use(function(api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Login service for Google accounts",
version: "1.0.0"
version: "1.0.1"
});
Package.on_use(function(api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Login service for Meetup accounts",
version: "1.0.0"
version: "1.0.1"
});
Package.on_use(function(api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Login service for Meteor developer accounts",
version: "1.0.0"
version: "1.0.1"
});
Package.on_use(function (api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Common code for OAuth-based login services",
version: "1.1.0"
version: "1.1.1"
});
Package.on_use(function (api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Password support for accounts",
version: "1.0.1"
version: "1.0.2"
});
Package.on_use(function(api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Login service for Twitter accounts",
version: "1.0.0"
version: "1.0.1"
});
Package.on_use(function(api) {

View File

@@ -107,30 +107,31 @@ validatePassword = function (password) {
// loginButtonLoggedOut template
//
Template._loginButtonsLoggedOut.dropdown = dropdown;
Template._loginButtonsLoggedOut.services = getLoginServices;
Template._loginButtonsLoggedOut.singleService = function () {
var services = getLoginServices();
if (services.length !== 1)
throw new Error(
"Shouldn't be rendering this template with more than one configured service");
return services[0];
};
Template._loginButtonsLoggedOut.configurationLoaded = function () {
return Accounts.loginServicesConfigured();
};
Template._loginButtonsLoggedOut.helpers({
dropdown: dropdown,
services: getLoginServices,
singleService: function () {
var services = getLoginServices();
if (services.length !== 1)
throw new Error(
"Shouldn't be rendering this template with more than one configured service");
return services[0];
},
configurationLoaded: function () {
return Accounts.loginServicesConfigured();
}
});
//
// loginButtonsLoggedIn template
//
// decide whether we should show a dropdown rather than a row of
// buttons
Template._loginButtonsLoggedIn.dropdown = dropdown;
// decide whether we should show a dropdown rather than a row of
// buttons
Template._loginButtonsLoggedIn.helpers({
dropdown: dropdown
});
@@ -138,7 +139,9 @@ Template._loginButtonsLoggedIn.dropdown = dropdown;
// loginButtonsLoggedInSingleLogoutButton template
//
Template._loginButtonsLoggedInSingleLogoutButton.displayName = displayName;
Template._loginButtonsLoggedInSingleLogoutButton.helpers({
displayName: displayName
});
@@ -146,17 +149,23 @@ Template._loginButtonsLoggedInSingleLogoutButton.displayName = displayName;
// loginButtonsMessage template
//
Template._loginButtonsMessages.errorMessage = function () {
return loginButtonsSession.get('errorMessage');
};
Template._loginButtonsMessages.helpers({
errorMessage: function () {
return loginButtonsSession.get('errorMessage');
}
});
Template._loginButtonsMessages.infoMessage = function () {
return loginButtonsSession.get('infoMessage');
};
Template._loginButtonsMessages.helpers({
infoMessage: function () {
return loginButtonsSession.get('infoMessage');
}
});
//
// loginButtonsLoggingInPadding template
//
Template._loginButtonsLoggingInPadding.dropdown = dropdown;
Template._loginButtonsLoggingInPadding.helpers({
dropdown: dropdown
});

View File

@@ -64,9 +64,11 @@ var resetPassword = function () {
});
};
Template._resetPasswordDialog.inResetPasswordFlow = function () {
return loginButtonsSession.get('resetPasswordToken');
};
Template._resetPasswordDialog.helpers({
inResetPasswordFlow: function () {
return loginButtonsSession.get('resetPasswordToken');
}
});
//
// justResetPasswordDialog template
@@ -78,11 +80,12 @@ Template._justResetPasswordDialog.events({
}
});
Template._justResetPasswordDialog.visible = function () {
return loginButtonsSession.get('justResetPassword');
};
Template._justResetPasswordDialog.displayName = displayName;
Template._justResetPasswordDialog.helpers({
visible: function () {
return loginButtonsSession.get('justResetPassword');
},
displayName: displayName
});
@@ -122,9 +125,11 @@ var enrollAccount = function () {
});
};
Template._enrollAccountDialog.inEnrollAccountFlow = function () {
return loginButtonsSession.get('enrollAccountToken');
};
Template._enrollAccountDialog.helpers({
inEnrollAccountFlow: function () {
return loginButtonsSession.get('enrollAccountToken');
}
});
//
@@ -137,11 +142,12 @@ Template._justVerifiedEmailDialog.events({
}
});
Template._justVerifiedEmailDialog.visible = function () {
return loginButtonsSession.get('justVerifiedEmail');
};
Template._justVerifiedEmailDialog.displayName = displayName;
Template._justVerifiedEmailDialog.helpers({
visible: function () {
return loginButtonsSession.get('justVerifiedEmail');
},
displayName: displayName
});
//
@@ -154,10 +160,12 @@ Template._loginButtonsMessagesDialog.events({
}
});
Template._loginButtonsMessagesDialog.visible = function () {
var hasMessage = loginButtonsSession.get('infoMessage') || loginButtonsSession.get('errorMessage');
return !dropdown() && hasMessage;
};
Template._loginButtonsMessagesDialog.helpers({
visible: function () {
var hasMessage = loginButtonsSession.get('infoMessage') || loginButtonsSession.get('errorMessage');
return !dropdown() && hasMessage;
}
});
//
@@ -240,22 +248,21 @@ var configurationFields = function () {
return template.fields();
};
Template._configureLoginServiceDialog.configurationFields = function () {
return configurationFields();
};
Template._configureLoginServiceDialog.visible = function () {
return loginButtonsSession.get('configureLoginServiceDialogVisible');
};
Template._configureLoginServiceDialog.configurationSteps = function () {
// renders the appropriate template
return configureLoginServiceDialogTemplateForService();
};
Template._configureLoginServiceDialog.saveDisabled = function () {
return loginButtonsSession.get('configureLoginServiceDialogSaveDisabled');
};
Template._configureLoginServiceDialog.helpers({
configurationFields: function () {
return configurationFields();
},
visible: function () {
return loginButtonsSession.get('configureLoginServiceDialogVisible');
},
configurationSteps: function () {
// renders the appropriate template
return configureLoginServiceDialogTemplateForService();
},
saveDisabled: function () {
return loginButtonsSession.get('configureLoginServiceDialogSaveDisabled');
}
});
// XXX from http://epeli.github.com/underscore.string/lib/underscore.string.js
var capitalize = function(str){

View File

@@ -26,29 +26,33 @@ Template._loginButtonsLoggedInDropdown.events({
}
});
Template._loginButtonsLoggedInDropdown.displayName = displayName;
Template._loginButtonsLoggedInDropdown.helpers({
displayName: displayName,
Template._loginButtonsLoggedInDropdown.inChangePasswordFlow = function () {
return loginButtonsSession.get('inChangePasswordFlow');
};
inChangePasswordFlow: function () {
return loginButtonsSession.get('inChangePasswordFlow');
},
Template._loginButtonsLoggedInDropdown.inMessageOnlyFlow = function () {
return loginButtonsSession.get('inMessageOnlyFlow');
};
inMessageOnlyFlow: function () {
return loginButtonsSession.get('inMessageOnlyFlow');
},
Template._loginButtonsLoggedInDropdown.dropdownVisible = function () {
return loginButtonsSession.get('dropdownVisible');
};
dropdownVisible: function () {
return loginButtonsSession.get('dropdownVisible');
}
});
Template._loginButtonsLoggedInDropdownActions.allowChangingPassword = function () {
// it would be more correct to check whether the user has a password set,
// but in order to do that we'd have to send more data down to the client,
// and it'd be preferable not to send down the entire service.password document.
//
// instead we use the heuristic: if the user has a username or email set.
var user = Meteor.user();
return user.username || (user.emails && user.emails[0] && user.emails[0].address);
};
Template._loginButtonsLoggedInDropdownActions.helpers({
allowChangingPassword: function () {
// it would be more correct to check whether the user has a password set,
// but in order to do that we'd have to send more data down to the client,
// and it'd be preferable not to send down the entire service.password document.
//
// instead we use the heuristic: if the user has a username or email set.
var user = Meteor.user();
return user.username || (user.emails && user.emails[0] && user.emails[0].address);
}
});
//
@@ -161,124 +165,131 @@ Template._loginButtonsLoggedOutDropdown.events({
}
});
// additional classes that can be helpful in styling the dropdown
Template._loginButtonsLoggedOutDropdown.additionalClasses = function () {
if (!hasPasswordService()) {
return false;
} else {
if (loginButtonsSession.get('inSignupFlow')) {
return 'login-form-create-account';
} else if (loginButtonsSession.get('inForgotPasswordFlow')) {
return 'login-form-forgot-password';
Template._loginButtonsLoggedOutDropdown.helpers({
// additional classes that can be helpful in styling the dropdown
additionalClasses: function () {
if (!hasPasswordService()) {
return false;
} else {
return 'login-form-sign-in';
if (loginButtonsSession.get('inSignupFlow')) {
return 'login-form-create-account';
} else if (loginButtonsSession.get('inForgotPasswordFlow')) {
return 'login-form-forgot-password';
} else {
return 'login-form-sign-in';
}
}
}
};
},
Template._loginButtonsLoggedOutDropdown.dropdownVisible = function () {
return loginButtonsSession.get('dropdownVisible');
};
dropdownVisible: function () {
return loginButtonsSession.get('dropdownVisible');
},
Template._loginButtonsLoggedOutDropdown.hasPasswordService = hasPasswordService;
hasPasswordService: hasPasswordService
});
// return all login services, with password last
Template._loginButtonsLoggedOutAllServices.services = getLoginServices;
Template._loginButtonsLoggedOutAllServices.helpers({
services: getLoginServices,
Template._loginButtonsLoggedOutAllServices.isPasswordService = function () {
return this.name === 'password';
};
isPasswordService: function () {
return this.name === 'password';
},
Template._loginButtonsLoggedOutAllServices.hasOtherServices = function () {
return getLoginServices().length > 1;
};
hasOtherServices: function () {
return getLoginServices().length > 1;
},
Template._loginButtonsLoggedOutAllServices.hasPasswordService =
hasPasswordService;
hasPasswordService: hasPasswordService
});
Template._loginButtonsLoggedOutPasswordService.fields = function () {
var loginFields = [
{fieldName: 'username-or-email', fieldLabel: 'Username or Email',
visible: function () {
return _.contains(
["USERNAME_AND_EMAIL", "USERNAME_AND_OPTIONAL_EMAIL"],
passwordSignupFields());
}},
{fieldName: 'username', fieldLabel: 'Username',
visible: function () {
return passwordSignupFields() === "USERNAME_ONLY";
}},
{fieldName: 'email', fieldLabel: 'Email', inputType: 'email',
visible: function () {
return passwordSignupFields() === "EMAIL_ONLY";
}},
{fieldName: 'password', fieldLabel: 'Password', inputType: 'password',
visible: function () {
return true;
}}
];
Template._loginButtonsLoggedOutPasswordService.helpers({
fields: function () {
var loginFields = [
{fieldName: 'username-or-email', fieldLabel: 'Username or Email',
visible: function () {
return _.contains(
["USERNAME_AND_EMAIL", "USERNAME_AND_OPTIONAL_EMAIL"],
passwordSignupFields());
}},
{fieldName: 'username', fieldLabel: 'Username',
visible: function () {
return passwordSignupFields() === "USERNAME_ONLY";
}},
{fieldName: 'email', fieldLabel: 'Email', inputType: 'email',
visible: function () {
return passwordSignupFields() === "EMAIL_ONLY";
}},
{fieldName: 'password', fieldLabel: 'Password', inputType: 'password',
visible: function () {
return true;
}}
];
var signupFields = [
{fieldName: 'username', fieldLabel: 'Username',
visible: function () {
return _.contains(
["USERNAME_AND_EMAIL", "USERNAME_AND_OPTIONAL_EMAIL", "USERNAME_ONLY"],
passwordSignupFields());
}},
{fieldName: 'email', fieldLabel: 'Email', inputType: 'email',
visible: function () {
return _.contains(
["USERNAME_AND_EMAIL", "EMAIL_ONLY"],
passwordSignupFields());
}},
{fieldName: 'email', fieldLabel: 'Email (optional)', inputType: 'email',
visible: function () {
return passwordSignupFields() === "USERNAME_AND_OPTIONAL_EMAIL";
}},
{fieldName: 'password', fieldLabel: 'Password', inputType: 'password',
visible: function () {
return true;
}},
{fieldName: 'password-again', fieldLabel: 'Password (again)',
inputType: 'password',
visible: function () {
// No need to make users double-enter their password if
// they'll necessarily have an email set, since they can use
// the "forgot password" flow.
return _.contains(
["USERNAME_AND_OPTIONAL_EMAIL", "USERNAME_ONLY"],
passwordSignupFields());
}}
];
var signupFields = [
{fieldName: 'username', fieldLabel: 'Username',
visible: function () {
return _.contains(
["USERNAME_AND_EMAIL", "USERNAME_AND_OPTIONAL_EMAIL", "USERNAME_ONLY"],
passwordSignupFields());
}},
{fieldName: 'email', fieldLabel: 'Email', inputType: 'email',
visible: function () {
return _.contains(
["USERNAME_AND_EMAIL", "EMAIL_ONLY"],
passwordSignupFields());
}},
{fieldName: 'email', fieldLabel: 'Email (optional)', inputType: 'email',
visible: function () {
return passwordSignupFields() === "USERNAME_AND_OPTIONAL_EMAIL";
}},
{fieldName: 'password', fieldLabel: 'Password', inputType: 'password',
visible: function () {
return true;
}},
{fieldName: 'password-again', fieldLabel: 'Password (again)',
inputType: 'password',
visible: function () {
// No need to make users double-enter their password if
// they'll necessarily have an email set, since they can use
// the "forgot password" flow.
return _.contains(
["USERNAME_AND_OPTIONAL_EMAIL", "USERNAME_ONLY"],
passwordSignupFields());
}}
];
return loginButtonsSession.get('inSignupFlow') ? signupFields : loginFields;
};
return loginButtonsSession.get('inSignupFlow') ? signupFields : loginFields;
},
Template._loginButtonsLoggedOutPasswordService.inForgotPasswordFlow = function () {
return loginButtonsSession.get('inForgotPasswordFlow');
};
inForgotPasswordFlow: function () {
return loginButtonsSession.get('inForgotPasswordFlow');
},
Template._loginButtonsLoggedOutPasswordService.inLoginFlow = function () {
return !loginButtonsSession.get('inSignupFlow') && !loginButtonsSession.get('inForgotPasswordFlow');
};
inLoginFlow: function () {
return !loginButtonsSession.get('inSignupFlow') && !loginButtonsSession.get('inForgotPasswordFlow');
},
Template._loginButtonsLoggedOutPasswordService.inSignupFlow = function () {
return loginButtonsSession.get('inSignupFlow');
};
inSignupFlow: function () {
return loginButtonsSession.get('inSignupFlow');
},
Template._loginButtonsLoggedOutPasswordService.showCreateAccountLink = function () {
return !Accounts._options.forbidClientAccountCreation;
};
showCreateAccountLink: function () {
return !Accounts._options.forbidClientAccountCreation;
},
Template._loginButtonsLoggedOutPasswordService.showForgotPasswordLink = function () {
return _.contains(
["USERNAME_AND_EMAIL", "USERNAME_AND_OPTIONAL_EMAIL", "EMAIL_ONLY"],
passwordSignupFields());
};
showForgotPasswordLink: function () {
return _.contains(
["USERNAME_AND_EMAIL", "USERNAME_AND_OPTIONAL_EMAIL", "EMAIL_ONLY"],
passwordSignupFields());
}
});
Template._loginButtonsFormField.inputType = function () {
return this.inputType || "text";
};
Template._loginButtonsFormField.helpers({
inputType: function () {
return this.inputType || "text";
}
});
//
@@ -295,28 +306,30 @@ Template._loginButtonsChangePassword.events({
}
});
Template._loginButtonsChangePassword.fields = function () {
return [
{fieldName: 'old-password', fieldLabel: 'Current Password', inputType: 'password',
visible: function () {
return true;
}},
{fieldName: 'password', fieldLabel: 'New Password', inputType: 'password',
visible: function () {
return true;
}},
{fieldName: 'password-again', fieldLabel: 'New Password (again)',
inputType: 'password',
visible: function () {
// No need to make users double-enter their password if
// they'll necessarily have an email set, since they can use
// the "forgot password" flow.
return _.contains(
["USERNAME_AND_OPTIONAL_EMAIL", "USERNAME_ONLY"],
passwordSignupFields());
}}
];
};
Template._loginButtonsChangePassword.helpers({
fields: function () {
return [
{fieldName: 'old-password', fieldLabel: 'Current Password', inputType: 'password',
visible: function () {
return true;
}},
{fieldName: 'password', fieldLabel: 'New Password', inputType: 'password',
visible: function () {
return true;
}},
{fieldName: 'password-again', fieldLabel: 'New Password (again)',
inputType: 'password',
visible: function () {
// No need to make users double-enter their password if
// they'll necessarily have an email set, since they can use
// the "forgot password" flow.
return _.contains(
["USERNAME_AND_OPTIONAL_EMAIL", "USERNAME_ONLY"],
passwordSignupFields());
}}
];
}
});
//

View File

@@ -54,19 +54,20 @@ Template._loginButtonsLoggedOutSingleLoginButton.events({
}
});
Template._loginButtonsLoggedOutSingleLoginButton.configured = function () {
return !!ServiceConfiguration.configurations.findOne({service: this.name});
};
Template._loginButtonsLoggedOutSingleLoginButton.capitalizedName = function () {
if (this.name === 'github')
// XXX we should allow service packages to set their capitalized name
return 'GitHub';
else if (this.name === 'meteor-developer')
return 'Meteor';
else
return capitalize(this.name);
};
Template._loginButtonsLoggedOutSingleLoginButton.helpers({
configured: function () {
return !!ServiceConfiguration.configurations.findOne({service: this.name});
},
capitalizedName: function () {
if (this.name === 'github')
// XXX we should allow service packages to set their capitalized name
return 'GitHub';
else if (this.name === 'meteor-developer')
return 'Meteor';
else
return capitalize(this.name);
}
});
// XXX from http://epeli.github.com/underscore.string/lib/underscore.string.js
var capitalize = function(str){

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Unstyled version of login widgets",
version: "1.1.1"
version: "1.1.2"
});
Package.on_use(function (api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Simple templates to add login widgets to an app",
version: "1.1.0"
version: "1.1.1"
});
Package.on_use(function (api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Login service for Sina Weibo accounts",
version: "1.0.0"
version: "1.0.1"
});
Package.on_use(function(api) {

View File

@@ -74,7 +74,7 @@ see the variable without having the client also reload.
Add to leaderboard.js:
Template.leaderboard.available = Autoupdate.newClientAvailable;
Template.leaderboard.helpers({available: Autoupdate.newClientAvailable});
And add `{{available}}` to the leaderboard template in
leaderboard.html.

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Update the client when new client code is available",
version: '1.1.0'
version: '1.1.1'
});
Cordova.depends({

View File

@@ -29,6 +29,38 @@ var bindDataContext = function (x) {
return x;
};
Blaze._OLDSTYLE_HELPER = {};
var getTemplateHelper = Blaze._getTemplateHelper = function (template, name) {
// XXX COMPAT WITH 0.9.3
var isKnownOldStyleHelper = false;
if (template.__helpers.has(name)) {
var helper = template.__helpers.get(name);
if (helper === Blaze._OLDSTYLE_HELPER) {
isKnownOldStyleHelper = true;
} else {
return helper;
}
}
// old-style helper
if (name in template) {
// Only warn once per helper
if (! isKnownOldStyleHelper) {
template.__helpers.set(name, Blaze._OLDSTYLE_HELPER);
if (! template._NOWARN_OLDSTYLE_HELPERS) {
Blaze._warn('Assigning helper with `' + template.viewName + '.' +
name + ' = ...` is deprecated. Use `' + template.viewName +
'.helpers(...)` instead.');
}
}
return template[name];
}
return null;
};
var wrapHelper = function (f) {
return Blaze._wrapCatchingExceptions(f, 'template helper');
};
@@ -50,6 +82,7 @@ var wrapHelper = function (f) {
Blaze.View.prototype.lookup = function (name, _options) {
var template = this.template;
var lookupTemplate = _options && _options.template;
var helper;
if (/^\./.test(name)) {
// starts with a dot. must be a series of dots which maps to an
@@ -59,8 +92,9 @@ Blaze.View.prototype.lookup = function (name, _options) {
return Blaze._parentData(name.length - 1, true /*_functionWrapped*/);
} else if (template && (name in template)) {
return wrapHelper(bindDataContext(template[name]));
} else if (template &&
((helper = getTemplateHelper(template, name)) != null)) {
return wrapHelper(bindDataContext(helper));
} else if (lookupTemplate && (name in Blaze.Template) &&
(Blaze.Template[name] instanceof Blaze.Template)) {
return Blaze.Template[name];

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Meteor Reactive Templating library",
version: '2.0.0'
version: '2.0.1'
});
Package.on_use(function (api) {

View File

@@ -31,10 +31,22 @@ Blaze.Template = function (viewName, renderFunction) {
this.viewName = viewName;
this.renderFunction = renderFunction;
this.__helpers = new HelperMap;
this.__eventMaps = [];
};
var Template = Blaze.Template;
var HelperMap = function () {};
HelperMap.prototype.get = function (name) {
return this[' '+name];
};
HelperMap.prototype.set = function (name, helper) {
this[' '+name] = helper;
};
HelperMap.prototype.has = function (name) {
return (' '+name) in this;
};
/**
* @summary Returns true if `value` is a template object like `Template.myTemplate`.
* @locus Client
@@ -236,7 +248,7 @@ Blaze.TemplateInstance.prototype.autorun = function (f) {
*/
Template.prototype.helpers = function (dict) {
for (var k in dict)
this[k] = dict[k];
this.__helpers.set(k, dict[k]);
};
/**

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Configure content security policies",
version: "1.0.0"
version: "1.0.1"
});
Package.on_use(function (api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Restrict which websites can frame your app",
version: "1.0.0"
version: "1.0.1"
});
Package.on_use(function (api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Configure security policies enforced by the browser",
version: "1.0.0"
version: "1.0.1"
});
Package.on_use(function (api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Check whether a value matches a pattern",
version: '1.0.0'
version: '1.0.1'
});
Package.on_use(function (api) {

View File

@@ -327,7 +327,7 @@ runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - sinatra",
var args = splitArgs({
'capistrano': '2.14.2',
'data_mapper': '1.2.0',
'data-mapper': '1.2.0',
'dm-core': '1.2.0',
'dm-sqlite-adapter': '1.2.0',
'dm-timestamps': '1.2.0',
@@ -364,11 +364,11 @@ runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - rails, gi
var args = splitArgs({
'rails': '4.0.0',
'protected_attributes': null,
'protected-attributes': null,
'rails-observers': null,
'actionpack-page_caching': null,
'actionpack-action_caching': null,
'default_value_for': '3.0.0',
'actionpack-page-caching': null,
'actionpack-action-caching': null,
'default-value-for': '3.0.0',
'mysql2': null,
'devise': '3.0.4',
'devise-async': '0.8.0',
@@ -376,14 +376,14 @@ runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - rails, gi
'omniauth-google-oauth2': null,
'omniauth-twitter': null,
'omniauth-github': null,
'gitlab_git': '5.7.1',
'gitlab-git': '5.7.1',
'gitlab-grack': '2.0.0',
'gitlab_omniauth-ldap': '1.0.4',
'gitlab-omniauth-ldap': '1.0.4',
'gitlab-gollum-lib': '1.1.0',
'gitlab-linguist': '3.0.0',
'grape': '0.6.1',
'rack-cors': null,
'email_validator': '1.4.0',
'email-validator': '1.4.0',
'stamp': null,
'enumerize': null,
'kaminari': '0.15.1',
@@ -397,7 +397,7 @@ runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - rails, gi
'asciidoctor': null,
'unicorn': '4.6.3',
'unicorn-worker-killer': null,
'state_machine': null,
'state-machine': null,
'acts-as-taggable-on': null,
'slim': null,
'sinatra': null,
@@ -406,13 +406,13 @@ runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - rails, gi
'colored': null,
'settingslogic': null,
'foreman': null,
'version_sorter': null,
'version-sorter': null,
'redis-rails': null,
'tinder': '1.9.2',
'hipchat': '0.14.0',
'gemnasium-gitlab-service': '0.2.1',
'slack-notifier': '0.2.0',
'd3_rails': '3.1.4',
'd3-rails': '3.1.4',
'underscore-rails': '1.4.4',
'sanitize': null,
'rack-attack': null,
@@ -431,7 +431,7 @@ runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - rails, gi
'raphael-rails': '2.1.2',
'bootstrap-sass': '3.0.0',
'font-awesome-rails': '3.2.0',
'gitlab_emoji': '0.0.1',
'gitlab-emoji': '0.0.1',
'gon': '5.0.0'
});
@@ -443,11 +443,11 @@ runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - rails, gi
var args = splitArgs({
'rails': '4.0.0',
'protected_attributes': null,
'protected-attributes': null,
'rails-observers': null,
'actionpack-page_caching': null,
'actionpack-action_caching': null,
'default_value_for': '3.0.0',
'actionpack-page-caching': null,
'actionpack-action-caching': null,
'default-value-for': '3.0.0',
'mysql2': null,
'devise': '3.0.4',
'devise-async': '0.8.0',
@@ -455,14 +455,14 @@ runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - rails, gi
'omniauth-google-oauth2': null,
'omniauth-twitter': null,
'omniauth-github': null,
'gitlab_git': '5.7.1',
'gitlab-git': '5.7.1',
'gitlab-grack': '2.0.0',
'gitlab_omniauth-ldap': '1.0.4',
'gitlab-omniauth-ldap': '1.0.4',
'gitlab-gollum-lib': '1.1.0',
'gitlab-linguist': '3.0.0',
'grape': '0.6.1',
'rack-cors': null,
'email_validator': '1.4.0',
'email-validator': '1.4.0',
'stamp': null,
'enumerize': null,
'kaminari': '0.15.1',
@@ -476,7 +476,7 @@ runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - rails, gi
'asciidoctor': null,
'unicorn': '4.6.3',
'unicorn-worker-killer': null,
'state_machine': null,
'state-machine': null,
'acts-as-taggable-on': null,
'slim': null,
'sinatra': null,
@@ -485,13 +485,13 @@ runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - rails, gi
'colored': null,
'settingslogic': null,
'foreman': null,
'version_sorter': null,
'version-sorter': null,
'redis-rails': null,
'tinder': '1.9.2',
'hipchat': '0.14.0',
'gemnasium-gitlab-service': '0.2.1',
'slack-notifier': '0.2.0',
'd3_rails': '3.1.4',
'd3-rails': '3.1.4',
'underscore-rails': '1.4.4',
'sanitize': null,
'rack-attack': null,
@@ -510,7 +510,7 @@ runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - rails, gi
'raphael-rails': '2.1.2',
'bootstrap-sass': '3.0.0',
'font-awesome-rails': '3.2.0',
'gitlab_emoji': '0.0.1',
'gitlab-emoji': '0.0.1',
'gon': '5.0.0'
});
@@ -519,7 +519,7 @@ runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - rails, gi
"actionpack": "4.0.0",
"activemodel": "4.0.0",
"activerecord": "4.0.0",
"activerecord-deprecated_finders": "1.0.3",
"activerecord-deprecated-finders": "1.0.3",
"activesupport": "4.0.0",
"arel": "4.0.2",
"asciidoctor": "0.1.4",
@@ -530,8 +530,8 @@ runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - rails, gi
"coffee-rails": "4.0.1",
"coffee-script": "2.2.0",
"coffee-script-source": "1.7.0",
"d3_rails": "3.1.4",
"default_value_for": "3.0.0",
"d3-rails": "3.1.4",
"default-value-for": "3.0.0",
"devise": "3.0.4",
"devise-async": "0.8.0",
"erubis": "2.7.0",
@@ -551,7 +551,7 @@ runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - rails, gi
"mail": "2.5.4",
"mime-types": "1.25.1",
"minitest": "4.7.5",
"multi_json": "1.9.0",
"multi-json": "1.9.0",
"multipart-post": "2.0.0",
"oauth": "0.4.7",
"oauth2": "0.8.1",
@@ -561,10 +561,10 @@ runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - rails, gi
"omniauth-oauth": "1.0.1",
"omniauth-oauth2": "1.1.1",
"omniauth-twitter": "1.0.1",
"orm_adapter": "0.5.0",
"orm-adapter": "0.5.0",
"polyglot": "0.3.4",
"posix-spawn": "0.3.8",
"protected_attributes": "1.0.3",
"protected-attributes": "1.0.3",
"rack": "1.5.2",
"rack-test": "0.6.2",
"rails": "4.0.0",
@@ -581,7 +581,7 @@ runBenchmarks && Tinytest.add("constraint solver - benchmark on gems - rails, gi
"sprockets-rails": "2.0.1",
"therubyracer": "0.12.1",
"thor": "0.19.1",
"thread_safe": "0.3.1",
"thread-safe": "0.3.1",
"tilt": "1.4.1",
"treetop": "1.4.15",
"turbolinks": "2.2.0",

View File

@@ -177,7 +177,7 @@ ConstraintSolver.PackagesResolver.prototype.resolve = function (
self._ensurePackageInfoLoaded(packageName);
});
_.each(constraints, function (constraint) {
self._ensurePackageInfoLoaded(constraint.packageName);
self._ensurePackageInfoLoaded(constraint.name);
});
_.each(options.previousSolution, function (version, packageName) {
self._ensurePackageInfoLoaded(packageName);

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Given the set of the constraints, picks a satisfying configuration",
version: "1.0.13"
version: "1.0.14"
});
Npm.depends({

View File

@@ -418,16 +418,11 @@ ConstraintSolver.Constraint.prototype.isSatisfied = function (
throw Error("Unknown constraint type: " + currConstraint.type);
}
// If you are asking for a pre-release, you need to get exactly that one.
// (@1.2.3-rc1 does not match 1.2.4.)
if (/-/.test(currConstraint.version)) {
return currConstraint.version === candidateUV.version;
}
// If you're not asking for a pre-release (and you are not in pre-releases-OK
// mode), you'll only get it if it was a top level explicit mention (eg, in
// the release).
if (/-/.test(candidateUV.version) && !resolveContext.useRCsOK) {
if (!/-/.test(currConstraint.version) &&
/-/.test(candidateUV.version) && !resolveContext.useRCsOK) {
if (currConstraint.version === candidateUV.version)
return true;
if (!_.has(resolveContext.topLevelPrereleases, self.name) ||

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Meteor's latency-compensated distributed data framework",
version: '1.0.8'
version: '1.0.9'
});
// We use 'faye-websocket' for connections in server-to-server DDP, mostly

View File

@@ -0,0 +1,6 @@
These packages are no longer actively maintained by MDG. Seek
community alternatives instead.
Note that these packages still exist in atmosphere, and you can still
build a package that depends on one of them by specifying an explicit
package version.

View File

Before

Width:  |  Height:  |  Size: 8.6 KiB

After

Width:  |  Height:  |  Size: 8.6 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -2,7 +2,7 @@
Package.describe({
summary: "Deprecated: Use the 'tracker' package instead.",
version: '1.0.3'
version: '1.0.4'
});
Package.on_use(function (api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Extended and Extensible JSON library",
version: '1.0.2'
version: '1.0.3'
});
Package.on_use(function (api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Send email messages",
version: "1.0.2"
version: "1.0.3"
});
Npm.depends({

View File

@@ -1,6 +1,8 @@
Template.configureLoginServiceDialogForFacebook.siteUrl = function () {
return Meteor.absoluteUrl();
};
Template.configureLoginServiceDialogForFacebook.helpers({
siteUrl: function () {
return Meteor.absoluteUrl();
}
});
Template.configureLoginServiceDialogForFacebook.fields = function () {
return [

View File

@@ -67,17 +67,19 @@ if (Meteor.isServer) {
} else {
Facts.server = new Mongo.Collection(serverFactsCollection);
Template.serverFacts.factsByPackage = function () {
return Facts.server.find();
};
Template.serverFacts.facts = function () {
var factArray = [];
_.each(this, function (value, name) {
if (name !== '_id')
factArray.push({name: name, value: value});
});
return factArray;
};
Template.serverFacts.helpers({
factsByPackage: function () {
return Facts.server.find();
},
facts: function () {
var factArray = [];
_.each(this, function (value, name) {
if (name !== '_id')
factArray.push({name: name, value: value});
});
return factArray;
}
});
// Subscribe when the template is first made, and unsubscribe when it
// is removed. If for some reason puts two copies of the template on

View File

@@ -1,6 +1,8 @@
Template.configureLoginServiceDialogForGithub.siteUrl = function () {
return Meteor.absoluteUrl();
};
Template.configureLoginServiceDialogForGithub.helpers({
siteUrl: function () {
return Meteor.absoluteUrl();
}
});
Template.configureLoginServiceDialogForGithub.fields = function () {
return [

View File

@@ -1,6 +1,8 @@
Template.configureLoginServiceDialogForGoogle.siteUrl = function () {
return Meteor.absoluteUrl();
};
Template.configureLoginServiceDialogForGoogle.helpers({
siteUrl: function () {
return Meteor.absoluteUrl();
}
});
Template.configureLoginServiceDialogForGoogle.fields = function () {
return [

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Standards-compliant HTML tools",
version: '1.0.0'
version: '1.0.1'
});
Package.on_use(function (api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Make HTTP calls to remote servers",
version: '1.0.5'
version: '1.0.6'
});
Npm.depends({request: "2.33.0"});

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "The dynamic stylesheet language",
version: "1.0.8"
version: "1.0.9"
});
Package._transitional_registerBuildPlugin({

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Moved to the 'ddp' package",
version: '1.0.9'
version: '1.0.10'
});
Package.on_use(function (api) {

1
packages/markdown/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
.build*

View File

@@ -0,0 +1,18 @@
// Source: https://github.com/coreyti/showdown
Package.describe({
summary: "Markdown-to-HTML processor",
version: "1.0.1"
});
Package.on_use(function (api) {
api.add_files("showdown.js");
api.export('Showdown');
api.use("templating", "client", {weak: true});
api.add_files('template-integration.js', 'client');
});
Package.on_test(function (api) {
api.use("blaze", "client");
});

View File

@@ -1,6 +1,8 @@
Template.configureLoginServiceDialogForMeetup.siteUrl = function () {
return Meteor.absoluteUrl();
};
Template.configureLoginServiceDialogForMeetup.helpers({
siteUrl: function () {
return Meteor.absoluteUrl();
}
});
Template.configureLoginServiceDialogForMeetup.fields = function () {
return [

View File

@@ -1,6 +1,8 @@
Template.configureLoginServiceDialogForMeteorDeveloper.siteUrl = function () {
return Meteor.absoluteUrl();
};
Template.configureLoginServiceDialogForMeteorDeveloper.helpers({
siteUrl: function () {
return Meteor.absoluteUrl();
}
});
Template.configureLoginServiceDialogForMeteorDeveloper.fields = function () {
return [

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "Include a standard set of Meteor packages in your app",
version: '1.1.0'
version: '1.1.1'
});
Package.on_use(function(api) {

View File

@@ -1,6 +1,6 @@
Package.describe({
summary: "The Meteor command-line tool",
version: '1.0.31'
version: '1.0.32'
});
Package.includeTool();

View File

@@ -78,10 +78,10 @@ _.extend(Meteor, {
// fs.open(pathname, flags, [mode], [callback])
// For maximum effectiveness and least confusion, wrapAsync should be used on
// functions where the callback is the only argument of type Function.
/**
* @memberOf Meteor
* @summary Wrap a function that takes a callback function as its final parameter so that the wrapper function can be used either synchronously (without passing a callback) or asynchronously (when a callback is passed). If a callback is provided, the environment captured when the original function was called will be restored in the callback.
* @summary Wrap a function that takes a callback function as its final parameter. On the server, the wrapped function can be used either synchronously (without passing a callback) or asynchronously (when a callback is passed). On the client, a callback is always required; errors will be logged if there is no callback. If a callback is provided, the environment captured when the original function was called will be restored in the callback.
* @locus Anywhere
* @param {Function} func A function that takes a callback as its final parameter
* @param {Object} [context] Optional `this` object against which the original function will be invoked

Some files were not shown because too many files have changed in this diff Show More