mirror of
https://github.com/wahyd4/ocelots.git
synced 2026-08-09 04:56:21 +10:00
modify the home page
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 220 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 1.6 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 10 KiB |
@@ -4,17 +4,19 @@ body {
|
||||
padding-bottom: 40px;
|
||||
}
|
||||
|
||||
/*
|
||||
.highlight {
|
||||
-webkit-transition: all 1s ease;
|
||||
-moz-transition: all 1s ease;
|
||||
-o-transition: all 1s ease;
|
||||
color: #333;
|
||||
}
|
||||
*/
|
||||
|
||||
.highlight:hover {
|
||||
background: #ccc;
|
||||
text-decoration: none;
|
||||
}
|
||||
//.highlight:hover {
|
||||
// background: #ccc;
|
||||
// text-decoration: none;
|
||||
//}
|
||||
|
||||
.correct {
|
||||
background: #090 !important;
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
.container{
|
||||
margin-top: 6%;
|
||||
background: url("ocelot-bg.jpg") no-repeat center center fixed;
|
||||
-webkit-background-size: cover;
|
||||
-moz-background-size: cover;
|
||||
-o-background-size: cover;
|
||||
background-size: cover;
|
||||
display:block;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
buttom:0;
|
||||
border-radius: 8px ;
|
||||
|
||||
}
|
||||
|
||||
.login-form{
|
||||
margin: auto;
|
||||
width: auto;
|
||||
float:none;
|
||||
text-align: center;
|
||||
margin-top: 200px;
|
||||
|
||||
}
|
||||
.highlight{
|
||||
-webkit-transition: all 1s ease;
|
||||
-moz-transition: all 1s ease;
|
||||
-o-transition: all 1s ease;
|
||||
margin:auto;
|
||||
background:rgba(0,0,0,0.15);
|
||||
color:#ffffff;
|
||||
display:block;
|
||||
|
||||
|
||||
}
|
||||
|
||||
.highlight:hover{
|
||||
background:rgba(0,0,0,0.35);
|
||||
}
|
||||
.ocelots-name{
|
||||
width: auto;
|
||||
margin:0 auto 20px;
|
||||
font-size: 42px;
|
||||
font-weight:bold;
|
||||
float:none;
|
||||
text-align: center;
|
||||
}
|
||||
@@ -1,7 +1,15 @@
|
||||
a href='#' id='authenticate'
|
||||
div
|
||||
div.hero-unit.highlight
|
||||
div.ocelots-name Ocelots
|
||||
div.row
|
||||
div.span4
|
||||
img.logo src='assets/ocelot.jpg'
|
||||
div.span6
|
||||
h1 Ocelots
|
||||
div.span10
|
||||
span style="float:right; text-align:right;font-size:20px;" A community for team members.
|
||||
/span style="font-size:18px;" A community which for team members.
|
||||
div style="clear:both"
|
||||
div class="login-form"
|
||||
p
|
||||
a.btn-larges type="button"
|
||||
img src="assets/weibo.png"
|
||||
span
|
||||
button#authenticate.btn-large.btn-primary type="button" Persona
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@ html
|
||||
= stylesheet_link_tag 'application', media: 'all'
|
||||
= stylesheet_link_tag '/bootstrap/css/bootstrap.min.css'
|
||||
= stylesheet_link_tag '/bootstrap/css/bootstrap-responsive.min.css'
|
||||
=stylesheet_link_tag 'login.css', media: 'all'
|
||||
= csrf_meta_tags
|
||||
= javascript_include_tag '/ga.js'
|
||||
|
||||
|
||||
+506
@@ -0,0 +1,506 @@
|
||||
/**
|
||||
* Uncompressed source can be found at https://login.persona.org/include.orig.js
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
(function () {
|
||||
var a = function () {
|
||||
function e(a) {
|
||||
return Array.isArray ? Array.isArray(a) : a.constructor.toString().indexOf("Array") != -1
|
||||
}
|
||||
|
||||
function d(a, c, d) {
|
||||
var e = b[c][d];
|
||||
for (var f = 0; f < e.length; f++)e[f].win === a && e.splice(f, 1);
|
||||
b[c][d].length === 0 && delete b[c][d]
|
||||
}
|
||||
|
||||
function c(a, c, d, e) {
|
||||
function f(b) {
|
||||
for (var c = 0; c < b.length; c++)if (b[c].win === a)return!0;
|
||||
return!1
|
||||
}
|
||||
|
||||
var g = !1;
|
||||
if (c === "*")for (var h in b) {
|
||||
if (!b.hasOwnProperty(h))continue;
|
||||
if (h === "*")continue;
|
||||
if (typeof b[h][d] == "object") {
|
||||
g = f(b[h][d]);
|
||||
if (g)break
|
||||
}
|
||||
} else b["*"] && b["*"][d] && (g = f(b["*"][d])), !g && b[c] && b[c][d] && (g = f(b[c][d]));
|
||||
if (g)throw"A channel is already bound to the same window which overlaps with origin '" + c + "' and has scope '" + d + "'";
|
||||
typeof b[c] != "object" && (b[c] = {}), typeof b[c][d] != "object" && (b[c][d] = []), b[c][d].push({win:a, handler:e})
|
||||
}
|
||||
|
||||
"use strict";
|
||||
var a = Math.floor(Math.random() * 1000001), b = {}, f = {}, g = function (a) {
|
||||
try {
|
||||
var c = JSON.parse(a.data);
|
||||
if (typeof c != "object" || c === null)throw"malformed"
|
||||
} catch (a) {
|
||||
return
|
||||
}
|
||||
var d = a.source, e = a.origin, g, h, i;
|
||||
if (typeof c.method == "string") {
|
||||
var j = c.method.split("::");
|
||||
j.length == 2 ? (g = j[0], i = j[1]) : i = c.method
|
||||
}
|
||||
typeof c.id != "undefined" && (h = c.id);
|
||||
if (typeof i == "string") {
|
||||
var k = !1;
|
||||
if (b[e] && b[e][g])for (var l = 0; l < b[e][g].length; l++)if (b[e][g][l].win === d) {
|
||||
b[e][g][l].handler(e, i, c), k = !0;
|
||||
break
|
||||
}
|
||||
if (!k && b["*"] && b["*"][g])for (var l = 0; l < b["*"][g].length; l++)if (b["*"][g][l].win === d) {
|
||||
b["*"][g][l].handler(e, i, c);
|
||||
break
|
||||
}
|
||||
} else typeof h != "undefined" && f[h] && f[h](e, i, c)
|
||||
};
|
||||
window.addEventListener ? window.addEventListener("message", g, !1) : window.attachEvent && window.attachEvent("onmessage", g);
|
||||
return{build:function (b) {
|
||||
var g = function (a) {
|
||||
if (b.debugOutput && window.console && window.console.log) {
|
||||
try {
|
||||
typeof a != "string" && (a = JSON.stringify(a))
|
||||
} catch (c) {
|
||||
}
|
||||
console.log("[" + j + "] " + a)
|
||||
}
|
||||
};
|
||||
if (!window.postMessage)throw"jschannel cannot run this browser, no postMessage";
|
||||
if (!window.JSON || !window.JSON.stringify || !window.JSON.parse)throw"jschannel cannot run this browser, no JSON parsing/serialization";
|
||||
if (typeof b != "object")throw"Channel build invoked without a proper object argument";
|
||||
if (!b.window || !b.window.postMessage)throw"Channel.build() called without a valid window argument";
|
||||
if (window === b.window)throw"target window is same as present window -- not allowed";
|
||||
var h = !1;
|
||||
if (typeof b.origin == "string") {
|
||||
var i;
|
||||
b.origin === "*" ? h = !0 : null !== (i = b.origin.match(/^https?:\/\/(?:[-a-zA-Z0-9_\.])+(?::\d+)?/)) && (b.origin = i[0].toLowerCase(), h = !0)
|
||||
}
|
||||
if (!h)throw"Channel.build() called with an invalid origin";
|
||||
if (typeof b.scope != "undefined") {
|
||||
if (typeof b.scope != "string")throw"scope, when specified, must be a string";
|
||||
if (b.scope.split("::").length > 1)throw"scope may not contain double colons: '::'"
|
||||
}
|
||||
var j = function () {
|
||||
var a = "", b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
||||
for (var c = 0; c < 5; c++)a += b.charAt(Math.floor(Math.random() * b.length));
|
||||
return a
|
||||
}(), k = {}, l = {}, m = {}, n = !1, o = [], p = function (a, b, c) {
|
||||
var d = !1, e = !1;
|
||||
return{origin:b, invoke:function (b, d) {
|
||||
if (!m[a])throw"attempting to invoke a callback of a nonexistent transaction: " + a;
|
||||
var e = !1;
|
||||
for (var f = 0; f < c.length; f++)if (b === c[f]) {
|
||||
e = !0;
|
||||
break
|
||||
}
|
||||
if (!e)throw"request supports no such callback '" + b + "'";
|
||||
t({id:a, callback:b, params:d})
|
||||
}, error:function (b, c) {
|
||||
e = !0;
|
||||
if (!m[a])throw"error called for nonexistent message: " + a;
|
||||
delete m[a], t({id:a, error:b, message:c})
|
||||
}, complete:function (b) {
|
||||
e = !0;
|
||||
if (!m[a])throw"complete called for nonexistent message: " + a;
|
||||
delete m[a], t({id:a, result:b})
|
||||
}, delayReturn:function (a) {
|
||||
typeof a == "boolean" && (d = a === !0);
|
||||
return d
|
||||
}, completed:function () {
|
||||
return e
|
||||
}}
|
||||
}, q = function (a, b, c) {
|
||||
return window.setTimeout(function () {
|
||||
if (l[a]) {
|
||||
var d = "timeout (" + b + "ms) exceeded on method '" + c + "'";
|
||||
(1, l[a].error)("timeout_error", d), delete l[a], delete f[a]
|
||||
}
|
||||
}, b)
|
||||
}, r = function (a, c, d) {
|
||||
if (typeof b.gotMessageObserver == "function")try {
|
||||
b.gotMessageObserver(a, d)
|
||||
} catch (h) {
|
||||
g("gotMessageObserver() raised an exception: " + h.toString())
|
||||
}
|
||||
if (d.id && c) {
|
||||
if (k[c]) {
|
||||
var i = p(d.id, a, d.callbacks ? d.callbacks : []);
|
||||
m[d.id] = {};
|
||||
try {
|
||||
if (d.callbacks && e(d.callbacks) && d.callbacks.length > 0)for (var j = 0; j < d.callbacks.length; j++) {
|
||||
var n = d.callbacks[j], o = d.params, q = n.split("/");
|
||||
for (var r = 0; r < q.length - 1; r++) {
|
||||
var s = q[r];
|
||||
typeof o[s] != "object" && (o[s] = {}), o = o[s]
|
||||
}
|
||||
o[q[q.length - 1]] = function () {
|
||||
var a = n;
|
||||
return function (b) {
|
||||
return i.invoke(a, b)
|
||||
}
|
||||
}()
|
||||
}
|
||||
var t = k[c](i, d.params);
|
||||
!i.delayReturn() && !i.completed() && i.complete(t)
|
||||
} catch (h) {
|
||||
var u = "runtime_error", v = null;
|
||||
typeof h == "string" ? v = h : typeof h == "object" && (h && e(h) && h.length == 2 ? (u = h[0], v = h[1]) : typeof h.error == "string" && (u = h.error, h.message ? typeof h.message == "string" ? v = h.message : h = h.message : v = ""));
|
||||
if (v === null)try {
|
||||
v = JSON.stringify(h), typeof v == "undefined" && (v = h.toString())
|
||||
} catch (w) {
|
||||
v = h.toString()
|
||||
}
|
||||
i.error(u, v)
|
||||
}
|
||||
}
|
||||
} else d.id && d.callback ? !l[d.id] || !l[d.id].callbacks || !l[d.id].callbacks[d.callback] ? g("ignoring invalid callback, id:" + d.id + " (" + d.callback + ")") : l[d.id].callbacks[d.callback](d.params) : d.id ? l[d.id] ? (d.error ? (1, l[d.id].error)(d.error, d.message) : d.result !== undefined ? (1, l[d.id].success)(d.result) : (1, l[d.id].success)(), delete l[d.id], delete f[d.id]) : g("ignoring invalid response: " + d.id) : c && k[c] && k[c](null, d.params)
|
||||
};
|
||||
c(b.window, b.origin, typeof b.scope == "string" ? b.scope : "", r);
|
||||
var s = function (a) {
|
||||
typeof b.scope == "string" && b.scope.length && (a = [b.scope, a].join("::"));
|
||||
return a
|
||||
}, t = function (a, c) {
|
||||
if (!a)throw"postMessage called with null message";
|
||||
var d = n ? "post " : "queue ";
|
||||
g(d + " message: " + JSON.stringify(a));
|
||||
if (!c && !n)o.push(a); else {
|
||||
if (typeof b.postMessageObserver == "function")try {
|
||||
b.postMessageObserver(b.origin, a)
|
||||
} catch (e) {
|
||||
g("postMessageObserver() raised an exception: " + e.toString())
|
||||
}
|
||||
b.window.postMessage(JSON.stringify(a), b.origin)
|
||||
}
|
||||
}, u = function (a, c) {
|
||||
g("ready msg received");
|
||||
if (n)throw"received ready message while in ready state. help!";
|
||||
c === "ping" ? j += "-R" : j += "-L", v.unbind("__ready"), n = !0, g("ready msg accepted."), c === "ping" && v.notify({method:"__ready", params:"pong"});
|
||||
while (o.length)t(o.pop());
|
||||
typeof b.onReady == "function" && b.onReady(v)
|
||||
}, v = {unbind:function (a) {
|
||||
if (k[a]) {
|
||||
if (delete k[a])return!0;
|
||||
throw"can't delete method: " + a
|
||||
}
|
||||
return!1
|
||||
}, bind:function (a, b) {
|
||||
if (!a || typeof a != "string")throw"'method' argument to bind must be string";
|
||||
if (!b || typeof b != "function")throw"callback missing from bind params";
|
||||
if (k[a])throw"method '" + a + "' is already bound!";
|
||||
k[a] = b;
|
||||
return this
|
||||
}, call:function (b) {
|
||||
if (!b)throw"missing arguments to call function";
|
||||
if (!b.method || typeof b.method != "string")throw"'method' argument to call must be string";
|
||||
if (!b.success || typeof b.success != "function")throw"'success' callback missing from call";
|
||||
var c = {}, d = [], e = function (a, b) {
|
||||
if (typeof b == "object")for (var f in b) {
|
||||
if (!b.hasOwnProperty(f))continue;
|
||||
var g = a + (a.length ? "/" : "") + f;
|
||||
typeof b[f] == "function" ? (c[g] = b[f], d.push(g), delete b[f]) : typeof b[f] == "object" && e(g, b[f])
|
||||
}
|
||||
};
|
||||
e("", b.params);
|
||||
var g = {id:a, method:s(b.method), params:b.params};
|
||||
d.length && (g.callbacks = d), b.timeout && q(a, b.timeout, s(b.method)), l[a] = {callbacks:c, error:b.error, success:b.success}, f[a] = r, a++, t(g)
|
||||
}, notify:function (a) {
|
||||
if (!a)throw"missing arguments to notify function";
|
||||
if (!a.method || typeof a.method != "string")throw"'method' argument to notify must be string";
|
||||
t({method:s(a.method), params:a.params})
|
||||
}, destroy:function () {
|
||||
d(b.window, b.origin, typeof b.scope == "string" ? b.scope : ""), window.removeEventListener ? window.removeEventListener("message", r, !1) : window.detachEvent && window.detachEvent("onmessage", r), n = !1, k = {}, m = {}, l = {}, b.origin = null, o = [], g("channel destroyed"), j = ""
|
||||
}};
|
||||
v.bind("__ready", u), setTimeout(function () {
|
||||
}, 0);
|
||||
return v
|
||||
}}
|
||||
}();
|
||||
WinChan = function () {
|
||||
function i() {
|
||||
var b = window.location, c = window.opener.frames, d = b.protocol + "//" + b.host;
|
||||
for (var e = c.length - 1; e >= 0; e--)try {
|
||||
if (c[e].location.href.indexOf(d) === 0 && c[e].name === a)return c[e]
|
||||
} catch (f) {
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
function h(a) {
|
||||
/^https?:\/\//.test(a) || (a = window.location.href);
|
||||
var b = /^(https?:\/\/[\-_a-zA-Z\.0-9:]+)/.exec(a);
|
||||
return b ? b[1] : a
|
||||
}
|
||||
|
||||
function g() {
|
||||
return window.JSON && window.JSON.stringify && window.JSON.parse && window.postMessage
|
||||
}
|
||||
|
||||
function f() {
|
||||
try {
|
||||
var a = navigator.userAgent;
|
||||
return a.indexOf("Fennec/") != -1 || a.indexOf("Firefox/") != -1 && a.indexOf("Android") != -1
|
||||
} catch (b) {
|
||||
}
|
||||
return!1
|
||||
}
|
||||
|
||||
function e() {
|
||||
var a = -1;
|
||||
if (navigator.appName === "Microsoft Internet Explorer") {
|
||||
var b = navigator.userAgent, c = new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})");
|
||||
c.exec(b) != null && (a = parseFloat(RegExp.$1))
|
||||
}
|
||||
return a >= 8
|
||||
}
|
||||
|
||||
function d(a, b, c) {
|
||||
a.detachEvent ? a.detachEvent("on" + b, c) : a.removeEventListener && a.removeEventListener(b, c, !1)
|
||||
}
|
||||
|
||||
function c(a, b, c) {
|
||||
a.attachEvent ? a.attachEvent("on" + b, c) : a.addEventListener && a.addEventListener(b, c, !1)
|
||||
}
|
||||
|
||||
var a = "__winchan_relay_frame", b = "die", j = e();
|
||||
return g() ? {open:function (e, g) {
|
||||
function q(a) {
|
||||
try {
|
||||
var b = JSON.parse(a.data);
|
||||
b.a === "ready" ? m.postMessage(o, l) : b.a === "error" ? g && (g(b.d), g = null) : b.a === "response" && (d(window, "message", q), d(window, "unload", p), p(), g && (g(null, b.d), g = null))
|
||||
} catch (c) {
|
||||
}
|
||||
}
|
||||
|
||||
function p() {
|
||||
k && document.body.removeChild(k), k = undefined;
|
||||
if (n)try {
|
||||
n.close()
|
||||
} catch (a) {
|
||||
m.postMessage(b, l)
|
||||
}
|
||||
n = m = undefined
|
||||
}
|
||||
|
||||
if (!g)throw"missing required callback argument";
|
||||
var i;
|
||||
e.url || (i = "missing required 'url' parameter"), e.relay_url || (i = "missing required 'relay_url' parameter"), i && setTimeout(function () {
|
||||
g(i)
|
||||
}, 0), e.window_name || (e.window_name = null);
|
||||
if (!e.window_features || f())e.window_features = undefined;
|
||||
var k, l = h(e.url);
|
||||
if (l !== h(e.relay_url))return setTimeout(function () {
|
||||
g("invalid arguments: origin of url and relay_url must match")
|
||||
}, 0);
|
||||
var m;
|
||||
j && (k = document.createElement("iframe"), k.setAttribute("src", e.relay_url), k.style.display = "none", k.setAttribute("name", a), document.body.appendChild(k), m = k.contentWindow);
|
||||
var n = window.open(e.url, e.window_name, e.window_features);
|
||||
m || (m = n);
|
||||
var o = JSON.stringify({a:"request", d:e.params});
|
||||
c(window, "unload", p), c(window, "message", q);
|
||||
return{close:p, focus:function () {
|
||||
if (n)try {
|
||||
n.focus()
|
||||
} catch (a) {
|
||||
}
|
||||
}}
|
||||
}} : {open:function (a, b, c, d) {
|
||||
setTimeout(function () {
|
||||
d("unsupported browser")
|
||||
}, 0)
|
||||
}}
|
||||
}();
|
||||
var b = function () {
|
||||
function l() {
|
||||
return c
|
||||
}
|
||||
|
||||
function k() {
|
||||
c = g() || h() || i() || j();
|
||||
return!c
|
||||
}
|
||||
|
||||
function j() {
|
||||
if (!(window.JSON && window.JSON.stringify && window.JSON.parse))return"JSON_NOT_SUPPORTED"
|
||||
}
|
||||
|
||||
function i() {
|
||||
if (!a.postMessage)return"POSTMESSAGE_NOT_SUPPORTED"
|
||||
}
|
||||
|
||||
function h() {
|
||||
try {
|
||||
var b = "localStorage"in a && a.localStorage !== null;
|
||||
if (b)a.localStorage.setItem("test", "true"), a.localStorage.removeItem("test"); else return"LOCALSTORAGE_NOT_SUPPORTED"
|
||||
} catch (c) {
|
||||
return"LOCALSTORAGE_DISABLED"
|
||||
}
|
||||
}
|
||||
|
||||
function g() {
|
||||
return f()
|
||||
}
|
||||
|
||||
function f() {
|
||||
var a = e(), b = a > -1 && a < 8;
|
||||
if (b)return"BAD_IE_VERSION"
|
||||
}
|
||||
|
||||
function e() {
|
||||
var a = -1;
|
||||
if (b.appName == "Microsoft Internet Explorer") {
|
||||
var c = b.userAgent, d = new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})");
|
||||
d.exec(c) != null && (a = parseFloat(RegExp.$1))
|
||||
}
|
||||
return a
|
||||
}
|
||||
|
||||
function d(c, d) {
|
||||
b = c, a = d
|
||||
}
|
||||
|
||||
var a = window, b = navigator, c;
|
||||
return{setTestEnv:d, isSupported:k, getNoSupportReason:l}
|
||||
}();
|
||||
navigator.id || (navigator.id = {});
|
||||
if (!navigator.id.request || navigator.id._shimmed) {
|
||||
var c = "https://login.persona.org", d = navigator.userAgent, e = d.indexOf("Fennec/") != -1 || d.indexOf("Firefox/") != -1 && d.indexOf("Android") != -1, f = e ? undefined : "menubar=0,location=1,resizable=1,scrollbars=1,status=0,dialog=1,minimizable=1,width=700,height=375", g, h = {login:null, logout:null, ready:null}, i, j = undefined;
|
||||
|
||||
function k(a) {
|
||||
a !== !0;
|
||||
if (j === undefined)j = a; else if (j != a)throw new Error("you cannot combine the navigator.id.watch() API with navigator.id.getVerifiedEmail() or navigator.id.get()this site should instead use navigator.id.request() and navigator.id.watch()")
|
||||
}
|
||||
|
||||
var l, m = !1, n = b.isSupported();
|
||||
|
||||
function o(a) {
|
||||
document.addEventListener ? document.addEventListener("DOMContentLoaded", function b() {
|
||||
document.removeEventListener("DOMContentLoaded", b), a()
|
||||
}, !1) : document.attachEvent && document.readyState && document.attachEvent("onreadystatechange", function c() {
|
||||
var b = document.readyState;
|
||||
if (b === "loaded" || b === "complete" || b === "interactive")document.detachEvent("onreadystatechange", c), a()
|
||||
})
|
||||
}
|
||||
|
||||
function p() {
|
||||
if (!!n) {
|
||||
var b = window.document;
|
||||
if (!b.body) {
|
||||
m || (o(p), m = !0);
|
||||
return
|
||||
}
|
||||
try {
|
||||
if (!l) {
|
||||
var d = b.createElement("iframe");
|
||||
d.style.display = "none", b.body.appendChild(d), d.src = c + "/communication_iframe", l = a.build({window:d.contentWindow, origin:c, scope:"mozid_ni", onReady:function () {
|
||||
l.call({method:"loaded", success:function () {
|
||||
h.ready && h.ready()
|
||||
}, error:function () {
|
||||
}})
|
||||
}}), l.bind("logout", function (a, b) {
|
||||
h.logout && h.logout()
|
||||
}), l.bind("login", function (a, b) {
|
||||
h.login && h.login(b)
|
||||
}), q(i) && l.notify({method:"loggedInUser", params:i})
|
||||
}
|
||||
} catch (e) {
|
||||
l = undefined
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function q(a) {
|
||||
return typeof a != "undefined"
|
||||
}
|
||||
|
||||
function r(a) {
|
||||
try {
|
||||
console.warn(a)
|
||||
} catch (b) {
|
||||
}
|
||||
}
|
||||
|
||||
function s(a, b) {
|
||||
if (q(a[b])) {
|
||||
r(b + " has been deprecated");
|
||||
return!0
|
||||
}
|
||||
}
|
||||
|
||||
function t(a, b, c) {
|
||||
if (q(a[b]) && q(a[c]))throw new Error("you cannot supply *both* " + b + " and " + c);
|
||||
s(a, b) && (a[c] = a[b], delete a[b])
|
||||
}
|
||||
|
||||
function u(a) {
|
||||
if (typeof a == "object") {
|
||||
if (a.onlogin && typeof a.onlogin != "function" || a.onlogout && typeof a.onlogout != "function" || a.onready && typeof a.onready != "function")throw new Error("non-function where function expected in parameters to navigator.id.watch()");
|
||||
if (!a.onlogin)throw new Error("'onlogin' is a required argument to navigator.id.watch()");
|
||||
if (!a.onlogout)throw new Error("'onlogout' is a required argument to navigator.id.watch()");
|
||||
h.login = a.onlogin || null, h.logout = a.onlogout || null, h.ready = a.onready || null, t(a, "loggedInEmail", "loggedInUser"), i = a.loggedInUser, p()
|
||||
}
|
||||
}
|
||||
|
||||
var v;
|
||||
|
||||
function w() {
|
||||
var a = v;
|
||||
a === "request" && (h.ready ? a = "watch_with_onready" : a = "watch_without_onready");
|
||||
return a
|
||||
}
|
||||
|
||||
function x(a) {
|
||||
s(a, "requiredEmail"), t(a, "tosURL", "termsOfService"), t(a, "privacyURL", "privacyPolicy"), a.termsOfService && !a.privacyPolicy && r("termsOfService ignored unless privacyPolicy also defined"), a.privacyPolicy && !a.termsOfService && r("privacyPolicy ignored unless termsOfService also defined"), a.rp_api = w(), v = null;
|
||||
if (g)try {
|
||||
g.focus()
|
||||
} catch (d) {
|
||||
} else {
|
||||
if (!b.isSupported()) {
|
||||
var e = b.getNoSupportReason(), i = "unsupported_dialog";
|
||||
e === "LOCALSTORAGE_DISABLED" && (i = "cookies_disabled"), g = window.open(c + "/" + i, null, f);
|
||||
return
|
||||
}
|
||||
l && l.notify({method:"dialog_running"}), g = WinChan.open({url:c + "/sign_in", relay_url:c + "/relay", window_features:f, window_name:"__persona_dialog", params:{method:"get", params:a}}, function (b, c) {
|
||||
l && (!b && c && c.email && l.notify({method:"loggedInUser", params:c.email}), l.notify({method:"dialog_complete"})), g = undefined;
|
||||
if (!b && c && c.assertion)try {
|
||||
h.login && h.login(c.assertion)
|
||||
} catch (d) {
|
||||
}
|
||||
if (b === "client closed window" || !c)a && a.oncancel && a.oncancel(), delete a.oncancel
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
navigator.id = {request:function (a) {
|
||||
if (this != navigator.id)throw new Error("all navigator.id calls must be made on the navigator.id object");
|
||||
a = a || {}, k(!1), v = "request", a.returnTo || (a.returnTo = document.location.pathname);
|
||||
return x(a)
|
||||
}, watch:function (a) {
|
||||
if (this != navigator.id)throw new Error("all navigator.id calls must be made on the navigator.id object");
|
||||
k(!1), u(a)
|
||||
}, logout:function (a) {
|
||||
if (this != navigator.id)throw new Error("all navigator.id calls must be made on the navigator.id object");
|
||||
p(), l && l.notify({method:"logout"}), typeof a == "function" && (r("navigator.id.logout callback argument has been deprecated."), setTimeout(a, 0))
|
||||
}, get:function (a, b) {
|
||||
var c = {};
|
||||
b = b || {}, c.privacyPolicy = b.privacyPolicy || undefined, c.termsOfService = b.termsOfService || undefined, c.privacyURL = b.privacyURL || undefined, c.tosURL = b.tosURL || undefined, c.siteName = b.siteName || undefined, c.siteLogo = b.siteLogo || undefined, v = v || "get";
|
||||
s(b, "silent") ? a && setTimeout(function () {
|
||||
a(null)
|
||||
}, 0) : (k(!0), u({onlogin:function (b) {
|
||||
a && (a(b), a = null)
|
||||
}, onlogout:function () {
|
||||
}}), c.oncancel = function () {
|
||||
a && (a(null), a = null), h.login = h.logout = h.ready = null
|
||||
}, x(c))
|
||||
}, getVerifiedEmail:function (a) {
|
||||
r("navigator.id.getVerifiedEmail has been deprecated"), k(!0), v = "getVerifiedEmail", navigator.id.get(a)
|
||||
}, _shimmed:!0}
|
||||
}
|
||||
})()
|
||||
Vendored
+2
File diff suppressed because one or more lines are too long
@@ -0,0 +1,24 @@
|
||||
require 'spec_helper'
|
||||
|
||||
describe HomeController do
|
||||
render_views
|
||||
|
||||
describe :index do
|
||||
it 'renders landing page if user has not signed in' do
|
||||
get :index
|
||||
response.should be_success
|
||||
response.body.should =~ /A community for team members./
|
||||
#response.body.should =~ /Please choose a approach to sign in./
|
||||
end
|
||||
|
||||
it 'includes a button to sign in with Mozilla Persona' do
|
||||
get :index
|
||||
response.should be_success
|
||||
#response.body.should =~ /Login with Persona/
|
||||
#response.body.should =~ /Login with Weibo/
|
||||
assert_select '#authenticate','Persona'
|
||||
end
|
||||
|
||||
it 'does not allow click other place except sign in buttons'
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user