mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
Merge branch 'devel' into release-0.9.4
Conflicts: docs/client/data.js
This commit is contained in:
6
.mailmap
6
.mailmap
@@ -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>
|
||||
|
||||
70
History.md
70
History.md
@@ -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
|
||||
|
||||
80
LICENSE.txt
80
LICENSE.txt
@@ -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
|
||||
|
||||
@@ -1 +1 @@
|
||||
METEOR@0.9.2.2
|
||||
METEOR@0.9.3
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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).
|
||||
|
||||
|
||||
@@ -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`
|
||||
|
||||
@@ -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
@@ -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({
|
||||
|
||||
@@ -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}}
|
||||
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -1 +1 @@
|
||||
METEOR@0.9.2.2
|
||||
METEOR@0.9.3
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
android
|
||||
ios
|
||||
@@ -1 +1 @@
|
||||
METEOR@0.9.2.2
|
||||
METEOR@0.9.3
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 () {
|
||||
|
||||
@@ -1 +1 @@
|
||||
METEOR@0.9.2.2
|
||||
METEOR@0.9.3
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1 +1 @@
|
||||
METEOR@0.9.2.2
|
||||
METEOR@0.9.3
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 () {
|
||||
|
||||
@@ -1 +1 @@
|
||||
METEOR@0.9.2.2
|
||||
METEOR@0.9.3
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//////
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Package.describe({
|
||||
summary: "A user account system",
|
||||
version: "1.1.0"
|
||||
version: "1.1.1"
|
||||
});
|
||||
|
||||
Package.on_use(function (api) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Package.describe({
|
||||
summary: "Password support for accounts",
|
||||
version: "1.0.1"
|
||||
version: "1.0.2"
|
||||
});
|
||||
|
||||
Package.on_use(function(api) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
});
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -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());
|
||||
}}
|
||||
];
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Package.describe({
|
||||
summary: "Meteor Reactive Templating library",
|
||||
version: '2.0.0'
|
||||
version: '2.0.1'
|
||||
});
|
||||
|
||||
Package.on_use(function (api) {
|
||||
|
||||
@@ -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]);
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Package.describe({
|
||||
summary: "Configure content security policies",
|
||||
version: "1.0.0"
|
||||
version: "1.0.1"
|
||||
});
|
||||
|
||||
Package.on_use(function (api) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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({
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
6
packages/deprecated/README
Normal file
6
packages/deprecated/README
Normal 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.
|
||||
|
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 8.6 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Package.describe({
|
||||
summary: "Send email messages",
|
||||
version: "1.0.2"
|
||||
version: "1.0.3"
|
||||
});
|
||||
|
||||
Npm.depends({
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
Template.configureLoginServiceDialogForFacebook.siteUrl = function () {
|
||||
return Meteor.absoluteUrl();
|
||||
};
|
||||
Template.configureLoginServiceDialogForFacebook.helpers({
|
||||
siteUrl: function () {
|
||||
return Meteor.absoluteUrl();
|
||||
}
|
||||
});
|
||||
|
||||
Template.configureLoginServiceDialogForFacebook.fields = function () {
|
||||
return [
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
Template.configureLoginServiceDialogForGithub.siteUrl = function () {
|
||||
return Meteor.absoluteUrl();
|
||||
};
|
||||
Template.configureLoginServiceDialogForGithub.helpers({
|
||||
siteUrl: function () {
|
||||
return Meteor.absoluteUrl();
|
||||
}
|
||||
});
|
||||
|
||||
Template.configureLoginServiceDialogForGithub.fields = function () {
|
||||
return [
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
Template.configureLoginServiceDialogForGoogle.siteUrl = function () {
|
||||
return Meteor.absoluteUrl();
|
||||
};
|
||||
Template.configureLoginServiceDialogForGoogle.helpers({
|
||||
siteUrl: function () {
|
||||
return Meteor.absoluteUrl();
|
||||
}
|
||||
});
|
||||
|
||||
Template.configureLoginServiceDialogForGoogle.fields = function () {
|
||||
return [
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Package.describe({
|
||||
summary: "Standards-compliant HTML tools",
|
||||
version: '1.0.0'
|
||||
version: '1.0.1'
|
||||
});
|
||||
|
||||
Package.on_use(function (api) {
|
||||
|
||||
@@ -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"});
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Package.describe({
|
||||
summary: "The dynamic stylesheet language",
|
||||
version: "1.0.8"
|
||||
version: "1.0.9"
|
||||
});
|
||||
|
||||
Package._transitional_registerBuildPlugin({
|
||||
|
||||
@@ -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
1
packages/markdown/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
.build*
|
||||
18
packages/markdown/package.js
Normal file
18
packages/markdown/package.js
Normal 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");
|
||||
});
|
||||
@@ -1,6 +1,8 @@
|
||||
Template.configureLoginServiceDialogForMeetup.siteUrl = function () {
|
||||
return Meteor.absoluteUrl();
|
||||
};
|
||||
Template.configureLoginServiceDialogForMeetup.helpers({
|
||||
siteUrl: function () {
|
||||
return Meteor.absoluteUrl();
|
||||
}
|
||||
});
|
||||
|
||||
Template.configureLoginServiceDialogForMeetup.fields = function () {
|
||||
return [
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
Template.configureLoginServiceDialogForMeteorDeveloper.siteUrl = function () {
|
||||
return Meteor.absoluteUrl();
|
||||
};
|
||||
Template.configureLoginServiceDialogForMeteorDeveloper.helpers({
|
||||
siteUrl: function () {
|
||||
return Meteor.absoluteUrl();
|
||||
}
|
||||
});
|
||||
|
||||
Template.configureLoginServiceDialogForMeteorDeveloper.fields = function () {
|
||||
return [
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Package.describe({
|
||||
summary: "The Meteor command-line tool",
|
||||
version: '1.0.31'
|
||||
version: '1.0.32'
|
||||
});
|
||||
|
||||
Package.includeTool();
|
||||
|
||||
@@ -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
Reference in New Issue
Block a user