telescope:i18n

This commit is contained in:
Sacha Greif 2015-04-20 15:20:10 +09:00
parent 6d980f9325
commit 7a29c64509
52 changed files with 32 additions and 1945 deletions

View file

@ -62,8 +62,7 @@ manuelschoebel:ms-seo
# Telescope Packages (Required) # Telescope Packages (Required)
telescope-i18n telescope:i18n
telescope:posts telescope:posts
telescope:lib telescope:lib
telescope:users telescope:users

View file

@ -121,7 +121,6 @@ telescope-datetimepicker@1.0.3
telescope-email@0.2.9 telescope-email@0.2.9
telescope-embedly@0.2.9 telescope-embedly@0.2.9
telescope-getting-started@0.1.0 telescope-getting-started@0.1.0
telescope-i18n@0.0.0
telescope-invites@0.1.0 telescope-invites@0.1.0
telescope-kadira@0.1.0 telescope-kadira@0.1.0
telescope-messages@0.0.0 telescope-messages@0.0.0
@ -141,6 +140,7 @@ telescope-tags@0.0.0
telescope-theme-base@0.0.0 telescope-theme-base@0.0.0
telescope-theme-hubble@0.0.0 telescope-theme-hubble@0.0.0
telescope-update-prompt@0.1.0 telescope-update-prompt@0.1.0
telescope:i18n@0.1.0
telescope:lib@0.3.1 telescope:lib@0.3.1
telescope:posts@0.1.0 telescope:posts@0.1.0
telescope:settings@0.1.0 telescope:settings@0.1.0

View file

@ -153,7 +153,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -4,7 +4,7 @@ Package.onUse(function (api) {
// doesn't do anything anymore // doesn't do anything anymore
// api.use(['telescope-i18n', 'telescope:telescope-lib', 'telescope:telescope-posts', 'aldeed:simple-schema', 'check']); // api.use(['telescope:i18n', 'telescope:telescope-lib', 'telescope:telescope-posts', 'aldeed:simple-schema', 'check']);
// api.imply(['aldeed:simple-schema']); // api.imply(['aldeed:simple-schema']);
// api.add_files(['lib/base.js'], ['client', 'server']); // api.add_files(['lib/base.js'], ['client', 'server']);

View file

@ -149,7 +149,7 @@
"1.2.1" "1.2.1"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -20,7 +20,7 @@ Package.onUse(function (api) {
'telescope-base', // basic Telescope hooks and objects 'telescope-base', // basic Telescope hooks and objects
'telescope:lib', // useful functions 'telescope:lib', // useful functions
'telescope:settings', 'telescope:settings',
'telescope-i18n', // internationalization wrapper 'telescope:i18n', // internationalization wrapper
'fourseven:scss' // SCSS compilation package 'fourseven:scss' // SCSS compilation package
]); ]);

View file

@ -189,7 +189,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -213,7 +213,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -16,7 +16,7 @@ Package.onUse(function (api) {
'telescope:settings', 'telescope:settings',
'telescope:lib', 'telescope:lib',
'telescope:users', 'telescope:users',
'telescope-i18n', 'telescope:i18n',
'tap:i18n' 'tap:i18n'
], ['client', 'server']); ], ['client', 'server']);

View file

@ -193,7 +193,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -173,7 +173,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -19,7 +19,7 @@ Package.onUse(function (api) {
'iron:router', // routing package 'iron:router', // routing package
'telescope-base', // basic Telescope hooks and objects 'telescope-base', // basic Telescope hooks and objects
'telescope:lib', // useful functions 'telescope:lib', // useful functions
'telescope-i18n', // internationalization wrapper 'telescope:i18n', // internationalization wrapper
'telescope:posts', 'telescope:posts',
'momentjs:moment' 'momentjs:moment'
]); ]);

View file

@ -189,7 +189,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

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

View file

@ -1,62 +0,0 @@
// do this better:
setLanguage = function (language) {
// Session.set('i18nReady', false);
// console.log('i18n loading… '+language)
// moment
Session.set('momentReady', false);
// console.log('moment loading…')
if (language.toLowerCase() === "en") {
Session.set('momentReady', true);
} else {
$.getScript("//cdnjs.cloudflare.com/ajax/libs/moment.js/2.5.1/lang/" + language.toLowerCase() + ".js", function (result) {
moment.locale(language);
Session.set('momentReady', true);
Session.set('momentLocale', language);
// console.log('moment loaded!')
});
}
// TAPi18n
Session.set("TAPi18nReady", false);
// console.log('TAPi18n loading…')
TAPi18n.setLanguage(language)
.done(function () {
Session.set("TAPi18nReady", true);
// console.log('TAPi18n loaded!')
});
// T9n
T9n.setLanguage(language);
}
i18n = {
t: function (str, options) {
if (Meteor.isServer) {
return TAPi18n.__(str, options, Settings.get('language', 'en'));
} else {
return TAPi18n.__(str, options);
}
}
};
Meteor.startup(function () {
if (Meteor.isClient) {
// doesn't quite work yet
// Tracker.autorun(function (c) {
// console.log('momentReady',Session.get('momentReady'))
// console.log('i18nReady',Session.get('i18nReady'))
// var ready = Session.get('momentReady') && Session.get('i18nReady');
// if (ready) {
// Session.set('i18nReady', true);
// Session.set('locale', language);
// console.log('i18n ready! '+language)
// }
// });
setLanguage(Settings.get('language', 'en'));
}
});

View file

@ -1,11 +0,0 @@
Package.describe({summary: "Telescope i18n package"});
Package.onUse(function (api) {
api.use(["tap:i18n"], ["client", "server"]);
api.use(["session"], "client");
api.add_files(['i18n.js'], ['client', 'server']);
api.export([
'i18n',
'setLanguage'
]);
});

View file

@ -1,175 +0,0 @@
{
"dependencies": [
[
"application-configuration",
"1.0.3"
],
[
"base64",
"1.0.1"
],
[
"binary-heap",
"1.0.1"
],
[
"blaze",
"2.0.3"
],
[
"blaze-tools",
"1.0.1"
],
[
"boilerplate-generator",
"1.0.1"
],
[
"callback-hook",
"1.0.1"
],
[
"check",
"1.0.2"
],
[
"coffeescript",
"1.0.4"
],
[
"ddp",
"1.0.12"
],
[
"deps",
"1.0.5"
],
[
"ejson",
"1.0.4"
],
[
"follower-livedata",
"1.0.2"
],
[
"geojson-utils",
"1.0.1"
],
[
"html-tools",
"1.0.2"
],
[
"htmljs",
"1.0.2"
],
[
"id-map",
"1.0.1"
],
[
"jquery",
"1.0.1"
],
[
"json",
"1.0.1"
],
[
"logging",
"1.0.5"
],
[
"meteor",
"1.1.3"
],
[
"minifiers",
"1.1.2"
],
[
"minimongo",
"1.0.5"
],
[
"mongo",
"1.0.9"
],
[
"observe-sequence",
"1.0.3"
],
[
"ordered-dict",
"1.0.1"
],
[
"random",
"1.0.1"
],
[
"reactive-dict",
"1.0.4"
],
[
"reactive-var",
"1.0.3"
],
[
"retry",
"1.0.1"
],
[
"routepolicy",
"1.0.2"
],
[
"session",
"1.0.4"
],
[
"spacebars",
"1.0.3"
],
[
"spacebars-compiler",
"1.0.3"
],
[
"tap:http-methods",
"0.0.23"
],
[
"tap:i18n",
"1.2.1"
],
[
"templating",
"1.0.9"
],
[
"tracker",
"1.0.3"
],
[
"ui",
"1.0.4"
],
[
"underscore",
"1.0.1"
],
[
"webapp",
"1.1.4"
],
[
"webapp-hashing",
"1.0.1"
]
],
"pluginDependencies": [],
"toolVersion": "meteor-tool@1.0.36",
"format": "1.0"
}

View file

@ -21,7 +21,7 @@ Package.onUse(function (api) {
'telescope:settings', 'telescope:settings',
'telescope:lib', 'telescope:lib',
'telescope:users', 'telescope:users',
'telescope-i18n', 'telescope:i18n',
'aldeed:simple-schema', 'aldeed:simple-schema',
'aldeed:autoform' 'aldeed:autoform'
]); ]);

View file

@ -197,7 +197,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -185,7 +185,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -1,54 +0,0 @@
{
"builtBy": "meteor/14",
"buildDependencies": {
"os.json": {
"files": {
"/Users/sacha/Dev/Telescope/packages/telescope-lib/package.js": "143fbd4a4d1b55c3f63beabc83ea30c4fb0bf3c4",
"/Users/sacha/Dev/Telescope/packages/telescope-lib/lib/lib.js": "397ebb693e338ae7527025a6f375dfa414896927",
"/Users/sacha/Dev/Telescope/packages/telescope-lib/lib/deep.js": "c4a6d6726f731d7b45291943435c6f292bac4c68",
"/Users/sacha/Dev/Telescope/packages/telescope-lib/lib/deep_extend.js": "d466c0548d8b384f72ca1af44faf5d491a981f8c",
"/Users/sacha/Dev/Telescope/packages/telescope-lib/lib/autolink.js": "1bf0f6eee592ae61155fa05d09f313240b6f7653",
"/Users/sacha/Dev/Telescope/packages/telescope-lib/lib/permissions.js": "a1b81d1e7604489d090d59c91778dddea3220096"
},
"directories": []
},
"web.browser.json": {
"files": {
"/Users/sacha/Dev/Telescope/packages/telescope-lib/package.js": "143fbd4a4d1b55c3f63beabc83ea30c4fb0bf3c4",
"/Users/sacha/Dev/Telescope/packages/telescope-lib/lib/lib.js": "397ebb693e338ae7527025a6f375dfa414896927",
"/Users/sacha/Dev/Telescope/packages/telescope-lib/lib/deep.js": "c4a6d6726f731d7b45291943435c6f292bac4c68",
"/Users/sacha/Dev/Telescope/packages/telescope-lib/lib/deep_extend.js": "d466c0548d8b384f72ca1af44faf5d491a981f8c",
"/Users/sacha/Dev/Telescope/packages/telescope-lib/lib/autolink.js": "1bf0f6eee592ae61155fa05d09f313240b6f7653",
"/Users/sacha/Dev/Telescope/packages/telescope-lib/lib/permissions.js": "a1b81d1e7604489d090d59c91778dddea3220096",
"/Users/sacha/Dev/Telescope/packages/telescope-lib/lib/client/jquery.exists.js": "0de9e72491e22b12e26a21c03eef18b2bd83f147"
},
"directories": []
},
"web.cordova.json": {
"files": {
"/Users/sacha/Dev/Telescope/packages/telescope-lib/package.js": "143fbd4a4d1b55c3f63beabc83ea30c4fb0bf3c4",
"/Users/sacha/Dev/Telescope/packages/telescope-lib/lib/lib.js": "397ebb693e338ae7527025a6f375dfa414896927",
"/Users/sacha/Dev/Telescope/packages/telescope-lib/lib/deep.js": "c4a6d6726f731d7b45291943435c6f292bac4c68",
"/Users/sacha/Dev/Telescope/packages/telescope-lib/lib/deep_extend.js": "d466c0548d8b384f72ca1af44faf5d491a981f8c",
"/Users/sacha/Dev/Telescope/packages/telescope-lib/lib/autolink.js": "1bf0f6eee592ae61155fa05d09f313240b6f7653",
"/Users/sacha/Dev/Telescope/packages/telescope-lib/lib/permissions.js": "a1b81d1e7604489d090d59c91778dddea3220096",
"/Users/sacha/Dev/Telescope/packages/telescope-lib/lib/client/jquery.exists.js": "0de9e72491e22b12e26a21c03eef18b2bd83f147"
},
"directories": []
}
},
"pluginDependencies": {
"files": {
"/Users/sacha/Dev/Telescope/packages/telescope-lib/package.js": "143fbd4a4d1b55c3f63beabc83ea30c4fb0bf3c4"
},
"directories": []
},
"source": "/Users/sacha/Dev/Telescope/packages/telescope-lib",
"buildTimeDirectDependencies": {
"underscore": "1.0.1",
"jquery": "1.0.1",
"meteor": "1.1.3"
},
"buildTimePluginDependencies": {},
"cordovaDependencies": null
}

View file

@ -1,24 +0,0 @@
{
"isopack-1": {
"name": "telescope-lib",
"summary": "Telescope library package",
"version": "0.2.9+3c5fc781baa945505183378ea284deac3068520b",
"earliestCompatibleVersion": "0.0.0",
"isTest": false,
"builds": [
{
"arch": "os",
"path": "os.json"
},
{
"arch": "web.browser",
"path": "web.browser.json"
},
{
"arch": "web.cordova",
"path": "web.cordova.json"
}
],
"plugins": []
}
}

View file

@ -1,70 +0,0 @@
{
"format": "unipackage-unibuild-pre1",
"packageVariables": [
{
"name": "deepExtend",
"export": true
},
{
"name": "camelToDash",
"export": true
},
{
"name": "dashToCamel",
"export": true
},
{
"name": "camelCaseify",
"export": true
},
{
"name": "getSetting",
"export": true
},
{
"name": "getThemeSetting",
"export": true
},
{
"name": "getSiteUrl",
"export": true
},
{
"name": "trimWords",
"export": true
},
{
"name": "can",
"export": true
},
{
"name": "_",
"export": true
},
{
"name": "capitalise",
"export": true
},
{
"name": "expString"
}
],
"uses": [
{
"package": "meteor"
},
{
"package": "underscore"
}
],
"resources": [
{
"type": "prelink",
"file": "os/packages/telescope-lib.js",
"length": 45846,
"offset": 0,
"servePath": "/packages/telescope-lib.js",
"sourceMap": "os/packages/telescope-lib.js.map"
}
]
}

View file

@ -1,407 +0,0 @@
(function () {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/telescope-lib/lib/lib.js //
// //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
getSiteUrl = function () { // 1
return getSetting('siteUrl', Meteor.absoluteUrl()); // 2
} // 3
// 4
getSetting = function(setting, defaultValue){ // 5
var settings = Settings.find().fetch()[0]; // 6
// 7
if (Meteor.isServer && Meteor.settings && !!Meteor.settings[setting]) { // if on the server, look in Meteor.settings // 8
return Meteor.settings[setting]; // 9
// 10
} else if (Meteor.settings && Meteor.settings.public && !!Meteor.settings.public[setting]) { // look in Meteor.settings.public
return Meteor.settings.public[setting]; // 12
// 13
} else if(settings && (typeof settings[setting] !== 'undefined')) { // look in Settings collection // 14
return settings[setting]; // 15
// 16
} else if (typeof defaultValue !== 'undefined') { // fallback to default // 17
return defaultValue; // 18
// 19
} else { // or return undefined // 20
return undefined; // 21
} // 22
// 23
}; // 24
// 25
getThemeSetting = function(setting, defaultValue){ // 26
if(typeof themeSettings[setting] !== 'undefined'){ // 27
return themeSettings[setting]; // 28
}else{ // 29
return typeof defaultValue === 'undefined' ? '' : defaultValue; // 30
} // 31
}; // 32
// 33
camelToDash = function (str) { // 34
return str.replace(/\W+/g, '-').replace(/([a-z\d])([A-Z])/g, '$1-$2').toLowerCase(); // 35
} // 36
// 37
camelCaseify = function(str) { // 38
return dashToCamel(str.replace(' ', '-')); // 39
} // 40
// 41
dashToCamel = function (str) { // 42
return str.replace(/(\-[a-z])/g, function($1){return $1.toUpperCase().replace('-','');}); // 43
} // 44
// 45
trimWords = function(s, numWords) { // 46
expString = s.split(/\s+/,numWords); // 47
if(expString.length >= numWords) // 48
return expString.join(" ")+"…"; // 49
return s; // 50
}; // 51
// 52
capitalise = function (string) { // 53
return string.charAt(0).toUpperCase() + string.slice(1); // 54
} // 55
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function () {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/telescope-lib/lib/deep.js //
// //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// see https://gist.github.com/furf/3208381 // 1
// 2
_.mixin({ // 3
// 4
// Get/set the value of a nested property // 5
deep: function (obj, key, value) { // 6
// 7
var keys = key.replace(/\[(["']?)([^\1]+?)\1?\]/g, '.$2').replace(/^\./, '').split('.'), // 8
root, // 9
i = 0, // 10
n = keys.length; // 11
// 12
// Set deep value // 13
if (arguments.length > 2) { // 14
// 15
root = obj; // 16
n--; // 17
// 18
while (i < n) { // 19
key = keys[i++]; // 20
obj = obj[key] = _.isObject(obj[key]) ? obj[key] : {}; // 21
} // 22
// 23
obj[keys[i]] = value; // 24
// 25
value = root; // 26
// 27
// Get deep value // 28
} else { // 29
while ((obj = obj[keys[i++]]) != null && i < n) {}; // 30
value = i < n ? void 0 : obj; // 31
} // 32
// 33
return value; // 34
} // 35
// 36
}); // 37
// 38
// Usage: // 39
// // 40
// var obj = { // 41
// a: { // 42
// b: { // 43
// c: { // 44
// d: ['e', 'f', 'g'] // 45
// } // 46
// } // 47
// } // 48
// }; // 49
// // 50
// Get deep value // 51
// _.deep(obj, 'a.b.c.d[2]'); // 'g' // 52
// // 53
// Set deep value // 54
// _.deep(obj, 'a.b.c.d[2]', 'george'); // 55
// // 56
// _.deep(obj, 'a.b.c.d[2]'); // 'george' // 57
// 58
// 59
_.mixin({ // 60
pluckDeep: function (obj, key) { // 61
return _.map(obj, function (value) { return _.deep(value, key); }); // 62
} // 63
}); // 64
// 65
// 66
_.mixin({ // 67
// 68
// Return a copy of an object containing all but the blacklisted properties. // 69
unpick: function (obj) { // 70
obj || (obj = {}); // 71
return _.pick(obj, _.difference(_.keys(obj), _.flatten(Array.prototype.slice.call(arguments, 1)))); // 72
} // 73
// 74
}); // 75
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function () {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/telescope-lib/lib/deep_extend.js //
// //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// see: http://stackoverflow.com/questions/9399365/deep-extend-like-jquerys-for-nodejs // 1
deepExtend = function () { // 2
var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, // 3
i = 1, // 4
length = arguments.length, // 5
deep = false, // 6
toString = Object.prototype.toString, // 7
hasOwn = Object.prototype.hasOwnProperty, // 8
push = Array.prototype.push, // 9
slice = Array.prototype.slice, // 10
trim = String.prototype.trim, // 11
indexOf = Array.prototype.indexOf, // 12
class2type = { // 13
"[object Boolean]": "boolean", // 14
"[object Number]": "number", // 15
"[object String]": "string", // 16
"[object Function]": "function", // 17
"[object Array]": "array", // 18
"[object Date]": "date", // 19
"[object RegExp]": "regexp", // 20
"[object Object]": "object" // 21
}, // 22
jQuery = { // 23
isFunction: function (obj) { // 24
return jQuery.type(obj) === "function"; // 25
}, // 26
isArray: Array.isArray || // 27
function (obj) { // 28
return jQuery.type(obj) === "array"; // 29
}, // 30
isWindow: function (obj) { // 31
return obj != null && obj == obj.window; // 32
}, // 33
isNumeric: function (obj) { // 34
return !isNaN(parseFloat(obj)) && isFinite(obj); // 35
}, // 36
type: function (obj) { // 37
return obj == null ? String(obj) : class2type[toString.call(obj)] || "object"; // 38
}, // 39
isPlainObject: function (obj) { // 40
if (!obj || jQuery.type(obj) !== "object" || obj.nodeType) { // 41
return false; // 42
} // 43
try { // 44
if (obj.constructor && !hasOwn.call(obj, "constructor") && !hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) {
return false; // 46
} // 47
} catch (e) { // 48
return false; // 49
} // 50
var key; // 51
for (key in obj) {} // 52
return key === undefined || hasOwn.call(obj, key); // 53
} // 54
}; // 55
if (typeof target === "boolean") { // 56
deep = target; // 57
target = arguments[1] || {}; // 58
i = 2; // 59
} // 60
if (typeof target !== "object" && !jQuery.isFunction(target)) { // 61
target = {}; // 62
} // 63
if (length === i) { // 64
target = this; // 65
--i; // 66
} // 67
for (i; i < length; i++) { // 68
if ((options = arguments[i]) != null) { // 69
for (name in options) { // 70
src = target[name]; // 71
copy = options[name]; // 72
if (target === copy) { // 73
continue; // 74
} // 75
if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) { // 76
if (copyIsArray) { // 77
copyIsArray = false; // 78
clone = src && jQuery.isArray(src) ? src : []; // 79
} else { // 80
clone = src && jQuery.isPlainObject(src) ? src : {}; // 81
} // 82
// WARNING: RECURSION // 83
target[name] = deepExtend(deep, clone, copy); // 84
} else if (copy !== undefined) { // 85
target[name] = copy; // 86
} // 87
} // 88
} // 89
} // 90
return target; // 91
}; // 92
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function () {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/telescope-lib/lib/autolink.js //
// //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//https://github.com/bryanwoods/autolink-js // 1
(function(){var a,b=[].slice;a=function(){var j,i,d,f,e,c,g,h;c=1<=arguments.length?b.call(arguments,0):[];g=/(^|\s)(\b(https?):\/\/[\-A-Z0-9+&@#\/%?=~_|!:,.;]*[\-A-Z0-9+&@#\/%=~_|]\b)/ig;if(c.length>0){e=c[0];i=e.callback;if((i!=null)&&typeof i==="function"){j=i;delete e.callback;}f="";for(d in e){h=e[d];f+=" "+d+"='"+h+"'";}return this.replace(g,function(l,o,k){var n,m;m=j&&j(k);n=m||("<a href='"+k+"'"+f+">"+k+"</a>");return""+o+n;});}else{return this.replace(g,"$1<a href='$2'>$2</a>");}};String.prototype.autoLink=a;}).call(this);
// 3
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function () {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/telescope-lib/lib/permissions.js //
// //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
can = {}; // 1
// 2
// Permissions // 3
// 4
// user: Defaults to Meteor.user() // 5
// returnError: If there's an error, should we return what the problem is? // 6
// // 7
// return true if all is well, false || an error string if not // 8
can.view = function(user){ // 9
// console.log('canView', 'user:', user, 'returnError:', returnError, getSetting('requireViewInvite')); // 10
// 11
if(getSetting('requireViewInvite', false)){ // 12
// 13
if(Meteor.isClient){ // 14
// on client only, default to the current user // 15
var user=(typeof user === 'undefined') ? Meteor.user() : user; // 16
} // 17
// 18
if(user && (isAdmin(user) || isInvited(user))){ // 19
// if logged in AND either admin or invited // 20
return true; // 21
}else{ // 22
return false; // 23
} // 24
// 25
} // 26
return true; // 27
}; // 28
can.viewById = function(userId, returnError){ // 29
// if an invite is required to view, run permission check, else return true // 30
if(getSetting('requireViewInvite', false)){ // 31
// if user is logged in, then run canView, else return false // 32
return userId ? canView(Meteor.users.findOne(userId), returnError) : false; // 33
} // 34
return true; // 35
}; // 36
can.post = function(user, returnError){ // 37
var user=(typeof user === 'undefined') ? Meteor.user() : user; // 38
// 39
// console.log('canPost', user, action, getSetting('requirePostInvite')); // 40
// 41
if(!user){ // 42
return returnError ? "no_account" : false; // 43
} else if (isAdmin(user)) { // 44
return true; // 45
} else if (getSetting('requirePostInvite')) { // 46
if (user.isInvited) { // 47
return true; // 48
} else { // 49
return returnError ? "no_invite" : false; // 50
} // 51
} else { // 52
return true; // 53
} // 54
}; // 55
can.postById = function(userId, returnError){ // 56
var user = Meteor.users.findOne(userId); // 57
return canPost(user, returnError); // 58
}; // 59
can.comment = function(user, returnError){ // 60
return canPost(user, returnError); // 61
}; // 62
can.commentById = function(userId, returnError){ // 63
var user = Meteor.users.findOne(userId); // 64
return canComment(user, returnError); // 65
}; // 66
can.upvote = function(user, collection, returnError){ // 67
return canPost(user, returnError); // 68
}; // 69
can.upvoteById = function(userId, returnError){ // 70
var user = Meteor.users.findOne(userId); // 71
return canUpvote(user, returnError); // 72
}; // 73
can.downvote = function(user, collection, returnError){ // 74
return canPost(user, returnError); // 75
}; // 76
can.downvoteById = function(userId, returnError){ // 77
var user = Meteor.users.findOne(userId); // 78
return canDownvote(user, returnError); // 79
}; // 80
can.edit = function(user, item, returnError){ // 81
var user=(typeof user === 'undefined') ? Meteor.user() : user; // 82
// 83
if (!user || !item){ // 84
return returnError ? "no_rights" : false; // 85
} else if (isAdmin(user)) { // 86
return true; // 87
} else if (user._id!==item.userId) { // 88
return returnError ? "no_rights" : false; // 89
}else { // 90
return true; // 91
} // 92
}; // 93
can.editById = function(userId, item){ // 94
var user = Meteor.users.findOne(userId); // 95
return canEdit(user, item); // 96
}; // 97
can.currentUserEdit = function(item) { // 98
return canEdit(Meteor.user(), item); // 99
}; // 100
can.invite = function(user){ // 101
return isInvited(user) || isAdmin(user); // 102
}; // 103
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);

File diff suppressed because one or more lines are too long

View file

@ -1 +0,0 @@
// This file is included for compatibility with the Meteor 0.6.4 package downloader.

View file

@ -1,23 +0,0 @@
{
"name": "telescope-lib",
"summary": "Telescope library package",
"version": "0.2.9+3c5fc781baa945505183378ea284deac3068520b",
"earliestCompatibleVersion": "0.0.0",
"isTest": false,
"plugins": [],
"unibuilds": [
{
"arch": "os",
"path": "os.json"
},
{
"arch": "web.browser",
"path": "web.browser.json"
},
{
"arch": "web.cordova",
"path": "web.cordova.json"
}
],
"format": "unipackage-pre2"
}

View file

@ -1,73 +0,0 @@
{
"format": "unipackage-unibuild-pre1",
"packageVariables": [
{
"name": "deepExtend",
"export": true
},
{
"name": "camelToDash",
"export": true
},
{
"name": "dashToCamel",
"export": true
},
{
"name": "camelCaseify",
"export": true
},
{
"name": "getSetting",
"export": true
},
{
"name": "getThemeSetting",
"export": true
},
{
"name": "getSiteUrl",
"export": true
},
{
"name": "trimWords",
"export": true
},
{
"name": "can",
"export": true
},
{
"name": "_",
"export": true
},
{
"name": "capitalise",
"export": true
},
{
"name": "expString"
}
],
"uses": [
{
"package": "meteor"
},
{
"package": "underscore"
},
{
"package": "jquery"
}
],
"resources": [
{
"type": "prelink",
"file": "web.browser/packages/telescope-lib.js",
"length": 47110,
"offset": 0,
"servePath": "/packages/telescope-lib.js",
"sourceMap": "web.browser/packages/telescope-lib.js.map"
}
]
}

View file

@ -1,427 +0,0 @@
(function () {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/telescope-lib/lib/lib.js //
// //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
getSiteUrl = function () { // 1
return getSetting('siteUrl', Meteor.absoluteUrl()); // 2
} // 3
// 4
getSetting = function(setting, defaultValue){ // 5
var settings = Settings.find().fetch()[0]; // 6
// 7
if (Meteor.isServer && Meteor.settings && !!Meteor.settings[setting]) { // if on the server, look in Meteor.settings // 8
return Meteor.settings[setting]; // 9
// 10
} else if (Meteor.settings && Meteor.settings.public && !!Meteor.settings.public[setting]) { // look in Meteor.settings.public
return Meteor.settings.public[setting]; // 12
// 13
} else if(settings && (typeof settings[setting] !== 'undefined')) { // look in Settings collection // 14
return settings[setting]; // 15
// 16
} else if (typeof defaultValue !== 'undefined') { // fallback to default // 17
return defaultValue; // 18
// 19
} else { // or return undefined // 20
return undefined; // 21
} // 22
// 23
}; // 24
// 25
getThemeSetting = function(setting, defaultValue){ // 26
if(typeof themeSettings[setting] !== 'undefined'){ // 27
return themeSettings[setting]; // 28
}else{ // 29
return typeof defaultValue === 'undefined' ? '' : defaultValue; // 30
} // 31
}; // 32
// 33
camelToDash = function (str) { // 34
return str.replace(/\W+/g, '-').replace(/([a-z\d])([A-Z])/g, '$1-$2').toLowerCase(); // 35
} // 36
// 37
camelCaseify = function(str) { // 38
return dashToCamel(str.replace(' ', '-')); // 39
} // 40
// 41
dashToCamel = function (str) { // 42
return str.replace(/(\-[a-z])/g, function($1){return $1.toUpperCase().replace('-','');}); // 43
} // 44
// 45
trimWords = function(s, numWords) { // 46
expString = s.split(/\s+/,numWords); // 47
if(expString.length >= numWords) // 48
return expString.join(" ")+"…"; // 49
return s; // 50
}; // 51
// 52
capitalise = function (string) { // 53
return string.charAt(0).toUpperCase() + string.slice(1); // 54
} // 55
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function () {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/telescope-lib/lib/deep.js //
// //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// see https://gist.github.com/furf/3208381 // 1
// 2
_.mixin({ // 3
// 4
// Get/set the value of a nested property // 5
deep: function (obj, key, value) { // 6
// 7
var keys = key.replace(/\[(["']?)([^\1]+?)\1?\]/g, '.$2').replace(/^\./, '').split('.'), // 8
root, // 9
i = 0, // 10
n = keys.length; // 11
// 12
// Set deep value // 13
if (arguments.length > 2) { // 14
// 15
root = obj; // 16
n--; // 17
// 18
while (i < n) { // 19
key = keys[i++]; // 20
obj = obj[key] = _.isObject(obj[key]) ? obj[key] : {}; // 21
} // 22
// 23
obj[keys[i]] = value; // 24
// 25
value = root; // 26
// 27
// Get deep value // 28
} else { // 29
while ((obj = obj[keys[i++]]) != null && i < n) {}; // 30
value = i < n ? void 0 : obj; // 31
} // 32
// 33
return value; // 34
} // 35
// 36
}); // 37
// 38
// Usage: // 39
// // 40
// var obj = { // 41
// a: { // 42
// b: { // 43
// c: { // 44
// d: ['e', 'f', 'g'] // 45
// } // 46
// } // 47
// } // 48
// }; // 49
// // 50
// Get deep value // 51
// _.deep(obj, 'a.b.c.d[2]'); // 'g' // 52
// // 53
// Set deep value // 54
// _.deep(obj, 'a.b.c.d[2]', 'george'); // 55
// // 56
// _.deep(obj, 'a.b.c.d[2]'); // 'george' // 57
// 58
// 59
_.mixin({ // 60
pluckDeep: function (obj, key) { // 61
return _.map(obj, function (value) { return _.deep(value, key); }); // 62
} // 63
}); // 64
// 65
// 66
_.mixin({ // 67
// 68
// Return a copy of an object containing all but the blacklisted properties. // 69
unpick: function (obj) { // 70
obj || (obj = {}); // 71
return _.pick(obj, _.difference(_.keys(obj), _.flatten(Array.prototype.slice.call(arguments, 1)))); // 72
} // 73
// 74
}); // 75
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function () {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/telescope-lib/lib/deep_extend.js //
// //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// see: http://stackoverflow.com/questions/9399365/deep-extend-like-jquerys-for-nodejs // 1
deepExtend = function () { // 2
var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, // 3
i = 1, // 4
length = arguments.length, // 5
deep = false, // 6
toString = Object.prototype.toString, // 7
hasOwn = Object.prototype.hasOwnProperty, // 8
push = Array.prototype.push, // 9
slice = Array.prototype.slice, // 10
trim = String.prototype.trim, // 11
indexOf = Array.prototype.indexOf, // 12
class2type = { // 13
"[object Boolean]": "boolean", // 14
"[object Number]": "number", // 15
"[object String]": "string", // 16
"[object Function]": "function", // 17
"[object Array]": "array", // 18
"[object Date]": "date", // 19
"[object RegExp]": "regexp", // 20
"[object Object]": "object" // 21
}, // 22
jQuery = { // 23
isFunction: function (obj) { // 24
return jQuery.type(obj) === "function"; // 25
}, // 26
isArray: Array.isArray || // 27
function (obj) { // 28
return jQuery.type(obj) === "array"; // 29
}, // 30
isWindow: function (obj) { // 31
return obj != null && obj == obj.window; // 32
}, // 33
isNumeric: function (obj) { // 34
return !isNaN(parseFloat(obj)) && isFinite(obj); // 35
}, // 36
type: function (obj) { // 37
return obj == null ? String(obj) : class2type[toString.call(obj)] || "object"; // 38
}, // 39
isPlainObject: function (obj) { // 40
if (!obj || jQuery.type(obj) !== "object" || obj.nodeType) { // 41
return false; // 42
} // 43
try { // 44
if (obj.constructor && !hasOwn.call(obj, "constructor") && !hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) {
return false; // 46
} // 47
} catch (e) { // 48
return false; // 49
} // 50
var key; // 51
for (key in obj) {} // 52
return key === undefined || hasOwn.call(obj, key); // 53
} // 54
}; // 55
if (typeof target === "boolean") { // 56
deep = target; // 57
target = arguments[1] || {}; // 58
i = 2; // 59
} // 60
if (typeof target !== "object" && !jQuery.isFunction(target)) { // 61
target = {}; // 62
} // 63
if (length === i) { // 64
target = this; // 65
--i; // 66
} // 67
for (i; i < length; i++) { // 68
if ((options = arguments[i]) != null) { // 69
for (name in options) { // 70
src = target[name]; // 71
copy = options[name]; // 72
if (target === copy) { // 73
continue; // 74
} // 75
if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) { // 76
if (copyIsArray) { // 77
copyIsArray = false; // 78
clone = src && jQuery.isArray(src) ? src : []; // 79
} else { // 80
clone = src && jQuery.isPlainObject(src) ? src : {}; // 81
} // 82
// WARNING: RECURSION // 83
target[name] = deepExtend(deep, clone, copy); // 84
} else if (copy !== undefined) { // 85
target[name] = copy; // 86
} // 87
} // 88
} // 89
} // 90
return target; // 91
}; // 92
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function () {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/telescope-lib/lib/autolink.js //
// //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//https://github.com/bryanwoods/autolink-js // 1
(function(){var a,b=[].slice;a=function(){var j,i,d,f,e,c,g,h;c=1<=arguments.length?b.call(arguments,0):[];g=/(^|\s)(\b(https?):\/\/[\-A-Z0-9+&@#\/%?=~_|!:,.;]*[\-A-Z0-9+&@#\/%=~_|]\b)/ig;if(c.length>0){e=c[0];i=e.callback;if((i!=null)&&typeof i==="function"){j=i;delete e.callback;}f="";for(d in e){h=e[d];f+=" "+d+"='"+h+"'";}return this.replace(g,function(l,o,k){var n,m;m=j&&j(k);n=m||("<a href='"+k+"'"+f+">"+k+"</a>");return""+o+n;});}else{return this.replace(g,"$1<a href='$2'>$2</a>");}};String.prototype.autoLink=a;}).call(this);
// 3
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function () {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/telescope-lib/lib/permissions.js //
// //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
can = {}; // 1
// 2
// Permissions // 3
// 4
// user: Defaults to Meteor.user() // 5
// returnError: If there's an error, should we return what the problem is? // 6
// // 7
// return true if all is well, false || an error string if not // 8
can.view = function(user){ // 9
// console.log('canView', 'user:', user, 'returnError:', returnError, getSetting('requireViewInvite')); // 10
// 11
if(getSetting('requireViewInvite', false)){ // 12
// 13
if(Meteor.isClient){ // 14
// on client only, default to the current user // 15
var user=(typeof user === 'undefined') ? Meteor.user() : user; // 16
} // 17
// 18
if(user && (isAdmin(user) || isInvited(user))){ // 19
// if logged in AND either admin or invited // 20
return true; // 21
}else{ // 22
return false; // 23
} // 24
// 25
} // 26
return true; // 27
}; // 28
can.viewById = function(userId, returnError){ // 29
// if an invite is required to view, run permission check, else return true // 30
if(getSetting('requireViewInvite', false)){ // 31
// if user is logged in, then run canView, else return false // 32
return userId ? canView(Meteor.users.findOne(userId), returnError) : false; // 33
} // 34
return true; // 35
}; // 36
can.post = function(user, returnError){ // 37
var user=(typeof user === 'undefined') ? Meteor.user() : user; // 38
// 39
// console.log('canPost', user, action, getSetting('requirePostInvite')); // 40
// 41
if(!user){ // 42
return returnError ? "no_account" : false; // 43
} else if (isAdmin(user)) { // 44
return true; // 45
} else if (getSetting('requirePostInvite')) { // 46
if (user.isInvited) { // 47
return true; // 48
} else { // 49
return returnError ? "no_invite" : false; // 50
} // 51
} else { // 52
return true; // 53
} // 54
}; // 55
can.postById = function(userId, returnError){ // 56
var user = Meteor.users.findOne(userId); // 57
return canPost(user, returnError); // 58
}; // 59
can.comment = function(user, returnError){ // 60
return canPost(user, returnError); // 61
}; // 62
can.commentById = function(userId, returnError){ // 63
var user = Meteor.users.findOne(userId); // 64
return canComment(user, returnError); // 65
}; // 66
can.upvote = function(user, collection, returnError){ // 67
return canPost(user, returnError); // 68
}; // 69
can.upvoteById = function(userId, returnError){ // 70
var user = Meteor.users.findOne(userId); // 71
return canUpvote(user, returnError); // 72
}; // 73
can.downvote = function(user, collection, returnError){ // 74
return canPost(user, returnError); // 75
}; // 76
can.downvoteById = function(userId, returnError){ // 77
var user = Meteor.users.findOne(userId); // 78
return canDownvote(user, returnError); // 79
}; // 80
can.edit = function(user, item, returnError){ // 81
var user=(typeof user === 'undefined') ? Meteor.user() : user; // 82
// 83
if (!user || !item){ // 84
return returnError ? "no_rights" : false; // 85
} else if (isAdmin(user)) { // 86
return true; // 87
} else if (user._id!==item.userId) { // 88
return returnError ? "no_rights" : false; // 89
}else { // 90
return true; // 91
} // 92
}; // 93
can.editById = function(userId, item){ // 94
var user = Meteor.users.findOne(userId); // 95
return canEdit(user, item); // 96
}; // 97
can.currentUserEdit = function(item) { // 98
return canEdit(Meteor.user(), item); // 99
}; // 100
can.invite = function(user){ // 101
return isInvited(user) || isAdmin(user); // 102
}; // 103
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function () {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/telescope-lib/lib/client/jquery.exists.js //
// //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
$.fn.exists = function () { // 1
return this.length !== 0; // 2
} // 3
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);

File diff suppressed because one or more lines are too long

View file

@ -1,73 +0,0 @@
{
"format": "unipackage-unibuild-pre1",
"packageVariables": [
{
"name": "deepExtend",
"export": true
},
{
"name": "camelToDash",
"export": true
},
{
"name": "dashToCamel",
"export": true
},
{
"name": "camelCaseify",
"export": true
},
{
"name": "getSetting",
"export": true
},
{
"name": "getThemeSetting",
"export": true
},
{
"name": "getSiteUrl",
"export": true
},
{
"name": "trimWords",
"export": true
},
{
"name": "can",
"export": true
},
{
"name": "_",
"export": true
},
{
"name": "capitalise",
"export": true
},
{
"name": "expString"
}
],
"uses": [
{
"package": "meteor"
},
{
"package": "underscore"
},
{
"package": "jquery"
}
],
"resources": [
{
"type": "prelink",
"file": "web.cordova/packages/telescope-lib.js",
"length": 47110,
"offset": 0,
"servePath": "/packages/telescope-lib.js",
"sourceMap": "web.cordova/packages/telescope-lib.js.map"
}
]
}

View file

@ -1,427 +0,0 @@
(function () {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/telescope-lib/lib/lib.js //
// //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
getSiteUrl = function () { // 1
return getSetting('siteUrl', Meteor.absoluteUrl()); // 2
} // 3
// 4
getSetting = function(setting, defaultValue){ // 5
var settings = Settings.find().fetch()[0]; // 6
// 7
if (Meteor.isServer && Meteor.settings && !!Meteor.settings[setting]) { // if on the server, look in Meteor.settings // 8
return Meteor.settings[setting]; // 9
// 10
} else if (Meteor.settings && Meteor.settings.public && !!Meteor.settings.public[setting]) { // look in Meteor.settings.public
return Meteor.settings.public[setting]; // 12
// 13
} else if(settings && (typeof settings[setting] !== 'undefined')) { // look in Settings collection // 14
return settings[setting]; // 15
// 16
} else if (typeof defaultValue !== 'undefined') { // fallback to default // 17
return defaultValue; // 18
// 19
} else { // or return undefined // 20
return undefined; // 21
} // 22
// 23
}; // 24
// 25
getThemeSetting = function(setting, defaultValue){ // 26
if(typeof themeSettings[setting] !== 'undefined'){ // 27
return themeSettings[setting]; // 28
}else{ // 29
return typeof defaultValue === 'undefined' ? '' : defaultValue; // 30
} // 31
}; // 32
// 33
camelToDash = function (str) { // 34
return str.replace(/\W+/g, '-').replace(/([a-z\d])([A-Z])/g, '$1-$2').toLowerCase(); // 35
} // 36
// 37
camelCaseify = function(str) { // 38
return dashToCamel(str.replace(' ', '-')); // 39
} // 40
// 41
dashToCamel = function (str) { // 42
return str.replace(/(\-[a-z])/g, function($1){return $1.toUpperCase().replace('-','');}); // 43
} // 44
// 45
trimWords = function(s, numWords) { // 46
expString = s.split(/\s+/,numWords); // 47
if(expString.length >= numWords) // 48
return expString.join(" ")+"…"; // 49
return s; // 50
}; // 51
// 52
capitalise = function (string) { // 53
return string.charAt(0).toUpperCase() + string.slice(1); // 54
} // 55
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function () {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/telescope-lib/lib/deep.js //
// //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// see https://gist.github.com/furf/3208381 // 1
// 2
_.mixin({ // 3
// 4
// Get/set the value of a nested property // 5
deep: function (obj, key, value) { // 6
// 7
var keys = key.replace(/\[(["']?)([^\1]+?)\1?\]/g, '.$2').replace(/^\./, '').split('.'), // 8
root, // 9
i = 0, // 10
n = keys.length; // 11
// 12
// Set deep value // 13
if (arguments.length > 2) { // 14
// 15
root = obj; // 16
n--; // 17
// 18
while (i < n) { // 19
key = keys[i++]; // 20
obj = obj[key] = _.isObject(obj[key]) ? obj[key] : {}; // 21
} // 22
// 23
obj[keys[i]] = value; // 24
// 25
value = root; // 26
// 27
// Get deep value // 28
} else { // 29
while ((obj = obj[keys[i++]]) != null && i < n) {}; // 30
value = i < n ? void 0 : obj; // 31
} // 32
// 33
return value; // 34
} // 35
// 36
}); // 37
// 38
// Usage: // 39
// // 40
// var obj = { // 41
// a: { // 42
// b: { // 43
// c: { // 44
// d: ['e', 'f', 'g'] // 45
// } // 46
// } // 47
// } // 48
// }; // 49
// // 50
// Get deep value // 51
// _.deep(obj, 'a.b.c.d[2]'); // 'g' // 52
// // 53
// Set deep value // 54
// _.deep(obj, 'a.b.c.d[2]', 'george'); // 55
// // 56
// _.deep(obj, 'a.b.c.d[2]'); // 'george' // 57
// 58
// 59
_.mixin({ // 60
pluckDeep: function (obj, key) { // 61
return _.map(obj, function (value) { return _.deep(value, key); }); // 62
} // 63
}); // 64
// 65
// 66
_.mixin({ // 67
// 68
// Return a copy of an object containing all but the blacklisted properties. // 69
unpick: function (obj) { // 70
obj || (obj = {}); // 71
return _.pick(obj, _.difference(_.keys(obj), _.flatten(Array.prototype.slice.call(arguments, 1)))); // 72
} // 73
// 74
}); // 75
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function () {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/telescope-lib/lib/deep_extend.js //
// //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// see: http://stackoverflow.com/questions/9399365/deep-extend-like-jquerys-for-nodejs // 1
deepExtend = function () { // 2
var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, // 3
i = 1, // 4
length = arguments.length, // 5
deep = false, // 6
toString = Object.prototype.toString, // 7
hasOwn = Object.prototype.hasOwnProperty, // 8
push = Array.prototype.push, // 9
slice = Array.prototype.slice, // 10
trim = String.prototype.trim, // 11
indexOf = Array.prototype.indexOf, // 12
class2type = { // 13
"[object Boolean]": "boolean", // 14
"[object Number]": "number", // 15
"[object String]": "string", // 16
"[object Function]": "function", // 17
"[object Array]": "array", // 18
"[object Date]": "date", // 19
"[object RegExp]": "regexp", // 20
"[object Object]": "object" // 21
}, // 22
jQuery = { // 23
isFunction: function (obj) { // 24
return jQuery.type(obj) === "function"; // 25
}, // 26
isArray: Array.isArray || // 27
function (obj) { // 28
return jQuery.type(obj) === "array"; // 29
}, // 30
isWindow: function (obj) { // 31
return obj != null && obj == obj.window; // 32
}, // 33
isNumeric: function (obj) { // 34
return !isNaN(parseFloat(obj)) && isFinite(obj); // 35
}, // 36
type: function (obj) { // 37
return obj == null ? String(obj) : class2type[toString.call(obj)] || "object"; // 38
}, // 39
isPlainObject: function (obj) { // 40
if (!obj || jQuery.type(obj) !== "object" || obj.nodeType) { // 41
return false; // 42
} // 43
try { // 44
if (obj.constructor && !hasOwn.call(obj, "constructor") && !hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) {
return false; // 46
} // 47
} catch (e) { // 48
return false; // 49
} // 50
var key; // 51
for (key in obj) {} // 52
return key === undefined || hasOwn.call(obj, key); // 53
} // 54
}; // 55
if (typeof target === "boolean") { // 56
deep = target; // 57
target = arguments[1] || {}; // 58
i = 2; // 59
} // 60
if (typeof target !== "object" && !jQuery.isFunction(target)) { // 61
target = {}; // 62
} // 63
if (length === i) { // 64
target = this; // 65
--i; // 66
} // 67
for (i; i < length; i++) { // 68
if ((options = arguments[i]) != null) { // 69
for (name in options) { // 70
src = target[name]; // 71
copy = options[name]; // 72
if (target === copy) { // 73
continue; // 74
} // 75
if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) { // 76
if (copyIsArray) { // 77
copyIsArray = false; // 78
clone = src && jQuery.isArray(src) ? src : []; // 79
} else { // 80
clone = src && jQuery.isPlainObject(src) ? src : {}; // 81
} // 82
// WARNING: RECURSION // 83
target[name] = deepExtend(deep, clone, copy); // 84
} else if (copy !== undefined) { // 85
target[name] = copy; // 86
} // 87
} // 88
} // 89
} // 90
return target; // 91
}; // 92
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function () {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/telescope-lib/lib/autolink.js //
// //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//https://github.com/bryanwoods/autolink-js // 1
(function(){var a,b=[].slice;a=function(){var j,i,d,f,e,c,g,h;c=1<=arguments.length?b.call(arguments,0):[];g=/(^|\s)(\b(https?):\/\/[\-A-Z0-9+&@#\/%?=~_|!:,.;]*[\-A-Z0-9+&@#\/%=~_|]\b)/ig;if(c.length>0){e=c[0];i=e.callback;if((i!=null)&&typeof i==="function"){j=i;delete e.callback;}f="";for(d in e){h=e[d];f+=" "+d+"='"+h+"'";}return this.replace(g,function(l,o,k){var n,m;m=j&&j(k);n=m||("<a href='"+k+"'"+f+">"+k+"</a>");return""+o+n;});}else{return this.replace(g,"$1<a href='$2'>$2</a>");}};String.prototype.autoLink=a;}).call(this);
// 3
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function () {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/telescope-lib/lib/permissions.js //
// //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
can = {}; // 1
// 2
// Permissions // 3
// 4
// user: Defaults to Meteor.user() // 5
// returnError: If there's an error, should we return what the problem is? // 6
// // 7
// return true if all is well, false || an error string if not // 8
can.view = function(user){ // 9
// console.log('canView', 'user:', user, 'returnError:', returnError, getSetting('requireViewInvite')); // 10
// 11
if(getSetting('requireViewInvite', false)){ // 12
// 13
if(Meteor.isClient){ // 14
// on client only, default to the current user // 15
var user=(typeof user === 'undefined') ? Meteor.user() : user; // 16
} // 17
// 18
if(user && (isAdmin(user) || isInvited(user))){ // 19
// if logged in AND either admin or invited // 20
return true; // 21
}else{ // 22
return false; // 23
} // 24
// 25
} // 26
return true; // 27
}; // 28
can.viewById = function(userId, returnError){ // 29
// if an invite is required to view, run permission check, else return true // 30
if(getSetting('requireViewInvite', false)){ // 31
// if user is logged in, then run canView, else return false // 32
return userId ? canView(Meteor.users.findOne(userId), returnError) : false; // 33
} // 34
return true; // 35
}; // 36
can.post = function(user, returnError){ // 37
var user=(typeof user === 'undefined') ? Meteor.user() : user; // 38
// 39
// console.log('canPost', user, action, getSetting('requirePostInvite')); // 40
// 41
if(!user){ // 42
return returnError ? "no_account" : false; // 43
} else if (isAdmin(user)) { // 44
return true; // 45
} else if (getSetting('requirePostInvite')) { // 46
if (user.isInvited) { // 47
return true; // 48
} else { // 49
return returnError ? "no_invite" : false; // 50
} // 51
} else { // 52
return true; // 53
} // 54
}; // 55
can.postById = function(userId, returnError){ // 56
var user = Meteor.users.findOne(userId); // 57
return canPost(user, returnError); // 58
}; // 59
can.comment = function(user, returnError){ // 60
return canPost(user, returnError); // 61
}; // 62
can.commentById = function(userId, returnError){ // 63
var user = Meteor.users.findOne(userId); // 64
return canComment(user, returnError); // 65
}; // 66
can.upvote = function(user, collection, returnError){ // 67
return canPost(user, returnError); // 68
}; // 69
can.upvoteById = function(userId, returnError){ // 70
var user = Meteor.users.findOne(userId); // 71
return canUpvote(user, returnError); // 72
}; // 73
can.downvote = function(user, collection, returnError){ // 74
return canPost(user, returnError); // 75
}; // 76
can.downvoteById = function(userId, returnError){ // 77
var user = Meteor.users.findOne(userId); // 78
return canDownvote(user, returnError); // 79
}; // 80
can.edit = function(user, item, returnError){ // 81
var user=(typeof user === 'undefined') ? Meteor.user() : user; // 82
// 83
if (!user || !item){ // 84
return returnError ? "no_rights" : false; // 85
} else if (isAdmin(user)) { // 86
return true; // 87
} else if (user._id!==item.userId) { // 88
return returnError ? "no_rights" : false; // 89
}else { // 90
return true; // 91
} // 92
}; // 93
can.editById = function(userId, item){ // 94
var user = Meteor.users.findOne(userId); // 95
return canEdit(user, item); // 96
}; // 97
can.currentUserEdit = function(item) { // 98
return canEdit(Meteor.user(), item); // 99
}; // 100
can.invite = function(user){ // 101
return isInvited(user) || isAdmin(user); // 102
}; // 103
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);
(function () {
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// packages/telescope-lib/lib/client/jquery.exists.js //
// //
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
$.fn.exists = function () { // 1
return this.length !== 0; // 2
} // 3
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}).call(this);

File diff suppressed because one or more lines are too long

View file

@ -153,7 +153,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -229,7 +229,7 @@
"0.2.9" "0.2.9"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -209,7 +209,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -19,7 +19,7 @@ Package.onUse(function (api) {
'iron:router', // routing package 'iron:router', // routing package
'telescope-base', // basic Telescope hooks and objects 'telescope-base', // basic Telescope hooks and objects
'telescope:lib', // useful functions 'telescope:lib', // useful functions
'telescope-i18n', // internationalization wrapper 'telescope:i18n', // internationalization wrapper
'fourseven:scss' // SCSS compilation package 'fourseven:scss' // SCSS compilation package
]); ]);

View file

@ -189,7 +189,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -153,7 +153,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -185,7 +185,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -1,29 +0,0 @@
Meteor.startup(function() {
// Inject SEO tags.
Router.onAfterAction(function() {
var props = {meta: {}, og: {}};
var title = this.getTitle && this.getTitle();
var description = this.getDescription && this.getDescription();
var image = Settings.get("siteImage");
if (title) {
props.og.title = title;
}
if (description) {
props.meta.description = description;
props.og.description = description;
}
if (image) {
props.og.image = image;
}
SEO.set(props);
});
// Add canonical URL to post pages
Router.onAfterAction(function() {
var post = Posts.findOne(this.params._id);
if (post) {
SEO.set({link: {canonical: getPostPageUrl(post)}});
}
}, {only: ["post_page", "post_page_with_slug"]});
});

View file

@ -1,13 +0,0 @@
// Add SEO settings.
Settings.addToSchema({
propertyName: "siteImage",
propertySchema: {
type: String,
optional: true,
regEx: SimpleSchema.RegEx.Url,
autoform: {
group: "general",
instructions: "URL to an image for the open graph image tag for all pages"
}
}
});

View file

@ -1,39 +0,0 @@
Package.describe({
name: "telescope-seo",
summary: "SEO extensions for Telescope",
version: "0.0.5"
});
Package.onUse(function(api) {
api.use([
"templating",
"underscore",
"aldeed:simple-schema",
"tap:i18n",
"iron:router",
"telescope-lib",
"telescope-base",
"telescope:settings",
"telescope-i18n",
"manuelschoebel:ms-seo@0.4.1",
"gadicohen:sitemaps@0.0.20"
]);
// both
api.addFiles([
"lib/routes.js",
"lib/seo.js",
"package-tap.i18n"
], ['client', 'server']);
// server
api.addFiles([
"lib/server/sitemaps.js"
], ["server"]);
// i18n
api.add_files([
"i18n/en.i18n.json"
], ["client", "server"]);
});

View file

@ -17,7 +17,7 @@ Package.onUse(function (api) {
api.use([ api.use([
'telescope-base', 'telescope-base',
'telescope:lib', 'telescope:lib',
'telescope-i18n', 'telescope:i18n',
'telescope:posts', 'telescope:posts',
'tap:i18n', 'tap:i18n',
'iron:router' 'iron:router'

View file

@ -185,7 +185,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -197,7 +197,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -16,7 +16,7 @@ Package.onUse(function (api) {
'iron:router', 'iron:router',
'telescope-base', 'telescope-base',
'telescope:lib', 'telescope:lib',
'telescope-i18n', 'telescope:i18n',
'fourseven:scss', 'fourseven:scss',
'telescope-notifications', 'telescope-notifications',
'telescope:posts' 'telescope:posts'

View file

@ -189,7 +189,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -205,7 +205,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -157,7 +157,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -157,7 +157,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [

View file

@ -189,7 +189,7 @@
"0.0.0" "0.0.0"
], ],
[ [
"telescope-i18n", "telescope:i18n",
"0.0.0" "0.0.0"
], ],
[ [